Wikikamus
mswiktionary
https://ms.wiktionary.org/wiki/Wikikamus:Laman_Utama
MediaWiki 1.47.0-wmf.5
case-sensitive
Media
Khas
Perbincangan
Pengguna
Perbincangan pengguna
Wikikamus
Perbincangan Wikikamus
Fail
Perbincangan fail
MediaWiki
Perbincangan MediaWiki
Templat
Perbincangan templat
Bantuan
Perbincangan bantuan
Kategori
Perbincangan kategori
Lampiran
Perbincangan lampiran
Rima
Perbincangan rima
Tesaurus
Perbincangan tesaurus
Indeks
Perbincangan indeks
Petikan
Perbincangan petikan
Rekonstruksi
Perbincangan rekonstruksi
Padanan isyarat
Perbincangan padanan isyarat
Konkordans
Perbincangan konkordans
TimedText
TimedText talk
Modul
Perbincangan modul
Acara
Perbincangan acara
Templat:Perkataan Nombor
10
2608
344650
6823
2026-06-07T17:48:29Z
EmausBot
3738
Memperbetulkan pelencongan berganda ke [[Templat:kata bilangan bahasa Melayu]]
344650
wikitext
text/x-wiki
#LENCONG [[Templat:kata bilangan bahasa Melayu]]
9uugfu2aa0h4jdpt1aafq8nk0kowzg6
Templat:Perkataan nombor
10
2610
344651
6825
2026-06-07T17:48:39Z
EmausBot
3738
Memperbetulkan pelencongan berganda ke [[Templat:kata bilangan bahasa Melayu]]
344651
wikitext
text/x-wiki
#LENCONG [[Templat:kata bilangan bahasa Melayu]]
9uugfu2aa0h4jdpt1aafq8nk0kowzg6
Templat:R:Man'yōshū 3
10
9848
344663
342938
2026-06-08T09:12:29Z
Hakimi97
2668
344663
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|ja|last=Satake|first=Akihiro|coauthors=Hideo Yamada; Rikio Kudō; Masao Ōtani; Yoshiyuki Yamazaki|title=Shin Nihon Koten Bungaku Taikei 3: [[w:Man'yōshū|Man’yōshū]] 3|location=[[w:Tokyo|Tōkyō]]|publisher=[[w:Iwanami Shoten Publishing|Iwanami Shoten]]|year=c. 759|year_published=2002|isbn=978-4-00-240003-7
|usenodot=1
}}<noinclude>{{refcat|ja}}</noinclude>
j2lgtgzrsavb7i6bujku90raksetqy6
Modul:translations
828
9941
344652
344628
2026-06-08T08:58:33Z
Hakimi97
2668
Mengemas kini terjemahan bahasa Melayu
344652
Scribunto
text/plain
local export = {}
local anchors_module = "Module:anchors"
local debug_track_module = "Module:debug/track"
local languages_module = "Module:languages"
local links_module = "Module:links"
local pages_module = "Module:pages"
local parameters_module = "Module:parameters"
local string_utilities_module = "Module:string utilities"
local templatestyles_module = "Module:TemplateStyles"
local utilities_module = "Module:utilities"
local wikimedia_languages_module = "Module:wikimedia languages"
local concat = table.concat
local html_create = mw.html.create
local insert = table.insert
local load_data = mw.loadData
local new_title = mw.title.new
local require = require
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function whms called. This mssures modules are only loaded whms needed, retains the speed/convmsimsce of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function decode_uri(...)
decode_uri = require(string_utilities_module).decode_uri
return decode_uri(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function get_link_page(...)
get_link_page = require(links_module).get_link_page
return get_link_page(...)
end
local function get_wikimedia_lang(...)
get_wikimedia_lang = require(wikimedia_languages_module).getByCode
return get_wikimedia_lang(...)
end
local function language_link(...)
language_link = require(links_module).language_link
return language_link(...)
end
local function normalize_anchor(...)
normalize_anchor = require(anchors_module).normalize_anchor
return normalize_anchor(...)
end
local function plain_link(...)
plain_link = require(links_module).plain_link
return plain_link(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function remove_links(...)
remove_links = require(links_module).remove_links
return remove_links(...)
end
local function split_on_slashes(...)
split_on_slashes = require(links_module).split_on_slashes
return split_on_slashes(...)
end
local function templatestyles(...)
templatestyles = require(templatestyles_module)
return templatestyles(...)
end
local function track(...)
track = require(debug_track_module)
return track(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local en
local function get_en()
en, get_en = require(languages_module).getByCode("ms"), nil
return en
end
local headword_data
local function get_headword_data()
headword_data, get_headword_data = load_data("Module:headword/data"), nil
return headword_data
end
local parameters_data
local function get_parameters_data()
parameters_data, get_parameters_data = load_data("Module:parameters/data"), nil
return parameters_data
end
local translations_data
local function get_translations_data()
translations_data, get_translations_data = load_data("Module:translations/data"), nil
return translations_data
end
local function is_translation_subpage(pagename)
if (headword_data or get_headword_data()).page.namespace ~= "" then
return false
elseif not pagename then
pagename = (headword_data or get_headword_data()).encoded_pagename
end
return pagename:match("./translations$") and true or false
end
local function canonical_pagename()
local pagename = (headword_data or get_headword_data()).encoded_pagename
return is_translation_subpage(pagename) and pagename:sub(1, -14) or pagename
end
local function interwiki(terminfo, term, lang, langcode)
-- No interwiki link if term is empty/missing
if not term or #term < 1 then
terminfo.interwiki = false
return
end
-- Percent-decode the term.
term = decode_uri(terminfo.term, "PATH")
-- Don't show an interwiki link if it's an invalid title.
if not new_title(term) then
terminfo.interwiki = false
return
end
local interwiki_langcode = (translations_data or get_translations_data()).interwiki_langs[langcode]
local wmlangs = interwiki_langcode and {get_wikimedia_lang(interwiki_langcode)} or lang:getWikimediaLanguages()
-- Don't show the interwiki link if the language is not recognised by Wikimedia.
if #wmlangs == 0 then
terminfo.interwiki = false
return
end
local sc = terminfo.sc
local target_page = get_link_page(term, lang, sc)
local split = split_on_slashes(target_page)
if not split[1] then
terminfo.interwiki = false
return
end
target_page = split[1]
local wmlangcode = wmlangs[1]:getCode()
local interwiki_link = language_link{
lang = lang,
sc = sc,
term = wmlangcode .. ":" .. target_page,
alt = "(" .. wmlangcode .. ")",
tr = "-"
}
terminfo.interwiki = tostring(html_create("span")
:addClass("tpos")
:wikitext(" " .. interwiki_link)
)
end
function export.show_terminfo(terminfo, check)
local lang = terminfo.lang
local langcode, langname = lang:getCode(), lang:getCanonicalName()
-- Translations must be for mainspace languages.
if not lang:hasType("regular") then
error("Translations must be for attested and approved main-namespace languages.")
else
local disallowed = (translations_data or get_translations_data()).disallowed
local err_msg = disallowed[langcode]
if err_msg then
error("Translations not allowed in " .. langname .. " (" .. langcode .. "). " .. langname .. " translations should " .. err_msg)
end
local fullcode = lang:getFullCode()
if fullcode ~= langcode then
err_msg = disallowed[fullcode]
if err_msg then
langname = lang:getFullName()
error("Translations not allowed in " .. langname .. " (" .. fullcode .. "). " .. langname .. " translations should " .. err_msg)
end
end
end
if langcode == "ms" then
if terminfo.interwiki then
error("Interwiki translations not allowed for English; they should always link to a different Wiktionary")
end
local current_L2 = require(pages_module).get_current_L2()
if current_L2 ~= "Rentas bahasa" and mw.title.getCurrentTitle().nsText ~= "Wikikamus" then
if current_L2 then
error("English translations only allowed in Translingual section, not in " .. current_L2)
else
error("English translations only allowed in Translingual section, not outside of any L2")
end
end
end
local term = terminfo.term
-- Check if there is a term. Don't show the interwiki link if there is nothing to link to.
if not term then
-- Track entries that don't provide a term.
-- FIXME: This should be a category.
track("translations/no term")
track("translations/no term/" .. langcode)
end
if terminfo.interwiki then
interwiki(terminfo, term, lang, langcode)
end
langcode = lang:getFullCode()
if (translations_data or get_translations_data()).need_super[langcode] then
local tr = terminfo.tr
if tr ~= nil then
terminfo.tr = tr:gsub("%d[%d%*%-]*%f[^%d%*]", "<sup>%0</sup>")
end
end
terminfo.show_qualifiers = true
local link = full_link(terminfo, "translation")
local canonical_name = lang:getCanonicalName()
local full_name = lang:getFullName()
local categories = {"Perkataan dengan terjemahan bahasa " .. canonical_name}
if canonical_name ~= full_name then
insert(categories, "Perkataan dengan terjemahan bahasa " .. full_name)
end
if check then
link = tostring(html_create("span")
:addClass("ttbc")
:tag("sup")
:addClass("ttbc")
:wikitext("(sila [[WT:Terjemahan#Terjemahan untuk disemak|sahkan]])")
:done()
:wikitext(" " .. link)
)
insert(categories, "Permintaan pengesahan terjemahan bahasa " .. langname )
end
return link .. format_categories(categories, en or get_en(), nil, canonical_pagename())
end
-- Implements {{t}}, {{t+}}, {{t-check}} and {{t+check}}.
function export.show(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["translation"])
local check = frame.args.check
return export.show_terminfo({
lang = args[1],
sc = args.sc,
track_sc = true,
term = args[2],
alt = args.alt,
id = args.id,
genders = args[3],
tr = args.tr,
ts = args.ts,
lit = args.lit,
q = args.q,
qq = args.qq,
l = args.l,
ll = args.ll,
refs = args.ref,
interwiki = frame.args.interwiki,
}, check and check ~= "")
end
local function add_id(div, id)
return id and div:attr("id", normalize_anchor("Translations-" .. id)) or div
end
-- Implements {{ter-atas}} and part of {{ter-atas-juga}}.
local function top(args, title, id, navhead)
local column_width = (args["column-width"] == "wide" or args["column-width"] == "narrow") and "-" .. args["column-width"] or ""
local div = html_create("div")
:addClass("NavFrame")
:node(navhead)
:tag("div")
:addClass("NavContent")
:tag("table")
:addClass("translations")
:attr("role", "presentation")
:attr("data-gloss", title or "")
:tag("tr")
:tag("td")
:addClass("translations-cell")
:addClass("multicolumn-list" .. column_width)
:attr("colspan", "3")
:allDone()
div = add_id(div, id)
local categories = {}
if not title then
insert(categories, "Pengepala jadual terjemahan kekurangan padanan kata")
end
local pagename = canonical_pagename()
if is_translation_subpage() then
insert(categories, "Sublaman terjemahan")
end
return (tostring(div):gsub("</td></tr></table></div></div>$", "")) ..
(#categories > 0 and format_categories(categories, en or get_en(), nil, pagename) or "") ..
-- Category to trigger [[MediaWiki:Gadget-TranslationAdder.js]]; we want this even on
-- user pages and such.
format_categories("Perkataan dengan kotak terjemahan", nil, nil, nil, true) ..
templatestyles("Modul:translations/styles.css")
end
-- Entry point for {{ter-atas}}.
function export.top(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["ter-atas"])
local title = args[1]
local id = args.id or title
title = title and remove_links(title)
return top(args, title, id, html_create("div")
:addClass("NavHead")
:css("text-align", "left")
:wikitext(title or "Terjemahan")
)
end
-- Entry point for {{checktrans-top}}.
function export.check_top(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["checktrans-top"])
local text = "\n:''The translations below need to be checked and inserted above into the appropriate translation tables. See instructions at " ..
frame:expandTemplate{
title = "section link",
args = {"Wikikamus:Susun atur entri#Terjemahan"}
} ..
".''\n"
local header = html_create("div")
:addClass("checktrans")
:wikitext(text)
local subtitle = args[1]
local title = "Terjemahan untuk disemak"
if subtitle then
title = title .. "‌: \"" .. subtitle .. "\""
end
-- No ID, since these should always accompany proper translation tables, and can't be trusted anyway (i.e. there's no use-case for links).
return tostring(header) .. "\n" .. top(args, title, nil, html_create("div")
:addClass("NavHead")
:css("text-align", "left")
:wikitext(title or "Terjemahan")
)
end
-- Implements {{ter-bawah}}.
function export.bottom(frame)
-- Check nothing is being passed as a parameter.
process_params(frame:getParent().args, (parameters_data or get_parameters_data())["ter-bawah"])
return "</table></div></div>"
end
-- Implements {{ter-lihat}} and part of {{ter-atas-juga}}.
local function see(args, see_text)
local navhead = html_create("div")
:addClass("NavHead")
:css("text-align", "left")
:wikitext(args[1] .. " ")
:tag("span")
:css("font-weight", "normal")
:wikitext("— ")
:tag("i")
:wikitext(see_text)
:allDone()
local terms, id = args[2], args.id
if #terms == 0 then
terms[1] = args[1]
end
for i = 1, #terms do
local term_id = id[i] or id.default
local data = {
term = terms[i],
id = term_id and "Translations-" .. term_id or "Translations",
}
terms[i] = plain_link(data)
end
return navhead:wikitext(concat(terms, ",‎ "))
end
-- Entry point for {{ter-lihat}}.
function export.see(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["ter-lihat"])
local div = html_create("div")
:addClass("pseudo")
:addClass("NavFrame")
:node(see(args, "see "))
return tostring(add_id(div, args.id.default or args[1]))
end
-- Entry point for {{ter-atas-juga}}.
function export.top_also(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["ter-atas-juga"])
local navhead = see(args, "lihat juga ")
local title = args[1]
local id = args.id.default or title
title = remove_links(title)
return top(args, title, id, navhead)
end
-- Implements {{translation subpage}}.
function export.subpage(frame)
process_params(frame:getParent().args, (parameters_data or get_parameters_data())["translation subpage"])
if not is_translation_subpage() then
error("This template should only be used on translation subpages, which have titles that end with '/translations'.")
end
-- "Translation subpages" category is handled by {{trans-top}}.
return ("''This page contains translations for ''%s''. See the main entry for more information.''"):format(full_link{
lang = en or get_en(),
term = canonical_pagename(),
})
end
-- Implements {{t-needed}}.
function export.needed(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["t-needed"])
local lang, category = args[1], ""
local span = html_create("span")
:addClass("trreq")
:attr("data-lang", lang:getCode())
:tag("i")
:wikitext("please add this translation if you can")
:done()
if not args.nocat then
local type, sort = args[2], args.sort
if type == "quote" then
category = "Permintaan terjemahan petikan bahasa " .. lang:getCanonicalName()
elseif type == "usex" then
category = "Permintaan terjemahan contoh penggunaan bahasa " .. lang:getCanonicalName()
else
category = "Permintaan terjemahan ke dalam bahasa " .. lang:getCanonicalName()
lang = en or get_en()
end
category = format_categories(category, lang, sort, not sort and canonical_pagename() or nil)
end
return tostring(span) .. category
end
-- Implements {{no equivalent translation}}.
function export.no_equivalent(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["no equivalent translation"])
local text = "tiada padanan kata dalam bahasa " .. args[1]:getCanonicalName()
if not args.noend then
text = text .. ", tetapi lihat"
end
return tostring(html_create("i"):wikitext(text))
end
-- Implements {{no attested translation}}.
function export.no_attested(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["no attested translation"])
local langname = args[1]:getCanonicalName()
local text = "tiada perkataan [[WT:ATTEST|disahkan]] dalam bahasa " .. langname
local category = ""
if not args.noend then
text = text .. ", but see"
local sort = args.sort
category = format_categories("Terjemahan bahasa " .. langname .. " yang tidak disahkan", en or get_en(), sort, not sort and canonical_pagename() or nil)
end
return tostring(html_create("i"):wikitext(text)) .. category
end
-- Implements {{not used}}.
function export.not_used(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["not used"])
return tostring(html_create("i"):wikitext((args[2] or "tidak digunakan") .. " dalam " .. args[1]:getCanonicalName()))
end
return export
q9l9ndsqlitq7y3z0pvlk646rgx258k
344653
344652
2026-06-08T09:00:04Z
Hakimi97
2668
344653
Scribunto
text/plain
local export = {}
local anchors_module = "Module:anchors"
local debug_track_module = "Module:debug/track"
local languages_module = "Module:languages"
local links_module = "Module:links"
local pages_module = "Module:pages"
local parameters_module = "Module:parameters"
local string_utilities_module = "Module:string utilities"
local templatestyles_module = "Module:TemplateStyles"
local utilities_module = "Module:utilities"
local wikimedia_languages_module = "Module:wikimedia languages"
local concat = table.concat
local html_create = mw.html.create
local insert = table.insert
local load_data = mw.loadData
local new_title = mw.title.new
local require = require
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function whms called. This mssures modules are only loaded whms needed, retains the speed/convmsimsce of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function decode_uri(...)
decode_uri = require(string_utilities_module).decode_uri
return decode_uri(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function get_link_page(...)
get_link_page = require(links_module).get_link_page
return get_link_page(...)
end
local function get_wikimedia_lang(...)
get_wikimedia_lang = require(wikimedia_languages_module).getByCode
return get_wikimedia_lang(...)
end
local function language_link(...)
language_link = require(links_module).language_link
return language_link(...)
end
local function normalize_anchor(...)
normalize_anchor = require(anchors_module).normalize_anchor
return normalize_anchor(...)
end
local function plain_link(...)
plain_link = require(links_module).plain_link
return plain_link(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function remove_links(...)
remove_links = require(links_module).remove_links
return remove_links(...)
end
local function split_on_slashes(...)
split_on_slashes = require(links_module).split_on_slashes
return split_on_slashes(...)
end
local function templatestyles(...)
templatestyles = require(templatestyles_module)
return templatestyles(...)
end
local function track(...)
track = require(debug_track_module)
return track(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local en
local function get_en()
en, get_en = require(languages_module).getByCode("ms"), nil
return en
end
local headword_data
local function get_headword_data()
headword_data, get_headword_data = load_data("Module:headword/data"), nil
return headword_data
end
local parameters_data
local function get_parameters_data()
parameters_data, get_parameters_data = load_data("Module:parameters/data"), nil
return parameters_data
end
local translations_data
local function get_translations_data()
translations_data, get_translations_data = load_data("Module:translations/data"), nil
return translations_data
end
local function is_translation_subpage(pagename)
if (headword_data or get_headword_data()).page.namespace ~= "" then
return false
elseif not pagename then
pagename = (headword_data or get_headword_data()).encoded_pagename
end
return pagename:match("./translations$") and true or false
end
local function canonical_pagename()
local pagename = (headword_data or get_headword_data()).encoded_pagename
return is_translation_subpage(pagename) and pagename:sub(1, -14) or pagename
end
local function interwiki(terminfo, term, lang, langcode)
-- No interwiki link if term is empty/missing
if not term or #term < 1 then
terminfo.interwiki = false
return
end
-- Percent-decode the term.
term = decode_uri(terminfo.term, "PATH")
-- Don't show an interwiki link if it's an invalid title.
if not new_title(term) then
terminfo.interwiki = false
return
end
local interwiki_langcode = (translations_data or get_translations_data()).interwiki_langs[langcode]
local wmlangs = interwiki_langcode and {get_wikimedia_lang(interwiki_langcode)} or lang:getWikimediaLanguages()
-- Don't show the interwiki link if the language is not recognised by Wikimedia.
if #wmlangs == 0 then
terminfo.interwiki = false
return
end
local sc = terminfo.sc
local target_page = get_link_page(term, lang, sc)
local split = split_on_slashes(target_page)
if not split[1] then
terminfo.interwiki = false
return
end
target_page = split[1]
local wmlangcode = wmlangs[1]:getCode()
local interwiki_link = language_link{
lang = lang,
sc = sc,
term = wmlangcode .. ":" .. target_page,
alt = "(" .. wmlangcode .. ")",
tr = "-"
}
terminfo.interwiki = tostring(html_create("span")
:addClass("tpos")
:wikitext(" " .. interwiki_link)
)
end
function export.show_terminfo(terminfo, check)
local lang = terminfo.lang
local langcode, langname = lang:getCode(), lang:getCanonicalName()
-- Translations must be for mainspace languages.
if not lang:hasType("regular") then
error("Translations must be for attested and approved main-namespace languages.")
else
local disallowed = (translations_data or get_translations_data()).disallowed
local err_msg = disallowed[langcode]
if err_msg then
error("Translations not allowed in " .. langname .. " (" .. langcode .. "). " .. langname .. " translations should " .. err_msg)
end
local fullcode = lang:getFullCode()
if fullcode ~= langcode then
err_msg = disallowed[fullcode]
if err_msg then
langname = lang:getFullName()
error("Translations not allowed in " .. langname .. " (" .. fullcode .. "). " .. langname .. " translations should " .. err_msg)
end
end
end
if langcode == "ms" then
if terminfo.interwiki then
error("Interwiki translations not allowed for English; they should always link to a different Wiktionary")
end
local current_L2 = require(pages_module).get_current_L2()
if current_L2 ~= "Rentas bahasa" and mw.title.getCurrentTitle().nsText ~= "Wikikamus" then
if current_L2 then
error("English translations only allowed in Translingual section, not in " .. current_L2)
else
error("English translations only allowed in Translingual section, not outside of any L2")
end
end
end
local term = terminfo.term
-- Check if there is a term. Don't show the interwiki link if there is nothing to link to.
if not term then
-- Track entries that don't provide a term.
-- FIXME: This should be a category.
track("translations/no term")
track("translations/no term/" .. langcode)
end
if terminfo.interwiki then
interwiki(terminfo, term, lang, langcode)
end
langcode = lang:getFullCode()
if (translations_data or get_translations_data()).need_super[langcode] then
local tr = terminfo.tr
if tr ~= nil then
terminfo.tr = tr:gsub("%d[%d%*%-]*%f[^%d%*]", "<sup>%0</sup>")
end
end
terminfo.show_qualifiers = true
local link = full_link(terminfo, "translation")
local canonical_name = lang:getCanonicalName()
local full_name = lang:getFullName()
local categories = {"Perkataan dengan terjemahan bahasa " .. canonical_name}
if canonical_name ~= full_name then
insert(categories, "Perkataan dengan terjemahan bahasa " .. full_name)
end
if check then
link = tostring(html_create("span")
:addClass("ttbc")
:tag("sup")
:addClass("ttbc")
:wikitext("(sila [[WT:Terjemahan#Terjemahan untuk disemak|sahkan]])")
:done()
:wikitext(" " .. link)
)
insert(categories, "Permintaan pengesahan terjemahan bahasa " .. langname )
end
return link .. format_categories(categories, en or get_en(), nil, canonical_pagename())
end
-- Implements {{t}}, {{t+}}, {{t-check}} and {{t+check}}.
function export.show(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["translation"])
local check = frame.args.check
return export.show_terminfo({
lang = args[1],
sc = args.sc,
track_sc = true,
term = args[2],
alt = args.alt,
id = args.id,
genders = args[3],
tr = args.tr,
ts = args.ts,
lit = args.lit,
q = args.q,
qq = args.qq,
l = args.l,
ll = args.ll,
refs = args.ref,
interwiki = frame.args.interwiki,
}, check and check ~= "")
end
local function add_id(div, id)
return id and div:attr("id", normalize_anchor("Translations-" .. id)) or div
end
-- Implements {{ter-atas}} and part of {{ter-atas-juga}}.
local function top(args, title, id, navhead)
local column_width = (args["column-width"] == "wide" or args["column-width"] == "narrow") and "-" .. args["column-width"] or ""
local div = html_create("div")
:addClass("NavFrame")
:node(navhead)
:tag("div")
:addClass("NavContent")
:tag("table")
:addClass("translations")
:attr("role", "presentation")
:attr("data-gloss", title or "")
:tag("tr")
:tag("td")
:addClass("translations-cell")
:addClass("multicolumn-list" .. column_width)
:attr("colspan", "3")
:allDone()
div = add_id(div, id)
local categories = {}
if not title then
insert(categories, "Pengepala jadual terjemahan kekurangan padanan kata")
end
local pagename = canonical_pagename()
if is_translation_subpage() then
insert(categories, "Sublaman terjemahan")
end
return (tostring(div):gsub("</td></tr></table></div></div>$", "")) ..
(#categories > 0 and format_categories(categories, en or get_en(), nil, pagename) or "") ..
-- Category to trigger [[MediaWiki:Gadget-TranslationAdder.js]]; we want this even on
-- user pages and such.
format_categories("Perkataan dengan kotak terjemahan", nil, nil, nil, true) ..
templatestyles("Modul:translations/styles.css")
end
-- Entry point for {{ter-atas}}.
function export.top(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["ter-atas"])
local title = args[1]
local id = args.id or title
title = title and remove_links(title)
return top(args, title, id, html_create("div")
:addClass("NavHead")
:css("text-align", "left")
:wikitext(title or "Terjemahan")
)
end
-- Entry point for {{checktrans-top}}.
function export.check_top(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["checktrans-top"])
local text = "\n:''The translations below need to be checked and inserted above into the appropriate translation tables. See instructions at " ..
frame:expandTemplate{
title = "section link",
args = {"Wikikamus:Susun atur entri#Terjemahan"}
} ..
".''\n"
local header = html_create("div")
:addClass("checktrans")
:wikitext(text)
local subtitle = args[1]
local title = "Terjemahan untuk disemak"
if subtitle then
title = title .. "‌: \"" .. subtitle .. "\""
end
-- No ID, since these should always accompany proper translation tables, and can't be trusted anyway (i.e. there's no use-case for links).
return tostring(header) .. "\n" .. top(args, title, nil, html_create("div")
:addClass("NavHead")
:css("text-align", "left")
:wikitext(title or "Terjemahan")
)
end
-- Implements {{ter-bawah}}.
function export.bottom(frame)
-- Check nothing is being passed as a parameter.
process_params(frame:getParent().args, (parameters_data or get_parameters_data())["ter-bawah"])
return "</table></div></div>"
end
-- Implements {{ter-lihat}} and part of {{ter-atas-juga}}.
local function see(args, see_text)
local navhead = html_create("div")
:addClass("NavHead")
:css("text-align", "left")
:wikitext(args[1] .. " ")
:tag("span")
:css("font-weight", "normal")
:wikitext("— ")
:tag("i")
:wikitext(see_text)
:allDone()
local terms, id = args[2], args.id
if #terms == 0 then
terms[1] = args[1]
end
for i = 1, #terms do
local term_id = id[i] or id.default
local data = {
term = terms[i],
id = term_id and "Translations-" .. term_id or "Translations",
}
terms[i] = plain_link(data)
end
return navhead:wikitext(concat(terms, ",‎ "))
end
-- Entry point for {{ter-lihat}}.
function export.see(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["ter-lihat"])
local div = html_create("div")
:addClass("pseudo")
:addClass("NavFrame")
:node(see(args, "see "))
return tostring(add_id(div, args.id.default or args[1]))
end
-- Entry point for {{ter-atas-juga}}.
function export.top_also(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["ter-atas-juga"])
local navhead = see(args, "lihat juga ")
local title = args[1]
local id = args.id.default or title
title = remove_links(title)
return top(args, title, id, navhead)
end
-- Implements {{translation subpage}}.
function export.subpage(frame)
process_params(frame:getParent().args, (parameters_data or get_parameters_data())["translation subpage"])
if not is_translation_subpage() then
error("This template should only be used on translation subpages, which have titles that end with '/translations'.")
end
-- "Translation subpages" category is handled by {{trans-top}}.
return ("''This page contains translations for ''%s''. See the main entry for more information.''"):format(full_link{
lang = en or get_en(),
term = canonical_pagename(),
})
end
-- Implements {{t-needed}}.
function export.needed(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["t-needed"])
local lang, category = args[1], ""
local span = html_create("span")
:addClass("trreq")
:attr("data-lang", lang:getCode())
:tag("i")
:wikitext("sila tambah terjemahan ini jika boleh")
:done()
if not args.nocat then
local type, sort = args[2], args.sort
if type == "quote" then
category = "Permintaan terjemahan petikan bahasa " .. lang:getCanonicalName()
elseif type == "usex" then
category = "Permintaan terjemahan contoh penggunaan bahasa " .. lang:getCanonicalName()
else
category = "Permintaan terjemahan ke dalam bahasa " .. lang:getCanonicalName()
lang = en or get_en()
end
category = format_categories(category, lang, sort, not sort and canonical_pagename() or nil)
end
return tostring(span) .. category
end
-- Implements {{no equivalent translation}}.
function export.no_equivalent(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["no equivalent translation"])
local text = "tiada padanan kata dalam bahasa " .. args[1]:getCanonicalName()
if not args.noend then
text = text .. ", tetapi lihat"
end
return tostring(html_create("i"):wikitext(text))
end
-- Implements {{no attested translation}}.
function export.no_attested(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["no attested translation"])
local langname = args[1]:getCanonicalName()
local text = "tiada perkataan [[WT:ATTEST|disahkan]] dalam bahasa " .. langname
local category = ""
if not args.noend then
text = text .. ", but see"
local sort = args.sort
category = format_categories("Terjemahan bahasa " .. langname .. " yang tidak disahkan", en or get_en(), sort, not sort and canonical_pagename() or nil)
end
return tostring(html_create("i"):wikitext(text)) .. category
end
-- Implements {{not used}}.
function export.not_used(frame)
local args = process_params(frame:getParent().args, (parameters_data or get_parameters_data())["not used"])
return tostring(html_create("i"):wikitext((args[2] or "tidak digunakan") .. " dalam " .. args[1]:getCanonicalName()))
end
return export
pvow12yg2wbwz129ibqcuqfuhq84xcp
Templat:R:Man'yōshū 1
10
10534
344667
342936
2026-06-08T09:16:54Z
Hakimi97
2668
344667
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|ja|last=Satake|first=Akihiro|coauthors=Hideo Yamada; Rikio Kudō; Masao Ōtani; Yoshiyuki Yamazaki|title=Shin Nihon Koten Bungaku Taikei 1: [[w:Man'yōshū|Man’yōshū]] 1|location=[[w:Tokyo|Tōkyō]]|publisher=[[w:Iwanami Shoten Publishing|Iwanami Shoten]]|year=c. 759|year_published=1999|isbn=978-4-00-240001-3
|usenodot=1
}}<noinclude>{{refcat|ja}}</noinclude>
59n64vquziiav3mc8dfkew2zvmguuqf
Templat:R:Man'yōshū 2
10
10536
344664
342937
2026-06-08T09:13:03Z
Hakimi97
2668
344664
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|ja|last=Satake|first=Akihiro|coauthors=Hideo Yamada; Rikio Kudō; Masao Ōtani; Yoshiyuki Yamazaki|title=Shin Nihon Koten Bungaku Taikei 2: [[w:Man'yōshū|Man’yōshū]] 2|location=[[w:Tokyo|Tōkyō]]|publisher=[[w:Iwanami Shoten Publishing|Iwanami Shoten]]|year=c. 759|year_published=2000|isbn=978-4-00-240002-0
|usenodot=1
}}<noinclude>{{refcat|ja}}</noinclude>
4coom6yog53hbvcmeblv8iun4b0hrsl
Templat:R:Nihon Kokugo Daijiten Concise
10
35003
344657
146785
2026-06-08T09:08:21Z
Hakimi97
2668
Hakimi97 telah memindahkan laman [[Templat:R:Nihon Kokugo Daijiten 2]] ke [[Templat:R:Nihon Kokugo Daijiten Concise]]
146785
wikitext
text/x-wiki
{{cite-book
|entryurl=https://kotobank.jp/word/{{{1<includeonly>|{{PAGENAME}}</includeonly>}}}?dic=nikkoku
|entry={{lang|ja|{{{1<includeonly>|{{PAGENAME}}</includeonly>}}}}}
|title={{lw|ja|日本国語大辞典|tr=Nihon Kokugo Daijiten|t=[[w:Nihon Kokugo Daijiten|Nihon Kokugo Daijiten]]}}
|url=https://kotobank.jp/dictionary/nikkoku/
|lang=ja
|edition=2
|location=[[w:Tōkyō|Tōkyō]]
|publisher=[[w:Shogakukan|Shogakukan]]
|year=2000
|isbn=4-09-521001-X
}}<noinclude>{{documentation}}[[Category:Templat rujukan bahasa Jepun|Nihon Kokugo Daijiten 2]]
</noinclude>
0jtddygrsmk26es1ry2gzaa8m8hx74z
344659
344657
2026-06-08T09:08:48Z
Hakimi97
2668
344659
wikitext
text/x-wiki
{{#invoke:quote|call_template
|template=cite-book
|ja
|entryurl=https://kotobank.jp/word/{{urlencode:{{{1<includeonly>|{{pagename}}</includeonly>}}}|PATH}}#E7.B2.BE.E9.81.B8.E7.89.88.20.E6.97.A5.E6.9C.AC.E5.9B.BD.E8.AA.9E.E5.A4.A7.E8.BE.9E.E5.85.B8
|entry={{lang|ja|{{{1<includeonly>|{{pagename}}</includeonly>}}}}}
|title={{lw|ja|日本国語大辞典}}
|trans-title={{w|Nihon Kokugo Daijiten}}
|url=https://kotobank.jp/dictionary/nikkokuseisen/
|edition=concise
|location=w:Tokyo
|publisher=w:Shogakukan
|year=2006
}}<noinclude>
{{documentation}}
{{shortcut|Template:R:ja:NKD Concise}}
{{refcat|ja}}
</noinclude>
pxjfsezuh3j5bpw8xg89pu0dux2nkxt
Modul:reference template cat
828
35045
344666
342930
2026-06-08T09:16:19Z
Hakimi97
2668
344666
Scribunto
text/plain
local export = {}
local concat = table.concat
local format = string.format
local get_lang = require("Module:languages").getByCode
local insert = table.insert
local insert_if_not = require("Module:table/insertIfNot")
local keys_to_list = require("Module:table/keysToList")
local process_params = require("Module:parameters").process
local table_contains = require("Module:table/contains")
local prefixes = {
["rujukan"] = "R",
["petikan"] = "RQ",
["penggunaan"] = "U",
["senarai"] = "list",
["jadual"] = "table"
}
local options = {
comparison = function (obj1, obj2)
return obj1:getCode() == obj2:getCode()
end
}
function export.categorize(title, langs, sortkey, what)
what = what or "rujukan"
local name = title.text:gsub("^" .. prefixes[what] .. ":", "")
local title_code, rest = name:match("^(%l[%a-]*%a):(.+)$")
if title_code then
local title_lang = get_lang(title_code, nil, true, true)
if not title_lang then
-- Check for proto-languages manually, which catches any with code
-- xxx-pro where there is no family xxx (which shouldn't really
-- happen, but sometimes does). Don't allow families this time, as
-- they can't be proto-languages.
title_lang = get_lang(title_code .. "-pro", nil, true)
elseif title_lang:hasType("family") then
title_lang = title_lang:getProtoLanguage()
end
if title_lang and not table_contains(langs, title_lang, options) then
insert(langs, 1, title_lang)
end
name = rest
end
sortkey = sortkey or name
local cats = {}
for _, lang in ipairs(langs) do
repeat
local cat = format(
"[[Kategori:Templat %s bahasa %s|%s]]",
what, lang:getCanonicalName(), sortkey
)
insert_if_not(cats, cat)
lang = lang:getParent()
until not lang
end
return concat(cats)
end
function export.main(frame)
local iargs = process_params(frame.args, {
["what"] = {set = keys_to_list(prefixes), default = "rujukan"},
})
local args = process_params(frame:getParent().args, {
[1] = {type = "language", list = true},
["title"] = {type = "title", demo = true},
["sort"] = true,
})
-- FIXME: this should be more specific.
local current_title = mw.title.getCurrentTitle()
if current_title.nsText == "" or current_title.nsText == "Rekonstruksi" then
error("This template is meant to be used in the Template namespace.")
end
local title = args.title
local categories = export.categorize(title or current_title, args[1], args.sort, iargs.what)
if title then
categories = mw.text.nowiki(categories)
end
return categories
end
return export
q5qzmcmiwa1xa8p8u5edzso2cknaacd
Templat:reference template cat
10
35083
344665
229201
2026-06-08T09:14:44Z
Hakimi97
2668
Mengemas kini mengikut padanan Wikikamus bahasa Inggeris (semakan [[en:Special:Diff/90161550|90161550]])
344665
wikitext
text/x-wiki
<includeonly>{{#invoke:reference template cat|main}}</includeonly><noinclude>{{documentation}}</noinclude>
luksmm5vfifoqus9yfyen1rylkztzgo
Templat:R:Lexico
10
36946
344656
149508
2026-06-08T09:07:10Z
Hakimi97
2668
Mengemas kini mengikut padanan Wikikamus bahasa Inggeris (semakan [[en:Special:Diff/88879225|88879225]])
344656
wikitext
text/x-wiki
{{#invoke:checkparams|warn}}<!-- Validate template parameters
-->{{#if:{{{subentry|}}}
| “{{#invoke:string/templates|replace|{{#invoke:string/templates|replace|{{{subentry}}}|'|’}}|’’|''}}{{#if:{{{subpos|}}}|, ''{{{subpos}}}{{#switch:{{{subpos|}}}
| phrase|prefix|suffix =<!--Do nothing-->
| .
}}''}}” under 
}}{{cite-book
|entry = {{#invoke:string/templates|replace|{{#invoke:string/templates|replace|{{#if:{{{alt|}}}
| {{{alt}}}
| {{{entry|{{{1|{{pagename}}}}}}}}
}}|'|’}}|’’|''}}{{#if:{{{part of speech|}}}{{{pos|}}}{{{2|}}}
|, {{#if:{{{noformat|}}}
| {{{part of speech|{{{pos|{{{2|}}}}}}}}}
| ''{{{part of speech|{{{pos|{{{2|}}}}}}}}}{{#switch:{{{part of speech|}}}{{{pos|}}}{{{2|}}}
| phrase|prefix|suffix =<!--Do nothing-->
| .
}}''
}}
}}
|entryurl = {{#if:{{{url|}}}{{{3|}}}
| {{{url|{{{3|}}}}}}
| https://web.archive.org/https://www.lexico.com/{{#if:{{{us|}}}|en/}}definition/{{urlencode:{{replace|{{{entry|{{{1|{{pagename}}}}}}}}| |_}}|PATH}}
}}
|title = [[w:Lexico|Lexico]]
|publisher = [[w:Dictionary.com|Dictionary.com]]; [[w:Oxford University Press|Oxford University Press]]
|year = 2019–2022
|passage = {{{passage|{{{text|{{{4|}}}}}}}}}
}}{{#if:{{{nodot|}}}||.}}<noinclude>{{documentation}}</noinclude>
m2qyithht9lbm6ra4nonb7v4f4ivsvs
basaan lumoyog
0
56568
344669
296183
2026-06-08T10:40:46Z
CommonsDelinker
79
Replacing Chloe_Sutton.jpg with [[File:Chloe_Sutton_-_USA_Swimsuit_(4661622460).jpg]] (by [[:c:User:CommonsDelinker|CommonsDelinker]] because: [[:c:COM:FR|File renamed]]: [[:c:COM:FR#FR2|Criterion 2]] (meaningless or ambiguous name) · [[:c::File:Chloe Sut
344669
wikitext
text/x-wiki
[[File:Chloe Sutton - USA Swimsuit (4661622460).jpg|thumb|poinrasuk do basaan lumoyog]]
==Bahasa Kadazandusun==
===Kata nama===
{{inti|dtp|kata nama}}
#baju renang
===Sebutan===
[[File:LL-Q5317225 (dtp)-Nelynnnnn-basaan lumoyog.wav|thumb|left]]
===Rujukan===
* Komoiboros Kigambal. (2023)
l9j2dwzdatm4pjgmbryr536lx7eotli
Templat:R:ESBKGDK
10
78099
344662
256020
2026-06-08T09:10:22Z
Hakimi97
2668
344662
wikitext
text/x-wiki
{{cite-book
|entry = {{{entry|{{{1|{{PAGENAME}}}}}}}}
|url =
|author = Abdulhadi Muhammad
|author2 = Hamidah Mahmud
|title = Ensiklopedia Simpulan Bahasa dan Kata Ganda Dialek Kelantan
|trans-reference =
|location =
|publisher = {{w|Pertubuhan Peradaban Melayu Malaysia Kelantan}}
|year = 2023
|isbn = 9780671301255
|issn =
|page = {{{page|{{{2|}}}}}}
|pages = {{{pages|}}}
|passage = {{{passage|{{{3|}}}}}}
|nodot = {{{nodot|}}}
}}<noinclude>[[Kategori:Templat bahasa Melayu Kelantan-Patani]]{{pendokumenan}}</noinclude>
9yy252dszjgq38x9wrx8wp8d2aqjh3f
Templat:R:KPLK
10
86295
344654
244751
2026-06-08T09:02:54Z
Hakimi97
2668
Baiki templat
344654
wikitext
text/x-wiki
{{cite-book
|title = Kamus Pertuturan Loghat Kelantan
|url = https://books.google.com.my/books/about/Kamus_pertuturan_loghat_Kelantan.html?id=ud1NAQAAIAAJ&redir_esc=y
|author = Abdullah al-Qari bin Haji Salleh
|reference =
|trans-reference =
|location = Malaysia
|publisher = Pustaka Asa
|year = 1981
|isbn =
|issn =
|page = {{{page|{{{|}}}}}}
|pages = {{{pages|}}}
|passage = {{{passage|{{{|}}}}}}
|nodot = {{{nodot|}}}
}}<noinclude>{{pendokumenan}}
[[Kategori:Templat rujukan bahasa Melayu Kelantan-Patani]]</noinclude>
0ogv7kwqyu3ako3uscrjrwlmodyxjwy
Templat:R:BMKMIMW
10
86309
344661
245025
2026-06-08T09:09:48Z
Hakimi97
2668
344661
wikitext
text/x-wiki
{{cite-book
|title = Bahasa Melayu Kelantan: Menggali Ilmu Menyusur Warisan
|url = https://search.worldcat.org/en/title/Bahasa-Melayu-Kelantan-:-menggali-ilmu-menyusur-warisan/oclc/973767412
|author = Nik Safiah Abdul Karim, Rozita Che Rodi
|reference =
|trans-reference =
|location =
|publisher = Majlis Agama Islam Kelantan dan Adat Istiadat Melayu Kelantan
|year = 2016
|isbn = 9789832391692
|issn =
|page = {{{page|{{{|}}}}}}
|pages = {{{pages|}}}
|passage = {{{passage|{{{|}}}}}}
|nodot = {{{nodot|}}}
}}<noinclude>{{pendokumenan}}
[[Kategori:Templat rujukan bahasa Melayu Kelantan-Patani]]</noinclude>
2xs3moun279cg16cod0y3z1rduscu4g
Templat:R:GSBKGDK
10
86310
344660
244812
2026-06-08T09:09:29Z
Hakimi97
2668
344660
wikitext
text/x-wiki
{{cite-book
|title = Ensiklopedia Simpulan Bahasa dan Kata Ganda Dialek Kelantan
|url = https://books.google.com.my/books?id=do3EswEACAAJ
|author = Abdulhadi Muhamad, Hamidah Mahmud
|reference =
|trans-reference =
|location =
|publisher = Pertubuhan Peradaban Melayu Malaysia Kelantan
|year = 2017
|isbn = 9780671301255
|issn =
|page = {{{page|{{{|}}}}}}
|pages = {{{pages|}}}
|passage = {{{passage|{{{|}}}}}}
|nodot = {{{nodot|}}}
}}<noinclude>{{pendokumenan}}
[[Kategori:Templat rujukan bahasa Melayu Kelantan-Patani]]</noinclude>
9qannihpbrn4sa6udtx1pfvikik15ma
Modul:template cat
828
118621
344668
342886
2026-06-08T09:24:35Z
Hakimi97
2668
344668
Scribunto
text/plain
-- Author: Benwing
local export = {}
local require_when_needed = require("Module:utilities/require when needed")
local is_callable = require_when_needed("Module:fun", "is_callable")
local format_categories = require_when_needed("Module:utilities", "format_categories")
local parse_interface_module = "Module:parse interface"
local m_string_utilities = require("Module:string utilities")
local und_lang = require("Module:languages").getByCode("und", true)
local ugsub = m_string_utilities.gsub
local ufind = m_string_utilities.find
local split = m_string_utilities.split
local insert = table.insert
local concat = table.concat
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-- This table detects the category type of the template given its name. When this is invoked, the language code has
-- already been removed from the beginning, and anything starting with a slash has been truncated. The entries are
-- processed in order and are two-element lists of Lua patterns (anchored on both sides; beware of hyphens, which need
-- to be %-escaped) and the category type to use. The category types themselves are mapped to categories in
-- category_type_to_category.
local detect_category_type_list = {
-- order is important here
-- nouns, proper nouns, pronouns
-- (1) unambiguous decl/infl templates
{"decl%-.*proper.*", "noun inflection-table"},
{"infl%-.*proper.*", "noun inflection-table"},
{"decl%-.*pron.*", "pronoun inflection-table"},
{"infl%-.*pron.*", "pronoun inflection-table"},
{"decl%-noun.*", "noun inflection-table"},
{"infl%-noun.*", "noun inflection-table"},
-- (2) nouns
{"noun", "headword-line"},
{"noun[ -]form", "headword-line"},
{"noun[ -]pl", "headword-line"},
{"noun[ -]plonly", "headword-line"},
-- Some languages, e.g. Urdu, have inflection templates called e.g. [[Template:ur-noun-f-ī]]. They should be called
-- [[Template:ur-decl-noun-f-ī]] but we can autodetect them if we exclude the likely cases that are not declension
-- templates.
{"noun%-.*", "noun inflection-table"},
{"ndecl", "noun inflection-table"},
{"ndecl%-.*", "noun inflection-table"},
-- (3) proper nouns
{"proper[ -]?noun", "headword-line"},
{"proper[ -]?noun[ -]form", "headword-line"},
{"proper[ -]?noun[ -]pl", "headword-line"},
{"proper[ -]?noun[ -]plonly", "headword-line"},
{"pnoun", "headword-line"},
{"pnoun[ -]form", "headword-line"},
{"pnoun[ -]pl", "headword-line"},
{"pnoun[ -]plonly", "headword-line"},
{"propn", "headword-line"},
{"propn[ -]form", "headword-line"},
{"propn[ -]pl", "headword-line"},
{"propn[ -]plonly", "headword-line"},
-- See above for inflection templates without 'decl' or 'infl' in them.
{"proper[ -]?noun%-.*", "noun inflection-table"},
{"pnoun%-.*", "noun inflection-table"},
{"propn%-.*", "noun inflection-table"},
-- (4) pronouns
{"pron", "headword-line"},
{"pronoun", "headword-line"},
{"pron[ -]form", "headword-line"},
{"pronoun[ -]form", "headword-line"},
{"prondecl", "pronoun inflection-table"},
{"prondecl%-.*", "pronoun inflection-table"},
-- adjectives
{"decl%-adj.*", "adjective inflection-table"},
{"infl%-adj.*", "adjective inflection-table"},
{"adj", "headword-line"},
{"adjective", "headword-line"},
{"adj[ -]form", "headword-line"},
{"adjective[ -]form", "headword-line"},
{"adj[ -]comp", "headword-line"},
{"adjective[ -]comp", "headword-line"},
{"adj[ -]sup", "headword-line"},
{"adjective[ -]sup", "headword-line"},
-- Some languages, e.g. Urdu and Lithuanian, have inflection templates called e.g. [[Template:ur-adj-1]] and
-- [[Template:lt-adj-is]]. They should be called [[Template:ur-decl-adj-1]] and [[Template:lt-decl-adj-is]] but we
-- can autodetect them if we exclude the likely cases that are not declension templates.
{"adj%-.*", "adjective inflection-table"},
{"adecl", "adjective inflection-table"},
{"adecl%-.*", "adjective inflection-table"},
-- verbs; need to avoid including conjunctions
{"verb", "headword-line"},
{"conj", "verb inflection-table"},
{"conj[0-9 -].*", "verb inflection-table"},
{"conjug.*", "verb inflection-table"},
{"infl%-verb.*", "verb inflection-table"},
-- pronunciation
{".*IPA.*", "pronunciation"},
{"pronunciation", "pronunciation"},
{"pr", "pronunciation"},
{"p", "pronunciation"},
-- form-of
{".*form of", "form-of"},
-- pronominal boxes
{".*personal pronouns", "personal pronoun"},
{".*demonstrative.*", "demonstrative"},
{".*interrogative.*", "interrogative"},
{".*possessives", "possessive"},
{".*possessive .*", "possessive"},
{".*reflexives", "reflexive"},
{".*reflexive .*", "reflexive"},
-- these next two should precede 'relative'
{".*correlatives", "pro-form"},
{".*correlative .*", "pro-form"},
{".*relative .*", "relative"},
{".*articles", "article"},
{".*prefixes", "affix"},
{".*suffixes", "affix"},
-- TOC tables
{".*TOC", "TOC"},
-- numbers, numerals
{".*numbers", "number"},
{".*numerals", "number"},
{".*ordinals", "ordinal"},
{".*cardinals", "cardinal"},
{".*digits", "digit"},
-- transliteration
{".*xlit", "orthographic conversion"},
{".*translit", "orthographic conversion"},
-- orthographic and regional variants
{".*variant", "orthographic variant"},
{".*regional", "regional variant"},
-- sign production templates
-- FIXME: We should limit this to sign languages. As it is, we put it near the bottom of the
-- pattern list so it doesn't accidentally override other patterns for non-sign languages.
{"prod .*", "sign production"},
}
-- This table indicates how to convert template category types to categories. It consists of a list of pairs, where the
-- first element is the category type and the second element is a key-value table containing the following keys:
-- * `aliases`: Optional list of aliases for the category type, which can be used when explicitly specifying the type,
-- e.g. {{tcat|hw}} instead of {{tcat|headword-line}}.
-- * `cats`: List of categories to add the template to. Each entry either specifies a ''raw'' category (if the category
-- name begins with "Category:"), a ''full table'' category (if the category name begins with "label:", where what
-- follows specifies the full label without the prefixed language name) or a ''regular label'' category (for other
-- strings, where e.g. if the label is "noun inflection-table", the category name is
-- "LANG noun inflection-table templates"). An entry is either a string, directly specifying the category name, or a
-- key-value table with keys `name` (the category name) and `sort` (how to generate the sort base). By default, the
-- sort base for raw categories is a comma-separated list of the language names (not codes) associated with the
-- template, or the full template name if there are no languages, and the sort base for label categories is the
-- template name minus the initial language code. If this isn't correct, the `sort` field specifies how to compute the
-- sort base. It is either a function of two arguments, the template name and language object, which should return the
-- sort base; or a table of specs telling how to compute the sort base. In the case of a function, the template name
-- passed in is the full name for raw categories, but the name minus any language code prefix in the case of label
-- categories; and for raw categories, a list of all associated language objects is passed in, or {nil} if none, while
-- for label categories, a single language object is passed in. (Label categories can only exist if there are
-- associated languages.) In the case where `sort` is a table of specs, it is a list where each element is a
-- two-element list of a Lua pattern anchored on both sides and the corresponding pattern replacement string. The
-- specs are processed in order.
local category_type_to_category = {
-- Inflection-table templates
{"noun inflection-table", {
aliases = {"nouninfl", "noundecl", "ndecl"},
cats = {{name = "noun inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"noun%-(.*)", "%1"},
-- put this twice to catch noun-decl-* and decl-noun-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"noun", "*"},
{"ndecl%-base%-(.*)", " %1"},
{"ndecl%-base", " "},
{"ndecl%-(.*)", "%1"},
{"ndecl", "*"},
{"propndecl%-base%-(.*)", " %1"},
{"propndecl%-base", " "},
{"propndecl%-(.*)", "%1"},
{"propndecl", "*"},
{"proper[ -]?noun%-(.*)", "%1"},
{"propn%-(.*)", "%1"},
{"pnoun%-(.*)", "%1"},
}}},
}},
{"pronoun inflection-table", {
aliases = {"proninfl", "prondecl"},
cats = {{name = "pronoun inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"pronoun%-(.*)", "%1"},
{"pron%-(.*)", "%1"},
-- put this twice to catch pron-decl-* and decl-pron-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"pronoun", "*"},
{"pron", "*"},
{"prondecl%-base%-(.*)", " %1"},
{"prondecl%-base", " "},
{"prondecl%-(.*)", "%1"},
{"prondecl", "*"},
}}},
}},
{"article inflection-table", {
aliases = {"artinfl", "artdecl"},
cats = {{name = "article inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"article%-(.*)", "%1"},
{"art%-(.*)", "%1"},
-- put this twice to catch art-decl-* and decl-art-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"article", "*"},
{"art", "*"},
{"artdecl%-base%-(.*)", " %1"},
{"artdecl%-base", " "},
{"artdecl%-(.*)", "%1"},
{"artdecl", "*"},
}}},
}},
{"determiner inflection-table", {
aliases = {"detinfl", "detdecl"},
cats = {{name = "determiner inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"determiner%-(.*)", "%1"},
{"det%-(.*)", "%1"},
-- put this twice to catch det-decl-* and decl-det-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"determiner", "*"},
{"det", "*"},
{"detdecl%-base%-(.*)", " %1"},
{"detdecl%-base", " "},
{"detdecl%-(.*)", "%1"},
{"detdecl", "*"},
}}},
}},
{"preposition inflection-table", {
aliases = {"prepinfl", "prepdecl"},
cats = {{name = "preposition inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"preposition%-(.*)", "%1"},
{"prep%-(.*)", "%1"},
-- put this twice to catch prep-decl-* and decl-prep-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"preposition", "*"},
{"prep", "*"},
{"prepdecl%-base%-(.*)", " %1"},
{"prepdecl%-base", " "},
{"prepdecl%-(.*)", "%1"},
{"prepdecl", "*"},
{"prepinfl%-base%-(.*)", " %1"},
{"prepinfl%-base", " "},
{"prepinfl%-(.*)", "%1"},
{"prepinfl", "*"},
}}},
}},
{"postposition inflection-table", {
aliases = {"postpinfl", "postpdecl"},
cats = {{name = "postposition inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"postposition%-(.*)", "%1"},
{"postp%-(.*)", "%1"},
{"post%-(.*)", "%1"},
-- put this twice to catch postp-decl-* and decl-postp-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"postposition", "*"},
{"postp", "*"},
{"post", "*"},
{"postpdecl%-base%-(.*)", " %1"},
{"postpdecl%-base", " "},
{"postpdecl%-(.*)", "%1"},
{"postpdecl", "*"},
{"postpinfl%-base%-(.*)", " %1"},
{"postpinfl%-base", " "},
{"postpinfl%-(.*)", "%1"},
{"postpinfl", "*"},
}}},
}},
{"adjective inflection-table", {
aliases = {"adjinfl", "adjdecl", "adecl"},
cats = {{name = "adjective inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"adj%-(.*)", "%1"},
{"adjective%-(.*)", "%1"},
-- put this twice to catch adj-decl-* and decl-adj-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"adj", "*"},
{"adjective", "*"},
{"adecl%-base%-(.*)", " %1"},
{"adecl%-base", " "},
{"adecl%-(.*)", "%1"},
{"adecl", "*"},
}}},
}},
{"numeral inflection-table", {
aliases = {"numinfl", "numdecl"},
cats = {{name = "numeral inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"numeral%-(.*)", "%1"},
{"number%-(.*)", "%1"},
{"num%-(.*)", "%1"},
-- put this twice to catch num-decl-* and decl-num-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"numeral", "*"},
{"number", "*"},
{"num", "*"},
{"numdecl%-base%-(.*)", " %1"},
{"numdecl%-base", " "},
{"numdecl%-(.*)", "%1"},
{"numdecl", "*"},
}}},
}},
{"nominal inflection-table", {
aliases = {"nominfl", "nomdecl"},
cats = {{name = "nominal inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"nominal%-(.*)", "%1"},
{"nom%-(.*)", "%1"},
-- put this twice to catch nom-decl-* and decl-nom-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"nominal", "*"},
{"nom", "*"},
{"nomdecl%-base%-(.*)", " %1"},
{"nomdecl%-base", " "},
{"nomdecl%-(.*)", "%1"},
{"nomdecl", "*"},
}}},
}},
{"verb inflection-table", {
aliases = {"verbinfl", "conj"},
cats = {{name = "verb inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"verb%-(.*)", "%1"},
-- put this twice to catch verb-infl-* and infl-verb-*
{"infl%-(.*)", "%1"},
{"conj%-base%-(.*)", " %1"},
{"conj%-base", " "},
-- handle conj2, conj1-c, etc.
{"conj%-?(.*)", "%1"},
{"conj", "*"},
}}},
}},
{"adverb inflection-table", {
aliases = {"advinfl"},
cats = {{name = "adverb inflection-table", sort = {
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"adverb%-(.*)", "%1"},
{"adv%-(.*)", "%1"},
-- put this twice to catch adv-decl-* and decl-adv-*
{"infl%-(.*)", "%1"},
{"decl%-(.*)", "%1"},
{"adverb", "*"},
{"adv", "*"},
{"advinfl%-base%-(.*)", " %1"},
{"advinfl%-base", " "},
{"advinfl%-(.*)", "%1"},
{"advinfl", "*"},
}}},
}},
-- Inflection-table subtemplates
{"inflection-table sub", {
aliases = {"inflsub"},
cats = {"label:inflection-table subtemplates"},
}},
-- Definition templates
-- Headword-line templates
{"headword-line", {
aliases = {"hw", "headword"},
cats = {"baris pengepala kata"},
}},
-- Definition templates
{"definition", {
aliases = {"def", "defn"},
cats = {"takrifan"},
}},
{"form-of", {
aliases = {"form of"},
cats = {"bentuk bagi"},
}},
-- Etymology and pronunciation templates
{"etymology", {
aliases = {"etym"},
cats = {"etimologi"},
}},
{"morphology", {
aliases = {"morph"},
cats = {"etimologi", "Kategori:Templat morfologi khusus bahasa"},
}},
{"pronunciation", {
aliases = {"pron"},
cats = {"sebutan"},
}},
{"sign production", {
aliases = {"signprod"},
cats = {{name = "sign production", sort = {
{"prod (.*)", "%1"},
}}},
}},
-- Pseudo-namespace templates
{"reference", {
aliases = {"ref"},
cats = {{name = "rujukan", allow_etym = true}},
}},
{"quotation", {
aliases = {"quote"},
cats = {"petikan"},
}},
{"usage", {
cats = {"penggunaan"},
}},
{"list", {
cats = {"senarai"},
}},
{"auto-table", {
aliases = {"table"},
cats = {"jadual automatik"},
}},
-- Navigation templates
-- Pro-form box templates
{"pro-form", {
aliases = {"pro-forms"},
cats = {"navigasi", "Kategori:Templat kotak pro-bentuk"},
}},
{"adposition", {
aliases = {"adpositions", "preposition", "prepositions", "postposition", "postpositions"},
cats = {"navigasi", "Kategori:Templat kotak adposisi"},
}},
{"affix", {
aliases = {"affixes", "prefix", "prefixes", "suffix", "suffixes"},
cats = {"navigasi", "Kategori:Templat kotak imbuhan pro-bentuk"},
}},
{"article", {
aliases = {"articles"},
cats = {"navigasi", "Category:Grammatical article box templates"},
}},
{"demonstrative", {
aliases = {"demonstratives"},
cats = {"navigasi", "Category:Demonstrative box templates"},
}},
{"interrogative", {
aliases = {"interrogatives"},
cats = {"navigasi", "Category:Interrogative box templates"},
}},
{"personal pronoun", {
aliases = {"perspron", "personal pronouns"},
cats = {"navigasi", "Category:Personal pronoun box templates"},
}},
{"possessive", {
aliases = {"possessives"},
cats = {"navigasi", "Category:Possessive pronoun and determiner box templates"},
}},
{"reflexive", {
aliases = {"reflexives"},
cats = {"navigasi", "Category:Reflexive pronoun and determiner box templates"},
}},
{"relative", {
aliases = {"relatives"},
cats = {"navigasi", "Category:Relative pronoun and determiner box templates"},
}},
{"navigation", {
-- miscellaneous navigation box templates like {{eu-aux verbs}}, {{pt-forms of address}}
aliases = {"nav"},
cats = {"navigasi"},
}},
{"TOC", {
cats = {{name = "navigation", sort = {
{"categoryTOC", "TOC"},
}}, "Kategori:Templat TOC"},
}},
{"number", {
aliases = {"numbers"},
cats = {"navigasi", "Kategori:Templat nombor khusus bahasa"},
}},
{"cardinal", {
aliases = {"cardinals"},
cats = {"navigasi", "Kategori:Templat nombor khusus bahasa"},
}},
{"ordinal", {
aliases = {"ordinals"},
cats = {"navigasi", "Kategori:Templat nombor khusus bahasa"},
}},
{"digit", {
aliases = {"digits"},
cats = {"senarai", "Kategori:Templat nombor khusus bahasa"},
}},
-- Entry templates
{"entry", {
cats = {"kata masukan"},
}},
-- Orthographic conversion templates (e.g. for converting between scripts)
{"orthographic conversion", {
aliases = {"transliteration", "translit", "xlit", "orthconv", "scriptconv"},
cats = {"pertukaran", "Kategori:Templat pertukaran ortografi"},
}},
-- Orthographic and regional variant templates (for displaying orthographic, script and/or regional variants)
{"orthographic variant", {
aliases = {"orthvar", "scriptvar"},
-- Currently we categorize orthographic and regional variants the same but we could split them if needed
cats = {"navigasi", "Kategori:Templat kelainan ortografi dan setempat"},
}},
{"regional variant", {
aliases = {"regvar"},
cats = {"navigasi", "Kategori:Templat kelainan ortografi dan setempat"},
}},
-- Internal link templates
{"link", {
cats = {"pautan", "Kategori:Templat pautan dalaman khusus bahasa"},
}},
}
local category_type_to_category_map = {}
for _, category_type_to_category_spec in ipairs(category_type_to_category) do
local category_type, props = unpack(category_type_to_category_spec)
category_type_to_category_map[category_type] = props
if props.aliases then
for _, alias in ipairs(props.aliases) do
category_type_to_category_map[alias] = props
end
end
end
-- Split an argument on comma, but not comma followed by whitespace; split off sort base after a colon.
local function split_on_comma_and_split_off_sort_base(val)
local cattypes
if val:find(",") then
-- Don't optimize more than this because there can be commas backslashed, inside of links or followed by
-- whitespace that don't cause splitting.
cattypes = require(parse_interface_module).split_on_comma(val)
else
cattypes = {val}
end
for i, cattype_spec in ipairs(cattypes) do
if cattype_spec:find(":") then
local cattype, sort_base = cattype_spec:match("^(.-):(.*)$")
sort_base = sort_base:gsub("_", " ")
cattypes[i] = {name = cattype, sort_base = sort_base}
end
end
return cattypes
end
local function get_lang_or_script(code)
return code == "-" and code or
require("Module:languages").getByCode(code, nil, "allow etym") or
require("Module:languages").getByCode(code .. "-pro", nil, "allow etym") or
require("Module:scripts").getByCode(code)
end
local function obj_code(obj)
if obj == "-" then
return obj
end
return obj:getCode()
end
local function get_prefixed_obj(after_prefix)
return after_prefix:match("^(%a[%a-]*%a):(.+)$")
end
local function get_suffixed_obj(after_prefix)
local rest, objcode = after_prefix:match("^(.+)/(%a[%a-]*%a)$")
return objcode, rest
end
local pseudo_namespace_templates = {
{"R:", {
category_type = "reference",
get_obj_and_rest = get_prefixed_obj,
}},
{"RQ:", {
category_type = "quotation",
get_obj_and_rest = get_prefixed_obj,
}},
{"U:", {
category_type = "usage",
get_obj_and_rest = get_prefixed_obj,
}},
{"list:", {
category_type = "list",
get_obj_and_rest = get_suffixed_obj,
}},
{"table:", {
category_type = "auto-table",
get_obj_and_rest = get_suffixed_obj,
}},
}
local function infer_lang_or_script_code_and_category_type(name)
if name:find(":") then -- only check for pseudo-namespace prefix when a colon is present
for _, pseudo_namespace_spec in ipairs(pseudo_namespace_templates) do
local prefix, props = unpack(pseudo_namespace_spec)
local after_prefix = name:match("^" .. prefix .. "(.+)$")
if after_prefix then
local objcode, rest = props.get_obj_and_rest(after_prefix)
local obj
if objcode then
obj = get_lang_or_script(objcode) -- may return nil
if not obj then
rest = after_prefix
end
else
rest = after_prefix
end
return obj, rest, props.category_type
end
end
end
local hyphen_parts = split(name, "%-")
for i = #hyphen_parts - 1, 1, -1 do
local code = concat(hyphen_parts, "-", 1, i)
local obj = get_lang_or_script(code)
if obj then
local rest = concat(hyphen_parts, "-", i + 1)
return obj, rest, nil
end
end
return nil, name, nil
end
local function process_sortbase_specs(sortbase, specs)
for _, spec in ipairs(specs) do
local from, to = unpack(spec)
sortbase = ugsub(sortbase, "^" .. from .. "$", to)
end
return sortbase
end
local function template_name_minus_langcode_to_category_type(name)
for _, type_spec in ipairs(detect_category_type_list) do
local pattern, intended_type = unpack(type_spec)
if ufind(name, "^" .. pattern .. "$") then
return intended_type
end
end
return nil
end
local function compute_categories_for_template(full_template_name, template_name_minus_langcode, category_type,
langs_or_scripts)
local overriding_sort_base
if type(category_type) == "table" then
overriding_sort_base = category_type.sort_base
category_type = category_type.name
end
if not category_type_to_category_map[category_type] then
error("Unrecognized template category type: " .. category_type)
end
local props = category_type_to_category_map[category_type]
if not props.cats then
error("Internal error: No categories given for category type: " .. category_type)
end
local categories = {}
for _, catspec in ipairs(props.cats) do
if type(catspec) == "string" then
catspec = {name = catspec}
end
local rawcat = catspec.name:match("^Kategori:(.*)")
if rawcat then
local sortbase
-- User-specified sort base does not apply to raw categories, which have a different sort key format
-- than language-specific categories.
if not catspec.sort then
if langs_or_scripts then
local langnames = {}
for _, lang_or_sc in ipairs(langs_or_scripts) do
insert(langnames, lang_or_sc:getCanonicalName()) -- FIXME: or lang:getFullName()?
end
sortbase = concat(langnames, ",")
else
sortbase = full_template_name
end
elseif is_callable(catspec.sort) then
sortbase = catspec.sort(full_template_name, langs_or_scripts)
else
sortbase = process_sortbase_specs(full_template_name, catspec.sort)
end
insert(categories, {cat = rawcat, lang = und_lang, sort_base = sortbase})
elseif langs_or_scripts then
for _, lang_or_sc in ipairs(langs_or_scripts) do
local sortbase
if overriding_sort_base then
sortbase = overriding_sort_base
elseif not catspec.sort then
sortbase = template_name_minus_langcode
elseif is_callable(catspec.sort) then
sortbase = catspec.sort(template_name_minus_langcode, lang_or_sc)
else
sortbase = process_sortbase_specs(template_name_minus_langcode, catspec.sort)
end
if lang_or_sc:hasType("script") then
insert(categories, {
cat = ("Templat %s"):format(lang_or_sc:getCategoryName()), lang = und_lang, sc = lang_or_sc,
sort_base = sortbase,
})
else
local cat
local full_label = catspec.name:match("^label:(.*)$")
local lang_name = catspec.allow_etym and lang_or_sc:getCanonicalName() or lang_or_sc:getFullName()
if full_label then
cat = ("%s bahasa %s"):format(full_label, lang_name)
else
cat = ("Templat %s bahasa %s"):format(catspec.name, lang_name)
end
insert(categories, {
cat = cat, lang = lang_or_sc:getFull(), sort_base = sortbase,
})
end
end
end
end
if not categories[1] then
error(("No categories generated for template [[Template:%s]] with category type '%s'"):format(
full_template_name, category_type))
end
return categories
end
--[==[
Main entry point.
]==]
function export.categorize(frame)
local params = {
[1] = {}, -- comma-separated list of category types; by default, inferred from template name
lang = {}, -- comma-separated list of languages; by default, inferred from template name
["pagename"] = {}, -- for testing
["json"] = {type = "boolean"}, -- for testing
}
local parent_args = frame:getParent().args
args = require("Module:parameters").process(parent_args, params)
local category_specs = {}
local function insert_cat(cat, sort_key)
for _, existing_cat in ipairs(category_specs) do
if existing_cat.cat == cat then
return
end
end
insert(category_specs, {cat = cat, sort_key = sort_key})
end
local pagename = args.pagename
if not pagename then
title = mw.title.getCurrentTitle()
pagename = title.fullText
end
if pagename:find("/doc$") or pagename:find("/doc/") then
return ""
end
if pagename:find("^Templat:Pengguna:") then
insert_cat("Templat kotak pasir pengguna", (pagename:gsub("^Templat:Pengguna:", "")))
elseif pagename:find("^Pengguna:") then
insert_cat("Templat kotak pasir pengguna", (pagename:gsub("^Pengguna:", "")))
else
if not pagename:find("^Templat:") then
error(("This template should only be used in the Template namespace, not on page '%s'"):format(pagename))
end
local full_template_name = pagename:gsub("^Templat:", "")
local rootpage = full_template_name:gsub("/.*", "")
if full_template_name:find("/sandbox") then
insert_cat("Templat kotak pasir", full_template_name)
elseif full_template_name:find("^sandbox/") then
insert_cat("Templat kotak pasir", full_template_name:gsub("^sandbox/", ""))
else
local template_objs
if args.lang == "-" then
template_objs = false
elseif args.lang then
template_objs = {}
for _, code in ipairs(split(args.lang, ",")) do
-- We need to have an indicator of families because we allow bare family codes to stand for proto-languages.
if code:find("^fam:") then
code = code:gsub("^fam:", "")
local family = require("Module:families").getByCode(code) or
error(("Unrecognized family code '%s' in [[Module:template cat]]"):format(code))
local descendants = family:getDescendantCodes()
for _, desc in ipairs(descendants) do
local obj = get_lang_or_script(desc)
if obj then
-- make sure we skip families without proto-languages
insert(template_objs, obj)
end
end
else
local obj = get_lang_or_script(code)
if not obj then
error(("Unrecognized language or script code '%s'"):format(code))
end
insert(template_objs, obj)
end
end
end
local cattypes
if args[1] then
cattypes = split_on_comma_and_split_off_sort_base(args[1])
end
local inferred_obj, inferred_rest, inferred_cattype =
infer_lang_or_script_code_and_category_type(rootpage)
if template_objs == nil or not cattypes then
if template_objs == nil then
if not inferred_obj then
if not inferred_cattype then
error(("Unable to infer language or script from template root page '%s' for template '%s'; specify lang/script and type explicitly"):format(
rootpage, pagename))
else
error(("Unable to infer language or script from template root page '%s' for template '%s', inferred category type '%s'; specify lang/script explicitly"):format(
rootpage, pagename, inferred_cattype))
end
else
template_objs = {inferred_obj}
end
end
if not cattypes then
inferred_cattype = inferred_cattype or
template_name_minus_langcode_to_category_type(inferred_rest)
if not inferred_cattype then
error(("Unable to infer template category type from template remainder (after stripping langcode) '%s' for template '%s'; specify type explicitly"):format(
inferred_rest, pagename))
end
cattypes = {inferred_cattype}
end
end
for _, cattype in ipairs(cattypes) do
local cats = compute_categories_for_template(full_template_name, inferred_rest, cattype, template_objs)
for _, cat in ipairs(cats) do
insert(category_specs, cat)
end
end
end
end
-- We are returning categories for templates or user-space pages, so we need to force the output.
local retval = format_categories(category_specs, nil, nil, nil, "force_output")
if args.json then
return require("Module:JSON").toJSON {
category_specs = category_specs,
retval = mw.text.nowiki(retval),
}
else
return retval
end
end
--[==[Table used in the documentation to {{tl|template cat}}.]==]
function export.pattern_to_category_type_table()
local parts = {}
local function ins(text)
insert(parts, text)
end
ins('{|class="wikitable"')
ins("! Corak !! Jenis kategori terinferensi")
for _, detect_spec in ipairs(detect_category_type_list) do
local pattern, category_type = unpack(detect_spec)
ins("|-")
ins(("| <code>%s</code> || <code>%s</code>"):format(pattern, category_type))
end
ins("|}")
return concat(parts, "\n")
end
--[==[Table used in the documentation to {{tl|template cat}}.]==]
function export.category_type_to_category_table()
local parts = {}
local function ins(text)
insert(parts, text)
end
local category_types = {}
local category_type_to_aliases = {}
for _, category_type_to_category_spec in ipairs(category_type_to_category) do
local category_type, props = unpack(category_type_to_category_spec)
insert(category_types, category_type)
category_type_to_aliases[category_type] = {}
if props.aliases then
for _, alias in ipairs(props.aliases) do
insert(category_type_to_aliases[category_type], alias)
end
table.sort(category_type_to_aliases[category_type])
end
end
table.sort(category_types)
local function get_category_type_categories(category_type)
local cats = {}
for _, catspec in ipairs(category_type_to_category_map[category_type].cats) do
if type(catspec) == "string" then
catspec = {name = catspec}
end
local cat = catspec.name
if cat:find("^Kategori:") then
insert(cats, ("<code>%s</code>"):format((cat:gsub("^Kategori:", ""))))
elseif cat:find("^label:") then
insert(cats, ("<code><var>LANG</var> %s</code>"):format((cat:gsub("^label:", ""))))
else
insert(cats, ("<code><var>LANG</var> %s templates</code>"):format(cat))
end
end
return concat(cats, ", ")
end
ins('{|class="wikitable"')
ins("! Jenis kategori !! Jenis kategori berkanun !! Kategori")
for _, category_type in ipairs(category_types) do
ins("|-")
ins(("| <code>'''%s'''</code> || ''(same)'' || <code>%s</code>"):format(
category_type, get_category_type_categories(category_type)))
for _, alias in ipairs(category_type_to_aliases[category_type]) do
ins("|-")
ins(("| <code>%s</code> || <code>'''%s'''</code> || <code>%s</code>"):format(
alias, category_type, get_category_type_categories(category_type)))
end
end
ins("|}")
return concat(parts, "\n")
end
return export
p542onnlv8577u86hh2r3zbjwzj71lk
Wikikamus:dtp/moningkukurak
4
119950
344634
2026-06-07T15:37:58Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata kerja=== {{inti|{{safesubst:ROOTPAGENAME}}|kata kerja}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh bunyi ayam betina yang baru mengeluarkan telur/ bertelur'
344634
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata kerja===
{{inti|dtp|kata kerja}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh bunyi ayam betina yang baru mengeluarkan telur/ bertelur
lx5h2rveelwohpl6wzdzeqkz00k1ktr
Wikikamus:dtp/miyak-iyak
4
119951
344635
2026-06-07T15:39:50Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata kerja=== {{inti|{{safesubst:ROOTPAGENAME}}|kata kerja}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh anak ayam bercicik /Bunyi anak ayam'
344635
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata kerja===
{{inti|dtp|kata kerja}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh anak ayam bercicik /Bunyi anak ayam
8f08yzaf2ngj8m6gm6n1ju1dzfxvr5c
Wikikamus:dtp/miwos-kiwos
4
119952
344636
2026-06-07T15:41:09Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata kerja=== {{inti|{{safesubst:ROOTPAGENAME}}|kata kerja}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh ekor yang bergoyang-goyang'
344636
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata kerja===
{{inti|dtp|kata kerja}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh ekor yang bergoyang-goyang
412qz9u53xk7z4bmvkj9za8pzlln2vf
Wikikamus:dtp/miragang-ragang
4
119953
344637
2026-06-07T15:43:11Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata sifat=== {{inti|{{safesubst:ROOTPAGENAME}}|kata sifat}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh pipi yang menjadi merah kerana rasa malu'
344637
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata sifat===
{{inti|dtp|kata sifat}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh pipi yang menjadi merah kerana rasa malu
jqma7hq8tpffdgknpwumjgoofqu6oz3
Wikikamus:dtp/soroiso-iso
4
119954
344638
2026-06-07T15:45:26Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata sifat=== {{inti|{{safesubst:ROOTPAGENAME}}|kata sifat}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh satu persatu'
344638
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata sifat===
{{inti|dtp|kata sifat}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh satu persatu
earynfb8ofyqhbelyhwhb3lwqq5251c
Wikikamus:dtp/monorob
4
119955
344639
2026-06-07T15:46:26Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata kerja=== {{inti|{{safesubst:ROOTPAGENAME}}|kata kerja}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh membakar'
344639
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata kerja===
{{inti|dtp|kata kerja}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh membakar
sjpcq1dastzw1lslfxjhhvg2ifb3ulb
Wikikamus:dtp/randawi
4
119956
344640
2026-06-07T15:48:54Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata nama=== {{inti|{{safesubst:ROOTPAGENAME}}|kata nama}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh jari manis'
344640
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata nama===
{{inti|dtp|kata nama}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh jari manis
6g6zicx4nu5523m4xcaif7bjzybp0hb
Wikikamus:dtp/sobul
4
119957
344641
2026-06-07T15:51:35Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Frasa=== {{inti|{{safesubst:ROOTPAGENAME}}|frasa}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh tunas/ cembahan'
344641
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Frasa===
{{inti|dtp|frasa}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh tunas/ cembahan
9ccnj51bec6ao5hhga87qwppso4i4fg
Wikikamus:dtp/arahung
4
119958
344642
2026-06-07T15:52:31Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata sifat=== {{inti|{{safesubst:ROOTPAGENAME}}|kata sifat}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh terpengaruh'
344642
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata sifat===
{{inti|dtp|kata sifat}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh terpengaruh
hhgduywie6v2zsmy1i4s31h6fu8728l
Wikikamus:dtp/rogon/soitan
4
119959
344643
2026-06-07T15:53:49Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata nama=== {{inti|{{safesubst:ROOTPAGENAME}}|kata nama}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh syaitan/iblis'
344643
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata nama===
{{inti|dtp|kata nama}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh syaitan/iblis
4hjtxswkswk7xf3xy3dvtyymdhwzms5
Wikikamus:dtp/ulit/ulito
4
119960
344644
2026-06-07T15:55:21Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata nama=== {{inti|{{safesubst:ROOTPAGENAME}}|kata nama}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh ulang/diulang'
344644
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata nama===
{{inti|dtp|kata nama}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh ulang/diulang
2bil04h4tf9dqvzo9e8d2ou28i9tuym
Wikikamus:dtp/minggarang
4
119961
344645
2026-06-07T15:56:17Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata kerja=== {{inti|{{safesubst:ROOTPAGENAME}}|kata kerja}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh berteriak/meronta'
344645
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata kerja===
{{inti|dtp|kata kerja}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh berteriak/meronta
r2p8zf316cul3u4zo2ti5gsu4lmvd8k
Wikikamus:dtp/kinongoho
4
119962
344646
2026-06-07T15:57:57Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Frasa=== {{inti|{{safesubst:ROOTPAGENAME}}|frasa}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh dengarkan'
344646
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Frasa===
{{inti|dtp|frasa}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh dengarkan
im4332invv8nwxx5bn9sbhgdnadbt4t
Wikikamus:dtp/korohian
4
119963
344647
2026-06-07T15:58:45Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Frasa=== {{inti|{{safesubst:ROOTPAGENAME}}|frasa}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh disukai'
344647
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Frasa===
{{inti|dtp|frasa}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh disukai
nxw6mcfceafhc8c3djmuk4vbw74jy5u
Wikikamus:dtp/pomitanan
4
119964
344648
2026-06-07T16:00:10Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Kata kerja=== {{inti|{{safesubst:ROOTPAGENAME}}|kata kerja}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh ilustrasi/ contoh'
344648
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Kata kerja===
{{inti|dtp|kata kerja}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh ilustrasi/ contoh
8mlywoaebr3zglvuea729pvfko2cexw
Wikikamus:dtp/kamanangan
4
119965
344649
2026-06-07T16:01:23Z
Methia26
10706
Mencipta laman baru dengan kandungan '==Bahasa {{bahasa|{{safesubst:ROOTPAGENAME}}}}== ===Frasa=== {{inti|{{safesubst:ROOTPAGENAME}}|frasa}} # {{label|1={{safesubst:ROOTPAGENAME}}|2=dialek|3=Bundu,Liwan}} contoh Kemenangan/ kejayaan'
344649
wikitext
text/x-wiki
==Bahasa {{bahasa|dtp}}==
===Frasa===
{{inti|dtp|frasa}}
# {{label|1=dtp|2=dialek|3=Bundu,Liwan}} contoh Kemenangan/ kejayaan
s66cgu8s9v7mggdnrmbrwzjuayf0d54
Templat:pagename
10
119966
344655
2026-06-08T09:06:11Z
Hakimi97
2668
Mencipta laman baru dengan kandungan '<includeonly>{{safesubst:<noinclude/>#invoke:pages/templates|pagename_t}}</includeonly><noinclude><!-- -->{{documentation}}</noinclude>'
344655
wikitext
text/x-wiki
<includeonly>{{safesubst:<noinclude/>#invoke:pages/templates|pagename_t}}</includeonly><noinclude><!--
-->{{documentation}}</noinclude>
5eyxwd521bez42cgt9zhe8dipmghpbi
Templat:R:Nihon Kokugo Daijiten 2
10
119967
344658
2026-06-08T09:08:21Z
Hakimi97
2668
Hakimi97 telah memindahkan laman [[Templat:R:Nihon Kokugo Daijiten 2]] ke [[Templat:R:Nihon Kokugo Daijiten Concise]]
344658
wikitext
text/x-wiki
#LENCONG [[Templat:R:Nihon Kokugo Daijiten Concise]]
fmxi8ykbyfrvlkrydk3y878zmdq353h