ماڈیول:Lang
ظاہری ہیئت
| شاید آپ اس اسکریبنٹو ماڈیول کا دستاویزی صفحہ تخلیق کرنا چاہتے ہیں۔ صارفین ماڈیول کے تختہ مشق (تخلیق | آئینہ) اور ثابتات (تخلیق) میں تجربات کرسکتے ہیں۔ براہ کرم /دستاویز کے ذیلی صفحہ پر زمرہ جات شامل فرمائیں۔ اس ماڈیول کے ذیلی صفحات۔ |
local p = {}
-- Ensure the data module exists at this path
local lang_data = require('Module:لغات/بيانات')
-- Helper function to clean up names
local function gsubname(temp, the)
local fi
if the and the ~= '' then
local s = string.gsub(temp, " ", " ")
s = "" .. s
fi = s
else
fi = temp
end
return fi
end
-- Forward declaration of getname to allow LatnCyrl to call it
local getname
local function LatnCyrl(code, al, number, returnnil)
code = code:lower()
number = (number or 0) + 1
local e = string.sub(code, -5)
local s = string.gsub(code, e, '')
local d = getname(s, '', number)
local er
if d and d ~= '' then
if (e == '-latn' or e == '-cyrl' or e == '-arab') then
local f = ''
if e == '-latn' then f = 'لاطینی '
elseif e == '-cyrl' then f = 'سیریلی '
elseif e == '-arab' then f = 'عربی '
end
er = f .. d
end
end
local co
if returnnil and returnnil ~= '' then co = '' else co = code end
if not er then return co else return gsubname(er, al) end
end
local function getcode(code)
local s = string.gsub(code, ' ', '')
for k, v in pairs(lang_data) do
for i, r in pairs(v) do
if (s == r or s == k) then
return v.name
end
end
end
return nil
end
-- Defining getname locally for internal use
getname = function(co, al, number, returnnil)
number = (number or 0) + 1
if number and number > 3 then return nil end
if not co or co == '' then return '' end
local code = string.gsub(co, ' ', '')
local fi = ''
if code and code ~= '' then
local val = getcode(code)
if val and val ~= '' then
fi = gsubname(val, al)
else
fi = LatnCyrl(code, al, number, returnnil)
end
end
return fi
end
-- Exporting getname to the public table p
p.getname = getname
p.getcode = getcode
local function goo(name)
for ss, v in pairs(lang_data) do
if (name == getname(ss, 't') or name == getname(ss, '')) then
return ss
else
for q, codee in pairs(v) do
if (name == getname(codee, 't') or name == getname(codee, '')) then
return codee
elseif (name == getname(ss .. '-cyrl', 't') or name == getname(ss .. '-cyrl', '')) then
return ss .. '-cyrl'
elseif (name == getname(ss .. '-latn', 't') or name == getname(ss .. '-latn', '')) then
return ss .. '-latn'
elseif (name == getname(ss .. '-arab', 't') or name == getname(ss .. '-arab', '')) then
return ss .. '-arab'
end
end
end
end
return nil
end
p['اسم لغة'] = function ( frame )
local na = frame.args[1]
if not na or na == '' then return '' end
local code = getname(frame.args[1], frame.args[2], 0, frame.args['nil'])
return frame:preprocess(code)
end
p['قالب رمز لغة'] = function ( frame )
local lange = frame.args[1]
local text = frame.args[2]
local c = getname(frame.args[1], 't')
if lange and lange ~= '' then
lange = string.gsub(lange, ' ', '')
lange = lange:lower()
local textout = mw.text.tag('span', {lang = lange}, text)
local cat_p = 'زمرہ:مضامین جن میں '
local cat_p2 = ' زبان کا متن شامل ہے'
local cate = ''
if lange == 'ur' or lange == 'urd' then
cate = ''
else
cate = '[[' .. cat_p .. (c or lange) .. cat_p2 .. ']]'
end
return textout .. cate
else
return ''
end
end
p['رمز لغة'] = function ( frame )
local na = frame.args[1]
if na and na ~= '' then
return goo(na) or goo(gsubname(na, 't')) or ''
else
return ''
end
end
p['قائمة'] = function ( frame )
local list = mw.html.create("table")
list:addClass("wikitable sortable collapsible")
local head = list:tag("tr")
head:tag("th"):wikitext("رمز")
head:tag("th"):wikitext("تضمين قالب")
head:tag("th"):wikitext("ربط")
head:tag("th"):wikitext("نام")
head:tag("th"):wikitext("التحويلات")
for o, nam in pairs(lang_data) do
local temp = nam.name or ''
local row = list:tag("tr")
local oo = row:tag("td")
local r = row:tag("td")
local th = row:tag("td")
local ss = row:tag("td")
local rr = row:tag("td")
local rsr = '{{اسم آيزو 639 ' .. o .. '}}'
local er = '[[سانچہ:اسم آيزو 639 ' .. o .. ']]'
local dd = "\n[[زبان " .. temp .. "]]"
local ooo = 'زبان ' .. gsubname(temp, 'r')
oo:tag("span"):wikitext(er)
r:tag("span"):wikitext(frame:preprocess(rsr))
th:tag("span"):wikitext(dd)
ss:tag("span"):wikitext(ooo)
for k, v in pairs(nam) do
if v and v ~= '' and k ~= "name" then
rr:tag("code"):wikitext(tostring(v))
rr:tag("span"):wikitext(' - ')
end
end
end
return tostring(list)
end
-- Internal function for Module:Nihongo to format native language text (e.g. Kanji)
local function _lang(args)
local code = args[1] or args.code or 'ja'
local text = args[2] or args.text or ''
if text == '' then return '' end
return mw.text.tag('span', {lang = code}, text)
end
p._lang = _lang
-- Internal function for Module:Nihongo to format transliteration (e.g. Romaji)
local function _xlit(args)
local text = args[2] or args[1] or args.text or ''
local code = args.code or 'ja'
if text == '' then return '' end
return mw.text.tag('i', {lang = code .. '-Latn'}, text)
end
p._xlit = _xlit
-- Internal function callable from other Lua modules (like Module:Nihongo)
local function _langx(args)
local lange = args[1] or args.lang or args.code or ''
local text = args[2] or args.text or ''
local translit = args[3] or args.translit or ''
local translation = args[4] or args.translation or args.lit or args.label or ''
if lange == '' then return text end
lange = string.gsub(lange, ' ', ''):lower()
local lang_name = (lang_data.lang_name and lang_data.lang_name[lange]) or getname(lange, 't') or lange
local textout = mw.text.tag('span', {lang = lange}, text)
local result = textout
if translit and translit ~= '' then
result = result .. '، ' .. mw.text.tag('i', {}, translit)
end
if translation and translation ~= '' then
result = result .. ' (' .. translation .. ')'
end
return result
end
p._langx = _langx
-- Wrapper for template calls
p.langx = function( frame )
local args = frame.args
if not args[1] or args[1] == '' then
args = frame:getParent().args
end
return _langx(args)
end
return p