ماڊيول:Wikt-lang
- چورہوسانچو:Ombox
| ٻوليءَ جا سانچا |
|---|
| ٻولين جا نالا (آءِ ايس او 639) |
|
| انٽر وڪي ڳنڍڻا |
| پرڏيهي ٻوليءَ جو متن |
|
| ٻيا |
|
| This module depends on the following other modules: |
هي ماڊيول {{Wikt-lang}} طرفان استعمال ڪيو ويندو آهي۔ اهو وڪشنري جي سانچن {{m}} ۽ {{l}} ۽ انهن سان لاڳاپيل ماڊيولن کان متاثر آهي۔ هن ماڊيول ۾ وڪشنري سان ڳنڍڻ (link) لاءِ هڪ فنڪشن موجود آهي جيڪو وڪشنري جي داخلا (entry) جي صحيح سيڪشن ڏانهن ڳنڍيندو آهي، ۽ ساڳئي وقت صحيح ٻولي فارميٽنگ ۽ اٽالڪس (italics) لاڳو ڪندو آهي۔ ٻولي ٽيگ ڪرڻ وارو فنڪشن گهڻو ڪري اهو ئي ڪم ڪندو آهي جيڪو {{Lang}} ڪندو آهي، پر هن ۾ اٽالڪس کي تبديل نٿو ڪري سگهجي ۽ نه ئي زمرا پاڻمرادو شامل ٿيندا آهن۔
هي ماڊيول Module:Wikt-lang/data استعمال ڪري ٻولي ڪوڊ مان ٻولي جو نالو حاصل ڪري ٿو، ۽ داخلا جي نالي ۾ ضروري تبديليون ڪندو آهي (مثال طور لاطيني لفظن مان ميڪران نشان هٽائڻ)۔ بدقسمتي سان اهي ڄاڻ پاڻمرادو وڪشنري جي Wikt-lang ڊيٽا ماڊيولن مان حاصل نٿي ڪئي وڃي۔ جيڪڏهن ڪنهن ٻولي ڪوڊ لاءِ هن ماڊيول ۾ name قدر موجود نه هجي ته ٻولي جو نالو mw.language.fetchLanguage ذريعي حاصل ڪيو ويندو آهي۔ جڏهن mw.language.fetchLanguage صحيح ٻولي جو نالو مهيا نه ڪري (يا بلڪل مهيا نه ڪري)، ته مهرباني ڪري ان کي Module:Wikt-lang/data ۾ شامل ڪريو۔ ساڳي طرح جيڪڏهن صحيح داخلا جو نالو پيدا نه ٿئي ته ان لاءِ ضروري نالي جون تبديليون پڻ ماڊيول ۾ شامل ڪريو۔
مثال
[سنواريو]{{#invoke:Wikt-lang|wiktlang|en|language}}-> language{{#invoke:Wikt-lang|wiktlang|en|language|languages}}-> languages{{#invoke:Wikt-lang|wiktlang|fr|bourguignon}}-> bourguignon{{#invoke:Wikt-lang|wiktlang|la|homō}}-> homō{{#invoke:Wikt-lang|wiktlang|grc|δημοκρατίᾱ}}-> δημοκρατίᾱ{{#invoke:Wikt-lang|wiktlang|ru|язы́к}}-> язы́к{{#invoke:Wikt-lang|wiktlang|ar|العَرَبِيَّة}}-> العَرَبِيَّة{{#invoke:Wikt-lang|wiktlang|fa|فارسی}}-> فارسی{{#invoke:Wikt-lang|wiktlang|ine-x-proto|*h₂enǵʰ-}}-> *h₂enǵʰ-
غلط ڪوڊ
[سنواريو]{{#invoke:Wikt-lang|wiktlang|EN|language}}-> language{{#invoke:Wikt-lang|wiktlang|En|language|languages}}-> languages{{#invoke:Wikt-lang|wiktlang|La|homō}}-> homō{{#invoke:Wikt-lang|wiktlang|Grc|δημοκρατίᾱ}}-> δημοκρατίᾱ{{#invoke:Wikt-lang|wiktlang|Ru|язы́к}}-> язы́к{{#invoke:Wikt-lang|wiktlang|Ar|العَرَبِيَّة}}-> العَرَبِيَّة{{#invoke:Wikt-lang|wiktlang|Fa|فارسی}}-> فارسی
غلطيون
[سنواريو]{{#invoke:Wikt-lang|wiktlang|en-Latin|language}}-> language [Latinis not a valid script code.]
ڪوڊن جو تقابلي جائزو
[سنواريو]| Language code | Wiktionary name | English Wikipedia name |
|---|---|---|
| aaq | Penobscot | Eastern Abnaki |
| abe | Abenaki | Western Abnaki |
| ajp | South Levantine Arabic | South Levantine Arabic |
| alg-pro | Proto-Algonquian | Error: unrecognized language tag: alg-pro |
| apc | North Levantine Arabic | Levantine Arabic |
| arb | Modern Standard Arabic | Standard Arabic |
| cel-x-bryproto | Proto-Brythonic | Error: unrecognized private tag: bryproto |
| cu | Old Church Slavonic | Church Slavonic |
| egy | Egyptian | Ancient Egyptian |
| frp | Franco-Provençal | Arpitan |
| gmw-x-proto | Proto-West Germanic | Error: unrecognized private tag: proto |
| grk-x-proto | Proto-Hellenic | Proto-Greek |
| ine-x-bsproto | Proto-Balto-Slavic | Error: unrecognized private tag: bsproto |
| moe | Cree | Innu |
| mul | Translingual | multiple |
| nds-de | German Low German | Low German |
| non-x-proto | Proto-Norse | Error: unrecognized private tag: proto |
| poz-x-polproto | Proto-Nuclear Polynesian | Error: unrecognized private tag: polproto |
| rw | Rwanda-Rundi | Kinyarwanda |
| tts | Isan | Northeastern Thai |
| xlu | Luwian | Cuneiform Luwian |
| zle-x-ort | Old Ruthenian | Error: unrecognized private tag: ort |
ٽريڪنگ زمرا
[سنواريو]require('strict')
local m_data = mw.loadData("Module:Wikt-lang/data")
local langData = m_data.languages or m_data
local p = {}
local function ifNotEmpty(value)
if value == "" then
return nil
else
return value
end
end
local function makeEntryName(word, languageCode)
local data = langData[languageCode]
local ugsub = mw.ustring.gsub
word = tostring(word)
if word == nil then
error("The function makeEntryName requires a string argument")
elseif word == "" then
return ""
else
-- Remove bold and italics, so that words that contain bolding or emphasis can be linked without piping.
word = word:gsub("\'\'\'", "")
word = word:gsub("\'\'", "")
if data == nil then
return word
else
local replacements = data and data["replacements"]
if replacements == nil then
return word
else
-- Decompose so that the diacritics of characters such
-- as á can be removed in one go.
-- No need to compose at the end, because the MediaWiki software
-- will handle that.
if replacements.decompose then
word = mw.ustring.toNFD(word)
for i, from in ipairs(replacements.from) do
word = ugsub(
word,
from,
replacements.to and replacements.to[i] or "")
end
else
for regex, replacement in pairs(replacements) do
word = ugsub(word, regex, replacement)
end
end
return word
end
end
end
end
local function fixScriptCode(firstLetter, threeLetters)
return string.upper(firstLetter) .. string.lower(threeLetters)
end
local function getCodes(codes)
local languageCode, scriptCode, invalidCode
local errorText
if codes == nil or codes == "" then
errorText = 'no language or script code provided'
elseif codes:find("^%a%a%a?$") or codes:find("^%a%a%a?%-%a%a%a%a$") then
-- A three- or two-letter lowercase sequence at beginning of first parameter
languageCode =
codes:find("^%a%a%a?") and (
codes:match("^(%l%l%l?)")
or codes:match("^(%a%a%a?)")
:gsub("(%a%a%a?)", string.lower, 1)
)
-- One uppercase and three lowercase letters at the end of the first parameter
scriptCode =
codes:find("%a%a%a%a$") and (
codes:match("(%u%l%l%l)$")
or gsub(
codes:match("(%a%a%a%a)$"),
"(%a)(%a%a%a)",
fixScriptCode,
1
)
)
elseif codes:find("^%a%a%a?%-%a%a%a?$")
or codes:find("^%a%a%a%-%a%a%a%-%a%a%a$") then
languageCode = codes
-- Private-use subtag: x followed by one or more sequences of 1-8 lowercase
-- letters separated by hyphens. This only allows for one sequence, as it is
-- needed for proto-languages such as ine-x-proto (Proto-Indo-European).
elseif codes:find("^%a%a%a?%-x%-%a%a?%a?%a?%a?%a?%a?%a?$") then
languageCode, scriptCode =
codes:match("^(%a%a%a%-x%-%a%a?%a?%a?%a?%a?%a?%a?)%-?(.*)$")
if not languageCode then
errorText = '<code>'..codes..'</code> is not a valid language or script code.'
elseif scriptCode ~= "" and not scriptCode:find("%a%a%a%a") then
errorText = '<code>'..scriptCode..'</code> is not a valid script code.'
else
scriptCode = scriptCode:gsub(
"(%a)(%a%a%a)",
fixScriptCode,
1
)
end
elseif codes:find("^%a%a%a?") then
languageCode, invalidCode = codes:match("^(%a%a%a?)%-?(.*)")
languageCode = string.lower(languageCode)
errorText = '<code>'..invalidCode..'</code> is not a valid script code.'
elseif codes:find("%-?%a%a%a%a$") then
invalidCode, scriptCode = codes:match("(.*)%-?(%a%a%a%a)$")
scriptCode = gsub(
scriptCode,
"(%a)(%a%a%a)",
fixScriptCode
)
errorText = '<code>'..invalidCode..'</code> is not a valid language code.'
else
errorText = '<code>'..codes..'</code> is not a valid language or script code.'
end
if errorText then
errorText = ' <span style="font-size: smaller">[' .. errorText .. ']</span>'
else
errorText = ""
end
languageCode = m_data.redirects[languageCode] or languageCode
return languageCode, scriptCode, errorText
end
local function tag(text, languageCode, script, italicize)
local data = langData[languageCode]
-- Use Wikipedia code if it has been given: for instance,
-- Proto-Indo-European has the Wiktionary code "ine-pro" but the Wikipedia
-- code "ine-x-proto".
languageCode = data and data.Wikipedia_code or languageCode
if script and script ~= "" then
languageCode = languageCode .. "-" .. script
end
if not text then text = "[text?]" end
local textDirectionMarkers = { "", "", "" }
if data and data["direction"] == "rtl" then
textDirectionMarkers = { ' dir="rtl"', '‏', '‎' }
end
local out = { textDirectionMarkers[2] }
if italicize then
table.insert(out, "<i lang=\"" .. languageCode .. "\"" .. textDirectionMarkers[1] .. ">" .. text .. "</i>")
else
table.insert(out, "<span lang=\"" .. languageCode .. "\"" .. textDirectionMarkers[1] .. ">" .. text .. "</span>")
end
table.insert(out, textDirectionMarkers[3])
return table.concat(out)
end
local function linkToWiktionary(entry, linkText, languageCode)
local data = langData[languageCode]
local name
if languageCode then
if data and data.name then
name = data.name
else
-- On other languages' wikis, use mw.getContentLanguage():getCode(),
-- or replace 'en' with that wiki's language code.
name = mw.language.fetchLanguageName(languageCode, 'en')
if name == "" then
error("Name for the language code " .. ("%q"):format(languageCode or nil)
.. " could not be retrieved with mw.language.fetchLanguageName, "
.. "so it should be added to [[Module:Wikt-lang/data]]")
end
end
if entry:sub(1, 1) == "*" then
if name ~= "" then
entry = "Reconstruction:" .. name .. "/" .. entry:sub(2)
else
error("Language name is empty")
end
elseif data and data.type == "reconstructed" then
mw.log("Reconstructed language without asterisk:", languageCode, name, entry)
local frame = mw.getCurrentFrame()
-- Track reconstructed entries with no asterisk by transcluding
-- a nonexistent template. This technique is used in Wiktionary:
-- see [[wikt:Module:debug]].
-- [[Special:WhatLinksHere/tracking/wikt-lang/reconstructed with no asterisk]]
pcall(frame.expandTemplate, frame,
{ title = 'tracking/wikt-lang/reconstructed with no asterisk' })
if name ~= "" then
entry = "Reconstruction:" .. name .. "/" .. entry
else
error("Language name is empty")
end
elseif data and data.type == "appendix" then
if name ~= "" then
entry = "Appendix:" .. name .. "/" .. entry
else
error("Language name is empty")
end
end
if entry and linkText then
return "[[wikt:" .. entry .. "#" .. name .. "|" .. linkText .. "]]"
else
error("linkToWiktionary needs a Wiktionary entry or link text, or both")
end
else
return "[[wikt:" .. entry .. "|" .. linkText .. "]]"
end
end
function p.wiktlang(frame)
local parent = frame:getParent()
local args = parent.args[1] and parent.args or frame.args
local codes = args[1] and mw.text.trim(args[1])
local word1 = ifNotEmpty(args[2])
local word2 = ifNotEmpty(args[3])
if not args[2] or '' == args[2] then
return '<span style="color:#d33">[text?] Parameter 2 is required</span>';
end
local languageCode, scriptCode, errorText = getCodes(codes)
local italics = args.italics or args.i or args.italic
italics = not (italics == "n" or italics == "-" or italics == "no")
local entry, linkText
if word2 and word1 then
entry = makeEntryName(word1, languageCode)
linkText = word2
elseif word1 then
entry = makeEntryName(word1, languageCode)
linkText = word1
end
local italicize = italics and (scriptCode == "Latn" or require("Module:Unicode data").is_Latin(linkText))
local out
if languageCode and entry and linkText then
out = tag(linkToWiktionary(entry, linkText, languageCode), languageCode, scriptCode, italicize)
elseif entry and linkText then
out = linkToWiktionary(entry, linkText)
else
out = '<span style="font-size: smaller;">[text?]</span>'
end
if out and errorText then
return out .. errorText
else
return errorText or error("The function wiktlang generated nothing")
end
end
return p