Wikikamus
mswiktionary
https://ms.wiktionary.org/wiki/Laman_Utama
MediaWiki 1.44.0-wmf.2
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
rakan
0
4133
190046
106402
2024-11-12T03:37:50Z
Rombituon
6133
/* Takrifan */
190046
wikitext
text/x-wiki
{{ms}}
===Takrifan===
{{ms-kn}}
# seseorang yang rapat, [[sahabat]], [[handai]], [[taulan]], [[teman]].
#* Rakan baik saya selalu berada di samping saya.
# [[kawan]] dalam satu kegiatan.
#* Dia rakan saya dalam persatuan itu.
===Etimologi===
Dari bahasa/perkataan Melayu.
===Terbitan===
berakan: bersahabat, berteman.
===Sebutan===
{{dewan|ra|kan}}
===Terjemahan===
:Lihat [[kawan#terjemahan|kawan]].
===Tulisan Jawi===
{{ARchar|راكن}}
===Tesaurus===
* (sinonim): [[kawan]], [[sahabat]].
* (antonim): [[musuh]].
tayhz95xzrsl1l13c30wb1s4hho7k6b
sulit
0
4182
190045
106509
2024-11-12T03:36:54Z
Rombituon
6133
190045
wikitext
text/x-wiki
{{ms}}
===Takrifan===
{{ms-ks}}
# [[rahsia]], ter[[sembunyi]].
#* Dia membeli kasut itu secara sulit.
# tidak [[terang]]-terangan, tersembunyi.
#* Tempat ini sulit dari pandangan awam.
# [[gelap]], [[haram]].
#* Persatuan baru itu sulit dan tidak sah.
# susah didapati, jarang ditemui.
#* Sulitnya mencari kasut seperti kasut lama saya.
# [[sukar]], [[rumit]], [[susah]].
#* Masalah ini akan makin sulit jika tidak diselesaikan secepat mungkin.
====Kata terbitan====
* kesulitan: perihal suli, kerumitan, kesukaran, kesusahan.
* menyulitkan: menjadikan sulit
*# merumitkan, menyukarkan, menyusahkan.
*# merahsiakan.
* mempersulit: menjadikan lebih sulit.
===Etimologi===
Dari bahasa/perkataan Melayu.
===Sebutan===
{{dewan|su|lit}}
===Tulisan Jawi===
{{ARchar|سوليت}}
===Terjemahan===
{{atas}}
* Inggeris: secret, secluded, difficult
{{bawah}}
===Tesaurus===
; Sinonim: [[sembunyi|tersembunyi]], [[susah]].
; Antonim: [[terang]], [[senang]].
{{id}}
* Lihat takrifan bahasa Melayu.
30xw5p9k95cdpzcp4riv1xzov5z1c45
datang
0
5152
189969
179290
2024-11-11T12:12:28Z
Rombituon
6133
/* Takrifan */
189969
wikitext
text/x-wiki
{{ms}}
===Takrifan===
{{ms-kk}}
# [[sampai]], [[tiba]] (di sesuatu tempat).
#: Hari telah jauh malam, tetapi Ali tidak datang juga.
# bergerak [[hampir|menghampiri]] seseorang atau sesuatu tempat.
#: Ali melambai-lambaikan tangan dan terus datang ke tempat kami sedang duduk.
# [[pergi]] (berjalan, bergerak dsb) sehingga sampai di sesuatu tempat.
#: Saya akan mencuba datang dua kali seminggu.
# [[asal|berasal]] (dari).
#: Ali datang dari Kedah.
# [[hingga]], sampai (berkenaan jangka masa).
#: Adapun tempat Cincin yang Satu itu dibuat, Gunung Doomlah namanya datang sekarang.
# [[muncul]], [[timbul]].
#: Tiba-tiba datang suatu fikiran di kepalanya; datang seleranya hendak makan.
====Kata majmuk====
#'''(yang) akan datang''': yang akan tiba, hadapan, kemudian.(berkenaan jangka masa); masa datang kelak, kemudian, kemudian nanti; minggu datang minggu hadapan;
===Etimologi===
<!--Dari ?-->
===Terbitan===
* kedatangan: perihal datang.
* pendatang: orang asing yang datang.
* mendatangi: membawa; menyebabkan.
* mendatangkan: mengunjungi; menimpa.
* pendatangan: perihal mendatangi atau mendatangkan.
===Sebutan===
{{dewan|da|tang}}
===Terjemahan===
{{ter-atas|mendekati}}
* Arab: {{ARchar|جاء}} (jā’a)
* Basque: etorri
* Bavaria: kemma
* Belanda: komen
* Cina: [[來]], [[来]] (lái)
* Czech: přijít
* Esperanto: veni
* Estonia: tulema
* Farsi: {{FAchar|آمدن}} (āmædæn)
* Finland: tulla
* Gaelik Scot: thig
* Greek: έρχομαι (érkhomai), έλα (ela)
* Ibrani: לבוא (lavó)
* Hindi: आना (ānā)
* Hungary: jön
* Ido: venar
* Inggeris: come
* Inggeris Lama: cuman]
* Ireland: tar
* Itali: venire
* Jepun: [[来る]] (くる, kúru)
{{ter-tengah}}
* Jerman: kommen
* Korea: [[오다]] (oda)
* Kurdi: hatin, {{KUchar|هاتن}}
* Latin: venire
* Manchu: jimbi
* Mongolia: ирэх (irekh)
* Pashto: {{PSchar|راتلل}}
* Perancis: venir
* Poland: przychodzić
* Portugis: vir
* Rohingya: ai
* Romania: veni
* Romansch: vegnir
* Rusia: приходить / прийти (prikhodít’, prijtí)
* Slovenia: priti
* Sepanyol: venir
* Sweden: komma
* Tatar Crimea: kelmek
* Thai: {{Thai|มา}} (maa)
* Turki: gelmek
* Urdu: {{URchar|آنا}} (ānā)
* Yiddish: קומען (komen)
{{ter-bawah}}
* Iban : Datai
===Tulisan Jawi===
{{ARchar|داتڠ}}
{{id}}
* Lihat takrifan bahasa Melayu.
r1uyxfcc4gwoa3f5ohj95gn0kam3uom
tropika
0
5643
190058
106583
2024-11-12T05:33:48Z
Mirlim
8057
kemas kini
190058
wikitext
text/x-wiki
{{wikipedia|Tropika}}
{{ms}}
[[Fail:World map torrid.svg|thumb|250px|Kawasan tropika diwarnakan merah]]
===Takrifan===
{{ms-kn}}
# [[kawasan]] yang letaknya berhampiran dengan garisan [[Khatulistiwa]] (antara garisan Jadi dan garisan Sartan) dan mempunyai iklim [[panas]] sepanjang tahun.
===Etimologi===
Daripada bahasa {{E.}} ''tropics''.
===Sebutan===
{{dewan|tro|pi|ka}}
* (Johor-Selangor) : {{IPA|ms|/trɔˈpiˈkə/}}
* (Riau-Lingga) {{IPA|ms|/trɔˈpiˈka/}}
===Tulisan Jawi===
{{ARchar|تروڤيكا}}
===Terjemahan===
{{atas}}
* Indonesia: tropis
* Inggeris: tropics
* Jerman: Tropen {{p}}
{{tengah}}
* Rusia: тропики (trópiki) {{m|ru}}
* Tagalog: tropiko
* Vietnam: nhiệt đới
{{bawah}}
===Tesaurus===
; Sinonim: [[Khatulistiwa]].
mpx56cb7rifr9bteh7bzdf7by2rg2vt
Modul:languages
828
8666
190020
185067
2024-11-12T02:22:17Z
Hakimi97
2668
190020
Scribunto
text/plain
local require = require
local m_str_utils = require("Modul:string utilities")
local m_table = require("Modul:table")
local mw = mw
local string = string
local table = table
local ustring = mw.ustring
local char = string.char
local check_object = require("Modul:utilities").check_object
local concat = table.concat
local decode_entities = m_str_utils.decode_entities
local decode_uri = m_str_utils.decode_uri
local find = string.find
local floor = math.floor
local gmatch = string.gmatch
local gsub = string.gsub
local insert = table.insert
local ipairs = ipairs
local list_to_set = m_table.listToSet
local load_data = mw.loadData
local match = string.match
local next = next
local pairs = pairs
local pattern_escape = m_str_utils.pattern_escape
local remove = table.remove
local remove_duplicates = m_table.removeDuplicates
local replacement_escape = m_str_utils.replacement_escape
local select = select
local setmetatable = setmetatable
local shallowcopy = m_table.shallowcopy
local split = m_str_utils.split
local type = type
local ugsub = ustring.gsub
local ulen = m_str_utils.len
local ulower = m_str_utils.lower
local umatch = ustring.match
local uupper = m_str_utils.upper
-- Loaded as needed by findBestScript.
local Hans_chars
local Hant_chars
local export = {}
--[=[
This module implements fetching of language-specific information and processing text in a given language.
There are two types of languages: full languages and etymology-only languages. The essential difference is that only
full languages appear in L2 headings in vocabulary entries, and hence categories like [[:Category:French nouns]] exist
only for full languages. Etymology-only languages have either a full language or another etymology-only language as
their parent (in the parent-child inheritance sense), and for etymology-only languages with another etymology-only
language as their parent, a full language can always be derived by following the parent links upwards. For example,
"Canadian French", code 'fr-CA', is an etymology-only language whose parent is the full language "French", code 'fr'.
An example of an etymology-only language with another etymology-only parent is "Northumbrian Old English", code
'ang-nor', which has "Anglian Old English", code 'ang-ang' as its parent; this is an etymology-only language whose
parent is "Old English", code "ang", which is a full language. (This is because Northumbrian Old English is considered
a variety of Anglian Old English.) Sometimes the parent is the "Undetermined" language, code 'und'; this is the case,
for example, for "substrate" languages such as "Pre-Greek", code 'qsb-grc', and "the BMAC substrate", code 'qsb-bma'.
It is important to distinguish language ''parents'' from language ''ancestors''. The parent-child relationship is one
of containment, i.e. if X is a child of Y, X is considered a variety of Y. On the other hand, the ancestor-descendant
relationship is one of descent in time. For example, "Classical Latin", code 'la-cla', and "Late Latin", code 'la-lat',
are both etymology-only languages with "Latin", code 'la', as their parents, because both of the former are varieties
of Latin. However, Late Latin does *NOT* have Classical Latin as its parent because Late Latin is *not* a variety of
Classical Latin; rather, it is a descendant. There is in fact a separate 'ancestors' field that is used to express the
ancestor-descendant relationship, and Late Latin's ancestor is given as Classical Latin. It is also important to note
that sometimes an etymology-only language is actually the conceptual ancestor of its parent language. This happens,
for example, with "Old Italian" (code 'roa-oit'), which is an etymology-only variant of full language "Italian" (code
'it'), and with "Old Latin" (code 'itc-ola'), which is an etymology-only variant of Latin. In both cases, the full
language has the etymology-only variant listed as an ancestor. This allows a Latin term to inherit from Old Latin
using the {{tl|inh}} template (where in this template, "inheritance" refers to ancestral inheritance, i.e. inheritance
in time, rather than in the parent-child sense); likewise for Italian and Old Italian.
Full languages come in three subtypes:
* {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted in the
main namespace. There may also be reconstructed terms for the language, which are placed in the
{Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full languages
are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto and Volapük,
among others) are also allowed in the mainspace and considered regular languages.
* {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the
{Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed with
*. Languages such as Proto-Indo-European and Proto-Germanic are in this category.
* {appendix-constructed}: This language is attested but does not meet the additional requirements set out for
constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore be in
the Appendix namespace, but they are not reconstructed and therefore should not have *
prefixed in links. Most constructed languages are of this subtype.
Both full languages and etymology-only languages have a {Language} object associated with them, which is fetched using
the {getByCode} function in [[Module:languages]] to convert a language code to a {Language} object. Depending on the
options supplied to this function, etymology-only languages may or may not be accepted, and family codes may be
accepted (returning a {Family} object as described in [[Module:families]]). There are also separate {getByCanonicalName}
functions in [[Module:languages]] and [[Module:etymology languages]] to convert a language's canonical name to a
{Language} object (depending on whether the canonical name refers to a full or etymology-only language).
Textual strings belonging to a given language come in several different ''text variants'':
# The ''input text'' is what the user supplies in wikitext, in the parameters to {{tl|m}}, {{tl|l}}, {{tl|ux}},
{{tl|t}}, {{tl|lang}} and the like.
# The ''display text'' is the text in the form as it will be displayed to the user. This can include accent marks that
are stripped to form the entry text (see below), as well as embedded bracketed links that are variously processed
further. The display text is generated from the input text by applying language-specific transformations; for most
languages, there will be no such transformations. Examples of transformations are bad-character replacements for
certain languages (e.g. replacing 'l' or '1' to [[palochka]] in certain languages in Cyrillic); and for Thai and
Khmer, converting space-separated words to bracketed words and resolving respelling substitutions such as [กรีน/กฺรีน],
which indicate how to transliterate given words.
# The ''entry text'' is the text in the form used to generate a link to a Wiktionary entry. This is usually generated
from the display text by stripping certain sorts of diacritics on a per-language basis, and sometimes doing other
transformations. The concept of ''entry text'' only really makes sense for text that does not contain embedded links,
meaning that display text containing embedded links will need to have the links individually processed to get
per-link entry text in order to generate the resolved display text (see below).
# The ''resolved display text'' is the result of resolving embedded links in the display text (e.g. converting them to
two-part links where the first part has entry-text transformations applied, and adding appropriate language-specific
fragments) and adding appropriate language and script tagging. This text can be passed directly to MediaWiki for
display.
# The ''source translit text'' is the text as supplied to the language-specific {transliterate()} method. The form of
the source translit text may need to be language-specific, e.g Thai and Khmer will need the full unprocessed input
text, whereas other languages may need to work off the display text. [FIXME: It's still unclear to me how embedded
bracketed links are handled in the existing code.] In general, embedded links need to be removed (i.e. converted to
their "bare display" form by taking the right part of two-part links and removing double brackets), but when this
happens is unclear to me [FIXME]. Some languages have a chop-up-and-paste-together scheme that sends parts of the
text through the transliterate mechanism, and for others (those listed in {contiguous_substition} in
[[Module:languages/data]]) they receive the full input text, but preprocessed in certain ways. (The wisdom of this is
still unclear to me.)
# The ''transliterated text'' (or ''transliteration'') is the result of transliterating the source translit text.
Unlike for all the other text variants except the transcribed text, it is always in the Latin script.
# The ''transcribed text'' (or ''transcription'') is the result of transcribing the source translit text, where
"transcription" here means a close approximation to the phonetic form of the language in languages (e.g. Akkadian,
Sumerian, Ancient Egyptian, maybe Tibetan) that have a wide difference between the written letters and spoken form.
Unlike for all the other text variants other than the transliterated text, it is always in the Latin script.
Currently, the transcribed text is always supplied manually be the user; there is no such thing as a
{lua|transcribe()} method on language objects.
# The ''sort key'' is the text used in sort keys for determining the placing of pages in categories they belong to. The
sort key is generated from the pagename or a specified ''sort base'' by lowercasing, doing language-specific
transformations and then uppercasing the result. If the sort base is supplied and is generated from input text, it
needs to be converted to display text, have embedded links removed (i.e. resolving them to their right side if they
are two-part links) and have entry text transformations applied.
# There are other text variants that occur in usexes (specifically, there are normalized variants of several of the
above text variants), but we can skip them for now.
The following methods exist on {Language} objects to convert between different text variants:
# {makeDisplayText}: This converts input text to display text.
# {lua|makeEntryName}: This converts input or display text to entry text. [FIXME: This needs some rethinking. In
particular, {lua|makeEntryName} is sometimes called on display text (in some paths inside of [[Module:links]]) and
sometimes called on input text (in other paths inside of [[Module:links]], and usually from other modules). We need
to make sure we don't try to convert input text to display text twice, but at the same time we need to support
calling it directly on input text since so many modules do this. This means we need to add a parameter indicating
whether the passed-in text is input or display text; if that former, we call {lua|makeDisplayText} ourselves.]
# {lua|transliterate}: This appears to convert input text with embedded brackets removed into a transliteration.
[FIXME: This needs some rethinking. In particular, it calls {lua|processDisplayText} on its input, which won't work
for Thai and Khmer, so we may need language-specific flags indicating whether to pass the input text directly to the
language transliterate method. In addition, I'm not sure how embedded links are handled in the existing translit code;
a lot of callers remove the links themselves before calling {lua|transliterate()}, which I assume is wrong.]
# {lua|makeSortKey}: This converts entry text (?) to a sort key. [FIXME: Clarify this.]
]=]
local function track(page)
require("Modul:debug/track")("languages/" .. page)
return true
end
local function conditionalRequire(modname, useRequire)
return (useRequire and require or load_data)(modname)
end
local function normalize_code(code, useRequire)
return conditionalRequire("Modul:languages/data", useRequire).aliases[code] or code
end
-- Convert risky characters to HTML entities, which minimizes interference once returned (e.g. for "sms:a", "<!-- -->" etc.).
local function escape_risky_characters(text)
local encode_entities = require("Modul:string/encode entities")
-- Spacing characters in isolation generally need to be escaped in order to be properly processed by the MediaWiki software.
if umatch(text, "^%s*$") then
return encode_entities(text, text)
else
return encode_entities(text, "!#%&*+/:;<=>?@[\\]_{|}")
end
end
-- Temporarily convert various formatting characters to PUA to prevent them from being disrupted by the substitution process.
local function doTempSubstitutions(text, subbedChars, keepCarets, noTrim)
-- Clone so that we don't insert any extra patterns into the table in package.loaded. For some reason, using require seems to keep memory use down; probably because the table is always cloned.
local patterns = shallowcopy(require("Modul:languages/data/patterns"))
if keepCarets then
insert(patterns, "((\\+)%^)")
insert(patterns, "((%^))")
end
-- Ensure any whitespace at the beginning and end is temp substituted, to prevent it from being accidentally trimmed. We only want to trim any final spaces added during the substitution process (e.g. by a module), which means we only do this during the first round of temp substitutions.
if not noTrim then
insert(patterns, "^([\128-\191\244]*(%s+))")
insert(patterns, "((%s+)[\128-\191\244]*)$")
end
-- Pre-substitution, of "[[" and "]]", which makes pattern matching more accurate.
text = gsub(text, "%f[%[]%[%[", "\1")
:gsub("%f[%]]%]%]", "\2")
local i = #subbedChars
for _, pattern in ipairs(patterns) do
-- Patterns ending in \0 stand are for things like "[[" or "]]"), so the inserted PUA are treated as breaks between terms by modules that scrape info from pages.
local term_divider
pattern = gsub(pattern, "%z$", function(divider)
term_divider = divider == "\0"
return ""
end)
text = gsub(text, pattern, function(...)
local m = {...}
local m1New = m[1]
for k = 2, #m do
local n = i + k - 1
subbedChars[n] = m[k]
local byte2 = floor(n / 4096) % 64 + (term_divider and 128 or 136)
local byte3 = floor(n / 64) % 64 + 128
local byte4 = n % 64 + 128
m1New = gsub(m1New, pattern_escape(m[k]), "\244" .. char(byte2) .. char(byte3) .. char(byte4), 1)
end
i = i + #m - 1
return m1New
end)
end
text = gsub(text, "\1", "%[%[")
:gsub("\2", "%]%]")
return text, subbedChars
end
-- Reinsert any formatting that was temporarily substituted.
local function undoTempSubstitutions(text, subbedChars)
for i = 1, #subbedChars do
local byte2 = floor(i / 4096) % 64 + 128
local byte3 = floor(i / 64) % 64 + 128
local byte4 = i % 64 + 128
text = gsub(text, "\244[" .. char(byte2) .. char(byte2+8) .. "]" .. char(byte3) .. char(byte4), replacement_escape(subbedChars[i]))
end
text = gsub(text, "\1", "%[%[")
:gsub("\2", "%]%]")
return text
end
-- Check if the raw text is an unsupported title, and if so return that. Otherwise, remove HTML entities. We do the pre-conversion to avoid loading the unsupported title list unnecessarily.
local function checkNoEntities(self, text)
local textNoEnc = decode_entities(text)
if textNoEnc ~= text and self:loadData("Modul:links/data").unsupported_titles[text] then
return text
else
return textNoEnc
end
end
-- If no script object is provided (or if it's invalid or None), get one.
local function checkScript(text, self, sc)
if not check_object("script", true, sc) or sc:getCode() == "None" then
return self:findBestScript(text)
else
return sc
end
end
local function normalize(text, sc)
text = sc:fixDiscouragedSequences(text)
return sc:toFixedNFD(text)
end
-- Split the text into sections, based on the presence of temporarily substituted formatting characters, then iterate over each one to apply substitutions. This avoids putting PUA characters through language-specific modules, which may be unequipped for them.
local function iterateSectionSubstitutions(text, subbedChars, keepCarets, self, sc, substitution_data, function_name)
local fail, cats, sections = nil, {}
-- See [[Module:languages/data]].
if not find(text, "\244") or self:loadData("Modul:languages/data").contiguous_substitution[self._code] then
sections = {text}
else
sections = split(text, "\244[\128-\143][\128-\191]*", true)
end
for _, section in ipairs(sections) do
-- Don't bother processing empty strings or whitespace (which may also not be handled well by dedicated modules).
if gsub(section, "%s+", "") ~= "" then
local sub, sub_fail, sub_cats = require("Modul:languages/doSubstitutions")(section, self, sc, substitution_data, function_name)
-- Second round of temporary substitutions, in case any formatting was added by the main substitution process. However, don't do this if the section contains formatting already (as it would have had to have been escaped to reach this stage, and therefore should be given as raw text).
if sub and subbedChars then
local noSub
for _, pattern in ipairs(require("Modul:languages/data/patterns")) do
if match(section, pattern .. "%z?") then
noSub = true
end
end
if not noSub then
sub, subbedChars = doTempSubstitutions(sub, subbedChars, keepCarets, true)
end
end
if (not sub) or sub_fail then
text = sub
fail = sub_fail
cats = sub_cats or {}
break
end
text = sub and gsub(text, pattern_escape(section), replacement_escape(sub), 1) or text
if type(sub_cats) == "table" then
for _, cat in ipairs(sub_cats) do
insert(cats, cat)
end
end
end
end
-- Trim, unless there are only spacing characters, while ignoring any final formatting characters.
text = text and text:gsub("^([\128-\191\244]*)%s+(%S)", "%1%2")
:gsub("(%S)%s+([\128-\191\244]*)$", "%1%2")
-- Remove duplicate categories.
if #cats > 1 then
cats = remove_duplicates(cats)
end
return text, fail, cats, subbedChars
end
-- Process carets (and any escapes). Default to simple removal, if no pattern/replacement is given.
local function processCarets(text, pattern, repl)
local rep
repeat
text, rep = gsub(text, "\\\\(\\*^)", "\3%1")
until rep == 0
return text:gsub("\\^", "\4")
:gsub(pattern or "%^", repl or "")
:gsub("\3", "\\")
:gsub("\4", "^")
end
-- Remove carets if they are used to capitalize parts of transliterations (unless they have been escaped).
local function removeCarets(text, sc)
if not sc:hasCapitalization() and sc:isTransliterated() and text:find("^", 1, true) then
return processCarets(text)
else
return text
end
end
local Language = {}
function Language:loadData(modname)
return (self._useRequire and require or mw.loadData)(modname)
end
--[==[Returns the language code of the language. Example: {{code|lua|"fr"}} for French.]==]
function Language:getCode()
return self._code
end
--[==[Returns the canonical name of the language. This is the name used to represent that language on Wiktionary, and is guaranteed to be unique to that language alone. Example: {{code|lua|"French"}} for French.]==]
function Language:getCanonicalName()
local name = self._name
if name == nil then
name = self._rawData[1]
self._name = name
end
return name
end
--[==[
Return the display form of the language. The display form of a language, family or script is the form it takes when
appearing as the <code><var>source</var></code> in categories such as <code>English terms derived from
<var>source</var></code> or <code>English given names from <var>source</var></code>, and is also the displayed text
in {makeCategoryLink()} links. For full and etymology-only languages, this is the same as the canonical name, but
for families, it reads <code>"<var>name</var> languages"</code> (e.g. {"Indo-Iranian languages"}), and for scripts,
it reads <code>"<var>name</var> script"</code> (e.g. {"Arabic script"}).
]==]
function Language:getDisplayForm()
local form = self._displayForm
if form == nil then
form = self:getCanonicalName()
-- Add article and " substrate" to substrates that lack them.
if self:getFamilyCode() == "qfa-sub" then
if not (match(form, "") or match(form, "")) then
form = "substratum bahasa " .. form
end
if not match(form, "[Ss]ubstratum bahasa") then
form = "substratum bahasa " .. form
end
end
self._displayForm = form
end
return form
end
--[==[Returns the value which should be used in the HTML lang= attribute for tagged text in the language.]==]
function Language:getHTMLAttribute(sc, region)
local code = self._code
if not find(code, "-", 1, true) then
return code .. "-" .. sc:getCode() .. (region and "-" .. region or "")
end
local parent = self:getParent()
region = region or match(code, "%f[%u][%u-]+%f[%U]")
if parent then
return parent:getHTMLAttribute(sc, region)
end
-- TODO: ISO family codes can also be used.
return "mis-" .. sc:getCode() .. (region and "-" .. region or "")
end
--[==[Returns a table of the "other names" that the language is known by, excluding the canonical name. The names are not guaranteed to be unique, in that sometimes more than one language is known by the same name. Example: {{code|lua|{"Manx Gaelic", "Northern Manx", "Southern Manx"} }} for [[:Category:Manx language|Manx]]. If <code>onlyOtherNames</code> is given and is non-{{code|lua|nil}}, only names explicitly listed in the <code>otherNames</code> field are returned; otherwise, names listed under <code>otherNames</code>, <code>aliases</code> and <code>varieties</code> are combined together and returned. For example, for Manx, Manx Gaelic is listed as an alias, while Northern Manx and Southern Manx are listed as varieties. It should be noted that the <code>otherNames</code> field itself is deprecated, and entries listed there should eventually be moved to either <code>aliases</code> or <code>varieties</code>.]==]
function Language:getOtherNames(onlyOtherNames)
if #self._stack == 1 then
self:loadInExtraData()
end
return require("Modul:language-like").getOtherNames(self, onlyOtherNames)
end
--[==[Returns a table of the aliases that the language is known by, excluding the canonical name. Aliases are synonyms for the language in question. The names are not guaranteed to be unique, in that sometimes more than one language is known by the same name. Example: {{code|lua|{"High German", "New High German", "Deutsch"} }} for [[:Category:German language|German]].]==]
function Language:getAliases()
if #self._stack == 1 then
self:loadInExtraData()
end
return self._rawData.aliases or (self._extraData and self._extraData.aliases) or {}
end
--[==[
Return a table of the known subvarieties of a given language, excluding subvarieties that have been given
explicit etymology-only language codes. The names are not guaranteed to be unique, in that sometimes a given name
refers to a subvariety of more than one language. Example: {{code|lua|{"Southern Aymara", "Central Aymara"} }} for
[[:Category:Aymara language|Aymara]]. Note that the returned value can have nested tables in it, when a subvariety
goes by more than one name. Example: {{code|lua|{"North Azerbaijani", "South Azerbaijani", {"Afshar", "Afshari",
"Afshar Azerbaijani", "Afchar"}, {"Qashqa'i", "Qashqai", "Kashkay"}, "Sonqor"} }} for
[[:Category:Azerbaijani language|Azerbaijani]]. Here, for example, Afshar, Afshari, Afshar Azerbaijani and Afchar
all refer to the same subvariety, whose preferred name is Afshar (the one listed first). To avoid a return value
with nested tables in it, specify a non-{{code|lua|nil}} value for the <code>flatten</code> parameter; in that case,
the return value would be {{code|lua|{"North Azerbaijani", "South Azerbaijani", "Afshar", "Afshari",
"Afshar Azerbaijani", "Afchar", "Qashqa'i", "Qashqai", "Kashkay", "Sonqor"} }}.
]==]
function Language:getVarieties(flatten)
if #self._stack == 1 then
self:loadInExtraData()
end
return require("Modul:language-like").getVarieties(self, flatten)
end
--[==[Returns a table of types as a lookup table (with the types as keys).
The possible types are
* {language}: This is a language, either full or etymology-only.
* {full}: This is a "full" (not etymology-only) language, i.e. the union of {regular}, {reconstructed} and
{appendix-constructed}. Note that the types {full} and {etymology-only} also exist for families, so if you
want to check specifically for a full language and you have an object that might be a family, you should
use {{lua|hasType("language", "full")}} and not simply {{lua|hasType("full")}}.
* {etymology-only}: This is an etymology-only (not full) language, whose parent is another etymology-only
language or a full language. Note that the types {full} and {etymology-only} also exist for
families, so if you want to check specifically for an etymology-only language and you have an
object that might be a family, you should use {{lua|hasType("language", "etymology-only")}}
and not simply {{lua|hasType("etymology-only")}}.
* {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted
in the main namespace. There may also be reconstructed terms for the language, which are placed in
the {Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full
languages are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto
and Volapük, among others) are also allowed in the mainspace and considered regular languages.
* {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the
{Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed
with *. Languages such as Proto-Indo-European and Proto-Germanic are in this category.
* {appendix-constructed}: This language is attested but does not meet the additional requirements set out for
constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore
be in the Appendix namespace, but they are not reconstructed and therefore should
not have * prefixed in links.
]==]
function Language:getTypes()
local types = self._types
if types == nil then
types = {language = true}
if self:getFullCode() == self._code then
types.full = true
else
types["etymology-only"] = true
end
for t in gmatch(self._rawData.type, "[^,]+") do
types[t] = true
end
self._types = types
end
return types
end
--[==[Given a list of types as strings, returns true if the language has all of them.]==]
function Language:hasType(...)
local args, types = {...}, self:getTypes()
for i = 1, #args do
if not types[args[i]] then
return false
end
end
return true
end
--[==[Returns a table containing <code>WikimediaLanguage</code> objects (see [[Module:wikimedia languages]]), which represent languages and their codes as they are used in Wikimedia projects for interwiki linking and such. More than one object may be returned, as a single Wiktionary language may correspond to multiple Wikimedia languages. For example, Wiktionary's single code <code>sh</code> (Serbo-Croatian) maps to four Wikimedia codes: <code>sh</code> (Serbo-Croatian), <code>bs</code> (Bosnian), <code>hr</code> (Croatian) and <code>sr</code> (Serbian).
The code for the Wikimedia language is retrieved from the <code>wikimedia_codes</code> property in the data modules. If that property is not present, the code of the current language is used. If none of the available codes is actually a valid Wikimedia code, an empty table is returned.]==]
function Language:getWikimediaLanguages()
local wm_langs = self._wikimediaLanguageObjects
if wm_langs == nil then
local get_wm_lang = require("Modul:wikimedia languages").getByCode
local codes = self:getWikimediaLanguageCodes()
wm_langs = {}
for i = 1, #codes do
wm_langs[i] = get_wm_lang(codes[i])
end
self._wikimediaLanguageObjects = wm_langs
end
return wm_langs
end
function Language:getWikimediaLanguageCodes()
local wm_langs = self._wikimediaLanguageCodes
if wm_langs == nil then
wm_langs = self._rawData.wikimedia_codes
wm_langs = wm_langs and split(wm_langs, ",", true, true) or {self._code}
self._wikimediaLanguageCodes = wm_langs
end
return wm_langs
end
--[==[
Returns the name of the Wikipedia article for the language. `project` specifies the language and project to retrieve
the article from, defaulting to {"enwiki"} for the English Wikipedia. Normally if specified it should be the project
code for a specific-language Wikipedia e.g. "zhwiki" for the Chinese Wikipedia, but it can be any project, including
non-Wikipedia ones. If the project is the English Wikipedia and the property {wikipedia_article} is present in the data
module it will be used first. In all other cases, a sitelink will be generated from {:getWikidataItem} (if set). The
resulting value (or lack of value) is cached so that subsequent calls are fast. If no value could be determined, and
`noCategoryFallback` is {false}, {:getCategoryName} is used as fallback; otherwise, {nil} is returned. Note that if
`noCategoryFallback` is {nil} or omitted, it defaults to {false} if the project is the English Wikipedia, otherwise
to {true}. In other words, under normal circumstances, if the English Wikipedia article couldn't be retrieved, the
return value will fall back to a link to the language's category, but this won't normally happen for any other project.
]==]
function Language:getWikipediaArticle(noCategoryFallback, project)
project = project or "mswiki"
local cached_value
if project == "mswiki" then
cached_value = self._wikipedia_article
if cached_value == nil then
cached_value = self._rawData.wikipedia_article
end
else
-- If the project isn't enwiki, default to no category fallback, but this can be overridden by specifying the
-- value `false`.
if noCategoryFallback == nil then
noCategoryFallback = true
end
if self._non_en_wikipedia_articles == nil then
self._non_en_wikipedia_articles = {}
end
cached_value = self._non_en_wikipedia_articles[project]
end
if cached_value == nil then -- not false
if self:getWikidataItem() and mw.wikibase then
cached_value = mw.wikibase.sitelink(self:getWikidataItem(), project)
end
if not cached_value then
cached_value = false
end
end
-- Now cache the determined value.
if project == "mswiki" then
self._wikipedia_article = cached_value
else
self._non_en_wikipedia_articles[project] = cached_value
end
if not cached_value and not noCategoryFallback then
return gsub(self:getCategoryName(), "Bahasa kreol", "Kreol")
end
return cached_value or nil
end
function Language:makeWikipediaLink()
return "[[w:" .. self:getWikipediaArticle() .. "|" .. self:getCanonicalName() .. "]]"
end
--[==[Returns the Wikidata item id for the language or <code>nil</code>. This corresponds to the the second field in the data modules.]==]
function Language:getWikidataItem()
local item = self._WikidataItem
if item == nil then
item = self._rawData[2]
-- If the value is nil, it's cached as false.
item = item ~= nil and (type(item) == "number" and "Q" .. item or item) or false
self._WikidataItem = item
end
return item or nil
end
--[==[Returns a table of <code>Script</code> objects for all scripts that the language is written in. See [[Module:scripts]].]==]
function Language:getScripts()
local scripts = self._scriptObjects
if scripts == nil then
local codes = self:getScriptCodes()
if codes[1] == "All" then
scripts = self:loadData("Modul:scripts/data")
else
local get_script = require("Modul:scripts").getByCode
scripts = {}
for i = 1, #codes do
scripts[i] = get_script(codes[i], nil, nil, self._useRequire)
end
end
self._scriptObjects = scripts
end
return scripts
end
--[==[Returns the table of script codes in the language's data file.]==]
function Language:getScriptCodes()
local scripts = self._scriptCodes
if scripts == nil then
scripts = self._rawData[4]
if scripts then
local codes, n = {}, 0
for code in gmatch(scripts, "[^,]+") do
n = n + 1
-- Special handling of "Hants", which represents "Hani", "Hant" and "Hans" collectively.
if code == "Hants" then
codes[n] = "Hani"
codes[n + 1] = "Hant"
codes[n + 2] = "Hans"
n = n + 2
else
codes[n] = code
end
end
scripts = codes
else
scripts = {"None"}
end
self._scriptCodes = scripts
end
return scripts
end
--[==[Given some text, this function iterates through the scripts of a given language and tries to find the script that best matches the text. It returns a {{code|lua|Script}} object representing the script. If no match is found at all, it returns the {{code|lua|None}} script object.]==]
function Language:findBestScript(text, forceDetect)
local useRequire = self._useRequire
if not text or text == "" or text == "-" then
return require("Modul:scripts").getByCode("None", nil, nil, useRequire)
end
-- Differs from table returned by getScriptCodes, as Hants is not normalized into its constituents.
local codes = self._bestScriptCodes
if codes == nil then
codes = self._rawData[4]
codes = codes and split(codes, ",", true, true) or {"None"}
self._bestScriptCodes = codes
end
local first_sc = codes[1]
if first_sc == "All" then
return require("Modul:scripts").findBestScriptWithoutLang(text)
end
local get_script = require("Modul:scripts").getByCode
local codes_len = #codes
if not (forceDetect or first_sc == "Hants" or codes_len > 1) then
first_sc = get_script(first_sc, nil, nil, useRequire)
local charset = first_sc.characters
return charset and umatch(text, "[" .. charset .. "]") and first_sc or
get_script("None", nil, nil, useRequire)
end
-- Remove all formatting characters.
text = require("Modul:utilities").get_plaintext(text)
-- Remove all spaces and any ASCII punctuation. Some non-ASCII punctuation is script-specific, so can't be removed.
text = ugsub(text, "[%s!\"#%%&'()*,%-./:;?@[\\%]_{}]+", "")
if #text == 0 then
return get_script("None", nil, nil, useRequire)
end
-- Try to match every script against the text,
-- and return the one with the most matching characters.
local bestcount, bestscript, length = 0
for i = 1, codes_len do
local sc = codes[i]
-- Special case for "Hants", which is a special code that represents whichever of "Hant" or "Hans" best matches, or "Hani" if they match equally. This avoids having to list all three. In addition, "Hants" will be treated as the best match if there is at least one matching character, under the assumption that a Han script is desirable in terms that contain a mix of Han and other scripts (not counting those which use Jpan or Kore).
if sc == "Hants" then
local Hani = get_script("Hani", nil, nil, useRequire)
if not Hant_chars then
Hant_chars = self:loadData("Modul:zh/data/ts")
Hans_chars = self:loadData("Modul:zh/data/st")
end
local t, s, found = 0, 0
-- This is faster than using mw.ustring.gmatch directly.
for ch in gmatch(ugsub(text, "[" .. Hani.characters .. "]", "\255%0"), "\255(.[\128-\191]*)") do
found = true
if Hant_chars[ch] then
t = t + 1
if Hans_chars[ch] then
s = s + 1
end
elseif Hans_chars[ch] then
s = s + 1
else
t, s = t + 1, s + 1
end
end
if found then
if t == s then
return Hani
end
return get_script(t > s and "Hant" or "Hans", nil, nil, useRequire)
end
else
sc = get_script(sc, nil, nil, useRequire)
if not length then
length = ulen(text)
end
-- Count characters by removing everything in the script's charset and comparing to the original length.
local charset = sc.characters
local count = charset and length - ulen(ugsub(text, "[" .. charset .. "]+", "")) or 0
if count >= length then
return sc
elseif count > bestcount then
bestcount = count
bestscript = sc
end
end
end
-- Return best matching script, or otherwise None.
return bestscript or get_script("None", nil, nil, useRequire)
end
--[==[Returns a <code>Family</code> object for the language family that the language belongs to. See [[Module:families]].]==]
function Language:getFamily()
local family = self._familyObject
if family == nil then
family = self:getFamilyCode()
-- If the value is nil, it's cached as false.
family = family and require("Modul:families").getByCode(family, self._useRequire) or false
self._familyObject = family
end
return family or nil
end
--[==[Returns the family code in the language's data file.]==]
function Language:getFamilyCode()
local family = self._familyCode
if family == nil then
-- If the value is nil, it's cached as false.
family = self._rawData[3] or false
self._familyCode = family
end
return family or nil
end
function Language:getFamilyName()
local family = self._familyName
if family == nil then
family = self:getFamily()
-- If the value is nil, it's cached as false.
family = family and family:getCanonicalName() or false
self._familyName = family
end
return family or nil
end
--[==[Check whether the language belongs to `family` (which can be a family code or object). A list of objects can be given in place of `family`; in that case, return true if the language belongs to any of the specified families. Note that some languages (in particular, certain creoles) can have multiple immediate ancestors potentially belonging to different families; in that case, return true if the language belongs to any of the specified families.]==]
function Language:inFamily(...)
--check_object("family", nil, ...)
for _, family in ipairs{...} do
if type(family) == "table" then
family = family:getCode()
end
local self_family_code = self:getFamilyCode()
if not self_family_code then
return false
elseif self_family_code == family then
return true
end
local self_family = self:getFamily()
if self_family:inFamily(family) then
return true
-- If the family isn't a real family (e.g. creoles) check any ancestors.
elseif self_family:getFamilyCode() == "qfa-not" then
local ancestors = self:getAncestors()
for _, ancestor in ipairs(ancestors) do
if ancestor:inFamily(family) then
return true
end
end
end
end
return false
end
function Language:getParent()
local parent = self._parentObject
if parent == nil then
parent = self:getParentCode()
-- If the value is nil, it's cached as false.
parent = parent and export.getByCode(parent, nil, true, true, self._useRequire) or false
self._parentObject = parent
end
return parent or nil
end
function Language:getParentCode()
local parent = self._parentCode
if parent == nil then
-- If the value is nil, it's cached as false.
parent = self._rawData[5] or false
self._parentCode = parent
end
return parent or nil
end
function Language:getParentName()
local parent = self._parentName
if parent == nil then
parent = self:getParent()
-- If the value is nil, it's cached as false.
parent = parent and parent:getCanonicalName() or false
self._parentName = parent
end
return parent or nil
end
function Language:getParentChain()
local chain = self._parentChain
if chain == nil then
chain = {}
local parent, n = self:getParent(), 0
while parent do
n = n + 1
chain[n] = parent
parent = parent:getParent()
end
self._parentChain = chain
end
return chain
end
function Language:hasParent(...)
--check_object("language", nil, ...)
for _, otherlang in ipairs{...} do
for _, parent in ipairs(self:getParentChain()) do
if type(otherlang) == "string" then
if otherlang == parent:getCode() then return true end
else
if otherlang:getCode() == parent:getCode() then return true end
end
end
end
return false
end
--[==[
If the language is etymology-only, this iterates through parents until a full language or family is found, and the
corresponding object is returned. If the language is a full language, then it simply returns itself.
]==]
function Language:getFull()
local full = self._fullObject
if full == nil then
full = self:getFullCode()
full = full == self._code and self or
export.getByCode(full, nil, nil, nil, self._useRequire)
self._fullObject = full
end
return full
end
--[==[
If the language is an etymology-only language, this iterates through parents until a full language or family is
found, and the corresponding code is returned. If the language is a full language, then it simply returns the
language code.
]==]
function Language:getFullCode()
return self._fullCode or self._code
end
--[==[
If the language is an etymology-only language, this iterates through parents until a full language or family is
found, and the corresponding canonical name is returned. If the language is a full language, then it simply returns
the canonical name of the language.
]==]
function Language:getFullName()
local full = self._fullName
if full == nil then
full = self:getFull():getCanonicalName()
self._fullName = full
end
return full
end
--[==[Returns a table of <code class="nf">Language</code> objects for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==]
function Language:getAncestors()
if not self._ancestorObjects then
self._ancestorObjects = {}
local ancestors = shallowcopy(self:getAncestorCodes())
if #ancestors > 0 then
for _, ancestor in ipairs(ancestors) do
insert(self._ancestorObjects, export.getByCode(ancestor, nil, true, nil, self._useRequire))
end
else
local fam = self:getFamily()
local protoLang = fam and fam:getProtoLanguage() or nil
-- For the cases where the current language is the proto-language
-- of its family, or an etymology-only language that is ancestral to that
-- proto-language, we need to step up a level higher right from the
-- start.
if protoLang and (
protoLang:getCode() == self._code or
(self:hasType("etymology-only") and protoLang:hasAncestor(self))
) then
fam = fam:getFamily()
protoLang = fam and fam:getProtoLanguage() or nil
end
while not protoLang and not (not fam or fam:getCode() == "qfa-not") do
fam = fam:getFamily()
protoLang = fam and fam:getProtoLanguage() or nil
end
insert(self._ancestorObjects, protoLang)
end
end
return self._ancestorObjects
end
do
-- Avoid a language being its own ancestor via class inheritance. We only need to check for this if the language has inherited an ancestor table from its parent, because we never want to drop ancestors that have been explicitly set in the data.
-- Recursively iterate over ancestors until we either find self or run out. If self is found, return true.
local function check_ancestor(self, lang)
local codes = lang:getAncestorCodes()
if not codes then
return nil
end
for i = 1, #codes do
local code = codes[i]
if code == self._code then
return true
end
local anc = export.getByCode(code, nil, true, nil, self._useRequire)
if check_ancestor(self, anc) then
return true
end
end
end
--[==[Returns a table of <code class="nf">Language</code> codes for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==]
function Language:getAncestorCodes()
if self._ancestorCodes then
return self._ancestorCodes
end
local codes = self._rawData.ancestors
if not codes then
codes = {}
self._ancestorCodes = codes
return codes
end
codes = split(codes, ",", true, true)
self._ancestorCodes = codes
if (
#codes == 0 or
#self._stack == 1 or
self._stack[#self._stack].ancestors
) then
return codes
end
local i, code = 1
while i <= #codes do
code = codes[i]
if check_ancestor(self, self) then
remove(codes, i)
else
i = i + 1
end
end
return codes
end
end
--[==[Given a list of language objects or codes, returns true if at least one of them is an ancestor. This includes any etymology-only children of that ancestor. If the language's ancestor(s) are etymology-only languages, it will also return true for those language parent(s) (e.g. if Vulgar Latin is the ancestor, it will also return true for its parent, Latin). However, a parent is excluded from this if the ancestor is also ancestral to that parent (e.g. if Classical Persian is the ancestor, Persian would return false, because Classical Persian is also ancestral to Persian).]==]
function Language:hasAncestor(...)
--check_object("language", nil, ...)
local function iterateOverAncestorTree(node, func, parent_check)
local ancestors = node:getAncestors()
local ancestorsParents = {}
for _, ancestor in ipairs(ancestors) do
local ret = func(ancestor) or iterateOverAncestorTree(ancestor, func, parent_check)
if ret then return ret end
end
-- Check the parents of any ancestors. We don't do this if checking the parents of the other language, so that we exclude any etymology-only children of those parents that are not directly related (e.g. if the ancestor is Vulgar Latin and we are checking New Latin, we want it to return false because they are on different ancestral branches. As such, if we're already checking the parent of New Latin (Latin) we don't want to compare it to the parent of the ancestor (Latin), as this would be a false positive; it should be one or the other).
if not parent_check then
return nil
end
for _, ancestor in ipairs(ancestors) do
local ancestorParents = ancestor:getParentChain()
for _, ancestorParent in ipairs(ancestorParents) do
if ancestorParent:getCode() == self._code or ancestorParent:hasAncestor(ancestor) then
break
else
insert(ancestorsParents, ancestorParent)
end
end
end
for _, ancestorParent in ipairs(ancestorsParents) do
local ret = func(ancestorParent)
if ret then return ret end
end
end
local function do_iteration(otherlang, parent_check)
-- otherlang can't be self
if (type(otherlang) == "string" and otherlang or otherlang:getCode()) == self._code then
return false
end
repeat
if iterateOverAncestorTree(
self,
function(ancestor)
return ancestor:getCode() == (type(otherlang) == "string" and otherlang or otherlang:getCode())
end,
parent_check
) then
return true
elseif type(otherlang) == "string" then
otherlang = export.getByCode(otherlang, nil, true, nil, self._useRequire)
end
otherlang = otherlang:getParent()
parent_check = false
until not otherlang
end
local parent_check = true
for _, otherlang in ipairs{...} do
local ret = do_iteration(otherlang, parent_check)
if ret then
return true
end
end
return false
end
function Language:getAncestorChain()
if not self._ancestorChain then
self._ancestorChain = {}
local step = self
while true do
local ancestors = step:getAncestors()
step = #ancestors == 1 and ancestors[1] or nil
if not step then break end
insert(self._ancestorChain, 1, step)
end
end
return self._ancestorChain
end
local function fetch_descendants(self, format)
local languages = require("Modul:languages/code to canonical name")
local etymology_languages = require("Modul:etymology languages/code to canonical name")
local families = require("Modul:families/code to canonical name")
local descendants = {}
local family = self:getFamily()
-- Iterate over all three datasets.
for _, data in ipairs{languages, etymology_languages, families} do
for code in pairs(data) do
local lang = export.getByCode(code, nil, true, true, self._useRequire)
-- Test for a descendant. Earlier tests weed out most candidates, while the more intensive tests are only used sparingly.
if (
code ~= self._code and -- Not self.
lang:inFamily(family) and -- In the same family.
(
family:getProtoLanguageCode() == self._code or -- Self is the protolanguage.
self:hasDescendant(lang) or -- Full hasDescendant check.
(lang:getFullCode() == self._code and not self:hasAncestor(lang)) -- Etymology-only child which isn't an ancestor.
)
) then
if format == "object" then
insert(descendants, lang)
elseif format == "code" then
insert(descendants, code)
elseif format == "name" then
insert(descendants, lang:getCanonicalName())
end
end
end
end
return descendants
end
function Language:getDescendants()
if not self._descendantObjects then
self._descendantObjects = fetch_descendants(self, "object")
end
return self._descendantObjects
end
function Language:getDescendantCodes()
if not self._descendantCodes then
self._descendantCodes = fetch_descendants(self, "code")
end
return self._descendantCodes
end
function Language:getDescendantNames()
if not self._descendantNames then
self._descendantNames = fetch_descendants(self, "name")
end
return self._descendantNames
end
function Language:hasDescendant(...)
for _, lang in ipairs{...} do
if type(lang) == "string" then
lang = export.getByCode(lang, nil, true, nil, self._useRequire)
end
if lang:hasAncestor(self) then
return true
end
end
return false
end
local function fetch_children(self, format)
local m_etym_data = require("Modul:etymology languages/data")
local self_code = self._code
local children = {}
for code, data in pairs(m_etym_data) do
local _data = data
repeat
local parent = _data[5]
if parent == self_code then
if format == "object" then
insert(children, export.getByCode(code, nil, true, nil, self._useRequire))
elseif format == "code" then
insert(children, code)
elseif format == "name" then
insert(children, data[1])
end
break
end
_data = m_etym_data[parent]
until not _data
end
return children
end
function Language:getChildren()
if not self._childObjects then
self._childObjects = fetch_children(self, "object")
end
return self._childObjects
end
function Language:getChildrenCodes()
if not self._childCodes then
self._childCodes = fetch_children(self, "code")
end
return self._childCodes
end
function Language:getChildrenNames()
if not self._childNames then
self._childNames = fetch_children(self, "name")
end
return self._childNames
end
function Language:hasChild(...)
local lang = ...
if not lang then
return false
elseif type(lang) == "string" then
lang = export.getByCode(lang, nil, true, nil, self._useRequire)
end
if lang:hasParent(self) then
return true
end
return self:hasChild(select(2, ...))
end
--[==[Returns the name of the main category of that language. Example: {{code|lua|"French language"}} for French, whose category is at [[:Category:French language]]. Unless optional argument <code>nocap</code> is given, the language name at the beginning of the returned value will be capitalized. This capitalization is correct for category names, but not if the language name is lowercase and the returned value of this function is used in the middle of a sentence.]==]
function Language:getCategoryName(nocap)
if not self._categoryName then
local name = self:getCanonicalName()
-- Only add " language" if a full language.
if #self._stack == 1 then
-- If the name already has "language" in it, don't add it.
if not match(name, "^[Bb]ahasa") then
name = "Bahasa " .. name
end
end
self._categoryName = name
end
if nocap then
return self._categoryName
else
return mw.getContentLanguage():ucfirst(self._categoryName)
end
end
--[==[Creates a link to the category; the link text is the canonical name.]==]
function Language:makeCategoryLink()
return "[[:Kategori:" .. self:getCategoryName() .. "|" .. self:getDisplayForm() .. "]]"
end
function Language:getStandardCharacters(sc)
if type(self._rawData.standardChars) ~= "table" then
return self._rawData.standardChars
else
if sc and type(sc) ~= "string" then
check_object("script", nil, sc)
sc = sc:getCode()
end
if (not sc) or sc == "None" then
local scripts = {}
for _, script in pairs(self._rawData.standardChars) do
insert(scripts, script)
end
return concat(scripts)
end
if self._rawData.standardChars[sc] then
return self._rawData.standardChars[sc] .. (self._rawData.standardChars[1] or "")
end
end
end
--[==[Make the entry name (i.e. the correct page name).]==]
function Language:makeEntryName(text, sc)
if (not text) or text == "" then
return text, nil, {}
end
-- Set `unsupported` as true if certain conditions are met.
local unsupported
-- Check if there's an unsupported character. \239\191\189 is the replacement character U+FFFD, which can't be typed directly here due to an abuse filter. Unix-style dot-slash notation is also unsupported, as it is used for relative paths in links, as are 3 or more consecutive tildes.
-- Note: match is faster with magic characters/charsets; find is faster with plaintext.
if (
match(text, "[#<>%[%]_{|}]") or
find(text, "\239\191\189") or
match(text, "%f[^%z/]%.%.?%f[%z/]") or
find(text, "~~~")
) then
unsupported = true
-- If it looks like an interwiki link.
elseif find(text, ":") then
local prefix = gsub(text, "^:*(.-):.*", ulower)
if (
self:loadData("Modul:data/namespaces")[prefix] or
self:loadData("Modul:data/interwikis")[prefix]
) then
unsupported = true
end
end
-- Check if the text is a listed unsupported title.
local unsupportedTitles = self:loadData("Modul:links/data").unsupported_titles
if unsupportedTitles[text] then
return "Unsupported titles/" .. unsupportedTitles[text], nil, {}
end
sc = checkScript(text, self, sc)
local fail, cats
text = normalize(text, sc)
text, fail, cats = iterateSectionSubstitutions(text, nil, nil, self, sc, self._rawData.entry_name, "makeEntryName")
text = umatch(text, "^[¿¡]?(.-[^%s%p].-)%s*[؟?!;՛՜ ՞ ՟?!︖︕।॥။၊་།]?$") or text
-- Escape unsupported characters so they can be used in titles. ` is used as a delimiter for this, so a raw use of it in an unsupported title is also escaped here to prevent interference; this is only done with unsupported titles, though, so inclusion won't in itself mean a title is treated as unsupported (which is why it's excluded from the earlier test).
if unsupported then
local unsupported_characters = self:loadData("Modul:links/data").unsupported_characters
text = text:gsub("[#<>%[%]_`{|}\239]\191?\189?", unsupported_characters)
:gsub("%f[^%z/]%.%.?%f[%z/]", function(m)
return gsub(m, "%.", "`period`")
end)
:gsub("~~~+", function(m)
return gsub(m, "~", "`tilde`")
end)
text = "Unsupported titles/" .. text
end
return text, fail, cats
end
--[==[Generates alternative forms using a specified method, and returns them as a table. If no method is specified, returns a table containing only the input term.]==]
function Language:generateForms(text, sc)
if self._rawData.generate_forms then
sc = checkScript(text, self, sc)
return require("Modul:" .. self._rawData.generate_forms).generateForms(text, self._code, sc:getCode())
else
return {text}
end
end
--[==[Creates a sort key for the given entry name, following the rules appropriate for the language. This removes diacritical marks from the entry name if they are not considered significant for sorting, and may perform some other changes. Any initial hyphen is also removed, and anything parentheses is removed as well.
The <code>sort_key</code> setting for each language in the data modules defines the replacements made by this function, or it gives the name of the module that takes the entry name and returns a sortkey.]==]
function Language:makeSortKey(text, sc)
if (not text) or text == "" then
return text, nil, {}
end
if match(text, "<[^<>]+>") then
track("track HTML tag")
end
-- Remove directional characters, soft hyphens, strip markers and HTML tags.
text = ugsub(text, "[\194\173\226\128\170-\226\128\174\226\129\166-\226\129\169]", "")
text = gsub(mw.text.unstrip(text), "<[^<>]+>", "")
text = decode_uri(text, "PATH")
text = checkNoEntities(self, text)
-- Remove initial hyphens and * unless the term only consists of spacing + punctuation characters.
text = ugsub(text, "^([-]*)[-־ـ᠊*]+([-]*)(.*[^%s%p].*)", "%1%2%3")
sc = checkScript(text, self, sc)
text = normalize(text, sc)
text = removeCarets(text, sc)
-- For languages with dotted dotless i, ensure that "İ" is sorted as "i", and "I" is sorted as "ı".
if self:hasDottedDotlessI() then
text = gsub(text, "I\204\135", "i") -- decomposed "İ"
:gsub("I", "ı")
text = sc:toFixedNFD(text)
end
-- Convert to lowercase, make the sortkey, then convert to uppercase. Where the language has dotted dotless i, it is usually not necessary to convert "i" to "İ" and "ı" to "I" first, because "I" will always be interpreted as conventional "I" (not dotless "İ") by any sorting algorithms, which will have been taken into account by the sortkey substitutions themselves. However, if no sortkey substitutions have been specified, then conversion is necessary so as to prevent "i" and "ı" both being sorted as "I".
-- An exception is made for scripts that (sometimes) sort by scraping page content, as that means they are sensitive to changes in capitalization (as it changes the target page).
local fail, cats
if not sc:sortByScraping() then
text = ulower(text)
end
text, fail, cats = iterateSectionSubstitutions(text, nil, nil, self, sc, self._rawData.sort_key, "makeSortKey")
if not sc:sortByScraping() then
if self:hasDottedDotlessI() and not self._rawData.sort_key then
text = gsub(gsub(text, "ı", "I"), "i", "İ")
text = sc:toFixedNFC(text)
end
text = uupper(text)
end
-- Remove parentheses, as long as they are either preceded or followed by something.
text = gsub(text, "(.)[()]+", "%1")
:gsub("[()]+(.)", "%1")
text = escape_risky_characters(text)
return text, fail, cats
end
--[==[Create the form used as as a basis for display text and transliteration.]==]
local function processDisplayText(text, self, sc, keepCarets, keepPrefixes)
local subbedChars = {}
text, subbedChars = doTempSubstitutions(text, subbedChars, keepCarets)
text = decode_uri(text, "PATH")
text = checkNoEntities(self, text)
sc = checkScript(text, self, sc)
local fail, cats
text = normalize(text, sc)
text, fail, cats, subbedChars = iterateSectionSubstitutions(text, subbedChars, keepCarets, self, sc, self._rawData.display_text, "makeDisplayText")
text = removeCarets(text, sc)
-- Remove any interwiki link prefixes (unless they have been escaped or this has been disabled).
if find(text, ":") and not keepPrefixes then
local rep
repeat
text, rep = gsub(text, "\\\\(\\*:)", "\3%1")
until rep == 0
text = gsub(text, "\\:", "\4")
while true do
local prefix = gsub(text, "^(.-):.+", function(m1)
return gsub(m1, "\244[\128-\191]*", "")
end)
if not prefix or prefix == text then
break
end
local lower_prefix = ulower(prefix)
if not (self:loadData("Modul:data/interwikis")[lower_prefix] or prefix == "") then
break
end
text = gsub(text, "^(.-):(.*)", function(m1, m2)
local ret = {}
for subbedChar in gmatch(m1, "\244[\128-\191]*") do
insert(ret, subbedChar)
end
return concat(ret) .. m2
end)
end
text = gsub(text, "\3", "\\")
:gsub("\4", ":")
end
return text, fail, cats, subbedChars
end
--[==[Make the display text (i.e. what is displayed on the page).]==]
function Language:makeDisplayText(text, sc, keepPrefixes)
if (not text) or text == "" then
return text, nil, {}
end
local fail, cats, subbedChars
text, fail, cats, subbedChars = processDisplayText(text, self, sc, nil, keepPrefixes)
text = escape_risky_characters(text)
return undoTempSubstitutions(text, subbedChars), fail, cats
end
--[==[Transliterates the text from the given script into the Latin script (see [[Wiktionary:Transliteration and romanization]]). The language must have the <code>translit</code> property for this to work; if it is not present, {{code|lua|nil}} is returned.
Returns three values:
# The transliteration.
# A boolean which indicates whether the transliteration failed for an unexpected reason. If {{code|lua|false}}, then the transliteration either succeeded, or the module is returning nothing in a controlled way (e.g. the input was {{code|lua|"-"}}). Generally, this means that no maintenance action is required. If {{code|lua|true}}, then the transliteration is {{code|lua|nil}} because either the input or output was defective in some way (e.g. [[Module:ar-translit]] will not transliterate non-vocalised inputs, and this module will fail partially-completed transliterations in all languages). Note that this value can be manually set by the transliteration module, so make sure to cross-check to ensure it is accurate.
# A table of categories selected by the transliteration module, which should be in the format expected by {{code|lua|format_categories}} in [[Module:utilities]].
The <code>sc</code> parameter is handled by the transliteration module, and how it is handled is specific to that module. Some transliteration modules may tolerate {{code|lua|nil}} as the script, others require it to be one of the possible scripts that the module can transliterate, and will show an error if it's not one of them. For this reason, the <code>sc</code> parameter should always be provided when writing non-language-specific code.
The <code>module_override</code> parameter is used to override the default module that is used to provide the transliteration. This is useful in cases where you need to demonstrate a particular module in use, but there is no default module yet, or you want to demonstrate an alternative version of a transliteration module before making it official. It should not be used in real modules or templates, only for testing. All uses of this parameter are tracked by [[Wiktionary:Tracking/module_override]].
'''Known bugs''':
* This function assumes {tr(s1) .. tr(s2) == tr(s1 .. s2)}. When this assertion fails, wikitext markups like <nowiki>'''</nowiki> can cause wrong transliterations.
* HTML entities like <code>&apos;</code>, often used to escape wikitext markups, do not work.]==]
function Language:transliterate(text, sc, module_override)
-- If there is no text, or the language doesn't have transliteration data and there's no override, return nil.
if not (self._rawData.translit or module_override) then
return nil, false, {}
elseif (not text) or text == "" or text == "-" then
return text, false, {}
end
-- If the script is not transliteratable (and no override is given), return nil.
sc = checkScript(text, self, sc)
if not (sc:isTransliterated() or module_override) then
-- temporary tracking to see if/when this gets triggered
track("non-transliterable")
track("non-transliterable/" .. self:getCode())
track("non-transliterable/" .. sc:getCode())
track("non-transliterable/" .. sc:getCode() .. "/" .. self:getCode())
return nil, true, {}
end
-- Remove any strip markers.
text = mw.text.unstrip(text)
-- Get the display text with the keepCarets flag set.
local fail, cats, subbedChars
text, fail, cats, subbedChars = processDisplayText(text, self, sc, true)
-- Transliterate (using the module override if applicable).
text, fail, cats, subbedChars = iterateSectionSubstitutions(text, subbedChars, true, self, sc, module_override or self._rawData.translit, "tr")
if not text then
return nil, true, cats
end
-- Incomplete transliterations return nil.
local charset = sc.characters
if charset and umatch(text, "[" .. charset .. "]") then
-- Remove any characters in Latin, which includes Latin characters also included in other scripts (as these are false positives), as well as any PUA substitutions. Anything remaining should only be script code "None" (e.g. numerals).
local check_text = ugsub(text, "[" .. require("Modul:scripts").getByCode("Latn").characters .. "-]+", "")
-- Set none_is_last_resort_only flag, so that any non-None chars will cause a script other than "None" to be returned.
if require("Modul:scripts").findBestScriptWithoutLang(check_text, true):getCode() ~= "None" then
return nil, true, cats
end
end
text = escape_risky_characters(text)
text = undoTempSubstitutions(text, subbedChars)
-- If the script does not use capitalization, then capitalize any letters of the transliteration which are immediately preceded by a caret (and remove the caret).
if text and not sc:hasCapitalization() and text:find("^", 1, true) then
text = processCarets(text, "%^([\128-\191\244]*%*?)([^\128-\191\244][\128-\191]*)", function(m1, m2)
return m1 .. uupper(m2)
end)
end
-- Track module overrides.
if module_override ~= nil then
track("module_override")
end
fail = text == nil and (not not fail) or false
return text, fail, cats
end
do
local function handle_language_spec(self, spec, sc)
local ret = self["_" .. spec]
if ret == nil then
ret = self._rawData[spec]
if type(ret) == "string" then
ret = list_to_set(split(ret, ",", true, true))
end
self["_" .. spec] = ret
end
if type(ret) == "table" then
ret = ret[sc:getCode()]
end
return not not ret
end
function Language:overrideManualTranslit(sc)
return handle_language_spec(self, "override_translit", sc)
end
function Language:link_tr(sc)
return handle_language_spec(self, "link_tr", sc)
end
end
--[==[Returns {{code|lua|true}} if the language has a transliteration module, or {{code|lua|false}} if it doesn't.]==]
function Language:hasTranslit()
return not not self._rawData.translit
end
--[==[Returns {{code|lua|true}} if the language uses the letters I/ı and İ/i, or {{code|lua|false}} if it doesn't.]==]
function Language:hasDottedDotlessI()
return not not self._rawData.dotted_dotless_i
end
function Language:toJSON(returnTable)
local entryNamePatterns = nil
local entryNameRemoveDiacritics = nil
if self._rawData.entry_name then
entryNameRemoveDiacritics = self._rawData.entry_name.remove_diacritics
if self._rawData.entry_name.from then
entryNamePatterns = {}
for i, from in ipairs(self._rawData.entry_name.from) do
insert(entryNamePatterns, {from = from, to = self._rawData.entry_name.to[i] or ""})
end
end
end
-- mainCode should only end up non-nil if dontCanonicalizeAliases is passed to make_object().
local ret = m_table.deepcopy{
ancestors = self:getAncestorCodes(),
canonicalName = self:getCanonicalName(),
categoryName = self:getCategoryName("nocap"),
code = self._code,
mainCode = self._main_code,
entryNamePatterns = entryNamePatterns,
entryNameRemoveDiacritics = entryNameRemoveDiacritics,
family = self:getFamilyCode(),
otherNames = self:getOtherNames(true),
aliases = self:getAliases(),
varieties = self:getVarieties(),
scripts = self:getScriptCodes(),
parent = self._parentCode or nil,
full = self._fullCode or nil,
type = m_table.keysToList(self:getTypes()),
wikimediaLanguages = self:getWikimediaLanguageCodes(),
wikidataItem = self:getWikidataItem(),
}
if returnTable then
return ret
else
return require("Modul:JSON").toJSON(ret)
end
end
--[==[
<span style="color: #BA0000">This function is not for use in entries or other content pages.</span>
Returns a blob of data about the language. The format of this blob is undocumented, and perhaps unstable; it's intended for things like the module's own unit-tests, which are "close friends" with the module and will be kept up-to-date as the format changes.
-- Do NOT use these methods!
-- All uses should be pre-approved on the talk page!
]==]
function Language:getRawData()
local rawData = {}
for _, element in ipairs(self._stack) do
for k, v in pairs(element) do
rawData[k] = v
end
end
return rawData
end
--[==[<span style="color: #BA0000">This function is not for use in entries or other content pages.</span>
Returns a blob of data about the language that contains the "extra data". Much like with getRawData, the format of this blob is undocumented, and perhaps unstable; it's intended for things like the module's own unit-tests, which are "close friends" with the module and will be kept up-to-date as the format changes.]==]
function Language:getRawExtraData()
if #self._stack == 1 then
self:loadInExtraData()
end
return self._extraData
end
local function getRawExtraLanguageData(self, code)
local modulename = export.getExtraDataModuleName(code)
return modulename and self:loadData("Modul:" .. modulename)[code] or nil
end
function Language:loadInExtraData()
if not self._extraData then
-- load extra data from module and assign to _extraData field
-- use empty table as a fallback if extra data is nil
self._extraData = getRawExtraLanguageData(self, self._code) or {}
end
end
function export.getDataModuleName(code)
local letter = match(code, "^(%l)[%l-]+$")
if not letter then
return nil
elseif find(code, "-", 1, true) then
return "languages/data/exceptional"
end
local code_len = #code
return code_len == 2 and "languages/data/2" or
code_len == 3 and "languages/data/3/" .. letter or nil
end
function export.getExtraDataModuleName(code)
local dataModule = export.getDataModuleName(code)
return dataModule and dataModule .. "/extra" or nil
end
do
local key_types = {
[2] = "unique",
aliases = "unique",
otherNames = "unique",
type = "append",
varieties = "unique"
}
function export.makeObject(code, data, useRequire, dontCanonicalizeAliases)
if not data then
return nil
end
-- Convert any aliases.
local input_code = code
code = normalize_code(code, useRequire)
input_code = dontCanonicalizeAliases and input_code or code
if find(data.type, "family") and not data[5] then
return require("Modul:families").makeObject(code, data, useRequire)
end
local parent
if data[5] then
parent = export.getByCode(data[5], nil, true, true, useRequire)
else
parent = Language
end
parent.__index = parent
local lang = {
_code = input_code,
_useRequire = useRequire or nil
}
-- This can only happen if dontCanonicalizeAliases is passed to make_object().
if code ~= input_code then
lang._main_code = code
end
-- Full language.
if not parent._stack then
-- Create stack, accessed with rawData metamethod.
local stack = parent._rawData and {parent._rawData, data} or {data}
lang._stack = stack
lang._rawData = setmetatable({}, {
__index = function(t, k)
local key_type = key_types[k]
-- Data that isn't inherited from the parent.
if key_type == "unique" then
return stack[#stack][k]
-- Data that is appended by each generation.
elseif key_type == "append" then
local parts = {}
for i = 1, #stack do
insert(parts, stack[i][k])
end
if type(parts[1]) == "string" then
return concat(parts, ","), true
end
-- Otherwise, iterate down the stack, looking for a match.
else
local i = #stack
while not stack[i][k] and i > 1 do
i = i - 1
end
return stack[i][k]
end
end,
-- Retain immutability (as writing to rawData will break functionality).
__newindex = function()
error("not allowed to edit rawData")
end
})
-- Full code is the parent code.
lang._fullCode = parent._code or code
-- Etymology-only.
else
-- Copy over rawData and stack to the new object, and add new layer to stack.
lang._rawData = parent._rawData
lang._stack = parent._stack
insert(lang._stack, data)
-- Copy full code.
lang._fullCode = parent._fullCode
end
return setmetatable(lang, parent)
end
end
--[==[Finds the language whose code matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">paramForError</code> is {{code|lua|true}}, a generic error message mentioning the bad code is generated; otherwise <code class="n">paramForError</code> should be a string or number specifying the parameter that the code came from, and this parameter will be mentioned in the error message along with the bad code. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes.]==]
function export.getByCode(code, paramForError, allowEtymLang, allowFamily, useRequire)
if type(code) ~= "string" then
local typ
if not code then
typ = "nil"
elseif check_object("language", true, code) then
typ = "a language object"
elseif check_object("family", true, code) then
typ = "a family object"
else
typ = "a " .. type(code)
end
error("The function getByCode expects a string as its first argument, but received " .. typ .. ".")
end
local m_data = conditionalRequire("Modul:languages/data", useRequire)
if m_data.aliases[code] or m_data.track[code] then
track(code)
end
local norm_code = normalize_code(code, useRequire)
local modulename = export.getDataModuleName(norm_code)
local data = modulename and
conditionalRequire("Modul:" .. modulename, useRequire)[norm_code] or
(allowEtymLang and require("Modul:etymology languages/track-bad-etym-code")(norm_code) and conditionalRequire("Modul:etymology languages/data", useRequire)[norm_code]) or
(allowFamily and conditionalRequire("Modul:families/data", useRequire)[norm_code]) or
(allowEtymLang and allowFamily and require("Modul:families/track-bad-etym-code")(norm_code) and conditionalRequire("Modul:families/data/etymology", useRequire)[norm_code])
local retval = code and data and export.makeObject(code, data, useRequire)
if not retval and paramForError then
require("Modul:languages/errorGetBy").code(code, paramForError, allowEtymLang, allowFamily)
end
return retval
end
--[==[Finds the language whose canonical name (the name used to represent that language on Wiktionary) or other name matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes.
The canonical name of languages should always be unique (it is an error for two languages on Wiktionary to share the same canonical name), so this is guaranteed to give at most one result.
This function is powered by [[Module:languages/canonical names]], which contains a pre-generated mapping of full-language canonical names to codes. It is generated by going through the [[:Category:Language data modules]] for full languages. When <code class="n">allowEtymLang</code> is specified for the above function, [[Module:etymology languages/canonical names]] may also be used, and when <code class="n">allowFamily</code> is specified for the above function, [[Module:families/canonical names]] may also be used.]==]
function export.getByCanonicalName(name, errorIfInvalid, allowEtymLang, allowFamily, useRequire)
local byName = conditionalRequire("Modul:languages/canonical names", useRequire)
local code = byName and byName[name]
if not code and allowEtymLang then
byName = conditionalRequire("Modul:etymology languages/canonical names", useRequire)
code = byName and byName[name] or
byName[gsub("^[Ss]ubstratum ", name, "")] or
byName[gsub(name, "", "")] or
byName[gsub(name, "", "")
:gsub("^[Ss]ubstratum ", "")] or
-- For etymology families like "ira-pro".
-- FIXME: This is not ideal, as it allows " languages" to be appended to any etymology-only language, too.
byName[match(name, "^Bahasa-bahasa (.*)$")]
end
if not code and allowFamily then
byName = conditionalRequire("Modul:families/canonical names", useRequire)
code = byName and byName[name] or
byName[match(name, "^Bahasa-bahasa (.*)$")]
end
local retval = code and export.getByCode(code, errorIfInvalid, allowEtymLang, allowFamily, useRequire)
if not retval and errorIfInvalid then
require("Modul:languages/errorGetBy").canonicalName(name, allowEtymLang, allowFamily)
end
return retval
end
--[==[Used by [[Module:languages/data/2]] (et al.) to add default types to the entities returned.]==]
function export.addDefaultTypes(data, regular, ...)
local n = arg.n
local types = n > 0 and concat(arg, ",") or ""
for _, entity in next, data do
-- "regular" encompasses everything that doesn't have another type already assigned.
if regular then
entity.type = entity.type or "regular"
end
if n > 0 then
entity.type = types .. (entity.type and ("," .. entity.type) or "")
end
end
return data
end
--[==[Used by [[Module:languages/data/2]] (et al.) and [[Module:etymology languages/data]] to finalize language-related data into the format that is actually returned.]==]
function export.finalizeLanguageData(data)
-- 4 is scripts.
local fields = {4, "ancestors", "link_tr", "override_translit", "type", "wikimedia_codes"}
local fields_len = #fields
for _, entity in next, data do
for i = 1, fields_len do
local key = fields[i]
local field = entity[key]
if field and type(field) == "string" then
entity[key] = gsub(field, "%s+", "")
end
end
end
return data
end
--[==[Used by [[Module:etymology languages/data]] and [[Module:families/data/etymology]] to finalize etymology-related data into the format that is actually returned.]==]
function export.finalizeEtymologyData(data)
local aliases = {}
for _, entity in next, data do
-- Move parent to 5 and family to 3.
entity[5] = entity[3]
entity[3] = entity.family
entity.family = nil
end
for code, alias in next, aliases do
data[code] = alias
end
return data
end
--[==[For backwards compatibility only; modules should require the error themselves.]==]
function export.err(lang_code, param, code_desc, template_tag, not_real_lang)
return require("Modul:languages/error")(lang_code, param, code_desc, template_tag, not_real_lang)
end
return export
rd1rjnbguttjzbrdc75gls21jy7oy1p
190021
190020
2024-11-12T02:24:46Z
Hakimi97
2668
190021
Scribunto
text/plain
local require = require
local m_str_utils = require("Modul:string utilities")
local m_table = require("Modul:table")
local mw = mw
local string = string
local table = table
local ustring = mw.ustring
local char = string.char
local check_object = require("Modul:utilities").check_object
local concat = table.concat
local decode_entities = m_str_utils.decode_entities
local decode_uri = m_str_utils.decode_uri
local find = string.find
local floor = math.floor
local gmatch = string.gmatch
local gsub = string.gsub
local insert = table.insert
local ipairs = ipairs
local list_to_set = m_table.listToSet
local load_data = mw.loadData
local match = string.match
local next = next
local pairs = pairs
local pattern_escape = m_str_utils.pattern_escape
local remove = table.remove
local remove_duplicates = m_table.removeDuplicates
local replacement_escape = m_str_utils.replacement_escape
local select = select
local setmetatable = setmetatable
local shallowcopy = m_table.shallowcopy
local split = m_str_utils.split
local type = type
local ugsub = ustring.gsub
local ulen = m_str_utils.len
local ulower = m_str_utils.lower
local umatch = ustring.match
local uupper = m_str_utils.upper
-- Loaded as needed by findBestScript.
local Hans_chars
local Hant_chars
local export = {}
--[=[
This module implements fetching of language-specific information and processing text in a given language.
There are two types of languages: full languages and etymology-only languages. The essential difference is that only
full languages appear in L2 headings in vocabulary entries, and hence categories like [[:Category:French nouns]] exist
only for full languages. Etymology-only languages have either a full language or another etymology-only language as
their parent (in the parent-child inheritance sense), and for etymology-only languages with another etymology-only
language as their parent, a full language can always be derived by following the parent links upwards. For example,
"Canadian French", code 'fr-CA', is an etymology-only language whose parent is the full language "French", code 'fr'.
An example of an etymology-only language with another etymology-only parent is "Northumbrian Old English", code
'ang-nor', which has "Anglian Old English", code 'ang-ang' as its parent; this is an etymology-only language whose
parent is "Old English", code "ang", which is a full language. (This is because Northumbrian Old English is considered
a variety of Anglian Old English.) Sometimes the parent is the "Undetermined" language, code 'und'; this is the case,
for example, for "substrate" languages such as "Pre-Greek", code 'qsb-grc', and "the BMAC substrate", code 'qsb-bma'.
It is important to distinguish language ''parents'' from language ''ancestors''. The parent-child relationship is one
of containment, i.e. if X is a child of Y, X is considered a variety of Y. On the other hand, the ancestor-descendant
relationship is one of descent in time. For example, "Classical Latin", code 'la-cla', and "Late Latin", code 'la-lat',
are both etymology-only languages with "Latin", code 'la', as their parents, because both of the former are varieties
of Latin. However, Late Latin does *NOT* have Classical Latin as its parent because Late Latin is *not* a variety of
Classical Latin; rather, it is a descendant. There is in fact a separate 'ancestors' field that is used to express the
ancestor-descendant relationship, and Late Latin's ancestor is given as Classical Latin. It is also important to note
that sometimes an etymology-only language is actually the conceptual ancestor of its parent language. This happens,
for example, with "Old Italian" (code 'roa-oit'), which is an etymology-only variant of full language "Italian" (code
'it'), and with "Old Latin" (code 'itc-ola'), which is an etymology-only variant of Latin. In both cases, the full
language has the etymology-only variant listed as an ancestor. This allows a Latin term to inherit from Old Latin
using the {{tl|inh}} template (where in this template, "inheritance" refers to ancestral inheritance, i.e. inheritance
in time, rather than in the parent-child sense); likewise for Italian and Old Italian.
Full languages come in three subtypes:
* {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted in the
main namespace. There may also be reconstructed terms for the language, which are placed in the
{Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full languages
are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto and Volapük,
among others) are also allowed in the mainspace and considered regular languages.
* {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the
{Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed with
*. Languages such as Proto-Indo-European and Proto-Germanic are in this category.
* {appendix-constructed}: This language is attested but does not meet the additional requirements set out for
constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore be in
the Appendix namespace, but they are not reconstructed and therefore should not have *
prefixed in links. Most constructed languages are of this subtype.
Both full languages and etymology-only languages have a {Language} object associated with them, which is fetched using
the {getByCode} function in [[Module:languages]] to convert a language code to a {Language} object. Depending on the
options supplied to this function, etymology-only languages may or may not be accepted, and family codes may be
accepted (returning a {Family} object as described in [[Module:families]]). There are also separate {getByCanonicalName}
functions in [[Module:languages]] and [[Module:etymology languages]] to convert a language's canonical name to a
{Language} object (depending on whether the canonical name refers to a full or etymology-only language).
Textual strings belonging to a given language come in several different ''text variants'':
# The ''input text'' is what the user supplies in wikitext, in the parameters to {{tl|m}}, {{tl|l}}, {{tl|ux}},
{{tl|t}}, {{tl|lang}} and the like.
# The ''display text'' is the text in the form as it will be displayed to the user. This can include accent marks that
are stripped to form the entry text (see below), as well as embedded bracketed links that are variously processed
further. The display text is generated from the input text by applying language-specific transformations; for most
languages, there will be no such transformations. Examples of transformations are bad-character replacements for
certain languages (e.g. replacing 'l' or '1' to [[palochka]] in certain languages in Cyrillic); and for Thai and
Khmer, converting space-separated words to bracketed words and resolving respelling substitutions such as [กรีน/กฺรีน],
which indicate how to transliterate given words.
# The ''entry text'' is the text in the form used to generate a link to a Wiktionary entry. This is usually generated
from the display text by stripping certain sorts of diacritics on a per-language basis, and sometimes doing other
transformations. The concept of ''entry text'' only really makes sense for text that does not contain embedded links,
meaning that display text containing embedded links will need to have the links individually processed to get
per-link entry text in order to generate the resolved display text (see below).
# The ''resolved display text'' is the result of resolving embedded links in the display text (e.g. converting them to
two-part links where the first part has entry-text transformations applied, and adding appropriate language-specific
fragments) and adding appropriate language and script tagging. This text can be passed directly to MediaWiki for
display.
# The ''source translit text'' is the text as supplied to the language-specific {transliterate()} method. The form of
the source translit text may need to be language-specific, e.g Thai and Khmer will need the full unprocessed input
text, whereas other languages may need to work off the display text. [FIXME: It's still unclear to me how embedded
bracketed links are handled in the existing code.] In general, embedded links need to be removed (i.e. converted to
their "bare display" form by taking the right part of two-part links and removing double brackets), but when this
happens is unclear to me [FIXME]. Some languages have a chop-up-and-paste-together scheme that sends parts of the
text through the transliterate mechanism, and for others (those listed in {contiguous_substition} in
[[Module:languages/data]]) they receive the full input text, but preprocessed in certain ways. (The wisdom of this is
still unclear to me.)
# The ''transliterated text'' (or ''transliteration'') is the result of transliterating the source translit text.
Unlike for all the other text variants except the transcribed text, it is always in the Latin script.
# The ''transcribed text'' (or ''transcription'') is the result of transcribing the source translit text, where
"transcription" here means a close approximation to the phonetic form of the language in languages (e.g. Akkadian,
Sumerian, Ancient Egyptian, maybe Tibetan) that have a wide difference between the written letters and spoken form.
Unlike for all the other text variants other than the transliterated text, it is always in the Latin script.
Currently, the transcribed text is always supplied manually be the user; there is no such thing as a
{lua|transcribe()} method on language objects.
# The ''sort key'' is the text used in sort keys for determining the placing of pages in categories they belong to. The
sort key is generated from the pagename or a specified ''sort base'' by lowercasing, doing language-specific
transformations and then uppercasing the result. If the sort base is supplied and is generated from input text, it
needs to be converted to display text, have embedded links removed (i.e. resolving them to their right side if they
are two-part links) and have entry text transformations applied.
# There are other text variants that occur in usexes (specifically, there are normalized variants of several of the
above text variants), but we can skip them for now.
The following methods exist on {Language} objects to convert between different text variants:
# {makeDisplayText}: This converts input text to display text.
# {lua|makeEntryName}: This converts input or display text to entry text. [FIXME: This needs some rethinking. In
particular, {lua|makeEntryName} is sometimes called on display text (in some paths inside of [[Module:links]]) and
sometimes called on input text (in other paths inside of [[Module:links]], and usually from other modules). We need
to make sure we don't try to convert input text to display text twice, but at the same time we need to support
calling it directly on input text since so many modules do this. This means we need to add a parameter indicating
whether the passed-in text is input or display text; if that former, we call {lua|makeDisplayText} ourselves.]
# {lua|transliterate}: This appears to convert input text with embedded brackets removed into a transliteration.
[FIXME: This needs some rethinking. In particular, it calls {lua|processDisplayText} on its input, which won't work
for Thai and Khmer, so we may need language-specific flags indicating whether to pass the input text directly to the
language transliterate method. In addition, I'm not sure how embedded links are handled in the existing translit code;
a lot of callers remove the links themselves before calling {lua|transliterate()}, which I assume is wrong.]
# {lua|makeSortKey}: This converts entry text (?) to a sort key. [FIXME: Clarify this.]
]=]
local function track(page)
require("Modul:debug/track")("languages/" .. page)
return true
end
local function conditionalRequire(modname, useRequire)
return (useRequire and require or load_data)(modname)
end
local function normalize_code(code, useRequire)
return conditionalRequire("Modul:languages/data", useRequire).aliases[code] or code
end
-- Convert risky characters to HTML entities, which minimizes interference once returned (e.g. for "sms:a", "<!-- -->" etc.).
local function escape_risky_characters(text)
local encode_entities = require("Modul:string/encode entities")
-- Spacing characters in isolation generally need to be escaped in order to be properly processed by the MediaWiki software.
if umatch(text, "^%s*$") then
return encode_entities(text, text)
else
return encode_entities(text, "!#%&*+/:;<=>?@[\\]_{|}")
end
end
-- Temporarily convert various formatting characters to PUA to prevent them from being disrupted by the substitution process.
local function doTempSubstitutions(text, subbedChars, keepCarets, noTrim)
-- Clone so that we don't insert any extra patterns into the table in package.loaded. For some reason, using require seems to keep memory use down; probably because the table is always cloned.
local patterns = shallowcopy(require("Modul:languages/data/patterns"))
if keepCarets then
insert(patterns, "((\\+)%^)")
insert(patterns, "((%^))")
end
-- Ensure any whitespace at the beginning and end is temp substituted, to prevent it from being accidentally trimmed. We only want to trim any final spaces added during the substitution process (e.g. by a module), which means we only do this during the first round of temp substitutions.
if not noTrim then
insert(patterns, "^([\128-\191\244]*(%s+))")
insert(patterns, "((%s+)[\128-\191\244]*)$")
end
-- Pre-substitution, of "[[" and "]]", which makes pattern matching more accurate.
text = gsub(text, "%f[%[]%[%[", "\1")
:gsub("%f[%]]%]%]", "\2")
local i = #subbedChars
for _, pattern in ipairs(patterns) do
-- Patterns ending in \0 stand are for things like "[[" or "]]"), so the inserted PUA are treated as breaks between terms by modules that scrape info from pages.
local term_divider
pattern = gsub(pattern, "%z$", function(divider)
term_divider = divider == "\0"
return ""
end)
text = gsub(text, pattern, function(...)
local m = {...}
local m1New = m[1]
for k = 2, #m do
local n = i + k - 1
subbedChars[n] = m[k]
local byte2 = floor(n / 4096) % 64 + (term_divider and 128 or 136)
local byte3 = floor(n / 64) % 64 + 128
local byte4 = n % 64 + 128
m1New = gsub(m1New, pattern_escape(m[k]), "\244" .. char(byte2) .. char(byte3) .. char(byte4), 1)
end
i = i + #m - 1
return m1New
end)
end
text = gsub(text, "\1", "%[%[")
:gsub("\2", "%]%]")
return text, subbedChars
end
-- Reinsert any formatting that was temporarily substituted.
local function undoTempSubstitutions(text, subbedChars)
for i = 1, #subbedChars do
local byte2 = floor(i / 4096) % 64 + 128
local byte3 = floor(i / 64) % 64 + 128
local byte4 = i % 64 + 128
text = gsub(text, "\244[" .. char(byte2) .. char(byte2+8) .. "]" .. char(byte3) .. char(byte4), replacement_escape(subbedChars[i]))
end
text = gsub(text, "\1", "%[%[")
:gsub("\2", "%]%]")
return text
end
-- Check if the raw text is an unsupported title, and if so return that. Otherwise, remove HTML entities. We do the pre-conversion to avoid loading the unsupported title list unnecessarily.
local function checkNoEntities(self, text)
local textNoEnc = decode_entities(text)
if textNoEnc ~= text and self:loadData("Modul:links/data").unsupported_titles[text] then
return text
else
return textNoEnc
end
end
-- If no script object is provided (or if it's invalid or None), get one.
local function checkScript(text, self, sc)
if not check_object("script", true, sc) or sc:getCode() == "None" then
return self:findBestScript(text)
else
return sc
end
end
local function normalize(text, sc)
text = sc:fixDiscouragedSequences(text)
return sc:toFixedNFD(text)
end
-- Split the text into sections, based on the presence of temporarily substituted formatting characters, then iterate over each one to apply substitutions. This avoids putting PUA characters through language-specific modules, which may be unequipped for them.
local function iterateSectionSubstitutions(text, subbedChars, keepCarets, self, sc, substitution_data, function_name)
local fail, cats, sections = nil, {}
-- See [[Module:languages/data]].
if not find(text, "\244") or self:loadData("Modul:languages/data").contiguous_substitution[self._code] then
sections = {text}
else
sections = split(text, "\244[\128-\143][\128-\191]*", true)
end
for _, section in ipairs(sections) do
-- Don't bother processing empty strings or whitespace (which may also not be handled well by dedicated modules).
if gsub(section, "%s+", "") ~= "" then
local sub, sub_fail, sub_cats = require("Modul:languages/doSubstitutions")(section, self, sc, substitution_data, function_name)
-- Second round of temporary substitutions, in case any formatting was added by the main substitution process. However, don't do this if the section contains formatting already (as it would have had to have been escaped to reach this stage, and therefore should be given as raw text).
if sub and subbedChars then
local noSub
for _, pattern in ipairs(require("Modul:languages/data/patterns")) do
if match(section, pattern .. "%z?") then
noSub = true
end
end
if not noSub then
sub, subbedChars = doTempSubstitutions(sub, subbedChars, keepCarets, true)
end
end
if (not sub) or sub_fail then
text = sub
fail = sub_fail
cats = sub_cats or {}
break
end
text = sub and gsub(text, pattern_escape(section), replacement_escape(sub), 1) or text
if type(sub_cats) == "table" then
for _, cat in ipairs(sub_cats) do
insert(cats, cat)
end
end
end
end
-- Trim, unless there are only spacing characters, while ignoring any final formatting characters.
text = text and text:gsub("^([\128-\191\244]*)%s+(%S)", "%1%2")
:gsub("(%S)%s+([\128-\191\244]*)$", "%1%2")
-- Remove duplicate categories.
if #cats > 1 then
cats = remove_duplicates(cats)
end
return text, fail, cats, subbedChars
end
-- Process carets (and any escapes). Default to simple removal, if no pattern/replacement is given.
local function processCarets(text, pattern, repl)
local rep
repeat
text, rep = gsub(text, "\\\\(\\*^)", "\3%1")
until rep == 0
return text:gsub("\\^", "\4")
:gsub(pattern or "%^", repl or "")
:gsub("\3", "\\")
:gsub("\4", "^")
end
-- Remove carets if they are used to capitalize parts of transliterations (unless they have been escaped).
local function removeCarets(text, sc)
if not sc:hasCapitalization() and sc:isTransliterated() and text:find("^", 1, true) then
return processCarets(text)
else
return text
end
end
local Language = {}
function Language:loadData(modname)
return (self._useRequire and require or mw.loadData)(modname)
end
--[==[Returns the language code of the language. Example: {{code|lua|"fr"}} for French.]==]
function Language:getCode()
return self._code
end
--[==[Returns the canonical name of the language. This is the name used to represent that language on Wiktionary, and is guaranteed to be unique to that language alone. Example: {{code|lua|"French"}} for French.]==]
function Language:getCanonicalName()
local name = self._name
if name == nil then
name = self._rawData[1]
self._name = name
end
return name
end
--[==[
Return the display form of the language. The display form of a language, family or script is the form it takes when
appearing as the <code><var>source</var></code> in categories such as <code>English terms derived from
<var>source</var></code> or <code>English given names from <var>source</var></code>, and is also the displayed text
in {makeCategoryLink()} links. For full and etymology-only languages, this is the same as the canonical name, but
for families, it reads <code>"<var>name</var> languages"</code> (e.g. {"Indo-Iranian languages"}), and for scripts,
it reads <code>"<var>name</var> script"</code> (e.g. {"Arabic script"}).
]==]
function Language:getDisplayForm()
local form = self._displayForm
if form == nil then
form = self:getCanonicalName()
-- Add article and " substrate" to substrates that lack them.
if self:getFamilyCode() == "qfa-sub" then
if not (match(form, "") or match(form, "")) then
form = "substratum bahasa " .. form
end
if not match(form, "[Ss]ubstratum bahasa") then
form = "substratum bahasa " .. form
end
end
self._displayForm = form
end
return form
end
--[==[Returns the value which should be used in the HTML lang= attribute for tagged text in the language.]==]
function Language:getHTMLAttribute(sc, region)
local code = self._code
if not find(code, "-", 1, true) then
return code .. "-" .. sc:getCode() .. (region and "-" .. region or "")
end
local parent = self:getParent()
region = region or match(code, "%f[%u][%u-]+%f[%U]")
if parent then
return parent:getHTMLAttribute(sc, region)
end
-- TODO: ISO family codes can also be used.
return "mis-" .. sc:getCode() .. (region and "-" .. region or "")
end
--[==[Returns a table of the "other names" that the language is known by, excluding the canonical name. The names are not guaranteed to be unique, in that sometimes more than one language is known by the same name. Example: {{code|lua|{"Manx Gaelic", "Northern Manx", "Southern Manx"} }} for [[:Category:Manx language|Manx]]. If <code>onlyOtherNames</code> is given and is non-{{code|lua|nil}}, only names explicitly listed in the <code>otherNames</code> field are returned; otherwise, names listed under <code>otherNames</code>, <code>aliases</code> and <code>varieties</code> are combined together and returned. For example, for Manx, Manx Gaelic is listed as an alias, while Northern Manx and Southern Manx are listed as varieties. It should be noted that the <code>otherNames</code> field itself is deprecated, and entries listed there should eventually be moved to either <code>aliases</code> or <code>varieties</code>.]==]
function Language:getOtherNames(onlyOtherNames)
if #self._stack == 1 then
self:loadInExtraData()
end
return require("Modul:language-like").getOtherNames(self, onlyOtherNames)
end
--[==[Returns a table of the aliases that the language is known by, excluding the canonical name. Aliases are synonyms for the language in question. The names are not guaranteed to be unique, in that sometimes more than one language is known by the same name. Example: {{code|lua|{"High German", "New High German", "Deutsch"} }} for [[:Category:German language|German]].]==]
function Language:getAliases()
if #self._stack == 1 then
self:loadInExtraData()
end
return self._rawData.aliases or (self._extraData and self._extraData.aliases) or {}
end
--[==[
Return a table of the known subvarieties of a given language, excluding subvarieties that have been given
explicit etymology-only language codes. The names are not guaranteed to be unique, in that sometimes a given name
refers to a subvariety of more than one language. Example: {{code|lua|{"Southern Aymara", "Central Aymara"} }} for
[[:Category:Aymara language|Aymara]]. Note that the returned value can have nested tables in it, when a subvariety
goes by more than one name. Example: {{code|lua|{"North Azerbaijani", "South Azerbaijani", {"Afshar", "Afshari",
"Afshar Azerbaijani", "Afchar"}, {"Qashqa'i", "Qashqai", "Kashkay"}, "Sonqor"} }} for
[[:Category:Azerbaijani language|Azerbaijani]]. Here, for example, Afshar, Afshari, Afshar Azerbaijani and Afchar
all refer to the same subvariety, whose preferred name is Afshar (the one listed first). To avoid a return value
with nested tables in it, specify a non-{{code|lua|nil}} value for the <code>flatten</code> parameter; in that case,
the return value would be {{code|lua|{"North Azerbaijani", "South Azerbaijani", "Afshar", "Afshari",
"Afshar Azerbaijani", "Afchar", "Qashqa'i", "Qashqai", "Kashkay", "Sonqor"} }}.
]==]
function Language:getVarieties(flatten)
if #self._stack == 1 then
self:loadInExtraData()
end
return require("Modul:language-like").getVarieties(self, flatten)
end
--[==[Returns a table of types as a lookup table (with the types as keys).
The possible types are
* {language}: This is a language, either full or etymology-only.
* {full}: This is a "full" (not etymology-only) language, i.e. the union of {regular}, {reconstructed} and
{appendix-constructed}. Note that the types {full} and {etymology-only} also exist for families, so if you
want to check specifically for a full language and you have an object that might be a family, you should
use {{lua|hasType("language", "full")}} and not simply {{lua|hasType("full")}}.
* {etymology-only}: This is an etymology-only (not full) language, whose parent is another etymology-only
language or a full language. Note that the types {full} and {etymology-only} also exist for
families, so if you want to check specifically for an etymology-only language and you have an
object that might be a family, you should use {{lua|hasType("language", "etymology-only")}}
and not simply {{lua|hasType("etymology-only")}}.
* {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted
in the main namespace. There may also be reconstructed terms for the language, which are placed in
the {Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full
languages are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto
and Volapük, among others) are also allowed in the mainspace and considered regular languages.
* {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the
{Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed
with *. Languages such as Proto-Indo-European and Proto-Germanic are in this category.
* {appendix-constructed}: This language is attested but does not meet the additional requirements set out for
constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore
be in the Appendix namespace, but they are not reconstructed and therefore should
not have * prefixed in links.
]==]
function Language:getTypes()
local types = self._types
if types == nil then
types = {language = true}
if self:getFullCode() == self._code then
types.full = true
else
types["etymology-only"] = true
end
for t in gmatch(self._rawData.type, "[^,]+") do
types[t] = true
end
self._types = types
end
return types
end
--[==[Given a list of types as strings, returns true if the language has all of them.]==]
function Language:hasType(...)
local args, types = {...}, self:getTypes()
for i = 1, #args do
if not types[args[i]] then
return false
end
end
return true
end
--[==[Returns a table containing <code>WikimediaLanguage</code> objects (see [[Module:wikimedia languages]]), which represent languages and their codes as they are used in Wikimedia projects for interwiki linking and such. More than one object may be returned, as a single Wiktionary language may correspond to multiple Wikimedia languages. For example, Wiktionary's single code <code>sh</code> (Serbo-Croatian) maps to four Wikimedia codes: <code>sh</code> (Serbo-Croatian), <code>bs</code> (Bosnian), <code>hr</code> (Croatian) and <code>sr</code> (Serbian).
The code for the Wikimedia language is retrieved from the <code>wikimedia_codes</code> property in the data modules. If that property is not present, the code of the current language is used. If none of the available codes is actually a valid Wikimedia code, an empty table is returned.]==]
function Language:getWikimediaLanguages()
local wm_langs = self._wikimediaLanguageObjects
if wm_langs == nil then
local get_wm_lang = require("Modul:wikimedia languages").getByCode
local codes = self:getWikimediaLanguageCodes()
wm_langs = {}
for i = 1, #codes do
wm_langs[i] = get_wm_lang(codes[i])
end
self._wikimediaLanguageObjects = wm_langs
end
return wm_langs
end
function Language:getWikimediaLanguageCodes()
local wm_langs = self._wikimediaLanguageCodes
if wm_langs == nil then
wm_langs = self._rawData.wikimedia_codes
wm_langs = wm_langs and split(wm_langs, ",", true, true) or {self._code}
self._wikimediaLanguageCodes = wm_langs
end
return wm_langs
end
--[==[
Returns the name of the Wikipedia article for the language. `project` specifies the language and project to retrieve
the article from, defaulting to {"enwiki"} for the English Wikipedia. Normally if specified it should be the project
code for a specific-language Wikipedia e.g. "zhwiki" for the Chinese Wikipedia, but it can be any project, including
non-Wikipedia ones. If the project is the English Wikipedia and the property {wikipedia_article} is present in the data
module it will be used first. In all other cases, a sitelink will be generated from {:getWikidataItem} (if set). The
resulting value (or lack of value) is cached so that subsequent calls are fast. If no value could be determined, and
`noCategoryFallback` is {false}, {:getCategoryName} is used as fallback; otherwise, {nil} is returned. Note that if
`noCategoryFallback` is {nil} or omitted, it defaults to {false} if the project is the English Wikipedia, otherwise
to {true}. In other words, under normal circumstances, if the English Wikipedia article couldn't be retrieved, the
return value will fall back to a link to the language's category, but this won't normally happen for any other project.
]==]
function Language:getWikipediaArticle(noCategoryFallback, project)
project = project or "mswiki"
local cached_value
if project == "mswiki" then
cached_value = self._wikipedia_article
if cached_value == nil then
cached_value = self._rawData.wikipedia_article
end
else
-- If the project isn't enwiki, default to no category fallback, but this can be overridden by specifying the
-- value `false`.
if noCategoryFallback == nil then
noCategoryFallback = true
end
if self._non_en_wikipedia_articles == nil then
self._non_en_wikipedia_articles = {}
end
cached_value = self._non_en_wikipedia_articles[project]
end
if cached_value == nil then -- not false
if self:getWikidataItem() and mw.wikibase then
cached_value = mw.wikibase.sitelink(self:getWikidataItem(), project)
end
if not cached_value then
cached_value = false
end
end
-- Now cache the determined value.
if project == "mswiki" then
self._wikipedia_article = cached_value
else
self._non_en_wikipedia_articles[project] = cached_value
end
if not cached_value and not noCategoryFallback then
return gsub(self:getCategoryName(), "Bahasa kreol", "Kreol")
end
return cached_value or nil
end
function Language:makeWikipediaLink()
return "[[w:" .. self:getWikipediaArticle() .. "|" .. self:getCanonicalName() .. "]]"
end
--[==[Returns the Wikidata item id for the language or <code>nil</code>. This corresponds to the the second field in the data modules.]==]
function Language:getWikidataItem()
local item = self._WikidataItem
if item == nil then
item = self._rawData[2]
-- If the value is nil, it's cached as false.
item = item ~= nil and (type(item) == "number" and "Q" .. item or item) or false
self._WikidataItem = item
end
return item or nil
end
--[==[Returns a table of <code>Script</code> objects for all scripts that the language is written in. See [[Module:scripts]].]==]
function Language:getScripts()
local scripts = self._scriptObjects
if scripts == nil then
local codes = self:getScriptCodes()
if codes[1] == "All" then
scripts = self:loadData("Modul:scripts/data")
else
local get_script = require("Modul:scripts").getByCode
scripts = {}
for i = 1, #codes do
scripts[i] = get_script(codes[i], nil, nil, self._useRequire)
end
end
self._scriptObjects = scripts
end
return scripts
end
--[==[Returns the table of script codes in the language's data file.]==]
function Language:getScriptCodes()
local scripts = self._scriptCodes
if scripts == nil then
scripts = self._rawData[4]
if scripts then
local codes, n = {}, 0
for code in gmatch(scripts, "[^,]+") do
n = n + 1
-- Special handling of "Hants", which represents "Hani", "Hant" and "Hans" collectively.
if code == "Hants" then
codes[n] = "Hani"
codes[n + 1] = "Hant"
codes[n + 2] = "Hans"
n = n + 2
else
codes[n] = code
end
end
scripts = codes
else
scripts = {"None"}
end
self._scriptCodes = scripts
end
return scripts
end
--[==[Given some text, this function iterates through the scripts of a given language and tries to find the script that best matches the text. It returns a {{code|lua|Script}} object representing the script. If no match is found at all, it returns the {{code|lua|None}} script object.]==]
function Language:findBestScript(text, forceDetect)
local useRequire = self._useRequire
if not text or text == "" or text == "-" then
return require("Modul:scripts").getByCode("None", nil, nil, useRequire)
end
-- Differs from table returned by getScriptCodes, as Hants is not normalized into its constituents.
local codes = self._bestScriptCodes
if codes == nil then
codes = self._rawData[4]
codes = codes and split(codes, ",", true, true) or {"None"}
self._bestScriptCodes = codes
end
local first_sc = codes[1]
if first_sc == "All" then
return require("Modul:scripts").findBestScriptWithoutLang(text)
end
local get_script = require("Modul:scripts").getByCode
local codes_len = #codes
if not (forceDetect or first_sc == "Hants" or codes_len > 1) then
first_sc = get_script(first_sc, nil, nil, useRequire)
local charset = first_sc.characters
return charset and umatch(text, "[" .. charset .. "]") and first_sc or
get_script("None", nil, nil, useRequire)
end
-- Remove all formatting characters.
text = require("Modul:utilities").get_plaintext(text)
-- Remove all spaces and any ASCII punctuation. Some non-ASCII punctuation is script-specific, so can't be removed.
text = ugsub(text, "[%s!\"#%%&'()*,%-./:;?@[\\%]_{}]+", "")
if #text == 0 then
return get_script("None", nil, nil, useRequire)
end
-- Try to match every script against the text,
-- and return the one with the most matching characters.
local bestcount, bestscript, length = 0
for i = 1, codes_len do
local sc = codes[i]
-- Special case for "Hants", which is a special code that represents whichever of "Hant" or "Hans" best matches, or "Hani" if they match equally. This avoids having to list all three. In addition, "Hants" will be treated as the best match if there is at least one matching character, under the assumption that a Han script is desirable in terms that contain a mix of Han and other scripts (not counting those which use Jpan or Kore).
if sc == "Hants" then
local Hani = get_script("Hani", nil, nil, useRequire)
if not Hant_chars then
Hant_chars = self:loadData("Modul:zh/data/ts")
Hans_chars = self:loadData("Modul:zh/data/st")
end
local t, s, found = 0, 0
-- This is faster than using mw.ustring.gmatch directly.
for ch in gmatch(ugsub(text, "[" .. Hani.characters .. "]", "\255%0"), "\255(.[\128-\191]*)") do
found = true
if Hant_chars[ch] then
t = t + 1
if Hans_chars[ch] then
s = s + 1
end
elseif Hans_chars[ch] then
s = s + 1
else
t, s = t + 1, s + 1
end
end
if found then
if t == s then
return Hani
end
return get_script(t > s and "Hant" or "Hans", nil, nil, useRequire)
end
else
sc = get_script(sc, nil, nil, useRequire)
if not length then
length = ulen(text)
end
-- Count characters by removing everything in the script's charset and comparing to the original length.
local charset = sc.characters
local count = charset and length - ulen(ugsub(text, "[" .. charset .. "]+", "")) or 0
if count >= length then
return sc
elseif count > bestcount then
bestcount = count
bestscript = sc
end
end
end
-- Return best matching script, or otherwise None.
return bestscript or get_script("None", nil, nil, useRequire)
end
--[==[Returns a <code>Family</code> object for the language family that the language belongs to. See [[Module:families]].]==]
function Language:getFamily()
local family = self._familyObject
if family == nil then
family = self:getFamilyCode()
-- If the value is nil, it's cached as false.
family = family and require("Modul:families").getByCode(family, self._useRequire) or false
self._familyObject = family
end
return family or nil
end
--[==[Returns the family code in the language's data file.]==]
function Language:getFamilyCode()
local family = self._familyCode
if family == nil then
-- If the value is nil, it's cached as false.
family = self._rawData[3] or false
self._familyCode = family
end
return family or nil
end
function Language:getFamilyName()
local family = self._familyName
if family == nil then
family = self:getFamily()
-- If the value is nil, it's cached as false.
family = family and family:getCanonicalName() or false
self._familyName = family
end
return family or nil
end
--[==[Check whether the language belongs to `family` (which can be a family code or object). A list of objects can be given in place of `family`; in that case, return true if the language belongs to any of the specified families. Note that some languages (in particular, certain creoles) can have multiple immediate ancestors potentially belonging to different families; in that case, return true if the language belongs to any of the specified families.]==]
function Language:inFamily(...)
--check_object("family", nil, ...)
for _, family in ipairs{...} do
if type(family) == "table" then
family = family:getCode()
end
local self_family_code = self:getFamilyCode()
if not self_family_code then
return false
elseif self_family_code == family then
return true
end
local self_family = self:getFamily()
if self_family:inFamily(family) then
return true
-- If the family isn't a real family (e.g. creoles) check any ancestors.
elseif self_family:getFamilyCode() == "qfa-not" then
local ancestors = self:getAncestors()
for _, ancestor in ipairs(ancestors) do
if ancestor:inFamily(family) then
return true
end
end
end
end
return false
end
function Language:getParent()
local parent = self._parentObject
if parent == nil then
parent = self:getParentCode()
-- If the value is nil, it's cached as false.
parent = parent and export.getByCode(parent, nil, true, true, self._useRequire) or false
self._parentObject = parent
end
return parent or nil
end
function Language:getParentCode()
local parent = self._parentCode
if parent == nil then
-- If the value is nil, it's cached as false.
parent = self._rawData[5] or false
self._parentCode = parent
end
return parent or nil
end
function Language:getParentName()
local parent = self._parentName
if parent == nil then
parent = self:getParent()
-- If the value is nil, it's cached as false.
parent = parent and parent:getCanonicalName() or false
self._parentName = parent
end
return parent or nil
end
function Language:getParentChain()
local chain = self._parentChain
if chain == nil then
chain = {}
local parent, n = self:getParent(), 0
while parent do
n = n + 1
chain[n] = parent
parent = parent:getParent()
end
self._parentChain = chain
end
return chain
end
function Language:hasParent(...)
--check_object("language", nil, ...)
for _, otherlang in ipairs{...} do
for _, parent in ipairs(self:getParentChain()) do
if type(otherlang) == "string" then
if otherlang == parent:getCode() then return true end
else
if otherlang:getCode() == parent:getCode() then return true end
end
end
end
return false
end
--[==[
If the language is etymology-only, this iterates through parents until a full language or family is found, and the
corresponding object is returned. If the language is a full language, then it simply returns itself.
]==]
function Language:getFull()
local full = self._fullObject
if full == nil then
full = self:getFullCode()
full = full == self._code and self or
export.getByCode(full, nil, nil, nil, self._useRequire)
self._fullObject = full
end
return full
end
--[==[
If the language is an etymology-only language, this iterates through parents until a full language or family is
found, and the corresponding code is returned. If the language is a full language, then it simply returns the
language code.
]==]
function Language:getFullCode()
return self._fullCode or self._code
end
--[==[
If the language is an etymology-only language, this iterates through parents until a full language or family is
found, and the corresponding canonical name is returned. If the language is a full language, then it simply returns
the canonical name of the language.
]==]
function Language:getFullName()
local full = self._fullName
if full == nil then
full = self:getFull():getCanonicalName()
self._fullName = full
end
return full
end
--[==[Returns a table of <code class="nf">Language</code> objects for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==]
function Language:getAncestors()
if not self._ancestorObjects then
self._ancestorObjects = {}
local ancestors = shallowcopy(self:getAncestorCodes())
if #ancestors > 0 then
for _, ancestor in ipairs(ancestors) do
insert(self._ancestorObjects, export.getByCode(ancestor, nil, true, nil, self._useRequire))
end
else
local fam = self:getFamily()
local protoLang = fam and fam:getProtoLanguage() or nil
-- For the cases where the current language is the proto-language
-- of its family, or an etymology-only language that is ancestral to that
-- proto-language, we need to step up a level higher right from the
-- start.
if protoLang and (
protoLang:getCode() == self._code or
(self:hasType("etymology-only") and protoLang:hasAncestor(self))
) then
fam = fam:getFamily()
protoLang = fam and fam:getProtoLanguage() or nil
end
while not protoLang and not (not fam or fam:getCode() == "qfa-not") do
fam = fam:getFamily()
protoLang = fam and fam:getProtoLanguage() or nil
end
insert(self._ancestorObjects, protoLang)
end
end
return self._ancestorObjects
end
do
-- Avoid a language being its own ancestor via class inheritance. We only need to check for this if the language has inherited an ancestor table from its parent, because we never want to drop ancestors that have been explicitly set in the data.
-- Recursively iterate over ancestors until we either find self or run out. If self is found, return true.
local function check_ancestor(self, lang)
local codes = lang:getAncestorCodes()
if not codes then
return nil
end
for i = 1, #codes do
local code = codes[i]
if code == self._code then
return true
end
local anc = export.getByCode(code, nil, true, nil, self._useRequire)
if check_ancestor(self, anc) then
return true
end
end
end
--[==[Returns a table of <code class="nf">Language</code> codes for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==]
function Language:getAncestorCodes()
if self._ancestorCodes then
return self._ancestorCodes
end
local codes = self._rawData.ancestors
if not codes then
codes = {}
self._ancestorCodes = codes
return codes
end
codes = split(codes, ",", true, true)
self._ancestorCodes = codes
if (
#codes == 0 or
#self._stack == 1 or
self._stack[#self._stack].ancestors
) then
return codes
end
local i, code = 1
while i <= #codes do
code = codes[i]
if check_ancestor(self, self) then
remove(codes, i)
else
i = i + 1
end
end
return codes
end
end
--[==[Given a list of language objects or codes, returns true if at least one of them is an ancestor. This includes any etymology-only children of that ancestor. If the language's ancestor(s) are etymology-only languages, it will also return true for those language parent(s) (e.g. if Vulgar Latin is the ancestor, it will also return true for its parent, Latin). However, a parent is excluded from this if the ancestor is also ancestral to that parent (e.g. if Classical Persian is the ancestor, Persian would return false, because Classical Persian is also ancestral to Persian).]==]
function Language:hasAncestor(...)
--check_object("language", nil, ...)
local function iterateOverAncestorTree(node, func, parent_check)
local ancestors = node:getAncestors()
local ancestorsParents = {}
for _, ancestor in ipairs(ancestors) do
local ret = func(ancestor) or iterateOverAncestorTree(ancestor, func, parent_check)
if ret then return ret end
end
-- Check the parents of any ancestors. We don't do this if checking the parents of the other language, so that we exclude any etymology-only children of those parents that are not directly related (e.g. if the ancestor is Vulgar Latin and we are checking New Latin, we want it to return false because they are on different ancestral branches. As such, if we're already checking the parent of New Latin (Latin) we don't want to compare it to the parent of the ancestor (Latin), as this would be a false positive; it should be one or the other).
if not parent_check then
return nil
end
for _, ancestor in ipairs(ancestors) do
local ancestorParents = ancestor:getParentChain()
for _, ancestorParent in ipairs(ancestorParents) do
if ancestorParent:getCode() == self._code or ancestorParent:hasAncestor(ancestor) then
break
else
insert(ancestorsParents, ancestorParent)
end
end
end
for _, ancestorParent in ipairs(ancestorsParents) do
local ret = func(ancestorParent)
if ret then return ret end
end
end
local function do_iteration(otherlang, parent_check)
-- otherlang can't be self
if (type(otherlang) == "string" and otherlang or otherlang:getCode()) == self._code then
return false
end
repeat
if iterateOverAncestorTree(
self,
function(ancestor)
return ancestor:getCode() == (type(otherlang) == "string" and otherlang or otherlang:getCode())
end,
parent_check
) then
return true
elseif type(otherlang) == "string" then
otherlang = export.getByCode(otherlang, nil, true, nil, self._useRequire)
end
otherlang = otherlang:getParent()
parent_check = false
until not otherlang
end
local parent_check = true
for _, otherlang in ipairs{...} do
local ret = do_iteration(otherlang, parent_check)
if ret then
return true
end
end
return false
end
function Language:getAncestorChain()
if not self._ancestorChain then
self._ancestorChain = {}
local step = self
while true do
local ancestors = step:getAncestors()
step = #ancestors == 1 and ancestors[1] or nil
if not step then break end
insert(self._ancestorChain, 1, step)
end
end
return self._ancestorChain
end
local function fetch_descendants(self, format)
local languages = require("Modul:languages/code to canonical name")
local etymology_languages = require("Modul:etymology languages/code to canonical name")
local families = require("Modul:families/code to canonical name")
local descendants = {}
local family = self:getFamily()
-- Iterate over all three datasets.
for _, data in ipairs{languages, etymology_languages, families} do
for code in pairs(data) do
local lang = export.getByCode(code, nil, true, true, self._useRequire)
-- Test for a descendant. Earlier tests weed out most candidates, while the more intensive tests are only used sparingly.
if (
code ~= self._code and -- Not self.
lang:inFamily(family) and -- In the same family.
(
family:getProtoLanguageCode() == self._code or -- Self is the protolanguage.
self:hasDescendant(lang) or -- Full hasDescendant check.
(lang:getFullCode() == self._code and not self:hasAncestor(lang)) -- Etymology-only child which isn't an ancestor.
)
) then
if format == "object" then
insert(descendants, lang)
elseif format == "code" then
insert(descendants, code)
elseif format == "name" then
insert(descendants, lang:getCanonicalName())
end
end
end
end
return descendants
end
function Language:getDescendants()
if not self._descendantObjects then
self._descendantObjects = fetch_descendants(self, "object")
end
return self._descendantObjects
end
function Language:getDescendantCodes()
if not self._descendantCodes then
self._descendantCodes = fetch_descendants(self, "code")
end
return self._descendantCodes
end
function Language:getDescendantNames()
if not self._descendantNames then
self._descendantNames = fetch_descendants(self, "name")
end
return self._descendantNames
end
function Language:hasDescendant(...)
for _, lang in ipairs{...} do
if type(lang) == "string" then
lang = export.getByCode(lang, nil, true, nil, self._useRequire)
end
if lang:hasAncestor(self) then
return true
end
end
return false
end
local function fetch_children(self, format)
local m_etym_data = require("Modul:etymology languages/data")
local self_code = self._code
local children = {}
for code, data in pairs(m_etym_data) do
local _data = data
repeat
local parent = _data[5]
if parent == self_code then
if format == "object" then
insert(children, export.getByCode(code, nil, true, nil, self._useRequire))
elseif format == "code" then
insert(children, code)
elseif format == "name" then
insert(children, data[1])
end
break
end
_data = m_etym_data[parent]
until not _data
end
return children
end
function Language:getChildren()
if not self._childObjects then
self._childObjects = fetch_children(self, "object")
end
return self._childObjects
end
function Language:getChildrenCodes()
if not self._childCodes then
self._childCodes = fetch_children(self, "code")
end
return self._childCodes
end
function Language:getChildrenNames()
if not self._childNames then
self._childNames = fetch_children(self, "name")
end
return self._childNames
end
function Language:hasChild(...)
local lang = ...
if not lang then
return false
elseif type(lang) == "string" then
lang = export.getByCode(lang, nil, true, nil, self._useRequire)
end
if lang:hasParent(self) then
return true
end
return self:hasChild(select(2, ...))
end
--[==[Returns the name of the main category of that language. Example: {{code|lua|"French language"}} for French, whose category is at [[:Category:French language]]. Unless optional argument <code>nocap</code> is given, the language name at the beginning of the returned value will be capitalized. This capitalization is correct for category names, but not if the language name is lowercase and the returned value of this function is used in the middle of a sentence.]==]
function Language:getCategoryName(nocap)
if not self._categoryName then
local name = self:getCanonicalName()
-- Only add " language" if a full language.
if #self._stack == 1 then
-- If the name already has "language" in it, don't add it.
if not match(name, "^[Bb]ahasa ") then
name = "Bahasa " .. name
end
end
self._categoryName = name
end
if nocap then
return self._categoryName
else
return mw.getContentLanguage():ucfirst(self._categoryName)
end
end
--[==[Creates a link to the category; the link text is the canonical name.]==]
function Language:makeCategoryLink()
return "[[:Kategori:" .. self:getCategoryName() .. "|" .. self:getDisplayForm() .. "]]"
end
function Language:getStandardCharacters(sc)
if type(self._rawData.standardChars) ~= "table" then
return self._rawData.standardChars
else
if sc and type(sc) ~= "string" then
check_object("script", nil, sc)
sc = sc:getCode()
end
if (not sc) or sc == "None" then
local scripts = {}
for _, script in pairs(self._rawData.standardChars) do
insert(scripts, script)
end
return concat(scripts)
end
if self._rawData.standardChars[sc] then
return self._rawData.standardChars[sc] .. (self._rawData.standardChars[1] or "")
end
end
end
--[==[Make the entry name (i.e. the correct page name).]==]
function Language:makeEntryName(text, sc)
if (not text) or text == "" then
return text, nil, {}
end
-- Set `unsupported` as true if certain conditions are met.
local unsupported
-- Check if there's an unsupported character. \239\191\189 is the replacement character U+FFFD, which can't be typed directly here due to an abuse filter. Unix-style dot-slash notation is also unsupported, as it is used for relative paths in links, as are 3 or more consecutive tildes.
-- Note: match is faster with magic characters/charsets; find is faster with plaintext.
if (
match(text, "[#<>%[%]_{|}]") or
find(text, "\239\191\189") or
match(text, "%f[^%z/]%.%.?%f[%z/]") or
find(text, "~~~")
) then
unsupported = true
-- If it looks like an interwiki link.
elseif find(text, ":") then
local prefix = gsub(text, "^:*(.-):.*", ulower)
if (
self:loadData("Modul:data/namespaces")[prefix] or
self:loadData("Modul:data/interwikis")[prefix]
) then
unsupported = true
end
end
-- Check if the text is a listed unsupported title.
local unsupportedTitles = self:loadData("Modul:links/data").unsupported_titles
if unsupportedTitles[text] then
return "Unsupported titles/" .. unsupportedTitles[text], nil, {}
end
sc = checkScript(text, self, sc)
local fail, cats
text = normalize(text, sc)
text, fail, cats = iterateSectionSubstitutions(text, nil, nil, self, sc, self._rawData.entry_name, "makeEntryName")
text = umatch(text, "^[¿¡]?(.-[^%s%p].-)%s*[؟?!;՛՜ ՞ ՟?!︖︕।॥။၊་།]?$") or text
-- Escape unsupported characters so they can be used in titles. ` is used as a delimiter for this, so a raw use of it in an unsupported title is also escaped here to prevent interference; this is only done with unsupported titles, though, so inclusion won't in itself mean a title is treated as unsupported (which is why it's excluded from the earlier test).
if unsupported then
local unsupported_characters = self:loadData("Modul:links/data").unsupported_characters
text = text:gsub("[#<>%[%]_`{|}\239]\191?\189?", unsupported_characters)
:gsub("%f[^%z/]%.%.?%f[%z/]", function(m)
return gsub(m, "%.", "`period`")
end)
:gsub("~~~+", function(m)
return gsub(m, "~", "`tilde`")
end)
text = "Unsupported titles/" .. text
end
return text, fail, cats
end
--[==[Generates alternative forms using a specified method, and returns them as a table. If no method is specified, returns a table containing only the input term.]==]
function Language:generateForms(text, sc)
if self._rawData.generate_forms then
sc = checkScript(text, self, sc)
return require("Modul:" .. self._rawData.generate_forms).generateForms(text, self._code, sc:getCode())
else
return {text}
end
end
--[==[Creates a sort key for the given entry name, following the rules appropriate for the language. This removes diacritical marks from the entry name if they are not considered significant for sorting, and may perform some other changes. Any initial hyphen is also removed, and anything parentheses is removed as well.
The <code>sort_key</code> setting for each language in the data modules defines the replacements made by this function, or it gives the name of the module that takes the entry name and returns a sortkey.]==]
function Language:makeSortKey(text, sc)
if (not text) or text == "" then
return text, nil, {}
end
if match(text, "<[^<>]+>") then
track("track HTML tag")
end
-- Remove directional characters, soft hyphens, strip markers and HTML tags.
text = ugsub(text, "[\194\173\226\128\170-\226\128\174\226\129\166-\226\129\169]", "")
text = gsub(mw.text.unstrip(text), "<[^<>]+>", "")
text = decode_uri(text, "PATH")
text = checkNoEntities(self, text)
-- Remove initial hyphens and * unless the term only consists of spacing + punctuation characters.
text = ugsub(text, "^([-]*)[-־ـ᠊*]+([-]*)(.*[^%s%p].*)", "%1%2%3")
sc = checkScript(text, self, sc)
text = normalize(text, sc)
text = removeCarets(text, sc)
-- For languages with dotted dotless i, ensure that "İ" is sorted as "i", and "I" is sorted as "ı".
if self:hasDottedDotlessI() then
text = gsub(text, "I\204\135", "i") -- decomposed "İ"
:gsub("I", "ı")
text = sc:toFixedNFD(text)
end
-- Convert to lowercase, make the sortkey, then convert to uppercase. Where the language has dotted dotless i, it is usually not necessary to convert "i" to "İ" and "ı" to "I" first, because "I" will always be interpreted as conventional "I" (not dotless "İ") by any sorting algorithms, which will have been taken into account by the sortkey substitutions themselves. However, if no sortkey substitutions have been specified, then conversion is necessary so as to prevent "i" and "ı" both being sorted as "I".
-- An exception is made for scripts that (sometimes) sort by scraping page content, as that means they are sensitive to changes in capitalization (as it changes the target page).
local fail, cats
if not sc:sortByScraping() then
text = ulower(text)
end
text, fail, cats = iterateSectionSubstitutions(text, nil, nil, self, sc, self._rawData.sort_key, "makeSortKey")
if not sc:sortByScraping() then
if self:hasDottedDotlessI() and not self._rawData.sort_key then
text = gsub(gsub(text, "ı", "I"), "i", "İ")
text = sc:toFixedNFC(text)
end
text = uupper(text)
end
-- Remove parentheses, as long as they are either preceded or followed by something.
text = gsub(text, "(.)[()]+", "%1")
:gsub("[()]+(.)", "%1")
text = escape_risky_characters(text)
return text, fail, cats
end
--[==[Create the form used as as a basis for display text and transliteration.]==]
local function processDisplayText(text, self, sc, keepCarets, keepPrefixes)
local subbedChars = {}
text, subbedChars = doTempSubstitutions(text, subbedChars, keepCarets)
text = decode_uri(text, "PATH")
text = checkNoEntities(self, text)
sc = checkScript(text, self, sc)
local fail, cats
text = normalize(text, sc)
text, fail, cats, subbedChars = iterateSectionSubstitutions(text, subbedChars, keepCarets, self, sc, self._rawData.display_text, "makeDisplayText")
text = removeCarets(text, sc)
-- Remove any interwiki link prefixes (unless they have been escaped or this has been disabled).
if find(text, ":") and not keepPrefixes then
local rep
repeat
text, rep = gsub(text, "\\\\(\\*:)", "\3%1")
until rep == 0
text = gsub(text, "\\:", "\4")
while true do
local prefix = gsub(text, "^(.-):.+", function(m1)
return gsub(m1, "\244[\128-\191]*", "")
end)
if not prefix or prefix == text then
break
end
local lower_prefix = ulower(prefix)
if not (self:loadData("Modul:data/interwikis")[lower_prefix] or prefix == "") then
break
end
text = gsub(text, "^(.-):(.*)", function(m1, m2)
local ret = {}
for subbedChar in gmatch(m1, "\244[\128-\191]*") do
insert(ret, subbedChar)
end
return concat(ret) .. m2
end)
end
text = gsub(text, "\3", "\\")
:gsub("\4", ":")
end
return text, fail, cats, subbedChars
end
--[==[Make the display text (i.e. what is displayed on the page).]==]
function Language:makeDisplayText(text, sc, keepPrefixes)
if (not text) or text == "" then
return text, nil, {}
end
local fail, cats, subbedChars
text, fail, cats, subbedChars = processDisplayText(text, self, sc, nil, keepPrefixes)
text = escape_risky_characters(text)
return undoTempSubstitutions(text, subbedChars), fail, cats
end
--[==[Transliterates the text from the given script into the Latin script (see [[Wiktionary:Transliteration and romanization]]). The language must have the <code>translit</code> property for this to work; if it is not present, {{code|lua|nil}} is returned.
Returns three values:
# The transliteration.
# A boolean which indicates whether the transliteration failed for an unexpected reason. If {{code|lua|false}}, then the transliteration either succeeded, or the module is returning nothing in a controlled way (e.g. the input was {{code|lua|"-"}}). Generally, this means that no maintenance action is required. If {{code|lua|true}}, then the transliteration is {{code|lua|nil}} because either the input or output was defective in some way (e.g. [[Module:ar-translit]] will not transliterate non-vocalised inputs, and this module will fail partially-completed transliterations in all languages). Note that this value can be manually set by the transliteration module, so make sure to cross-check to ensure it is accurate.
# A table of categories selected by the transliteration module, which should be in the format expected by {{code|lua|format_categories}} in [[Module:utilities]].
The <code>sc</code> parameter is handled by the transliteration module, and how it is handled is specific to that module. Some transliteration modules may tolerate {{code|lua|nil}} as the script, others require it to be one of the possible scripts that the module can transliterate, and will show an error if it's not one of them. For this reason, the <code>sc</code> parameter should always be provided when writing non-language-specific code.
The <code>module_override</code> parameter is used to override the default module that is used to provide the transliteration. This is useful in cases where you need to demonstrate a particular module in use, but there is no default module yet, or you want to demonstrate an alternative version of a transliteration module before making it official. It should not be used in real modules or templates, only for testing. All uses of this parameter are tracked by [[Wiktionary:Tracking/module_override]].
'''Known bugs''':
* This function assumes {tr(s1) .. tr(s2) == tr(s1 .. s2)}. When this assertion fails, wikitext markups like <nowiki>'''</nowiki> can cause wrong transliterations.
* HTML entities like <code>&apos;</code>, often used to escape wikitext markups, do not work.]==]
function Language:transliterate(text, sc, module_override)
-- If there is no text, or the language doesn't have transliteration data and there's no override, return nil.
if not (self._rawData.translit or module_override) then
return nil, false, {}
elseif (not text) or text == "" or text == "-" then
return text, false, {}
end
-- If the script is not transliteratable (and no override is given), return nil.
sc = checkScript(text, self, sc)
if not (sc:isTransliterated() or module_override) then
-- temporary tracking to see if/when this gets triggered
track("non-transliterable")
track("non-transliterable/" .. self:getCode())
track("non-transliterable/" .. sc:getCode())
track("non-transliterable/" .. sc:getCode() .. "/" .. self:getCode())
return nil, true, {}
end
-- Remove any strip markers.
text = mw.text.unstrip(text)
-- Get the display text with the keepCarets flag set.
local fail, cats, subbedChars
text, fail, cats, subbedChars = processDisplayText(text, self, sc, true)
-- Transliterate (using the module override if applicable).
text, fail, cats, subbedChars = iterateSectionSubstitutions(text, subbedChars, true, self, sc, module_override or self._rawData.translit, "tr")
if not text then
return nil, true, cats
end
-- Incomplete transliterations return nil.
local charset = sc.characters
if charset and umatch(text, "[" .. charset .. "]") then
-- Remove any characters in Latin, which includes Latin characters also included in other scripts (as these are false positives), as well as any PUA substitutions. Anything remaining should only be script code "None" (e.g. numerals).
local check_text = ugsub(text, "[" .. require("Modul:scripts").getByCode("Latn").characters .. "-]+", "")
-- Set none_is_last_resort_only flag, so that any non-None chars will cause a script other than "None" to be returned.
if require("Modul:scripts").findBestScriptWithoutLang(check_text, true):getCode() ~= "None" then
return nil, true, cats
end
end
text = escape_risky_characters(text)
text = undoTempSubstitutions(text, subbedChars)
-- If the script does not use capitalization, then capitalize any letters of the transliteration which are immediately preceded by a caret (and remove the caret).
if text and not sc:hasCapitalization() and text:find("^", 1, true) then
text = processCarets(text, "%^([\128-\191\244]*%*?)([^\128-\191\244][\128-\191]*)", function(m1, m2)
return m1 .. uupper(m2)
end)
end
-- Track module overrides.
if module_override ~= nil then
track("module_override")
end
fail = text == nil and (not not fail) or false
return text, fail, cats
end
do
local function handle_language_spec(self, spec, sc)
local ret = self["_" .. spec]
if ret == nil then
ret = self._rawData[spec]
if type(ret) == "string" then
ret = list_to_set(split(ret, ",", true, true))
end
self["_" .. spec] = ret
end
if type(ret) == "table" then
ret = ret[sc:getCode()]
end
return not not ret
end
function Language:overrideManualTranslit(sc)
return handle_language_spec(self, "override_translit", sc)
end
function Language:link_tr(sc)
return handle_language_spec(self, "link_tr", sc)
end
end
--[==[Returns {{code|lua|true}} if the language has a transliteration module, or {{code|lua|false}} if it doesn't.]==]
function Language:hasTranslit()
return not not self._rawData.translit
end
--[==[Returns {{code|lua|true}} if the language uses the letters I/ı and İ/i, or {{code|lua|false}} if it doesn't.]==]
function Language:hasDottedDotlessI()
return not not self._rawData.dotted_dotless_i
end
function Language:toJSON(returnTable)
local entryNamePatterns = nil
local entryNameRemoveDiacritics = nil
if self._rawData.entry_name then
entryNameRemoveDiacritics = self._rawData.entry_name.remove_diacritics
if self._rawData.entry_name.from then
entryNamePatterns = {}
for i, from in ipairs(self._rawData.entry_name.from) do
insert(entryNamePatterns, {from = from, to = self._rawData.entry_name.to[i] or ""})
end
end
end
-- mainCode should only end up non-nil if dontCanonicalizeAliases is passed to make_object().
local ret = m_table.deepcopy{
ancestors = self:getAncestorCodes(),
canonicalName = self:getCanonicalName(),
categoryName = self:getCategoryName("nocap"),
code = self._code,
mainCode = self._main_code,
entryNamePatterns = entryNamePatterns,
entryNameRemoveDiacritics = entryNameRemoveDiacritics,
family = self:getFamilyCode(),
otherNames = self:getOtherNames(true),
aliases = self:getAliases(),
varieties = self:getVarieties(),
scripts = self:getScriptCodes(),
parent = self._parentCode or nil,
full = self._fullCode or nil,
type = m_table.keysToList(self:getTypes()),
wikimediaLanguages = self:getWikimediaLanguageCodes(),
wikidataItem = self:getWikidataItem(),
}
if returnTable then
return ret
else
return require("Modul:JSON").toJSON(ret)
end
end
--[==[
<span style="color: #BA0000">This function is not for use in entries or other content pages.</span>
Returns a blob of data about the language. The format of this blob is undocumented, and perhaps unstable; it's intended for things like the module's own unit-tests, which are "close friends" with the module and will be kept up-to-date as the format changes.
-- Do NOT use these methods!
-- All uses should be pre-approved on the talk page!
]==]
function Language:getRawData()
local rawData = {}
for _, element in ipairs(self._stack) do
for k, v in pairs(element) do
rawData[k] = v
end
end
return rawData
end
--[==[<span style="color: #BA0000">This function is not for use in entries or other content pages.</span>
Returns a blob of data about the language that contains the "extra data". Much like with getRawData, the format of this blob is undocumented, and perhaps unstable; it's intended for things like the module's own unit-tests, which are "close friends" with the module and will be kept up-to-date as the format changes.]==]
function Language:getRawExtraData()
if #self._stack == 1 then
self:loadInExtraData()
end
return self._extraData
end
local function getRawExtraLanguageData(self, code)
local modulename = export.getExtraDataModuleName(code)
return modulename and self:loadData("Modul:" .. modulename)[code] or nil
end
function Language:loadInExtraData()
if not self._extraData then
-- load extra data from module and assign to _extraData field
-- use empty table as a fallback if extra data is nil
self._extraData = getRawExtraLanguageData(self, self._code) or {}
end
end
function export.getDataModuleName(code)
local letter = match(code, "^(%l)[%l-]+$")
if not letter then
return nil
elseif find(code, "-", 1, true) then
return "languages/data/exceptional"
end
local code_len = #code
return code_len == 2 and "languages/data/2" or
code_len == 3 and "languages/data/3/" .. letter or nil
end
function export.getExtraDataModuleName(code)
local dataModule = export.getDataModuleName(code)
return dataModule and dataModule .. "/extra" or nil
end
do
local key_types = {
[2] = "unique",
aliases = "unique",
otherNames = "unique",
type = "append",
varieties = "unique"
}
function export.makeObject(code, data, useRequire, dontCanonicalizeAliases)
if not data then
return nil
end
-- Convert any aliases.
local input_code = code
code = normalize_code(code, useRequire)
input_code = dontCanonicalizeAliases and input_code or code
if find(data.type, "family") and not data[5] then
return require("Modul:families").makeObject(code, data, useRequire)
end
local parent
if data[5] then
parent = export.getByCode(data[5], nil, true, true, useRequire)
else
parent = Language
end
parent.__index = parent
local lang = {
_code = input_code,
_useRequire = useRequire or nil
}
-- This can only happen if dontCanonicalizeAliases is passed to make_object().
if code ~= input_code then
lang._main_code = code
end
-- Full language.
if not parent._stack then
-- Create stack, accessed with rawData metamethod.
local stack = parent._rawData and {parent._rawData, data} or {data}
lang._stack = stack
lang._rawData = setmetatable({}, {
__index = function(t, k)
local key_type = key_types[k]
-- Data that isn't inherited from the parent.
if key_type == "unique" then
return stack[#stack][k]
-- Data that is appended by each generation.
elseif key_type == "append" then
local parts = {}
for i = 1, #stack do
insert(parts, stack[i][k])
end
if type(parts[1]) == "string" then
return concat(parts, ","), true
end
-- Otherwise, iterate down the stack, looking for a match.
else
local i = #stack
while not stack[i][k] and i > 1 do
i = i - 1
end
return stack[i][k]
end
end,
-- Retain immutability (as writing to rawData will break functionality).
__newindex = function()
error("not allowed to edit rawData")
end
})
-- Full code is the parent code.
lang._fullCode = parent._code or code
-- Etymology-only.
else
-- Copy over rawData and stack to the new object, and add new layer to stack.
lang._rawData = parent._rawData
lang._stack = parent._stack
insert(lang._stack, data)
-- Copy full code.
lang._fullCode = parent._fullCode
end
return setmetatable(lang, parent)
end
end
--[==[Finds the language whose code matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">paramForError</code> is {{code|lua|true}}, a generic error message mentioning the bad code is generated; otherwise <code class="n">paramForError</code> should be a string or number specifying the parameter that the code came from, and this parameter will be mentioned in the error message along with the bad code. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes.]==]
function export.getByCode(code, paramForError, allowEtymLang, allowFamily, useRequire)
if type(code) ~= "string" then
local typ
if not code then
typ = "nil"
elseif check_object("language", true, code) then
typ = "a language object"
elseif check_object("family", true, code) then
typ = "a family object"
else
typ = "a " .. type(code)
end
error("The function getByCode expects a string as its first argument, but received " .. typ .. ".")
end
local m_data = conditionalRequire("Modul:languages/data", useRequire)
if m_data.aliases[code] or m_data.track[code] then
track(code)
end
local norm_code = normalize_code(code, useRequire)
local modulename = export.getDataModuleName(norm_code)
local data = modulename and
conditionalRequire("Modul:" .. modulename, useRequire)[norm_code] or
(allowEtymLang and require("Modul:etymology languages/track-bad-etym-code")(norm_code) and conditionalRequire("Modul:etymology languages/data", useRequire)[norm_code]) or
(allowFamily and conditionalRequire("Modul:families/data", useRequire)[norm_code]) or
(allowEtymLang and allowFamily and require("Modul:families/track-bad-etym-code")(norm_code) and conditionalRequire("Modul:families/data/etymology", useRequire)[norm_code])
local retval = code and data and export.makeObject(code, data, useRequire)
if not retval and paramForError then
require("Modul:languages/errorGetBy").code(code, paramForError, allowEtymLang, allowFamily)
end
return retval
end
--[==[Finds the language whose canonical name (the name used to represent that language on Wiktionary) or other name matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes.
The canonical name of languages should always be unique (it is an error for two languages on Wiktionary to share the same canonical name), so this is guaranteed to give at most one result.
This function is powered by [[Module:languages/canonical names]], which contains a pre-generated mapping of full-language canonical names to codes. It is generated by going through the [[:Category:Language data modules]] for full languages. When <code class="n">allowEtymLang</code> is specified for the above function, [[Module:etymology languages/canonical names]] may also be used, and when <code class="n">allowFamily</code> is specified for the above function, [[Module:families/canonical names]] may also be used.]==]
function export.getByCanonicalName(name, errorIfInvalid, allowEtymLang, allowFamily, useRequire)
local byName = conditionalRequire("Modul:languages/canonical names", useRequire)
local code = byName and byName[name]
if not code and allowEtymLang then
byName = conditionalRequire("Modul:etymology languages/canonical names", useRequire)
code = byName and byName[name] or
byName[gsub("^[Ss]ubstratum bahasa ", name, "")] or
byName[gsub(name, "", "")] or
byName[gsub(name, "", "")
:gsub("^[Ss]ubstratum bahasa ", "")] or
-- For etymology families like "ira-pro".
-- FIXME: This is not ideal, as it allows " languages" to be appended to any etymology-only language, too.
byName[match(name, "^Bahasa-bahasa (.*)$")]
end
if not code and allowFamily then
byName = conditionalRequire("Modul:families/canonical names", useRequire)
code = byName and byName[name] or
byName[match(name, "^Bahasa-bahasa (.*)$")]
end
local retval = code and export.getByCode(code, errorIfInvalid, allowEtymLang, allowFamily, useRequire)
if not retval and errorIfInvalid then
require("Modul:languages/errorGetBy").canonicalName(name, allowEtymLang, allowFamily)
end
return retval
end
--[==[Used by [[Module:languages/data/2]] (et al.) to add default types to the entities returned.]==]
function export.addDefaultTypes(data, regular, ...)
local n = arg.n
local types = n > 0 and concat(arg, ",") or ""
for _, entity in next, data do
-- "regular" encompasses everything that doesn't have another type already assigned.
if regular then
entity.type = entity.type or "regular"
end
if n > 0 then
entity.type = types .. (entity.type and ("," .. entity.type) or "")
end
end
return data
end
--[==[Used by [[Module:languages/data/2]] (et al.) and [[Module:etymology languages/data]] to finalize language-related data into the format that is actually returned.]==]
function export.finalizeLanguageData(data)
-- 4 is scripts.
local fields = {4, "ancestors", "link_tr", "override_translit", "type", "wikimedia_codes"}
local fields_len = #fields
for _, entity in next, data do
for i = 1, fields_len do
local key = fields[i]
local field = entity[key]
if field and type(field) == "string" then
entity[key] = gsub(field, "%s+", "")
end
end
end
return data
end
--[==[Used by [[Module:etymology languages/data]] and [[Module:families/data/etymology]] to finalize etymology-related data into the format that is actually returned.]==]
function export.finalizeEtymologyData(data)
local aliases = {}
for _, entity in next, data do
-- Move parent to 5 and family to 3.
entity[5] = entity[3]
entity[3] = entity.family
entity.family = nil
end
for code, alias in next, aliases do
data[code] = alias
end
return data
end
--[==[For backwards compatibility only; modules should require the error themselves.]==]
function export.err(lang_code, param, code_desc, template_tag, not_real_lang)
return require("Modul:languages/error")(lang_code, param, code_desc, template_tag, not_real_lang)
end
return export
4ukxzcn7o5ano69s4glkim5d949t7t1
190025
190021
2024-11-12T02:47:18Z
Hakimi97
2668
Mengemas kini kod modul
190025
Scribunto
text/plain
local require = require
local m_str_utils = require("Modul:string utilities")
local m_table = require("Modul:table")
local mw = mw
local string = string
local table = table
local ustring = mw.ustring
local char = string.char
local check_object = require("Modul:utilities").check_object
local concat = table.concat
local decode_entities = m_str_utils.decode_entities
local decode_uri = m_str_utils.decode_uri
local find = string.find
local floor = math.floor
local gmatch = string.gmatch
local gsub = string.gsub
local insert = table.insert
local ipairs = ipairs
local list_to_set = m_table.listToSet
local load_data = mw.loadData
local match = string.match
local next = next
local pairs = pairs
local pattern_escape = m_str_utils.pattern_escape
local remove = table.remove
local remove_duplicates = m_table.removeDuplicates
local replacement_escape = m_str_utils.replacement_escape
local select = select
local setmetatable = setmetatable
local shallowcopy = m_table.shallowcopy
local split = m_str_utils.split
local type = type
local ugsub = ustring.gsub
local ulen = m_str_utils.len
local ulower = m_str_utils.lower
local umatch = ustring.match
local uupper = m_str_utils.upper
-- Loaded as needed by findBestScript.
local Hans_chars
local Hant_chars
local export = {}
--[=[
This module implements fetching of language-specific information and processing text in a given language.
There are two types of languages: full languages and etymology-only languages. The essential difference is that only
full languages appear in L2 headings in vocabulary entries, and hence categories like [[:Category:French nouns]] exist
only for full languages. Etymology-only languages have either a full language or another etymology-only language as
their parent (in the parent-child inheritance sense), and for etymology-only languages with another etymology-only
language as their parent, a full language can always be derived by following the parent links upwards. For example,
"Canadian French", code 'fr-CA', is an etymology-only language whose parent is the full language "French", code 'fr'.
An example of an etymology-only language with another etymology-only parent is "Northumbrian Old English", code
'ang-nor', which has "Anglian Old English", code 'ang-ang' as its parent; this is an etymology-only language whose
parent is "Old English", code "ang", which is a full language. (This is because Northumbrian Old English is considered
a variety of Anglian Old English.) Sometimes the parent is the "Undetermined" language, code 'und'; this is the case,
for example, for "substrate" languages such as "Pre-Greek", code 'qsb-grc', and "the BMAC substrate", code 'qsb-bma'.
It is important to distinguish language ''parents'' from language ''ancestors''. The parent-child relationship is one
of containment, i.e. if X is a child of Y, X is considered a variety of Y. On the other hand, the ancestor-descendant
relationship is one of descent in time. For example, "Classical Latin", code 'la-cla', and "Late Latin", code 'la-lat',
are both etymology-only languages with "Latin", code 'la', as their parents, because both of the former are varieties
of Latin. However, Late Latin does *NOT* have Classical Latin as its parent because Late Latin is *not* a variety of
Classical Latin; rather, it is a descendant. There is in fact a separate 'ancestors' field that is used to express the
ancestor-descendant relationship, and Late Latin's ancestor is given as Classical Latin. It is also important to note
that sometimes an etymology-only language is actually the conceptual ancestor of its parent language. This happens,
for example, with "Old Italian" (code 'roa-oit'), which is an etymology-only variant of full language "Italian" (code
'it'), and with "Old Latin" (code 'itc-ola'), which is an etymology-only variant of Latin. In both cases, the full
language has the etymology-only variant listed as an ancestor. This allows a Latin term to inherit from Old Latin
using the {{tl|inh}} template (where in this template, "inheritance" refers to ancestral inheritance, i.e. inheritance
in time, rather than in the parent-child sense); likewise for Italian and Old Italian.
Full languages come in three subtypes:
* {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted in the
main namespace. There may also be reconstructed terms for the language, which are placed in the
{Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full languages
are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto and Volapük,
among others) are also allowed in the mainspace and considered regular languages.
* {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the
{Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed with
*. Languages such as Proto-Indo-European and Proto-Germanic are in this category.
* {appendix-constructed}: This language is attested but does not meet the additional requirements set out for
constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore be in
the Appendix namespace, but they are not reconstructed and therefore should not have *
prefixed in links. Most constructed languages are of this subtype.
Both full languages and etymology-only languages have a {Language} object associated with them, which is fetched using
the {getByCode} function in [[Module:languages]] to convert a language code to a {Language} object. Depending on the
options supplied to this function, etymology-only languages may or may not be accepted, and family codes may be
accepted (returning a {Family} object as described in [[Module:families]]). There are also separate {getByCanonicalName}
functions in [[Module:languages]] and [[Module:etymology languages]] to convert a language's canonical name to a
{Language} object (depending on whether the canonical name refers to a full or etymology-only language).
Textual strings belonging to a given language come in several different ''text variants'':
# The ''input text'' is what the user supplies in wikitext, in the parameters to {{tl|m}}, {{tl|l}}, {{tl|ux}},
{{tl|t}}, {{tl|lang}} and the like.
# The ''display text'' is the text in the form as it will be displayed to the user. This can include accent marks that
are stripped to form the entry text (see below), as well as embedded bracketed links that are variously processed
further. The display text is generated from the input text by applying language-specific transformations; for most
languages, there will be no such transformations. Examples of transformations are bad-character replacements for
certain languages (e.g. replacing 'l' or '1' to [[palochka]] in certain languages in Cyrillic); and for Thai and
Khmer, converting space-separated words to bracketed words and resolving respelling substitutions such as [กรีน/กฺรีน],
which indicate how to transliterate given words.
# The ''entry text'' is the text in the form used to generate a link to a Wiktionary entry. This is usually generated
from the display text by stripping certain sorts of diacritics on a per-language basis, and sometimes doing other
transformations. The concept of ''entry text'' only really makes sense for text that does not contain embedded links,
meaning that display text containing embedded links will need to have the links individually processed to get
per-link entry text in order to generate the resolved display text (see below).
# The ''resolved display text'' is the result of resolving embedded links in the display text (e.g. converting them to
two-part links where the first part has entry-text transformations applied, and adding appropriate language-specific
fragments) and adding appropriate language and script tagging. This text can be passed directly to MediaWiki for
display.
# The ''source translit text'' is the text as supplied to the language-specific {transliterate()} method. The form of
the source translit text may need to be language-specific, e.g Thai and Khmer will need the full unprocessed input
text, whereas other languages may need to work off the display text. [FIXME: It's still unclear to me how embedded
bracketed links are handled in the existing code.] In general, embedded links need to be removed (i.e. converted to
their "bare display" form by taking the right part of two-part links and removing double brackets), but when this
happens is unclear to me [FIXME]. Some languages have a chop-up-and-paste-together scheme that sends parts of the
text through the transliterate mechanism, and for others (those listed in {contiguous_substition} in
[[Module:languages/data]]) they receive the full input text, but preprocessed in certain ways. (The wisdom of this is
still unclear to me.)
# The ''transliterated text'' (or ''transliteration'') is the result of transliterating the source translit text.
Unlike for all the other text variants except the transcribed text, it is always in the Latin script.
# The ''transcribed text'' (or ''transcription'') is the result of transcribing the source translit text, where
"transcription" here means a close approximation to the phonetic form of the language in languages (e.g. Akkadian,
Sumerian, Ancient Egyptian, maybe Tibetan) that have a wide difference between the written letters and spoken form.
Unlike for all the other text variants other than the transliterated text, it is always in the Latin script.
Currently, the transcribed text is always supplied manually be the user; there is no such thing as a
{lua|transcribe()} method on language objects.
# The ''sort key'' is the text used in sort keys for determining the placing of pages in categories they belong to. The
sort key is generated from the pagename or a specified ''sort base'' by lowercasing, doing language-specific
transformations and then uppercasing the result. If the sort base is supplied and is generated from input text, it
needs to be converted to display text, have embedded links removed (i.e. resolving them to their right side if they
are two-part links) and have entry text transformations applied.
# There are other text variants that occur in usexes (specifically, there are normalized variants of several of the
above text variants), but we can skip them for now.
The following methods exist on {Language} objects to convert between different text variants:
# {makeDisplayText}: This converts input text to display text.
# {lua|makeEntryName}: This converts input or display text to entry text. [FIXME: This needs some rethinking. In
particular, {lua|makeEntryName} is sometimes called on display text (in some paths inside of [[Module:links]]) and
sometimes called on input text (in other paths inside of [[Module:links]], and usually from other modules). We need
to make sure we don't try to convert input text to display text twice, but at the same time we need to support
calling it directly on input text since so many modules do this. This means we need to add a parameter indicating
whether the passed-in text is input or display text; if that former, we call {lua|makeDisplayText} ourselves.]
# {lua|transliterate}: This appears to convert input text with embedded brackets removed into a transliteration.
[FIXME: This needs some rethinking. In particular, it calls {lua|processDisplayText} on its input, which won't work
for Thai and Khmer, so we may need language-specific flags indicating whether to pass the input text directly to the
language transliterate method. In addition, I'm not sure how embedded links are handled in the existing translit code;
a lot of callers remove the links themselves before calling {lua|transliterate()}, which I assume is wrong.]
# {lua|makeSortKey}: This converts entry text (?) to a sort key. [FIXME: Clarify this.]
]=]
local function track(page)
require("Modul:debug/track")("languages/" .. page)
return true
end
local function conditionalRequire(modname, useRequire)
return (useRequire and require or load_data)(modname)
end
local function normalize_code(code, useRequire)
return conditionalRequire("Modul:languages/data", useRequire).aliases[code] or code
end
-- Convert risky characters to HTML entities, which minimizes interference once returned (e.g. for "sms:a", "<!-- -->" etc.).
local function escape_risky_characters(text)
local encode_entities = require("Modul:string/encode entities")
-- Spacing characters in isolation generally need to be escaped in order to be properly processed by the MediaWiki software.
if umatch(text, "^%s*$") then
return encode_entities(text, text)
else
return encode_entities(text, "!#%&*+/:;<=>?@[\\]_{|}")
end
end
-- Temporarily convert various formatting characters to PUA to prevent them from being disrupted by the substitution process.
local function doTempSubstitutions(text, subbedChars, keepCarets, noTrim)
-- Clone so that we don't insert any extra patterns into the table in package.loaded. For some reason, using require seems to keep memory use down; probably because the table is always cloned.
local patterns = shallowcopy(require("Modul:languages/data/patterns"))
if keepCarets then
insert(patterns, "((\\+)%^)")
insert(patterns, "((%^))")
end
-- Ensure any whitespace at the beginning and end is temp substituted, to prevent it from being accidentally trimmed. We only want to trim any final spaces added during the substitution process (e.g. by a module), which means we only do this during the first round of temp substitutions.
if not noTrim then
insert(patterns, "^([\128-\191\244]*(%s+))")
insert(patterns, "((%s+)[\128-\191\244]*)$")
end
-- Pre-substitution, of "[[" and "]]", which makes pattern matching more accurate.
text = gsub(text, "%f[%[]%[%[", "\1")
:gsub("%f[%]]%]%]", "\2")
local i = #subbedChars
for _, pattern in ipairs(patterns) do
-- Patterns ending in \0 stand are for things like "[[" or "]]"), so the inserted PUA are treated as breaks between terms by modules that scrape info from pages.
local term_divider
pattern = gsub(pattern, "%z$", function(divider)
term_divider = divider == "\0"
return ""
end)
text = gsub(text, pattern, function(...)
local m = {...}
local m1New = m[1]
for k = 2, #m do
local n = i + k - 1
subbedChars[n] = m[k]
local byte2 = floor(n / 4096) % 64 + (term_divider and 128 or 136)
local byte3 = floor(n / 64) % 64 + 128
local byte4 = n % 64 + 128
m1New = gsub(m1New, pattern_escape(m[k]), "\244" .. char(byte2) .. char(byte3) .. char(byte4), 1)
end
i = i + #m - 1
return m1New
end)
end
text = gsub(text, "\1", "%[%[")
:gsub("\2", "%]%]")
return text, subbedChars
end
-- Reinsert any formatting that was temporarily substituted.
local function undoTempSubstitutions(text, subbedChars)
for i = 1, #subbedChars do
local byte2 = floor(i / 4096) % 64 + 128
local byte3 = floor(i / 64) % 64 + 128
local byte4 = i % 64 + 128
text = gsub(text, "\244[" .. char(byte2) .. char(byte2+8) .. "]" .. char(byte3) .. char(byte4), replacement_escape(subbedChars[i]))
end
text = gsub(text, "\1", "%[%[")
:gsub("\2", "%]%]")
return text
end
-- Check if the raw text is an unsupported title, and if so return that. Otherwise, remove HTML entities. We do the pre-conversion to avoid loading the unsupported title list unnecessarily.
local function checkNoEntities(self, text)
local textNoEnc = decode_entities(text)
if textNoEnc ~= text and self:loadData("Modul:links/data").unsupported_titles[text] then
return text
else
return textNoEnc
end
end
-- If no script object is provided (or if it's invalid or None), get one.
local function checkScript(text, self, sc)
if not check_object("script", true, sc) or sc:getCode() == "None" then
return self:findBestScript(text)
else
return sc
end
end
local function normalize(text, sc)
text = sc:fixDiscouragedSequences(text)
return sc:toFixedNFD(text)
end
-- Split the text into sections, based on the presence of temporarily substituted formatting characters, then iterate over each one to apply substitutions. This avoids putting PUA characters through language-specific modules, which may be unequipped for them.
local function iterateSectionSubstitutions(text, subbedChars, keepCarets, self, sc, substitution_data, function_name)
local fail, cats, sections = nil, {}
-- See [[Module:languages/data]].
if not find(text, "\244") or self:loadData("Modul:languages/data").contiguous_substitution[self._code] then
sections = {text}
else
sections = split(text, "\244[\128-\143][\128-\191]*", true)
end
for _, section in ipairs(sections) do
-- Don't bother processing empty strings or whitespace (which may also not be handled well by dedicated modules).
if gsub(section, "%s+", "") ~= "" then
local sub, sub_fail, sub_cats = require("Modul:languages/doSubstitutions")(section, self, sc, substitution_data, function_name)
-- Second round of temporary substitutions, in case any formatting was added by the main substitution process. However, don't do this if the section contains formatting already (as it would have had to have been escaped to reach this stage, and therefore should be given as raw text).
if sub and subbedChars then
local noSub
for _, pattern in ipairs(require("Modul:languages/data/patterns")) do
if match(section, pattern .. "%z?") then
noSub = true
end
end
if not noSub then
sub, subbedChars = doTempSubstitutions(sub, subbedChars, keepCarets, true)
end
end
if (not sub) or sub_fail then
text = sub
fail = sub_fail
cats = sub_cats or {}
break
end
text = sub and gsub(text, pattern_escape(section), replacement_escape(sub), 1) or text
if type(sub_cats) == "table" then
for _, cat in ipairs(sub_cats) do
insert(cats, cat)
end
end
end
end
-- Trim, unless there are only spacing characters, while ignoring any final formatting characters.
text = text and text:gsub("^([\128-\191\244]*)%s+(%S)", "%1%2")
:gsub("(%S)%s+([\128-\191\244]*)$", "%1%2")
-- Remove duplicate categories.
if #cats > 1 then
cats = remove_duplicates(cats)
end
return text, fail, cats, subbedChars
end
-- Process carets (and any escapes). Default to simple removal, if no pattern/replacement is given.
local function processCarets(text, pattern, repl)
local rep
repeat
text, rep = gsub(text, "\\\\(\\*^)", "\3%1")
until rep == 0
return text:gsub("\\^", "\4")
:gsub(pattern or "%^", repl or "")
:gsub("\3", "\\")
:gsub("\4", "^")
end
-- Remove carets if they are used to capitalize parts of transliterations (unless they have been escaped).
local function removeCarets(text, sc)
if not sc:hasCapitalization() and sc:isTransliterated() and text:find("^", 1, true) then
return processCarets(text)
else
return text
end
end
local Language = {}
function Language:loadData(modname)
return (self._useRequire and require or mw.loadData)(modname)
end
--[==[Returns the language code of the language. Example: {{code|lua|"fr"}} for French.]==]
function Language:getCode()
return self._code
end
--[==[Returns the canonical name of the language. This is the name used to represent that language on Wiktionary, and is guaranteed to be unique to that language alone. Example: {{code|lua|"French"}} for French.]==]
function Language:getCanonicalName()
local name = self._name
if name == nil then
name = self._rawData[1]
self._name = name
end
return name
end
--[==[
Return the display form of the language. The display form of a language, family or script is the form it takes when
appearing as the <code><var>source</var></code> in categories such as <code>English terms derived from
<var>source</var></code> or <code>English given names from <var>source</var></code>, and is also the displayed text
in {makeCategoryLink()} links. For full and etymology-only languages, this is the same as the canonical name, but
for families, it reads <code>"<var>name</var> languages"</code> (e.g. {"Indo-Iranian languages"}), and for scripts,
it reads <code>"<var>name</var> script"</code> (e.g. {"Arabic script"}).
]==]
function Language:getDisplayForm()
local form = self._displayForm
if form == nil then
form = self:getCanonicalName()
-- Add article and " substrate" to substrates that lack them.
if self:getFamilyCode() == "qfa-sub" then
if not (match(form, "") or match(form, "")) then
form = "substratum bahasa " .. form
end
if not match(form, "[Ss]ubstratum bahasa") then
form = "substratum bahasa " .. form
end
end
self._displayForm = form
end
return form
end
--[==[Returns the value which should be used in the HTML lang= attribute for tagged text in the language.]==]
function Language:getHTMLAttribute(sc, region)
local code = self._code
if not find(code, "-", 1, true) then
return code .. "-" .. sc:getCode() .. (region and "-" .. region or "")
end
local parent = self:getParent()
region = region or match(code, "%f[%u][%u-]+%f[%U]")
if parent then
return parent:getHTMLAttribute(sc, region)
end
-- TODO: ISO family codes can also be used.
return "mis-" .. sc:getCode() .. (region and "-" .. region or "")
end
--[==[Returns a table of the "other names" that the language is known by, excluding the canonical name. The names are not guaranteed to be unique, in that sometimes more than one language is known by the same name. Example: {{code|lua|{"Manx Gaelic", "Northern Manx", "Southern Manx"} }} for [[:Category:Manx language|Manx]]. If <code>onlyOtherNames</code> is given and is non-{{code|lua|nil}}, only names explicitly listed in the <code>otherNames</code> field are returned; otherwise, names listed under <code>otherNames</code>, <code>aliases</code> and <code>varieties</code> are combined together and returned. For example, for Manx, Manx Gaelic is listed as an alias, while Northern Manx and Southern Manx are listed as varieties. It should be noted that the <code>otherNames</code> field itself is deprecated, and entries listed there should eventually be moved to either <code>aliases</code> or <code>varieties</code>.]==]
function Language:getOtherNames(onlyOtherNames)
if #self._stack == 1 then
self:loadInExtraData()
end
return require("Modul:language-like").getOtherNames(self, onlyOtherNames)
end
--[==[Returns a table of the aliases that the language is known by, excluding the canonical name. Aliases are synonyms for the language in question. The names are not guaranteed to be unique, in that sometimes more than one language is known by the same name. Example: {{code|lua|{"High German", "New High German", "Deutsch"} }} for [[:Category:German language|German]].]==]
function Language:getAliases()
if #self._stack == 1 then
self:loadInExtraData()
end
return self._rawData.aliases or (self._extraData and self._extraData.aliases) or {}
end
--[==[
Return a table of the known subvarieties of a given language, excluding subvarieties that have been given
explicit etymology-only language codes. The names are not guaranteed to be unique, in that sometimes a given name
refers to a subvariety of more than one language. Example: {{code|lua|{"Southern Aymara", "Central Aymara"} }} for
[[:Category:Aymara language|Aymara]]. Note that the returned value can have nested tables in it, when a subvariety
goes by more than one name. Example: {{code|lua|{"North Azerbaijani", "South Azerbaijani", {"Afshar", "Afshari",
"Afshar Azerbaijani", "Afchar"}, {"Qashqa'i", "Qashqai", "Kashkay"}, "Sonqor"} }} for
[[:Category:Azerbaijani language|Azerbaijani]]. Here, for example, Afshar, Afshari, Afshar Azerbaijani and Afchar
all refer to the same subvariety, whose preferred name is Afshar (the one listed first). To avoid a return value
with nested tables in it, specify a non-{{code|lua|nil}} value for the <code>flatten</code> parameter; in that case,
the return value would be {{code|lua|{"North Azerbaijani", "South Azerbaijani", "Afshar", "Afshari",
"Afshar Azerbaijani", "Afchar", "Qashqa'i", "Qashqai", "Kashkay", "Sonqor"} }}.
]==]
function Language:getVarieties(flatten)
if #self._stack == 1 then
self:loadInExtraData()
end
return require("Modul:language-like").getVarieties(self, flatten)
end
--[==[Returns a table of types as a lookup table (with the types as keys).
The possible types are
* {language}: This is a language, either full or etymology-only.
* {full}: This is a "full" (not etymology-only) language, i.e. the union of {regular}, {reconstructed} and
{appendix-constructed}. Note that the types {full} and {etymology-only} also exist for families, so if you
want to check specifically for a full language and you have an object that might be a family, you should
use {{lua|hasType("language", "full")}} and not simply {{lua|hasType("full")}}.
* {etymology-only}: This is an etymology-only (not full) language, whose parent is another etymology-only
language or a full language. Note that the types {full} and {etymology-only} also exist for
families, so if you want to check specifically for an etymology-only language and you have an
object that might be a family, you should use {{lua|hasType("language", "etymology-only")}}
and not simply {{lua|hasType("etymology-only")}}.
* {regular}: This indicates a full language that is attested according to [[WT:CFI]] and therefore permitted
in the main namespace. There may also be reconstructed terms for the language, which are placed in
the {Reconstruction} namespace and must be prefixed with * to indicate a reconstruction. Most full
languages are natural (not constructed) languages, but a few constructed languages (e.g. Esperanto
and Volapük, among others) are also allowed in the mainspace and considered regular languages.
* {reconstructed}: This language is not attested according to [[WT:CFI]], and therefore is allowed only in the
{Reconstruction} namespace. All terms in this language are reconstructed, and must be prefixed
with *. Languages such as Proto-Indo-European and Proto-Germanic are in this category.
* {appendix-constructed}: This language is attested but does not meet the additional requirements set out for
constructed languages ([[WT:CFI#Constructed languages]]). Its entries must therefore
be in the Appendix namespace, but they are not reconstructed and therefore should
not have * prefixed in links.
]==]
function Language:getTypes()
local types = self._types
if types == nil then
types = {language = true}
if self:getFullCode() == self._code then
types.full = true
else
types["etymology-only"] = true
end
for t in gmatch(self._rawData.type, "[^,]+") do
types[t] = true
end
self._types = types
end
return types
end
--[==[Given a list of types as strings, returns true if the language has all of them.]==]
function Language:hasType(...)
local args, types = {...}, self:getTypes()
for i = 1, #args do
if not types[args[i]] then
return false
end
end
return true
end
--[==[Returns a table containing <code>WikimediaLanguage</code> objects (see [[Module:wikimedia languages]]), which represent languages and their codes as they are used in Wikimedia projects for interwiki linking and such. More than one object may be returned, as a single Wiktionary language may correspond to multiple Wikimedia languages. For example, Wiktionary's single code <code>sh</code> (Serbo-Croatian) maps to four Wikimedia codes: <code>sh</code> (Serbo-Croatian), <code>bs</code> (Bosnian), <code>hr</code> (Croatian) and <code>sr</code> (Serbian).
The code for the Wikimedia language is retrieved from the <code>wikimedia_codes</code> property in the data modules. If that property is not present, the code of the current language is used. If none of the available codes is actually a valid Wikimedia code, an empty table is returned.]==]
function Language:getWikimediaLanguages()
local wm_langs = self._wikimediaLanguageObjects
if wm_langs == nil then
local get_wm_lang = require("Modul:wikimedia languages").getByCode
local codes = self:getWikimediaLanguageCodes()
wm_langs = {}
for i = 1, #codes do
wm_langs[i] = get_wm_lang(codes[i])
end
self._wikimediaLanguageObjects = wm_langs
end
return wm_langs
end
function Language:getWikimediaLanguageCodes()
local wm_langs = self._wikimediaLanguageCodes
if wm_langs == nil then
wm_langs = self._rawData.wikimedia_codes
wm_langs = wm_langs and split(wm_langs, ",", true, true) or {self._code}
self._wikimediaLanguageCodes = wm_langs
end
return wm_langs
end
--[==[
Returns the name of the Wikipedia article for the language. `project` specifies the language and project to retrieve
the article from, defaulting to {"enwiki"} for the English Wikipedia. Normally if specified it should be the project
code for a specific-language Wikipedia e.g. "zhwiki" for the Chinese Wikipedia, but it can be any project, including
non-Wikipedia ones. If the project is the English Wikipedia and the property {wikipedia_article} is present in the data
module it will be used first. In all other cases, a sitelink will be generated from {:getWikidataItem} (if set). The
resulting value (or lack of value) is cached so that subsequent calls are fast. If no value could be determined, and
`noCategoryFallback` is {false}, {:getCategoryName} is used as fallback; otherwise, {nil} is returned. Note that if
`noCategoryFallback` is {nil} or omitted, it defaults to {false} if the project is the English Wikipedia, otherwise
to {true}. In other words, under normal circumstances, if the English Wikipedia article couldn't be retrieved, the
return value will fall back to a link to the language's category, but this won't normally happen for any other project.
]==]
function Language:getWikipediaArticle(noCategoryFallback, project)
project = project or "mswiki"
local cached_value
if project == "mswiki" then
cached_value = self._wikipedia_article
if cached_value == nil then
cached_value = self._rawData.wikipedia_article
end
else
-- If the project isn't enwiki, default to no category fallback, but this can be overridden by specifying the
-- value `false`.
if noCategoryFallback == nil then
noCategoryFallback = true
end
if self._non_en_wikipedia_articles == nil then
self._non_en_wikipedia_articles = {}
end
cached_value = self._non_en_wikipedia_articles[project]
end
if cached_value == nil then -- not false
local item = self:getWikidataItem()
if item and mw.wikibase then
cached_value = mw.wikibase.sitelink(item, project)
end
if not cached_value then
cached_value = false
end
end
-- Now cache the determined value.
if project == "mswiki" then
self._wikipedia_article = cached_value
else
self._non_en_wikipedia_articles[project] = cached_value
end
if not cached_value and not noCategoryFallback then
return gsub(self:getCategoryName(), "Bahasa kreol", "Kreol")
end
return cached_value or nil
end
function Language:makeWikipediaLink()
return "[[w:" .. self:getWikipediaArticle() .. "|" .. self:getCanonicalName() .. "]]"
end
--[==[Returns the name of the Wikimedia Commons category page for the language.]==]
function Language:getCommonsCategory()
return require("Module:language-like").getCommonsCategory(self)
end
--[==[Returns the Wikidata item id for the language or <code>nil</code>. This corresponds to the the second field in the data modules.]==]
function Language:getWikidataItem()
local item = self._WikidataItem
if item == nil then
item = self._rawData[2]
-- If the value is nil, it's cached as false.
item = item ~= nil and (type(item) == "number" and "Q" .. item or item) or false
self._WikidataItem = item
end
return item or nil
end
--[==[Returns a table of <code>Script</code> objects for all scripts that the language is written in. See [[Module:scripts]].]==]
function Language:getScripts()
local scripts = self._scriptObjects
if scripts == nil then
local codes = self:getScriptCodes()
if codes[1] == "All" then
scripts = self:loadData("Modul:scripts/data")
else
local get_script = require("Modul:scripts").getByCode
scripts = {}
for i = 1, #codes do
scripts[i] = get_script(codes[i], nil, nil, self._useRequire)
end
end
self._scriptObjects = scripts
end
return scripts
end
--[==[Returns the table of script codes in the language's data file.]==]
function Language:getScriptCodes()
local scripts = self._scriptCodes
if scripts == nil then
scripts = self._rawData[4]
if scripts then
local codes, n = {}, 0
for code in gmatch(scripts, "[^,]+") do
n = n + 1
-- Special handling of "Hants", which represents "Hani", "Hant" and "Hans" collectively.
if code == "Hants" then
codes[n] = "Hani"
codes[n + 1] = "Hant"
codes[n + 2] = "Hans"
n = n + 2
else
codes[n] = code
end
end
scripts = codes
else
scripts = {"None"}
end
self._scriptCodes = scripts
end
return scripts
end
--[==[Given some text, this function iterates through the scripts of a given language and tries to find the script that best matches the text. It returns a {{code|lua|Script}} object representing the script. If no match is found at all, it returns the {{code|lua|None}} script object.]==]
function Language:findBestScript(text, forceDetect)
local useRequire = self._useRequire
if not text or text == "" or text == "-" then
return require("Modul:scripts").getByCode("None", nil, nil, useRequire)
end
-- Differs from table returned by getScriptCodes, as Hants is not normalized into its constituents.
local codes = self._bestScriptCodes
if codes == nil then
codes = self._rawData[4]
codes = codes and split(codes, ",", true, true) or {"None"}
self._bestScriptCodes = codes
end
local first_sc = codes[1]
if first_sc == "All" then
return require("Modul:scripts").findBestScriptWithoutLang(text)
end
local get_script = require("Modul:scripts").getByCode
local codes_len = #codes
if not (forceDetect or first_sc == "Hants" or codes_len > 1) then
first_sc = get_script(first_sc, nil, nil, useRequire)
local charset = first_sc.characters
return charset and umatch(text, "[" .. charset .. "]") and first_sc or
get_script("None", nil, nil, useRequire)
end
-- Remove all formatting characters.
text = require("Modul:utilities").get_plaintext(text)
-- Remove all spaces and any ASCII punctuation. Some non-ASCII punctuation is script-specific, so can't be removed.
text = ugsub(text, "[%s!\"#%%&'()*,%-./:;?@[\\%]_{}]+", "")
if #text == 0 then
return get_script("None", nil, nil, useRequire)
end
-- Try to match every script against the text,
-- and return the one with the most matching characters.
local bestcount, bestscript, length = 0
for i = 1, codes_len do
local sc = codes[i]
-- Special case for "Hants", which is a special code that represents whichever of "Hant" or "Hans" best matches, or "Hani" if they match equally. This avoids having to list all three. In addition, "Hants" will be treated as the best match if there is at least one matching character, under the assumption that a Han script is desirable in terms that contain a mix of Han and other scripts (not counting those which use Jpan or Kore).
if sc == "Hants" then
local Hani = get_script("Hani", nil, nil, useRequire)
if not Hant_chars then
Hant_chars = self:loadData("Modul:zh/data/ts")
Hans_chars = self:loadData("Modul:zh/data/st")
end
local t, s, found = 0, 0
-- This is faster than using mw.ustring.gmatch directly.
for ch in gmatch(ugsub(text, "[" .. Hani.characters .. "]", "\255%0"), "\255(.[\128-\191]*)") do
found = true
if Hant_chars[ch] then
t = t + 1
if Hans_chars[ch] then
s = s + 1
end
elseif Hans_chars[ch] then
s = s + 1
else
t, s = t + 1, s + 1
end
end
if found then
if t == s then
return Hani
end
return get_script(t > s and "Hant" or "Hans", nil, nil, useRequire)
end
else
sc = get_script(sc, nil, nil, useRequire)
if not length then
length = ulen(text)
end
-- Count characters by removing everything in the script's charset and comparing to the original length.
local charset = sc.characters
local count = charset and length - ulen(ugsub(text, "[" .. charset .. "]+", "")) or 0
if count >= length then
return sc
elseif count > bestcount then
bestcount = count
bestscript = sc
end
end
end
-- Return best matching script, or otherwise None.
return bestscript or get_script("None", nil, nil, useRequire)
end
--[==[Returns a <code>Family</code> object for the language family that the language belongs to. See [[Module:families]].]==]
function Language:getFamily()
local family = self._familyObject
if family == nil then
family = self:getFamilyCode()
-- If the value is nil, it's cached as false.
family = family and require("Modul:families").getByCode(family, self._useRequire) or false
self._familyObject = family
end
return family or nil
end
--[==[Returns the family code in the language's data file.]==]
function Language:getFamilyCode()
local family = self._familyCode
if family == nil then
-- If the value is nil, it's cached as false.
family = self._rawData[3] or false
self._familyCode = family
end
return family or nil
end
function Language:getFamilyName()
local family = self._familyName
if family == nil then
family = self:getFamily()
-- If the value is nil, it's cached as false.
family = family and family:getCanonicalName() or false
self._familyName = family
end
return family or nil
end
--[==[Check whether the language belongs to `family` (which can be a family code or object). A list of objects can be given in place of `family`; in that case, return true if the language belongs to any of the specified families. Note that some languages (in particular, certain creoles) can have multiple immediate ancestors potentially belonging to different families; in that case, return true if the language belongs to any of the specified families.]==]
function Language:inFamily(...)
--check_object("family", nil, ...)
for _, family in ipairs{...} do
if type(family) == "table" then
family = family:getCode()
end
local self_family_code = self:getFamilyCode()
if not self_family_code then
return false
elseif self_family_code == family then
return true
end
local self_family = self:getFamily()
if self_family:inFamily(family) then
return true
-- If the family isn't a real family (e.g. creoles) check any ancestors.
elseif self_family:getFamilyCode() == "qfa-not" then
local ancestors = self:getAncestors()
for _, ancestor in ipairs(ancestors) do
if ancestor:inFamily(family) then
return true
end
end
end
end
return false
end
function Language:getParent()
local parent = self._parentObject
if parent == nil then
parent = self:getParentCode()
-- If the value is nil, it's cached as false.
parent = parent and export.getByCode(parent, nil, true, true, self._useRequire) or false
self._parentObject = parent
end
return parent or nil
end
function Language:getParentCode()
local parent = self._parentCode
if parent == nil then
-- If the value is nil, it's cached as false.
parent = self._rawData[5] or false
self._parentCode = parent
end
return parent or nil
end
function Language:getParentName()
local parent = self._parentName
if parent == nil then
parent = self:getParent()
-- If the value is nil, it's cached as false.
parent = parent and parent:getCanonicalName() or false
self._parentName = parent
end
return parent or nil
end
function Language:getParentChain()
local chain = self._parentChain
if chain == nil then
chain = {}
local parent, n = self:getParent(), 0
while parent do
n = n + 1
chain[n] = parent
parent = parent:getParent()
end
self._parentChain = chain
end
return chain
end
function Language:hasParent(...)
--check_object("language", nil, ...)
for _, otherlang in ipairs{...} do
for _, parent in ipairs(self:getParentChain()) do
if type(otherlang) == "string" then
if otherlang == parent:getCode() then return true end
else
if otherlang:getCode() == parent:getCode() then return true end
end
end
end
return false
end
--[==[
If the language is etymology-only, this iterates through parents until a full language or family is found, and the
corresponding object is returned. If the language is a full language, then it simply returns itself.
]==]
function Language:getFull()
local full = self._fullObject
if full == nil then
full = self:getFullCode()
full = full == self._code and self or
export.getByCode(full, nil, nil, nil, self._useRequire)
self._fullObject = full
end
return full
end
--[==[
If the language is an etymology-only language, this iterates through parents until a full language or family is
found, and the corresponding code is returned. If the language is a full language, then it simply returns the
language code.
]==]
function Language:getFullCode()
return self._fullCode or self._code
end
--[==[
If the language is an etymology-only language, this iterates through parents until a full language or family is
found, and the corresponding canonical name is returned. If the language is a full language, then it simply returns
the canonical name of the language.
]==]
function Language:getFullName()
local full = self._fullName
if full == nil then
full = self:getFull():getCanonicalName()
self._fullName = full
end
return full
end
--[==[Returns a table of <code class="nf">Language</code> objects for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==]
function Language:getAncestors()
if not self._ancestorObjects then
self._ancestorObjects = {}
local ancestors = shallowcopy(self:getAncestorCodes())
if #ancestors > 0 then
for _, ancestor in ipairs(ancestors) do
insert(self._ancestorObjects, export.getByCode(ancestor, nil, true, nil, self._useRequire))
end
else
local fam = self:getFamily()
local protoLang = fam and fam:getProtoLanguage() or nil
-- For the cases where the current language is the proto-language
-- of its family, or an etymology-only language that is ancestral to that
-- proto-language, we need to step up a level higher right from the
-- start.
if protoLang and (
protoLang:getCode() == self._code or
(self:hasType("etymology-only") and protoLang:hasAncestor(self))
) then
fam = fam:getFamily()
protoLang = fam and fam:getProtoLanguage() or nil
end
while not protoLang and not (not fam or fam:getCode() == "qfa-not") do
fam = fam:getFamily()
protoLang = fam and fam:getProtoLanguage() or nil
end
insert(self._ancestorObjects, protoLang)
end
end
return self._ancestorObjects
end
do
-- Avoid a language being its own ancestor via class inheritance. We only need to check for this if the language has inherited an ancestor table from its parent, because we never want to drop ancestors that have been explicitly set in the data.
-- Recursively iterate over ancestors until we either find self or run out. If self is found, return true.
local function check_ancestor(self, lang)
local codes = lang:getAncestorCodes()
if not codes then
return nil
end
for i = 1, #codes do
local code = codes[i]
if code == self._code then
return true
end
local anc = export.getByCode(code, nil, true, nil, self._useRequire)
if check_ancestor(self, anc) then
return true
end
end
end
--[==[Returns a table of <code class="nf">Language</code> codes for all languages that this language is directly descended from. Generally this is only a single language, but creoles, pidgins and mixed languages can have multiple ancestors.]==]
function Language:getAncestorCodes()
if self._ancestorCodes then
return self._ancestorCodes
end
local codes = self._rawData.ancestors
if not codes then
codes = {}
self._ancestorCodes = codes
return codes
end
codes = split(codes, ",", true, true)
self._ancestorCodes = codes
if (
#codes == 0 or
#self._stack == 1 or
self._stack[#self._stack].ancestors
) then
return codes
end
local i, code = 1
while i <= #codes do
code = codes[i]
if check_ancestor(self, self) then
remove(codes, i)
else
i = i + 1
end
end
return codes
end
end
--[==[Given a list of language objects or codes, returns true if at least one of them is an ancestor. This includes any etymology-only children of that ancestor. If the language's ancestor(s) are etymology-only languages, it will also return true for those language parent(s) (e.g. if Vulgar Latin is the ancestor, it will also return true for its parent, Latin). However, a parent is excluded from this if the ancestor is also ancestral to that parent (e.g. if Classical Persian is the ancestor, Persian would return false, because Classical Persian is also ancestral to Persian).]==]
function Language:hasAncestor(...)
--check_object("language", nil, ...)
local function iterateOverAncestorTree(node, func, parent_check)
local ancestors = node:getAncestors()
local ancestorsParents = {}
for _, ancestor in ipairs(ancestors) do
local ret = func(ancestor) or iterateOverAncestorTree(ancestor, func, parent_check)
if ret then return ret end
end
-- Check the parents of any ancestors. We don't do this if checking the parents of the other language, so that we exclude any etymology-only children of those parents that are not directly related (e.g. if the ancestor is Vulgar Latin and we are checking New Latin, we want it to return false because they are on different ancestral branches. As such, if we're already checking the parent of New Latin (Latin) we don't want to compare it to the parent of the ancestor (Latin), as this would be a false positive; it should be one or the other).
if not parent_check then
return nil
end
for _, ancestor in ipairs(ancestors) do
local ancestorParents = ancestor:getParentChain()
for _, ancestorParent in ipairs(ancestorParents) do
if ancestorParent:getCode() == self._code or ancestorParent:hasAncestor(ancestor) then
break
else
insert(ancestorsParents, ancestorParent)
end
end
end
for _, ancestorParent in ipairs(ancestorsParents) do
local ret = func(ancestorParent)
if ret then return ret end
end
end
local function do_iteration(otherlang, parent_check)
-- otherlang can't be self
if (type(otherlang) == "string" and otherlang or otherlang:getCode()) == self._code then
return false
end
repeat
if iterateOverAncestorTree(
self,
function(ancestor)
return ancestor:getCode() == (type(otherlang) == "string" and otherlang or otherlang:getCode())
end,
parent_check
) then
return true
elseif type(otherlang) == "string" then
otherlang = export.getByCode(otherlang, nil, true, nil, self._useRequire)
end
otherlang = otherlang:getParent()
parent_check = false
until not otherlang
end
local parent_check = true
for _, otherlang in ipairs{...} do
local ret = do_iteration(otherlang, parent_check)
if ret then
return true
end
end
return false
end
function Language:getAncestorChain()
if not self._ancestorChain then
self._ancestorChain = {}
local step = self
while true do
local ancestors = step:getAncestors()
step = #ancestors == 1 and ancestors[1] or nil
if not step then break end
insert(self._ancestorChain, 1, step)
end
end
return self._ancestorChain
end
local function fetch_descendants(self, format)
local languages = require("Modul:languages/code to canonical name")
local etymology_languages = require("Modul:etymology languages/code to canonical name")
local families = require("Modul:families/code to canonical name")
local descendants = {}
local family = self:getFamily()
-- Iterate over all three datasets.
for _, data in ipairs{languages, etymology_languages, families} do
for code in pairs(data) do
local lang = export.getByCode(code, nil, true, true, self._useRequire)
-- Test for a descendant. Earlier tests weed out most candidates, while the more intensive tests are only used sparingly.
if (
code ~= self._code and -- Not self.
lang:inFamily(family) and -- In the same family.
(
family:getProtoLanguageCode() == self._code or -- Self is the protolanguage.
self:hasDescendant(lang) or -- Full hasDescendant check.
(lang:getFullCode() == self._code and not self:hasAncestor(lang)) -- Etymology-only child which isn't an ancestor.
)
) then
if format == "object" then
insert(descendants, lang)
elseif format == "code" then
insert(descendants, code)
elseif format == "name" then
insert(descendants, lang:getCanonicalName())
end
end
end
end
return descendants
end
function Language:getDescendants()
if not self._descendantObjects then
self._descendantObjects = fetch_descendants(self, "object")
end
return self._descendantObjects
end
function Language:getDescendantCodes()
if not self._descendantCodes then
self._descendantCodes = fetch_descendants(self, "code")
end
return self._descendantCodes
end
function Language:getDescendantNames()
if not self._descendantNames then
self._descendantNames = fetch_descendants(self, "name")
end
return self._descendantNames
end
function Language:hasDescendant(...)
for _, lang in ipairs{...} do
if type(lang) == "string" then
lang = export.getByCode(lang, nil, true, nil, self._useRequire)
end
if lang:hasAncestor(self) then
return true
end
end
return false
end
local function fetch_children(self, format)
local m_etym_data = require("Modul:etymology languages/data")
local self_code = self._code
local children = {}
for code, data in pairs(m_etym_data) do
local _data = data
repeat
local parent = _data[5]
if parent == self_code then
if format == "object" then
insert(children, export.getByCode(code, nil, true, nil, self._useRequire))
elseif format == "code" then
insert(children, code)
elseif format == "name" then
insert(children, data[1])
end
break
end
_data = m_etym_data[parent]
until not _data
end
return children
end
function Language:getChildren()
if not self._childObjects then
self._childObjects = fetch_children(self, "object")
end
return self._childObjects
end
function Language:getChildrenCodes()
if not self._childCodes then
self._childCodes = fetch_children(self, "code")
end
return self._childCodes
end
function Language:getChildrenNames()
if not self._childNames then
self._childNames = fetch_children(self, "name")
end
return self._childNames
end
function Language:hasChild(...)
local lang = ...
if not lang then
return false
elseif type(lang) == "string" then
lang = export.getByCode(lang, nil, true, nil, self._useRequire)
end
if lang:hasParent(self) then
return true
end
return self:hasChild(select(2, ...))
end
--[==[Returns the name of the main category of that language. Example: {{code|lua|"French language"}} for French, whose category is at [[:Category:French language]]. Unless optional argument <code>nocap</code> is given, the language name at the beginning of the returned value will be capitalized. This capitalization is correct for category names, but not if the language name is lowercase and the returned value of this function is used in the middle of a sentence.]==]
function Language:getCategoryName(nocap)
if not self._categoryName then
local name = self:getCanonicalName()
-- Only add " language" if a full language.
if #self._stack == 1 then
-- If the name already has "language" in it, don't add it.
if not match(name, "^[Bb]ahasa ") then
name = "Bahasa " .. name
end
end
self._categoryName = name
end
if nocap then
return self._categoryName
else
return mw.getContentLanguage():ucfirst(self._categoryName)
end
end
--[==[Creates a link to the category; the link text is the canonical name.]==]
function Language:makeCategoryLink()
return "[[:Kategori:" .. self:getCategoryName() .. "|" .. self:getDisplayForm() .. "]]"
end
function Language:getStandardCharacters(sc)
if type(self._rawData.standardChars) ~= "table" then
return self._rawData.standardChars
else
if sc and type(sc) ~= "string" then
check_object("script", nil, sc)
sc = sc:getCode()
end
if (not sc) or sc == "None" then
local scripts = {}
for _, script in pairs(self._rawData.standardChars) do
insert(scripts, script)
end
return concat(scripts)
end
if self._rawData.standardChars[sc] then
return self._rawData.standardChars[sc] .. (self._rawData.standardChars[1] or "")
end
end
end
--[==[Make the entry name (i.e. the correct page name).]==]
function Language:makeEntryName(text, sc)
if (not text) or text == "" then
return text, nil, {}
end
-- Set `unsupported` as true if certain conditions are met.
local unsupported
-- Check if there's an unsupported character. \239\191\189 is the replacement character U+FFFD, which can't be typed directly here due to an abuse filter. Unix-style dot-slash notation is also unsupported, as it is used for relative paths in links, as are 3 or more consecutive tildes.
-- Note: match is faster with magic characters/charsets; find is faster with plaintext.
if (
match(text, "[#<>%[%]_{|}]") or
find(text, "\239\191\189") or
match(text, "%f[^%z/]%.%.?%f[%z/]") or
find(text, "~~~")
) then
unsupported = true
-- If it looks like an interwiki link.
elseif find(text, ":") then
local prefix = gsub(text, "^:*(.-):.*", ulower)
if (
self:loadData("Modul:data/namespaces")[prefix] or
self:loadData("Modul:data/interwikis")[prefix]
) then
unsupported = true
end
end
-- Check if the text is a listed unsupported title.
local unsupportedTitles = self:loadData("Modul:links/data").unsupported_titles
if unsupportedTitles[text] then
return "Unsupported titles/" .. unsupportedTitles[text], nil, {}
end
sc = checkScript(text, self, sc)
local fail, cats
text = normalize(text, sc)
text, fail, cats = iterateSectionSubstitutions(text, nil, nil, self, sc, self._rawData.entry_name, "makeEntryName")
text = umatch(text, "^[¿¡]?(.-[^%s%p].-)%s*[؟?!;՛՜ ՞ ՟?!︖︕।॥။၊་།]?$") or text
-- Escape unsupported characters so they can be used in titles. ` is used as a delimiter for this, so a raw use of it in an unsupported title is also escaped here to prevent interference; this is only done with unsupported titles, though, so inclusion won't in itself mean a title is treated as unsupported (which is why it's excluded from the earlier test).
if unsupported then
local unsupported_characters = self:loadData("Modul:links/data").unsupported_characters
text = text:gsub("[#<>%[%]_`{|}\239]\191?\189?", unsupported_characters)
:gsub("%f[^%z/]%.%.?%f[%z/]", function(m)
return gsub(m, "%.", "`period`")
end)
:gsub("~~~+", function(m)
return gsub(m, "~", "`tilde`")
end)
text = "Unsupported titles/" .. text
end
return text, fail, cats
end
--[==[Generates alternative forms using a specified method, and returns them as a table. If no method is specified, returns a table containing only the input term.]==]
function Language:generateForms(text, sc)
if self._rawData.generate_forms then
sc = checkScript(text, self, sc)
return require("Modul:" .. self._rawData.generate_forms).generateForms(text, self._code, sc:getCode())
else
return {text}
end
end
--[==[Creates a sort key for the given entry name, following the rules appropriate for the language. This removes diacritical marks from the entry name if they are not considered significant for sorting, and may perform some other changes. Any initial hyphen is also removed, and anything parentheses is removed as well.
The <code>sort_key</code> setting for each language in the data modules defines the replacements made by this function, or it gives the name of the module that takes the entry name and returns a sortkey.]==]
function Language:makeSortKey(text, sc)
if (not text) or text == "" then
return text, nil, {}
end
if match(text, "<[^<>]+>") then
track("track HTML tag")
end
-- Remove directional characters, soft hyphens, strip markers and HTML tags.
text = ugsub(text, "[\194\173\226\128\170-\226\128\174\226\129\166-\226\129\169]", "")
text = gsub(mw.text.unstrip(text), "<[^<>]+>", "")
text = decode_uri(text, "PATH")
text = checkNoEntities(self, text)
-- Remove initial hyphens and * unless the term only consists of spacing + punctuation characters.
text = ugsub(text, "^([-]*)[-־ـ᠊*]+([-]*)(.*[^%s%p].*)", "%1%2%3")
sc = checkScript(text, self, sc)
text = normalize(text, sc)
text = removeCarets(text, sc)
-- For languages with dotted dotless i, ensure that "İ" is sorted as "i", and "I" is sorted as "ı".
if self:hasDottedDotlessI() then
text = gsub(text, "I\204\135", "i") -- decomposed "İ"
:gsub("I", "ı")
text = sc:toFixedNFD(text)
end
-- Convert to lowercase, make the sortkey, then convert to uppercase. Where the language has dotted dotless i, it is usually not necessary to convert "i" to "İ" and "ı" to "I" first, because "I" will always be interpreted as conventional "I" (not dotless "İ") by any sorting algorithms, which will have been taken into account by the sortkey substitutions themselves. However, if no sortkey substitutions have been specified, then conversion is necessary so as to prevent "i" and "ı" both being sorted as "I".
-- An exception is made for scripts that (sometimes) sort by scraping page content, as that means they are sensitive to changes in capitalization (as it changes the target page).
local fail, cats
if not sc:sortByScraping() then
text = ulower(text)
end
text, fail, cats = iterateSectionSubstitutions(text, nil, nil, self, sc, self._rawData.sort_key, "makeSortKey")
if not sc:sortByScraping() then
if self:hasDottedDotlessI() and not self._rawData.sort_key then
text = gsub(gsub(text, "ı", "I"), "i", "İ")
text = sc:toFixedNFC(text)
end
text = uupper(text)
end
-- Remove parentheses, as long as they are either preceded or followed by something.
text = gsub(text, "(.)[()]+", "%1")
:gsub("[()]+(.)", "%1")
text = escape_risky_characters(text)
return text, fail, cats
end
--[==[Create the form used as as a basis for display text and transliteration.]==]
local function processDisplayText(text, self, sc, keepCarets, keepPrefixes)
local subbedChars = {}
text, subbedChars = doTempSubstitutions(text, subbedChars, keepCarets)
text = decode_uri(text, "PATH")
text = checkNoEntities(self, text)
sc = checkScript(text, self, sc)
local fail, cats
text = normalize(text, sc)
text, fail, cats, subbedChars = iterateSectionSubstitutions(text, subbedChars, keepCarets, self, sc, self._rawData.display_text, "makeDisplayText")
text = removeCarets(text, sc)
-- Remove any interwiki link prefixes (unless they have been escaped or this has been disabled).
if find(text, ":") and not keepPrefixes then
local rep
repeat
text, rep = gsub(text, "\\\\(\\*:)", "\3%1")
until rep == 0
text = gsub(text, "\\:", "\4")
while true do
local prefix = gsub(text, "^(.-):.+", function(m1)
return gsub(m1, "\244[\128-\191]*", "")
end)
if not prefix or prefix == text then
break
end
local lower_prefix = ulower(prefix)
if not (self:loadData("Modul:data/interwikis")[lower_prefix] or prefix == "") then
break
end
text = gsub(text, "^(.-):(.*)", function(m1, m2)
local ret = {}
for subbedChar in gmatch(m1, "\244[\128-\191]*") do
insert(ret, subbedChar)
end
return concat(ret) .. m2
end)
end
text = gsub(text, "\3", "\\")
:gsub("\4", ":")
end
return text, fail, cats, subbedChars
end
--[==[Make the display text (i.e. what is displayed on the page).]==]
function Language:makeDisplayText(text, sc, keepPrefixes)
if (not text) or text == "" then
return text, nil, {}
end
local fail, cats, subbedChars
text, fail, cats, subbedChars = processDisplayText(text, self, sc, nil, keepPrefixes)
text = escape_risky_characters(text)
return undoTempSubstitutions(text, subbedChars), fail, cats
end
--[==[Transliterates the text from the given script into the Latin script (see [[Wiktionary:Transliteration and romanization]]). The language must have the <code>translit</code> property for this to work; if it is not present, {{code|lua|nil}} is returned.
Returns three values:
# The transliteration.
# A boolean which indicates whether the transliteration failed for an unexpected reason. If {{code|lua|false}}, then the transliteration either succeeded, or the module is returning nothing in a controlled way (e.g. the input was {{code|lua|"-"}}). Generally, this means that no maintenance action is required. If {{code|lua|true}}, then the transliteration is {{code|lua|nil}} because either the input or output was defective in some way (e.g. [[Module:ar-translit]] will not transliterate non-vocalised inputs, and this module will fail partially-completed transliterations in all languages). Note that this value can be manually set by the transliteration module, so make sure to cross-check to ensure it is accurate.
# A table of categories selected by the transliteration module, which should be in the format expected by {{code|lua|format_categories}} in [[Module:utilities]].
The <code>sc</code> parameter is handled by the transliteration module, and how it is handled is specific to that module. Some transliteration modules may tolerate {{code|lua|nil}} as the script, others require it to be one of the possible scripts that the module can transliterate, and will show an error if it's not one of them. For this reason, the <code>sc</code> parameter should always be provided when writing non-language-specific code.
The <code>module_override</code> parameter is used to override the default module that is used to provide the transliteration. This is useful in cases where you need to demonstrate a particular module in use, but there is no default module yet, or you want to demonstrate an alternative version of a transliteration module before making it official. It should not be used in real modules or templates, only for testing. All uses of this parameter are tracked by [[Wiktionary:Tracking/module_override]].
'''Known bugs''':
* This function assumes {tr(s1) .. tr(s2) == tr(s1 .. s2)}. When this assertion fails, wikitext markups like <nowiki>'''</nowiki> can cause wrong transliterations.
* HTML entities like <code>&apos;</code>, often used to escape wikitext markups, do not work.]==]
function Language:transliterate(text, sc, module_override)
-- If there is no text, or the language doesn't have transliteration data and there's no override, return nil.
if not (self._rawData.translit or module_override) then
return nil, false, {}
elseif (not text) or text == "" or text == "-" then
return text, false, {}
end
-- If the script is not transliteratable (and no override is given), return nil.
sc = checkScript(text, self, sc)
if not (sc:isTransliterated() or module_override) then
-- temporary tracking to see if/when this gets triggered
track("non-transliterable")
track("non-transliterable/" .. self:getCode())
track("non-transliterable/" .. sc:getCode())
track("non-transliterable/" .. sc:getCode() .. "/" .. self:getCode())
return nil, true, {}
end
-- Remove any strip markers.
text = mw.text.unstrip(text)
-- Get the display text with the keepCarets flag set.
local fail, cats, subbedChars
text, fail, cats, subbedChars = processDisplayText(text, self, sc, true)
-- Transliterate (using the module override if applicable).
text, fail, cats, subbedChars = iterateSectionSubstitutions(text, subbedChars, true, self, sc, module_override or self._rawData.translit, "tr")
if not text then
return nil, true, cats
end
-- Incomplete transliterations return nil.
local charset = sc.characters
if charset and umatch(text, "[" .. charset .. "]") then
-- Remove any characters in Latin, which includes Latin characters also included in other scripts (as these are false positives), as well as any PUA substitutions. Anything remaining should only be script code "None" (e.g. numerals).
local check_text = ugsub(text, "[" .. require("Modul:scripts").getByCode("Latn").characters .. "-]+", "")
-- Set none_is_last_resort_only flag, so that any non-None chars will cause a script other than "None" to be returned.
if require("Modul:scripts").findBestScriptWithoutLang(check_text, true):getCode() ~= "None" then
return nil, true, cats
end
end
text = escape_risky_characters(text)
text = undoTempSubstitutions(text, subbedChars)
-- If the script does not use capitalization, then capitalize any letters of the transliteration which are immediately preceded by a caret (and remove the caret).
if text and not sc:hasCapitalization() and text:find("^", 1, true) then
text = processCarets(text, "%^([\128-\191\244]*%*?)([^\128-\191\244][\128-\191]*)", function(m1, m2)
return m1 .. uupper(m2)
end)
end
-- Track module overrides.
if module_override ~= nil then
track("module_override")
end
fail = text == nil and (not not fail) or false
return text, fail, cats
end
do
local function handle_language_spec(self, spec, sc)
local ret = self["_" .. spec]
if ret == nil then
ret = self._rawData[spec]
if type(ret) == "string" then
ret = list_to_set(split(ret, ",", true, true))
end
self["_" .. spec] = ret
end
if type(ret) == "table" then
ret = ret[sc:getCode()]
end
return not not ret
end
function Language:overrideManualTranslit(sc)
return handle_language_spec(self, "override_translit", sc)
end
function Language:link_tr(sc)
return handle_language_spec(self, "link_tr", sc)
end
end
--[==[Returns {{code|lua|true}} if the language has a transliteration module, or {{code|lua|false}} if it doesn't.]==]
function Language:hasTranslit()
return not not self._rawData.translit
end
--[==[Returns {{code|lua|true}} if the language uses the letters I/ı and İ/i, or {{code|lua|false}} if it doesn't.]==]
function Language:hasDottedDotlessI()
return not not self._rawData.dotted_dotless_i
end
function Language:toJSON(returnTable)
local entryNamePatterns = nil
local entryNameRemoveDiacritics = nil
if self._rawData.entry_name then
entryNameRemoveDiacritics = self._rawData.entry_name.remove_diacritics
if self._rawData.entry_name.from then
entryNamePatterns = {}
for i, from in ipairs(self._rawData.entry_name.from) do
insert(entryNamePatterns, {from = from, to = self._rawData.entry_name.to[i] or ""})
end
end
end
-- mainCode should only end up non-nil if dontCanonicalizeAliases is passed to make_object().
local ret = m_table.deepcopy{
ancestors = self:getAncestorCodes(),
canonicalName = self:getCanonicalName(),
categoryName = self:getCategoryName("nocap"),
code = self._code,
mainCode = self._main_code,
entryNamePatterns = entryNamePatterns,
entryNameRemoveDiacritics = entryNameRemoveDiacritics,
family = self:getFamilyCode(),
otherNames = self:getOtherNames(true),
aliases = self:getAliases(),
varieties = self:getVarieties(),
scripts = self:getScriptCodes(),
parent = self._parentCode or nil,
full = self._fullCode or nil,
type = m_table.keysToList(self:getTypes()),
wikimediaLanguages = self:getWikimediaLanguageCodes(),
wikidataItem = self:getWikidataItem(),
}
if returnTable then
return ret
else
return require("Modul:JSON").toJSON(ret)
end
end
--[==[
<span style="color: #BA0000">This function is not for use in entries or other content pages.</span>
Returns a blob of data about the language. The format of this blob is undocumented, and perhaps unstable; it's intended for things like the module's own unit-tests, which are "close friends" with the module and will be kept up-to-date as the format changes.
-- Do NOT use these methods!
-- All uses should be pre-approved on the talk page!
]==]
function Language:getRawData()
local rawData = {}
for _, element in ipairs(self._stack) do
for k, v in pairs(element) do
rawData[k] = v
end
end
return rawData
end
--[==[<span style="color: #BA0000">This function is not for use in entries or other content pages.</span>
Returns a blob of data about the language that contains the "extra data". Much like with getRawData, the format of this blob is undocumented, and perhaps unstable; it's intended for things like the module's own unit-tests, which are "close friends" with the module and will be kept up-to-date as the format changes.]==]
function Language:getRawExtraData()
if #self._stack == 1 then
self:loadInExtraData()
end
return self._extraData
end
local function getRawExtraLanguageData(self, code)
local modulename = export.getExtraDataModuleName(code)
return modulename and self:loadData("Modul:" .. modulename)[code] or nil
end
function Language:loadInExtraData()
if not self._extraData then
-- load extra data from module and assign to _extraData field
-- use empty table as a fallback if extra data is nil
self._extraData = getRawExtraLanguageData(self, self._code) or {}
end
end
function export.getDataModuleName(code)
local letter = match(code, "^(%l)[%l-]+$")
if not letter then
return nil
elseif find(code, "-", 1, true) then
return "languages/data/exceptional"
end
local code_len = #code
return code_len == 2 and "languages/data/2" or
code_len == 3 and "languages/data/3/" .. letter or nil
end
function export.getExtraDataModuleName(code)
local dataModule = export.getDataModuleName(code)
return dataModule and dataModule .. "/extra" or nil
end
do
local key_types = {
[2] = "unique",
aliases = "unique",
otherNames = "unique",
type = "append",
varieties = "unique"
}
function export.makeObject(code, data, useRequire, dontCanonicalizeAliases)
if not data then
return nil
end
-- Convert any aliases.
local input_code = code
code = normalize_code(code, useRequire)
input_code = dontCanonicalizeAliases and input_code or code
if find(data.type, "family") and not data[5] then
return require("Modul:families").makeObject(code, data, useRequire)
end
local parent
if data[5] then
parent = export.getByCode(data[5], nil, true, true, useRequire)
else
parent = Language
end
parent.__index = parent
local lang = {
_code = input_code,
_useRequire = useRequire or nil
}
-- This can only happen if dontCanonicalizeAliases is passed to make_object().
if code ~= input_code then
lang._main_code = code
end
-- Full language.
if not parent._stack then
-- Create stack, accessed with rawData metamethod.
local stack = parent._rawData and {parent._rawData, data} or {data}
lang._stack = stack
lang._rawData = setmetatable({}, {
__index = function(t, k)
local key_type = key_types[k]
-- Data that isn't inherited from the parent.
if key_type == "unique" then
return stack[#stack][k]
-- Data that is appended by each generation.
elseif key_type == "append" then
local parts = {}
for i = 1, #stack do
insert(parts, stack[i][k])
end
if type(parts[1]) == "string" then
return concat(parts, ","), true
end
-- Otherwise, iterate down the stack, looking for a match.
else
local i = #stack
while not stack[i][k] and i > 1 do
i = i - 1
end
return stack[i][k]
end
end,
-- Retain immutability (as writing to rawData will break functionality).
__newindex = function()
error("not allowed to edit rawData")
end
})
-- Full code is the parent code.
lang._fullCode = parent._code or code
-- Etymology-only.
else
-- Copy over rawData and stack to the new object, and add new layer to stack.
lang._rawData = parent._rawData
lang._stack = parent._stack
insert(lang._stack, data)
-- Copy full code.
lang._fullCode = parent._fullCode
end
return setmetatable(lang, parent)
end
end
--[==[Finds the language whose code matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">paramForError</code> is {{code|lua|true}}, a generic error message mentioning the bad code is generated; otherwise <code class="n">paramForError</code> should be a string or number specifying the parameter that the code came from, and this parameter will be mentioned in the error message along with the bad code. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes.]==]
function export.getByCode(code, paramForError, allowEtymLang, allowFamily, useRequire)
if type(code) ~= "string" then
local typ
if not code then
typ = "nil"
elseif check_object("language", true, code) then
typ = "a language object"
elseif check_object("family", true, code) then
typ = "a family object"
else
typ = "a " .. type(code)
end
error("The function getByCode expects a string as its first argument, but received " .. typ .. ".")
end
local m_data = conditionalRequire("Modul:languages/data", useRequire)
if m_data.aliases[code] or m_data.track[code] then
track(code)
end
local norm_code = normalize_code(code, useRequire)
local modulename = export.getDataModuleName(norm_code)
local data = modulename and
conditionalRequire("Modul:" .. modulename, useRequire)[norm_code] or
(allowEtymLang and require("Modul:etymology languages/track-bad-etym-code")(norm_code) and conditionalRequire("Modul:etymology languages/data", useRequire)[norm_code]) or
(allowFamily and conditionalRequire("Modul:families/data", useRequire)[norm_code]) or
(allowEtymLang and allowFamily and require("Modul:families/track-bad-etym-code")(norm_code) and conditionalRequire("Modul:families/data/etymology", useRequire)[norm_code])
local retval = code and data and export.makeObject(code, data, useRequire)
if not retval and paramForError then
require("Modul:languages/errorGetBy").code(code, paramForError, allowEtymLang, allowFamily)
end
return retval
end
--[==[Finds the language whose canonical name (the name used to represent that language on Wiktionary) or other name matches the one provided. If it exists, it returns a <code class="nf">Language</code> object representing the language. Otherwise, it returns {{code|lua|nil}}, unless <code class="n">paramForError</code> is given, in which case an error is generated. If <code class="n">allowEtymLang</code> is specified, etymology-only language codes are allowed and looked up along with normal language codes. If <code class="n">allowFamily</code> is specified, language family codes are allowed and looked up along with normal language codes.
The canonical name of languages should always be unique (it is an error for two languages on Wiktionary to share the same canonical name), so this is guaranteed to give at most one result.
This function is powered by [[Module:languages/canonical names]], which contains a pre-generated mapping of full-language canonical names to codes. It is generated by going through the [[:Category:Language data modules]] for full languages. When <code class="n">allowEtymLang</code> is specified for the above function, [[Module:etymology languages/canonical names]] may also be used, and when <code class="n">allowFamily</code> is specified for the above function, [[Module:families/canonical names]] may also be used.]==]
function export.getByCanonicalName(name, errorIfInvalid, allowEtymLang, allowFamily, useRequire)
local byName = conditionalRequire("Modul:languages/canonical names", useRequire)
local code = byName and byName[name]
if not code and allowEtymLang then
byName = conditionalRequire("Modul:etymology languages/canonical names", useRequire)
code = byName and byName[name] or
byName[gsub("^[Ss]ubstratum bahasa ", name, "")] or
byName[gsub(name, "", "")] or
byName[gsub(name, "", "")
:gsub("^[Ss]ubstratum bahasa ", "")] or
-- For etymology families like "ira-pro".
-- FIXME: This is not ideal, as it allows " languages" to be appended to any etymology-only language, too.
byName[match(name, "^Bahasa-bahasa (.*)$")]
end
if not code and allowFamily then
byName = conditionalRequire("Modul:families/canonical names", useRequire)
code = byName and byName[name] or
byName[match(name, "^Bahasa-bahasa (.*)$")]
end
local retval = code and export.getByCode(code, errorIfInvalid, allowEtymLang, allowFamily, useRequire)
if not retval and errorIfInvalid then
require("Modul:languages/errorGetBy").canonicalName(name, allowEtymLang, allowFamily)
end
return retval
end
--[==[Used by [[Module:languages/data/2]] (et al.) to add default types to the entities returned.]==]
function export.addDefaultTypes(data, regular, ...)
local n = arg.n
local types = n > 0 and concat(arg, ",") or ""
for _, entity in next, data do
-- "regular" encompasses everything that doesn't have another type already assigned.
if regular then
entity.type = entity.type or "regular"
end
if n > 0 then
entity.type = types .. (entity.type and ("," .. entity.type) or "")
end
end
return data
end
--[==[Used by [[Module:languages/data/2]] (et al.) and [[Module:etymology languages/data]] to finalize language-related data into the format that is actually returned.]==]
function export.finalizeLanguageData(data)
-- 4 is scripts.
local fields = {4, "ancestors", "link_tr", "override_translit", "type", "wikimedia_codes"}
local fields_len = #fields
for _, entity in next, data do
for i = 1, fields_len do
local key = fields[i]
local field = entity[key]
if field and type(field) == "string" then
entity[key] = gsub(field, "%s+", "")
end
end
end
return data
end
--[==[Used by [[Module:etymology languages/data]] and [[Module:families/data/etymology]] to finalize etymology-related data into the format that is actually returned.]==]
function export.finalizeEtymologyData(data)
local aliases = {}
for _, entity in next, data do
-- Move parent to 5 and family to 3.
entity[5] = entity[3]
entity[3] = entity.family
entity.family = nil
end
for code, alias in next, aliases do
data[code] = alias
end
return data
end
--[==[For backwards compatibility only; modules should require the error themselves.]==]
function export.err(lang_code, param, code_desc, template_tag, not_real_lang)
return require("Modul:languages/error")(lang_code, param, code_desc, template_tag, not_real_lang)
end
return export
j6ovws3kh6v33vqyqrt0s1b1h6qie73
Modul:families
828
8668
190024
187747
2024-11-12T02:26:07Z
Hakimi97
2668
190024
Scribunto
text/plain
local insert = table.insert
local load_data = mw.loadData
local split = require("Module:string utilities").split
local export = {}
local function conditionalRequire(modname, useRequire)
return (useRequire and require or load_data)(modname)
end
function export.makeObject(code, data, useRequire)
local Family = {}
--[==[
Return the family code of the family, e.g. {"ine"} for the Indo-European languages.
]==]
function Family:getCode()
return self._code
end
--[==[
Return the canonical name of the family. This is the name used to represent that language family on Wiktionary,
and is guaranteed to be unique to that family alone. Example: {"Indo-European"} for the Indo-European languages.
]==]
function Family:getCanonicalName()
return self._rawData[1]
end
--[==[
Return the display form of the family. For families, this is the same as the value returned by
{getCategoryName("nocap")}, i.e. it reads <code>"<var>name</var> languages"</code> (e.g.
{"Indo-Iranian languages"}). For full and etymology-only languages, this is the same as the canonical name, and
for scripts, it reads <code>"<var>name</var> script"</code> (e.g. {"Arabic script"}). The displayed text used in
{makeCategoryLink()} is always the same as the display form.
]==]
function Family:getDisplayForm()
return self:getCategoryName("nocap")
end
function Family:getOtherNames(onlyOtherNames)
return require("Module:language-like").getOtherNames(self, onlyOtherNames)
end
function Family:getAliases()
return self._rawData.aliases or {}
end
function Family:getVarieties(flatten)
return require("Module:language-like").getVarieties(self, flatten)
end
--Returns a table of all names that the family is known by, including the canonical name.
--The names are not guaranteed to be unique, sometimes more than one family is known by the same name.
--Example: <code>{"Slavic", "Slavonic"}</code> for the Slavic languages.
--function Family:getAllNames()
-- return self._rawData.names
--end
--[==[Given a list of types as strings, returns true if the family has all of them.
The following types are recognized:
* {family}: This object is a family.
* {full}: This object is a "full" family. This includes all families but a couple of etymology-only
families for Old and Middle Iranian languages.
* {etymology-only}: This object is an etymology-only family, similar to etymology-only languages. There
are currently only two such families, for Old Iranian languages and Middle Iranian
languages (which do not represent proper clades and have no proto-languages, hence
cannot be full families).
]==]
function Family:hasType(...)
if not self._type then
self._type = {family = true}
if self:getFullCode() == self:getCode() then
self._type.full = true
else
self._type["etymology-only"] = true
end
if self._rawData.type then
for _, type in ipairs(split(self._rawData.type, "%s*,%s*", true)) do
self._type[type] = true
end
end
end
for _, type in ipairs{...} do
if not self._type[type] then
return false
end
end
return true
end
--[==[Returns a {Family} object for the superfamily that the family belongs to.]==]
function Family:getFamily()
if self._familyObject == nil then
local familyCode = self:getFamilyCode()
if familyCode then
self._familyObject = export.getByCode(familyCode, useRequire)
else
self._familyObject = false
end
end
return self._familyObject or nil
end
--[==[Returns the code of the family's superfamily.]==]
function Family:getFamilyCode()
if not self._familyCode then
self._familyCode = self._rawData[3]
end
return self._familyCode
end
--[==[Returns the canonical name of the family's superfamily.]==]
function Family:getFamilyName()
if self._familyName == nil then
local family = self:getFamily()
if family then
self._familyName = family:getCanonicalName()
else
self._familyName = false
end
end
return self._familyName or nil
end
--[==[Check whether the family belongs to {superfamily} (which can be a family code or object), and returns a boolean. If more than one is given, returns {true} if the family belongs to any of them. A family is '''not''' considered to belong to itself.]==]
function Family:inFamily(...)
for _, superfamily in ipairs{...} do
if type(superfamily) == "table" then
superfamily = superfamily:getCode()
end
local family, code = self:getFamily()
while true do
if not family then
return false
end
code = family:getCode()
family = family:getFamily()
-- If family is parent to itself, return false.
if family and family:getCode() == code then
return false
elseif code == superfamily then
return true
end
end
end
end
function Family:getParent()
if self._parentObject == nil then
local parentCode = self:getParentCode()
if parentCode then
self._parentObject = require("Module:languages").getByCode(parentCode, nil, true, true, useRequire)
else
self._parentObject = false
end
end
return self._parentObject or nil
end
function Family:getParentCode()
if not self._parentCode then
self._parentCode = self._rawData[5]
end
return self._parentCode
end
function Family:getParentName()
if self._parentName == nil then
local parent = self:getParent()
if parent then
self._parentName = parent:getCanonicalName()
else
self._parentName = false
end
end
return self._parentName or nil
end
function Family:getParentChain()
if not self._parentChain then
self._parentChain = {}
local parent = self:getParent()
while parent do
insert(self._parentChain, parent)
parent = parent:getParent()
end
end
return self._parentChain
end
function Family:hasParent(...)
--checkObject("family", nil, ...)
for _, other_family in ipairs{...} do
for _, parent in ipairs(self:getParentChain()) do
if type(other_family) == "string" then
if other_family == parent:getCode() then return true end
else
if other_family:getCode() == parent:getCode() then return true end
end
end
end
return false
end
--[==[
If the family is etymology-only, this iterates through its parents until a full family is found, and the
corresponding object is returned. If the family is a full family, then it simply returns itself.
]==]
function Family:getFull()
if not self._fullObject then
local fullCode = self:getFullCode()
if fullCode ~= self:getCode() then
self._fullObject = require("Module:languages").getByCode(fullCode, nil, nil, true, useRequire)
else
self._fullObject = self
end
end
return self._fullObject
end
--[==[
If the family is etymology-only, this iterates through its parents until a full family is found, and the
corresponding code is returned. If the family is a full family, then it simply returns the family code.
]==]
function Family:getFullCode()
return self._fullCode or self:getCode()
end
--[==[
If the family is etymology-only, this iterates through its parents until a full family is found, and the
corresponding canonical name is returned. If the family is a full family, then it simply returns the canonical name
of the family.
]==]
function Family:getFullName()
if self._fullName == nil then
local full = self:getFull()
if full then
self._fullName = full:getCanonicalName()
else
self._fullName = false
end
end
return self._fullName or nil
end
--[==[
Return a {Language} object (see [[Module:languages]]) for the proto-language of this family, if one exists.
Otherwise, return {nil}.
]==]
function Family:getProtoLanguage()
if self._protoLanguageObject == nil then
self._protoLanguageObject = require("Module:languages").getByCode(self._rawData.protoLanguage or self:getCode() .. "-pro", nil, true, nil, useRequire) or false
end
return self._protoLanguageObject or nil
end
function Family:getProtoLanguageCode()
if self._protoLanguageCode == nil then
local protoLanguage = self:getProtoLanguage()
self._protoLanguageCode = protoLanguage and protoLanguage:getCode() or false
end
return self._protoLanguageCode or nil
end
function Family:getProtoLanguageName()
if not self._protoLanguageName then
self._protoLanguageName = self:getProtoLanguage():getCanonicalName()
end
return self._protoLanguageName
end
function Family:hasAncestor(...)
-- Go up the family tree until a protolanguage is found.
local family = self
local protolang = family:getProtoLanguage()
while not protolang do
family = family:getFamily()
protolang = family:getProtoLanguage()
-- Return false if the family is its own family, to avoid an infinite loop.
if family:getFamilyCode() == family:getCode() then
return false
end
end
-- If the protolanguage is not in the family, it must therefore be ancestral to it. Check if it is a match.
for _, otherlang in ipairs{...} do
if (
type(otherlang) == "string" and protolang:getCode() == otherlang or
type(otherlang) == "table" and protolang:getCode() == otherlang:getCode()
) and not protolang:inFamily(self) then
return true
end
end
-- If not, check the protolanguage's ancestry.
return protolang:hasAncestor(...)
end
local function fetch_descendants(self, format)
local languages = require("Module:languages/code to canonical name")
local etymology_languages = require("Module:etymology languages/code to canonical name")
local families = require("Module:families/code to canonical name")
local descendants = {}
-- Iterate over all three datasets.
for _, data in ipairs{languages, etymology_languages, families} do
for code in pairs(data) do
local lang = require("Module:languages").getByCode(code, nil, true, true, useRequire)
if lang:inFamily(self) then
if format == "object" then
insert(descendants, lang)
elseif format == "code" then
insert(descendants, code)
elseif format == "name" then
insert(descendants, lang:getCanonicalName())
end
end
end
end
return descendants
end
function Family:getDescendants()
if not self._descendantObjects then
self._descendantObjects = fetch_descendants(self, "object")
end
return self._descendantObjects
end
function Family:getDescendantCodes()
if not self._descendantCodes then
self._descendantCodes = fetch_descendants(self, "code")
end
return self._descendantCodes
end
function Family:getDescendantNames()
if not self._descendantNames then
self._descendantNames = fetch_descendants(self, "name")
end
return self._descendantNames
end
function Family:hasDescendant(...)
for _, lang in ipairs{...} do
if type(lang) == "string" then
lang = require("Module:languages").getByCode(lang, nil, true, nil, useRequire)
end
if lang:inFamily(self) then
return true
end
end
return false
end
--[==[
Return the name of the main category of that family. Example: {"Germanic languages"} for the Germanic languages,
whose category is at [[:Category:Germanic languages]].
Unless optional argument `nocap` is given, the family name at the beginning of the returned value will be
capitalized. This capitalization is correct for category names, but not if the family name is lowercase and
the returned value of this function is used in the middle of a sentence. (For example, the pseudo-family with
the code {qfa-mix} has the name {"mixed"}, which should remain lowercase when used as part of the category name
[[:Category:Terms derived from mixed languages]] but should be capitalized in [[:Category:Mixed languages]].)
If you are considering using {getCategoryName("nocap")}, use {getDisplayForm()} instead.
]==]
function Family:getCategoryName(nocap)
local name = self._rawData[1]
-- If the name already ends with "languages" or "lects", don't add it.
if not (name:match("^[Bb]ahasa-bahasa") or name:match("^[Ll]ek-lek")) then
name = "Bahasa-bahasa " .. name
end
if not nocap then
name = mw.getContentLanguage():ucfirst(name)
end
return name
end
function Family:makeCategoryLink()
return "[[:Kategori:" .. self:getCategoryName() .. "|" .. self:getDisplayForm() .. "]]"
end
--[==[
Return the Wikidata item of that family.
]==]
function Family:getWikidataItem()
local item = self._rawData[2] or self._rawData.wikidata_item
if not item then
return nil
end
if type(item) ~= "number" then
error("The method getWikidataItem expects the item to be stored as a number, but it is currently a " .. type(code) .. ".")
end
return "Q" .. item
end
--[==[
Returns the Wikipedia article of that family, usually derived from {getWikidataItem()}.
]==]
function Family:getWikipediaArticle()
return (self:getWikidataItem() and mw.wikibase and mw.wikibase.sitelink(self:getWikidataItem(), 'mswiki')) or
self:getCategoryName()
end
function Family:makeWikipediaLink()
return "[[w:" .. self:getWikipediaArticle() .. "|" .. self:getCanonicalName() .. "]]"
end
function Family:toJSON()
if not self._type then
self:hasType()
end
local types = {}
for type in pairs(self._type) do
insert(types, type)
end
local ret = {
canonicalName = self:getCanonicalName(),
categoryName = self:getCategoryName("nocap"),
code = self:getCode(),
family = self._rawData[3],
protoLanguage = self._rawData.protoLanguage,
otherNames = self:getOtherNames(true),
aliases = self:getAliases(),
varieties = self:getVarieties(),
type = types,
wikidataItem = self:getWikidataItem(),
}
return require("Module:JSON").toJSON(ret)
end
function Family:getRawData()
return self._rawData
end
Family.__index = Family
return data and setmetatable({ _rawData = data, _code = code }, Family) or nil
end
--[==[
Finds the family whose code matches the one provided. If it exists, it returns a {Family} object representing the
family. Otherwise, it returns {nil}.
]==]
function export.getByCode(code, useRequire)
local data = conditionalRequire("Module:families/data", useRequire)[code]
if data then
return export.makeObject(code, data, useRequire)
end
data = conditionalRequire("Module:families/data/etymology", useRequire)[code]
if data then
return require("Module:languages").makeObject(code, data, useRequire)
end
return nil
end
--[==[
Look for the family whose canonical name (the name used to represent that language on Wiktionary) matches the one
provided. If it exists, it returns a {Family} object representing the family. Otherwise, it returns {nil}. The
canonical name of families should always be unique (it is an error for two families on Wiktionary to share the same
canonical name), so this is guaranteed to give at most one result.
]==]
function export.getByCanonicalName(name, useRequire)
local byName = conditionalRequire("Module:families/canonical names", useRequire)
local code = byName and byName[name] or
byName[name:match("^Bahasa%-bahasa (.*)$")]
return export.getByCode(code, useRequire)
end
return export
rn0bxcqwkh9qi8e5w57avh2zptg2p1v
yarrangan
0
9188
190070
188758
2024-11-12T05:43:50Z
Mirlim
8057
/* Sebutan */
190070
wikitext
text/x-wiki
== Bahasa Gamilaraay ==
==== Kata nama ====
'''yarrangan'''
# Sejenis larva yang boleh dimakan.
=== Sebutan ===
* {{AFA|kid|/jaraŋan/}}
=== Tesaurus ===
; Sinonim: [[yerrungun]].
[[Category:Kata nama bahasa Gamilaraay]]
[[Category:kld:Makanan]]
[[Category:kld:Serangga]]
i9qdyaxuoxi6ho28a498if33znc874m
欢迎光临
0
9218
190015
188934
2024-11-11T13:06:02Z
Tofeiku
2269
kemas kini
190015
wikitext
text/x-wiki
{{also|歡迎光臨}}
{{cmn}}
{{zh-forms|[[欢迎]][[光]][[临]]|[[歡迎光臨]]}}
==== Kata seru ====
<big>欢迎光临</big> (''ringkas, Pinyin'' '''[[huānyíng guānglín]]''', ''tradisional'' <big>[[歡迎光臨]]</big>)
# [[selamat datang]]
=== Sebutan ===
; Mandarin
* [[w:Pinyin|Pinyin]]: huānyíng guānglín
* {{AFA|cmn|/xu̯a̠n⁵⁵ iŋ³⁵ ku̯ɑŋ⁵⁵ lin³⁵/}}
* [[w:Zhuyin|Zhuyin]]: ㄏㄨㄢ ㄧㄥˊ ㄍㄨㄤ ㄌㄧㄣˊ
cjsd6pd9cckxvodhtvb2xqy5mjtrcpd
歡迎光臨
0
9219
190016
188932
2024-11-11T13:06:23Z
Tofeiku
2269
kemas kini
190016
wikitext
text/x-wiki
{{also|欢迎光临}}
{{cmn}}
{{zh-forms|[[欢迎光临]]|[[歡迎]][[光]][[臨]]}}
==== Kata seru ====
<big>欢迎光临</big> (''tradisional, Pinyin'' '''[[huānyíng guānglín]]''', ''ringkas'' <big>[[欢迎光临]]</big>)
# [[selamat datang]]
=== Sebutan ===
; Mandarin
* [[w:Pinyin|Pinyin]]: huānyíng guānglín
* {{AFA|cmn|/xu̯a̠n⁵⁵ iŋ³⁵ ku̯ɑŋ⁵⁵ lin³⁵/}}
* [[w:Zhuyin|Zhuyin]]: ㄏㄨㄢ ㄧㄥˊ ㄍㄨㄤ ㄌㄧㄣˊ
3ygvxzef5iavw3zcmp9pd5oiakf1gg9
lyam-hound
0
9328
190012
188705
2024-11-11T12:48:48Z
Tofeiku
2269
kemas kini
190012
wikitext
text/x-wiki
{{en}}
[[Fail:Bloodhound from 1915.jpg|thumbnail|lyam-hound]]
==== Kata nama ====
{{en-noun|lyam-hounds}}
(Kata nama terhitung)
# {{context|usang|lang=en}} Seekor anjing pemburu darah.
=== Etimologi ===
Daripada {{compound|en|lyam|hound}}.
=== Sebutan ===
* {{AFA|en|/ˈlaɪəmˌhaʊnd/}}
=== Tesaurus ===
; Sinonim: [[limehound]], [[lyme-hound]]
[[Kategori:Kata nama terhitung bahasa Inggeris]]
kudbq1qwsom4eov15jvrip315rwshhd
gruntled
0
9376
190001
188381
2024-11-11T12:36:42Z
Tofeiku
2269
kemas kini
190001
wikitext
text/x-wiki
{{en}}
{{en-adj}}
# {{context|jenaka|lang=en}} Puas hati, [[gembira]], [[puas]].
=== Etimologi ===
Pembentukan terbalik daripada ''[[disgruntled]]''.
=== Sebutan ===
* {{AFA|en|/ˈɡɹʌntl̩d/}}
=== Tesaurus ===
; Antonim: [[disgruntled]]
[[Kategori:Pembentukan terbalik bahasa Inggeris]]
5rqvwngjdwk5llak5cvk7rl44a1y25q
lekvár
0
9382
190010
188651
2024-11-11T12:46:02Z
Tofeiku
2269
kemas kini
190010
wikitext
text/x-wiki
{{also|lekvar}}
== Bahasa Hungary ==
{{wikipedia|lang=hu}}
[[Fail:Aprikosenkonfitüre.jpg|thumbnail|lekvár]]
==== Kata nama ====
'''lekvár''' (''jamak'' '''[[lekvárok]]''')
# [[jem]], [[marmalad]]
=== Etimologi ===
Daripada {{etyl|sla|hu}}, banding {{etyl|sk|-}} {{term|lekvár||jem|lang=sk}}, {{etyl|cs|-}} {{term|lektvar}}. Asal usul ini adalah Akhir Latin {{term|electuarium|lang=la}}.
=== Sebutan ===
* {{IPA|hu|/ˈlɛkvaːr/}}
* Penyempangan: lek‧vár
=== Terbitan ===
* [[baracklekvár]]
* [[szilvalekvár]]
=== Tesaurus ===
; Sinonim: [[gyümölcsíz]], [[dzsem]].
[[Kategori:Kata nama bahasa Hungary]]
[[Kategori:hu:Makanan]]
l011dmxcl6kz9df5qxieokuomrn1nmw
dissociar
0
9425
189975
186192
2024-11-11T12:17:35Z
Tofeiku
2269
kemas kini
189975
wikitext
text/x-wiki
== Bahasa Catalonia ==
==== Kata kerja ====
'''dissociar''' (''kini mufrad diri pertama'' '''[[dissocio]]''', ''partisipel lampau'' '''[[dissociat]]''')
# [[memisahkan]]
=== Sebutan ===
* {{rhymes|ca|a(ɾ)}}
[[Kategori:Kata kerja bahasa Catalonia]]
[[Kategori:Kata kerja konjugasi pertama bahasa Catalonia]]
a0482nxnxeh7f169bqv6367jx2r9qgc
旧金山
0
9459
190017
186712
2024-11-11T13:07:20Z
Tofeiku
2269
kemas kini
190017
wikitext
text/x-wiki
{{zh}}
{{wikipedia|lang=zh}}
{{zh-forms|[[旧]][[金]][[山]]|[[舊金山]]}}
==== Kata nama khas ====
# [[San Francisco]] {{gloss|bandar di [[California]], [[Amerika Syarikat]]}}
=== Etimologi ===
Daripada [[舊]] ("lama") + [[金]] ("emas") + [[山]] ("gunung"). Nama ini merujuk kepada [[kerubut emas]] pada abad ke-19 dan "lama" dibandingkan dengan "Gunung Emas Baharu" ([[新金山]]) [[Melbourne]], [[Australia]]. [[金山]] juga boleh diperluaskan untuk merujuk kepada mana-mana tempat di mana kekayaan dijumpai.
=== Sebutan ===
; Mandarin
* Pinyin: Jiùjīnshān
* {{AFA|cmn|/t͡ɕi̯oʊ̯⁵¹ t͡ɕin⁵⁵ ʂa̠n⁵⁵/}}
* Zhuyin: ㄐㄧㄡˋ ㄐㄧㄣ ㄕㄢ
* Gwoyeu Romatzyh: Jiowjinshan
; Kantonis
* Jyutping: gau<sup>6</sup> gam<sup>1</sup> saan<sup>1</sup>
* [[w:Perumian Yale#Bahasa Kantonis|Yale]]: gauh gām sāan
* Pinyin Kantonis: gau<sup>6</sup> gam<sup>1</sup> saan<sup>1</sup>
* {{AFA|yue|/kɐu̯²² kɐm⁵⁵ sɑːn⁵⁵/}}
; Hokkien
* [[w:Pe̍h-ōe-jī|Pe̍h-ōe-jī]]: Kū-kim-soaⁿ
* Sistem Perumian Taiwan: Kū-kim-suann
* {{a|Taipei}} {{AFA|nan|/ku³³⁻¹¹ kim⁴⁴⁻³³ suã⁴⁴/}}
* {{a|Zhangzhou}} {{AFA|nan|/ku²²⁻²¹ kim³⁴⁻²² suã³⁴/}}
=== Keturunan ===
''Sino-Xenic'' ([[舊金山]]):
* Vietnam: [[Cựu Kim Sơn]] ([[舊金山]])
[[Kategori:Kata nama khas bahasa Cina]]
[[Kategori:Kata nama khas bahasa Mandarin]]
[[Kategori:Kata nama khas bahasa Kantonis]]
[[Kategori:Kata nama khas bahasa Hokkien]]
qxl1dvq1jug5gkm8dgpisnpmwj5hcev
dwi-
0
9477
189983
188287
2024-11-11T12:24:18Z
Tofeiku
2269
kemas kini
189983
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
==== Awalan ====
# {{context|kardinal, awalan asing|lang=ms}} [[dua]].
=== Etimologi ===
Daripada {{term|dwi|lang=ms}}, daripada {{etyl|sa|ms}} {{term|द्वि|tr=dvi|lang=sa}}, daripada {{term|द्व|tr=dvá|lang=sa}}, daripada {{etyl|ine-pro|ms}} [[*dwó]], [[*dwóh₁]].
=== Sebutan ===
* {{dewan|dwi}}
* {{AFA|ms|/dui/}}
=== Tulisan Jawi ===
{{ARchar|[[دوي-]]}}
=== Tesaurus ===
; Sinonim: [[dua]].
[[Kategori:Awalan bahasa Melayu]]
[[Kategori:Awalan asing]]
[[Kategori:Angka bahasa Melayu]]
{{id}}
==== Awalan ====
# {{context|kardinal|lang=id}} [[dua]].
=== Etimologi ===
Daripada {{etyl|ms|id}} {{term|dwi-|lang=ms}}, daripada {{term|dwi|lang=ms}}, daripada {{etyl|sa|id}} {{term|द्वि|tr=dvi|lang=sa}}, daripada {{term|द्व|tr=dvá|lang=sa}}, daripada {{etyl|ine-pro|id}} [[*dwó]], [[*dwóh₁]].
=== Tesaurus ===
; Sinonim: [[dua]].
[[Kategori:Awalan bahasa Indonesia]]
[[Kategori:Angka bahasa Indonesia]]
{{en}}
==== Awalan ====
# {{context|kimia, lapuk|lang=en}} Dalam [[kimia]], awalan [[jawatan]] bagi [[unsur]]-unsur kimia belum ditemui terbaring dua tempoh di bawah elemen yang dikenali dalam [[jadual berkala]].
=== Etimologi ===
Daripada {{etyl|sa|en}}, bermaksud "dua".
=== Lihat juga ===
* [[eka-]]
* [[tri-]]
* [[w:en:Mendeleev's predicted elements|Mendeleev's predicted elements]]
* [[di-]]
* [[bi-]]
[[Kategori:Awalan bahasa Inggeris]]
[[Kategori:en:Kimia]]
fw85odql0hekbdv8i2j0r10u1f2353v
torrefy
0
9507
190053
186238
2024-11-12T05:09:56Z
Mirlim
8057
kemas kini
190053
wikitext
text/x-wiki
{{en}}
==== Kata kerja ====
'''torrefy''' (''kala kini selapis mufrad diri ketiga'' '''[[torrefies]]''', ''partisipel kini'' '''[[torrefying]]''', ''kala selapis dan partisipel kala'' '''[[torrefied]]''')
# Untuk menakluk [[haba]] yang melampau; mengeringkan, memanggang.
=== Etimologi ===
Daripada {{etyl|en|la}} {{term|la|torrefaciō}}.
=== Sebutan ===
* {{a|RP}} {{IPA|en|/ˈtɒ.ɹɪ.faɪ/}}
* {{a|AS}} {{IPA|en|/ˈtɔ.ɹɪ.faɪ/}}
* {{audio|en|En-us-torrefy.ogg|Audio (US)}}
=== Terbitan ===
* [[torrefaction]]
* [[torrification]]
=== Tesaurus ===
; Sinonim: [[torrify]].
[[Kategori:Kata kerja bahasa Inggeris]]
6d3ukv6dj7t3k16h5vsjolgre7zzj2p
birthday boy
0
9514
190014
189054
2024-11-11T12:50:04Z
Tofeiku
2269
kemas kini
190014
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{en}}
{{en-noun|birthday boys}}
# Seorang lelaki (dewasa atau budak) yang kini hari lahirnya.
=== Etimologi ===
{{compound|en|birthday|boy}}
=== Sebutan ===
* {{AFA|en|/ˈbɜːθ.deɪ.bɔɪ/}}
[[Kategori:Kata nama terhitung bahasa Inggeris]]
oawmayhdi786w761cbxcr33hwcqy2ab
groto
0
9647
189999
188248
2024-11-11T12:35:10Z
Tofeiku
2269
kemas kini
189999
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Gua kecil yang mempunyai ciri yang menarik.
=== Etimologi ===
Daripada {{etyl|en|ms}} {{term|grotto|lang=en}}.
=== Sebutan ===
* {{dewan|gro|to}}
* {{AFA|ms|/groto/}}
* {{rhymes|ms|o|to}}
* {{penyempangan|ms|gro|to}}
=== Tulisan Jawi ===
{{ARchar|[[ݢروتو]]}}
=== Terjemahan ===
{{ter-atas|gua kecil}}
* Arab: {{t|ar|غار|m|tr=ġār|sc=Arab}}, {{t|ar|مغارة|f|tr=maġāra|sc=Arab}}
* Belanda: {{t+|nl|grot}}
* Catalonia: {{t|ca|gruta|f}}
* Cina:
*: Mandarin: {{t+|cmn|石窟|tr=shíkū|sc=Hani}}
* Czech: {{t|cs|jeskyňka|f}}
* Denmark: {{t+|da|grotte|c}}
* Esperanto: {{t|eo|groto}}
* Finnish: {{t+|fi|luola}}
* Inggeris: {{t|en|grotto}}
* Istriot: {{t|ist|gruota|f}}
{{ter-tengah}}
* Itali: {{t+|it|grotta|f}}, {{t+|it|caverna|f}}, {{t+|it|santuario|m}}
* Jepun: {{t|ja|岩屋|tr=いわや, iwaya|sc=Jpan}}, {{t+|ja|洞穴|tr=どうけつ, dōketsu|sc=Jpan}}
* Jerman: {{t+|de|Grotte|f}}
* Latin: {{t|la|caverna|f}}
* Parsi: {{t+|fa|غار|tr=ğâr|sc=fa-Arab}}, {{t+|fa|مغاره|tr=mağâre|sc=fa-Arab}}
* Perancis: {{t+|fr|grotte|f}}
* Poland: {{t+|pl|grota|f}}
* Portugis: {{t+|pt|gruta|f}}
* Rusian: {{t+|ru|грот|m|tr=grot}}
* Sepanyol: {{t+|es|gruta|f}}
* Venice: {{t|vec|grota|f}}
{{ter-bawah}}
{{eo}}
{{eo-kn}}
# [[#Bahasa Melayu|groto]]
=== Sebutan ===
* {{AFA|/ˈɡrɔ.tɔ/|lang=eo}}
== Bahasa Ido ==
==== Kata nama ====
# [[#Bahasa Melayu|groto]]
# [[gua]]
=== Sebutan ===
* {{AFA|/ˈɡrɔ.tɔ/|lang=io}}
=== Terbitan ===
* [[manjotrogo]]
=== Tesaurus ===
; Sinonim: [[kaverno]].
=== Anagram ===
* [[trogo#Bahasa Ido|trogo]]
ligpv7p3nij2xhixz46ua2tatelgi7t
190000
189999
2024-11-11T12:36:03Z
Tofeiku
2269
kemas kini
190000
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Gua kecil yang mempunyai ciri yang menarik.
=== Etimologi ===
Daripada {{etyl|en|ms}} {{term|grotto|lang=en}}.
=== Sebutan ===
* {{dewan|gro|to}}
* {{AFA|ms|/groto/}}
* {{rhymes|ms|o|to}}
* {{penyempangan|ms|gro|to}}
=== Tulisan Jawi ===
{{ARchar|[[ݢروتو]]}}
=== Terjemahan ===
{{ter-atas|gua kecil}}
* Arab: {{t|ar|غار|m|tr=ġār|sc=Arab}}, {{t|ar|مغارة|f|tr=maġāra|sc=Arab}}
* Belanda: {{t+|nl|grot}}
* Catalonia: {{t|ca|gruta|f}}
* Cina:
*: Mandarin: {{t+|cmn|石窟|tr=shíkū|sc=Hani}}
* Czech: {{t|cs|jeskyňka|f}}
* Denmark: {{t+|da|grotte|c}}
* Esperanto: {{t|eo|groto}}
* Finnish: {{t+|fi|luola}}
* Inggeris: {{t|en|grotto}}
* Istriot: {{t|ist|gruota|f}}
{{ter-tengah}}
* Itali: {{t+|it|grotta|f}}, {{t+|it|caverna|f}}, {{t+|it|santuario|m}}
* Jepun: {{t|ja|岩屋|tr=いわや, iwaya|sc=Jpan}}, {{t+|ja|洞穴|tr=どうけつ, dōketsu|sc=Jpan}}
* Jerman: {{t+|de|Grotte|f}}
* Latin: {{t|la|caverna|f}}
* Parsi: {{t+|fa|غار|tr=ğâr|sc=fa-Arab}}, {{t+|fa|مغاره|tr=mağâre|sc=fa-Arab}}
* Perancis: {{t+|fr|grotte|f}}
* Poland: {{t+|pl|grota|f}}
* Portugis: {{t+|pt|gruta|f}}
* Rusian: {{t+|ru|грот|m|tr=grot}}
* Sepanyol: {{t+|es|gruta|f}}
* Venice: {{t|vec|grota|f}}
{{ter-bawah}}
{{eo}}
{{eo-kn}}
# [[#Bahasa Melayu|groto]]
=== Sebutan ===
* {{AFA|eo|/ˈɡrɔ.tɔ/}}
== Bahasa Ido ==
==== Kata nama ====
# [[#Bahasa Melayu|groto]]
# [[gua]]
=== Sebutan ===
* {{AFA|io|/ˈɡrɔ.tɔ/}}
=== Terbitan ===
* [[manjotrogo]]
=== Tesaurus ===
; Sinonim: [[kaverno]].
=== Anagram ===
* [[trogo#Bahasa Ido|trogo]]
oh8n7vut50xy0lwwuzi37lezksi1v89
کماکنن
0
9667
190035
188903
2024-11-12T03:21:24Z
Mirlim
8057
190035
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kk}}
# Habis di[[makan]].
=== Etimologi ===
{{apitan|ms|ک|ماکن|ن|sc=Arab}}
=== Sebutan ===
* {{dewan|ke|mã|ka|nãn}}
* {{AFA|ms|/kəmakanan/}}
* {{rhymes|ms|an|nan}}
* {{penyempangan|ms|ک|ما|ک|نن|sc=Arab}}
=== Tulisan Rumi ===
[[kemakanan]]
[[Kategori:Tulisan Jawi]]
8xz8ydx4sgz24c1du9sn6fzqedq4izt
کوݢيرن
0
9678
190031
188236
2024-11-12T03:15:57Z
Mirlim
8057
/* Sebutan */
190031
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn|r=kugiran}}
# Pancaragam moden yang popular.
=== Etimologi ===
Akronim daripada tulisan Rumi '''ku'''mpulan '''gi'''tar '''ran'''cak ({{ARchar|کومڤولن ݢيتر رانچق}}).
=== Sebutan ===
* {{dewan|ku|gi|ran}}
* {{AFA|ms|/kugiran/}}
* {{rhymes|ms|iran|ran|an}}
* {{penyempangan|ms|کو|ݢي|رن|sc=Arab}}
=== Anagram ===
* {{l|ms|روݢيکن|sc=Arab}}
* {{l|ms|ݢوريکن|sc=Arab}}
[[Kategori:Tulisan Jawi]]
qzhx3uxbop38q3ymx21xqrcjq9f8dgb
Grafsteen
0
9708
189993
188998
2024-11-11T12:32:24Z
Tofeiku
2269
kemas kini
189993
wikitext
text/x-wiki
{{also|grafsteen}}
== Bahasa Luxembourg ==
==== Kata nama ====
'''Grafsteen''' {{m}} (''jamak'' '''[[Grafsteng]]''')
# Batu nisan.
=== Etimologi ===
Daripada {{compound|lb|Graf|Steen|t1=pusara|t2=batu}}.
=== Sebutan ===
* {{AFA|lb|/ˈɡʀaːfʃteːn/}}
[[Kategori:Kata nama bahasa Luxembourg]]
am64ts05de4sta3nv0rcnrvbw2bb866
gemerlap
0
9723
189991
186692
2024-11-11T12:31:41Z
Tofeiku
2269
kemas kini
189991
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-ks}}
# Berkilat-kilat, berkilauan.
=== Etimologi ===
{{sisipan|ms|gerlap|em}}
=== Sebutan ===
* {{dewan|ge|mer|lap}}
* {{AFA|ms|/gəmərlap/}}
* {{rhymes|ms|lap|ap}}
* {{penyempangan|ms|ge|mer|lap}}
=== Tulisan Jawi ===
{{ARchar|[[ݢمرلڤ]]}}
=== Pautan luar ===
* {{R:PRPM}}
{{id}}
==== Kata sifat ====
# Berkilat-kilat, berkilauan.
=== Etimologi ===
{{sisipan|gerlap|em|lang=ms}}
[[Kategori:Kata sifat bahasa Indonesia]]
rkbf53pr5hp7w5dpq3z25c910u0d4m8
189992
189991
2024-11-11T12:31:57Z
Tofeiku
2269
kemas kini
189992
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-ks}}
# Berkilat-kilat, berkilauan.
=== Etimologi ===
{{sisipan|ms|gerlap|em}}
=== Sebutan ===
* {{dewan|ge|mer|lap}}
* {{AFA|ms|/gəmərlap/}}
* {{rhymes|ms|lap|ap}}
* {{penyempangan|ms|ge|mer|lap}}
=== Tulisan Jawi ===
{{ARchar|[[ݢمرلڤ]]}}
=== Pautan luar ===
* {{R:PRPM}}
{{id}}
==== Kata sifat ====
# Berkilat-kilat, berkilauan.
=== Etimologi ===
{{sisipan|id|gerlap|em}}
[[Kategori:Kata sifat bahasa Indonesia]]
2p2pkpjxtizydmw6uoecsmawmgbnm9b
کروڤيڠ
0
9745
190089
188706
2024-11-12T06:13:39Z
Mirlim
8057
kemas kini
190089
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Selaput kering pada kudis atau luka.
=== Etimologi ===
{{sisipan|ms|کوڤيڠ|ر|sc=Arab}}
=== Sebutan ===
* {{dewan|ke|ru|ping}}
* {{AFA|ms|/kərupiŋ/}}
* {{rhymes|ms|piŋ|iŋ}}
* {{penyempangan|ms|ک|رو|ڤيڠ|sc=Arab}}
=== Tulisan Rumi ===
[[keruping]]
=== Terbitan ===
* {{l|ms|ڤڠروڤيڠن|sc=Arab}} / [[pengerupingan]] [pe.ngẽ.ru.pi.ngãn]: pembentukan keruping kudis pada luka.
=== Tesaurus ===
; Sinonim: {{l|ms|کروڤيڠ|sc=Arab}}.
a5ghaelehnaxujz14tcbr0png530kqp
Disember
0
9886
189961
186011
2024-11-11T12:09:28Z
Tofeiku
2269
kemas kini
189961
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
{{wikipedia|lang=ms}}
=== Takrifan ===
{{ms-knk}}
# Bulan kedua belas dalam tahun Masihi yang mengandungi 31 [[hari]], antara [[November]] dan [[Januari]].
=== Etimologi ===
Daripada {{etyl|en|ms}} {{term|December|lang=en}}, daripada {{etyl|enm|ms}} {{term|decembre|lang=emn}}, daripada {{etyl|fro|ms}} {{term|decembre|lang=fro}}, daripada {{etyl|la|ms}} {{term|december|lang=la}}, daripada {{term|decem|lang=la}}, daripada {{etyl|ine-pro|ms}} [[*déḱm̥t]].
=== Sebutan ===
* {{dewan|di|sém|ber}}
* {{AFA|ms|[disɛmbə(r)]}}
* {{rhymes|ms|bə(r)|ə(r)}}
* {{penyempangan|ms|Di|sem|ber}}
=== Tulisan Jawi ===
{{ARchar|[[ديسيمبر]]}}
=== Terjemahan ===
{{ter-atas|bulan kedua belas}}
* Abaza: {{t|abq|декабрь}}
* Abkhaz: {{t|ab|ҧхынҷкәын}}
* Afrikaans: {{t+|af|Desember}}
* Alabama: {{t|akz|hasiholtina istapókkòolawah tóklo}}, {{t|akz|hasiholtina istanóoka}}
* Albania: {{t|sq|dhjetor}}
* Alsatia: {{t|gsw|Dezember|m}}
* Alutiiq: {{t|ems|Qanim Iralua}}
* Amhara: {{t|am|ዲሴምበር|sc=Ethi}}
* Apache:
*: Apache Barat: {{t|apw|Zas Nłtʼees}}
* Arab: {{t+|ar|دِيسمْبِر|tr=disímbir, disámbir|sc=Arab|m}}, {{t|ar|كانون الاول|alt=کانونُ الأوّلُ|tr=kanūnu l-’áwwal|sc=Arab|m}}
* Aragones: {{t+|an|abiento|m}}
* Armenia: {{t+|hy|դեկտեմբեր|sc=Armn}}
*: Armenia Lama: {{t|xcl|դեկտեմբեր|sc=Armn}}
* Aromania: {{t|rup|andreu}}, {{t|rup|dechemvriu}}
* Asturia: {{t+|ast|avientu|m}}, {{t+|ast|diciembre}}
* Azeri: {{t+|az|dekabr}}
* Basque: {{t+|eu|abendu}}
* Belanda: {{t+|nl|december|m}}
* Belarus: {{t|be|сне́жань}}, {{qualifier|Taraškievica}} {{t|be|сьне́жань}}
* Benggali: {{t|bn|ডিসেম্বর|tr=Ḑisembôr|sc=Beng}}
* Bislama: {{t|bi|desemba}}
* Breton: {{t+|br|Kerzu}}, {{t|br|miz Kerzu}}
* Bulgaria: {{t+|bg|деке́мври|m}}
* Burma: {{t+|my|ဒီဇင်ဘာ|sc=Mymr}}
* Catalonia: {{t+|ca|desembre|m}}
* Chechen: {{t|ce|Гӏуран-бутт|sc=Cyrl}}
* Cherokee: {{t|chr|ᎥᏍᎩᏱ|tr=Vsgiyi|sc=Cher}}
* Cina:
*: Mandarin: {{t+|cmn|十二月|tr=shí’èryuè}}
* Chuvash: {{t|cv|раштав}}
* Corsican: {{t+|co|dicembre}}
* Czech: {{t+|cs|prosinec|m}}
* Dakota: {{t|dak|Wiiakenoŋpa}}
* Denmark: {{t+|da|december}}
* Esperanto: {{t+|eo|decembro}}, {{t|eo|Decembro}}
* Estonia: {{t+|et|detsember}}
* Ewe: {{t|ee|Dzome}}, {{t|ee|Dezember}}
* Faroe: {{t|fo|desember|m}}, {{t|fo|desembur|m}}
* Fiji: {{t|fj|Tiseba}}
* Finland: {{t+|fi|joulukuu}}
* Frisia Barat: {{t+|fy|desimber}}, {{t+|fy|wintermoanne}}
* Friulia: {{t|fur|Dicembar|m}}, {{t|fur|Disembar|m}}
* Gaelik Scotland: {{t|gd|Dùbhlachd|f}}
* Galicia: {{t+|gl|decembro|m}}
* Georgia: {{t+|ka|დეკემბერი|sc=Geor}}
* Greek: {{t+|el|Δεκέμβριος|m}}, {{t+|el|Δεκέμβρης|m}}
* Greenland: {{t+|kl|Decembari}}
* Hawaii: {{t|haw|Kēkēmapa}}
* Hindi: {{t+|hi|दिसम्बर|tr=disambar}}
* Hungary: {{t+|hu|december}}
* Ibrani: {{t+|he|דֶּצֶמְבֶּר|tr=detzémber}}
* Iceland: {{t+|is|desember|m}}, {{t|is|desembermánuður|m}}
* Ido: {{t+|io|decembro}}
* Indonesia: {{t+|id|Desember}}
* Inggeris: {{t+|en|December}}
* Inggeris Kuno: {{t|ang|ǣrra ġēola|m}}
* Interlingua: {{t|ia|decembre}}
* Interlingue: {{t+|ie|decembre}}
* Ireland: {{t+|ga|Nollaig}}
* Itali: {{t+|it|dicembre|m}}
* Jepun: {{t+|ja|十二月|tr=じゅうにがつ, jūnigatsú}}, {{t+|ja|師走|tr=しわす, shiwasu}}
* Jerman: {{t+|de|Dezember|m}}, {{t+|de|Julmond|m}}
* Jerman Kasar:
*: Jerman Kasar Jerman: {{t|nds-de|Dezember|m}}, {{t|nds-de|Juulmaand|m}}
*: Saxon Kasar Belanda: {{t|nds-nl|december}}
* Kabuverdianu:
*: Badiu: {{t|kea|Dezembru|m}}
*: São Vicente: {{t|kea|D'zembr'|m}}
* Kazakh: {{t+|kk|желтоқсан}}
{{ter-tengah}}
* Khmer: {{t+|km|ធ្នូ|tr=tnū}}
* Kongo: {{t|kg|desembele}}
* Korea: {{t+|ko|십이월|sc=Kore}}
* Kreol Haiti: {{t|ht|desanm}}
* Kiribati: {{t|gil|Ritembwa|sc=Cyrl}}
* Ladin: {{t|lld|dezember}}
* Lao: {{t|lo|ເດືອນທັນວາ|sc=Laoo}}
* Latin: {{t+|la|december}}
* Latvia: {{t+|lv|decembris|m}}
* Lezgi: {{t|lez|фандукӏ}}
* Limburg: {{t|li|December|m}}
* Lingala: {{t|ln|dɛsɛ́mbɛ}}
* Lithuania: {{t+|lt|gruodis|m}}
* Livonia: {{t|liv|detsembõr}}
* Luxembourg: {{t+|lb|Dezember|m}}, {{t+|lb|Chrëschtmount|m}}
* Macedonia: {{t+|mk|деке́мври|m}}
* Malta: {{t|mt|Diċembru}}
* Manchu: (jorgon biya)
* Maori: {{t|mi|Tīhema}}
* Marathi: {{t|mr|डिसेंबर|tr=ḍise.mbar}}
* Montagnais: {{t|moe|pishimuss}}
* Navajo: {{t|nv|Níłchʼitsoh}}
* Neapolitan: {{t|nap|deciémbro}}, {{t|nap|dicèmbre}}
* Norway: {{t+|no|desember}}
* Novial: {{t|nov|desembre}}
* Occitan: {{t+|oc|decembre|m}}
* Ojibwe: {{t|oj|manidoo-giizisoons}}
* Oriya: {{t|or|ଡିସେମ୍ବର|sc=Orya}}
* Ossetia: {{t|os|декабрь}}
* Parsi: {{t+|fa|دسامبر|tr=desâmbr|sc=fa-Arab}}
* Perancis: {{t+|fr|décembre|m}}
* Poland: {{t+|pl|grudzień|m}}
* Portugis: {{t+|pt|dezembro|m}}
* Romania: {{t+|ro|decembrie}}, {{qualifier|pop}} {{t+|ro|undrea}}
* Romansch: {{t|rm|december|m}}, {{t|rm|dezember|m}}, {{t|rm|schember|m}}
* Rusia: {{t+|ru|дека́брь|m}}
* Samoa: {{t|sm|tesema}}
* Sardinia: {{t|sc|meseidas}}, {{t|sc|nadabi}}, {{t|sc|nadale}}, {{t|sc|nadali}}
* Scots: {{t|sco|December}}
* Sepanyol: {{t+|es|diciembre|m}}
* Serbo-Croatia:
*: Cyril: {{t|sh|децембар|m|sc=Cyrl}}
*: Rumi: {{t|sh|decembar|m}}, {{t+|sh|prosinac|m}} {{qualifier|Croatia}}
* Sicilia: {{t+|scn|decemmiru|m}}
* Skolt Sami: {{t|sms|rosttovmään}}
* Slovak: {{t+|sk|december|m}}
* Slovene: {{t|sl|decêmber|m}}
* Sotho: {{t+|st|Tshitwe}}
* Sotho Utara: {{t|nso|Manthole}}
* Swazi: {{t|ss|íNgongóni}}
* Sweden: {{t+|sv|december}}
* Tagalog: {{t+|tl|Disyembre}}
* Tahiti: {{t|ty|tītema}}
* Tajik: {{t+|tg|декабр}}
* Tatar: {{t|tt|dekäber}}
* Telugu: {{t|te|డిసెంబరు}}
* Thai: {{t+|th|ธันวาคม|tr=than waa khohm}}
* Tok Pisin: {{t|tpi|disemba}}
* Tonga: {{t|to|tisema}}
* Turki: {{t+|tr|aralık}}, {{t|tr|Kanuni Evvel}} {{qualifier|kuno}}
* Ukraine: {{t+|uk|гру́день}}
* Venice: {{t+|vec|disenbre}}
* Veps: {{t|vep|tal'vku}}
* Vietnam: {{t+|vi|tháng Mười hai}}, {{t+|vi|tháng Mười Hai}}, {{t+|vi|tháng mười hai}}
* Volapük: {{t+|vo|dekul}}
* Võro: {{t|vro|joulukuu}}
* Walloon: {{t+|wa|decimbe}}
* Wales: {{t+|cy|Rhagfyr|m}}
* Wolof: {{t|wo|Disembar}}
* Yiddish: {{t+|yi|דעצעמבער|m|tr=detsember|sc=Hebr}}
* Yup'ik: {{t|esu|Uivik}}
* Zuni: {{t|zun|Ik'ohbu Yachunne}}
{{ter-bawah}}
=== Pautan luar ===
* {{R:PRPM}}
[[Kategori:ms:Bulan kalendar Masihi]]
jww5ie6s7nquxx8n15vswqvmt9cm5ia
dekagon
0
9890
189974
188674
2024-11-11T12:17:12Z
Tofeiku
2269
kemas kini
189974
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
{{wikipedia|lang=ms}}
[[Fail:Decagon.svg|thumbnail|dekagon]]
=== Takrifan ===
{{ms-kn}}
# {{context|matematik|lang=ms}} [[poligon|Poligon]] yang mempunyai [[sepuluh]] sisi.
=== Etimologi ===
Daripada {{etyl|en|ms}} {{term|decagon|lang=en}}.
=== Sebutan ===
* {{dewan|dé|ka|gon}}
* {{AFA|ms|/dekagon/}}
* {{rhymes|ms|gon|on}}
* {{penyempangan|ms|de|ka|gon}}
=== Tulisan Jawi ===
{{ARchar|[[ديکاݢون]]}}
=== Terjemahan ===
{{ter-atas|segi sepuluh}}
* Benggali: {{t|bn|দশভুজ}}
* Bulgaria: {{t|bg|десетоъгълник}}
* Catalonia: {{t+|ca|decàgon|m}}
* Inggeris: {{t+|en|decagon}}
{{ter-tengah}}
* Itali: {{t|it|decagono|m}}
* Perancis: {{t+|fr|décagone|m}}
* Rusia: {{t+|ru|десятиугольник|m|sc=Cyrl|tr=desjatiugól'nuk}}
* Sepanyol: {{t+|es|decágono|m}}
{{ter-bawah}}
=== Tesaurus ===
; Sinonim: [[segi]] [[sepuluh]].
=== Pautan luar ===
* {{R:PRPM}}
ld6uzghyxapel2djdqytkmz8bnp56xu
yayi
0
9970
190074
188961
2024-11-12T05:59:49Z
Mirlim
8057
190074
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# {{context|sastera lama|lang=ms}} [[adik]].
=== Etimologi ===
Daripada {{etyl|ms|jv}} {{term|jv|yayi}}.
=== Sebutan ===
* {{dewan|ya|yi}}
* {{AFA|ms|/jaji/}}
* {{rhymes|ms|ji|i}}
* {{penyempangan|ms|ya|yi}}
=== Tulisan Jawi ===
{{ARchar|[[يايي]]}}
=== Tesaurus ===
; Sinonim: [[adik]], [[dik]], [[ading]], [[adinda]], [[dinda]], [[ari]].
=== Pautan luar ===
* {{R:PRPM}}
{{jv}}
==== Kata nama ====
# [[#|yayi]]
=== Aksara Jawa ===
ꦪꦪꦶ
[[Kategori:Kata nama bahasa Jawa]]
j5w5y4ari87yjfflxv3g3jp8mok669x
tursi
0
9993
190061
186220
2024-11-12T05:38:00Z
Mirlim
8057
190061
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# [[terusi]].
=== Etimologi ===
Daripada [[terusi]]
=== Sebutan ===
* {{dewan|tur|si|rang}}
* {{AFA|ms|/tursi/}}
* {{rhymes|ms|si|i}}
* {{penyempangan|ms|tur|si}}
=== Tulisan Jawi ===
{{ARchar|[[تورسي]]}}
=== Terjemahan ===
{{ter-atas|terusi}}
* Indonesia: {{t+|id|tursi}}
{{ter-tengah}}
{{ter-bawah}}
=== Anagram ===
* [[ritus]]
* [[tirus]]
* [[turis]]
=== Pautan luar ===
* {{R:PRPM}}
{{id}}
==== Kata nama ====
# [[#Bahasa Melayu|tursi]]
[[Kategori:Kata nama bahasa Indonesia]]
{{la}}
==== Kata kerja ====
# {{inflection of|turgeō||1|s|perf|actv|indc|lang=la}}
[[Kategori:Bentuk kata kerja bahasa Latin]]
j1gcfw1abkslnfco21vr5cdkwcywv0w
tinja
0
9994
190049
188795
2024-11-12T04:28:59Z
Mirlim
8057
190049
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
{{wikipedia|lang=ms}}
{{ms-kn}}
# Kata saintifik bagi tahi
# Bahan sisa yang dikumuhkan melalui anus.
=== Etimologi ===
Daripada {{etyl|id|ms}}
=== Sebutan ===
* {{dewan|tin|ja}}
* {{AF|ms|/tindʒa/}}
* {{rhymes|ms|dʒa|a}}
* {{penyempangan|ms|tin|ja}}
=== Tulisan Jawi ===
{{ARchar|[[تينجا]]}}
=== Terjemahan ===
{{ter-atas|najis}}
* Afrikaans: {{t|af|ontlasting}}
* Arab: {{t|ar|براز|tr=birāz|m}}, {{t|ar|سلح|tr=salħ|m}}, {{t+|ar|زبل|m|tr=zubl|sc=Arab}} {{qualifier|haiwan}}, {{t|ar|روث|m|tr=rawuθ|sc=Arab}} {{qualifier|haiwan}}, {{t|ar|بعر|m|tr=baʕr|sc=Arab}} {{qualifier|haiwan}}, {{t|ar|فضلات|f-p|tr=faḍalaat}}
*: Arab Mesir: {{t|arz|براز|m-p|tr=buraaz}}, {{t|arz|فضلات|f-p|tr=faḍalaat}}, {{t|arz|زبل|m|tr=zebl|sc=Arab}} {{qualifier|burung}}, {{t|arz|جلة|f|tr=gela|sc=Arab}} {{qualifier|of ternakan}}, {{t|arz|خرا|m|tr=xara|sc=Arab}} {{qualifier|kesat}}, {{t|arz|كاكا|f|tr=kaka|sc=Arab}} {{qualifier|kebudakan}}
*: Arab Maghribi: {{t|ary|جروج|tr=xruj}} {{qualifier|sopan}}, {{t|ary|كاكا|tr=kaka}} {{qualifier|kebudakan}}, {{t|ary|زبل|tr=zbel}} {{qualifier|agak kesat}}, {{t|ary|بزق|tr=bzaq}} {{qualifier|burung}}, {{t|ary|بريو|tr=berriw}} {{qualifier|bebiri, unta}}, {{t|ary|خضار|tr=xedar}} {{qualifier|lembu}}, {{t|ary|رود|tr=roud}} {{qualifier|kuda}}
* Armenia: {{t|hy|կղանք|sc=Armn}}, {{t|hy|կղկղանք|sc=Armn}}, {{t+|hy|արտաթորանք|sc=Armn}}
* Azeri: {{t|az|nəcis}}
* Belanda: {{t+|nl|faeces|p}}, {{t+|nl|uitwerpselen|n}}
* Belarus: {{t|be|фека́ліі|f-p|sc=Cyrl}}, {{t|be|спаражне́ння|n-p|sc=Cyrl}}, {{t|be|экскрыме́нты|m-p|sc=Cyrl}}, {{t|be|кал|m|sc=Cyrl}}
* Bulgaria: {{t|bg|фека́лии|f-p|sc=Cyrl}}, {{t+|bg|екскреме́нти|m-p|sc=Cyrl}}, {{t|bg|изпражнение|alt=изпражне́ния|n-p}}
* Burma: {{t|my|ချေး|tr=chi:|sc=Mymr}}, {{t+|my|မစင်|tr=masin|sc=Mymr}}
* Cina:
*: Mandarin: {{t+|cmn|粪|tr=fèn|sc=Hani}}, {{t+|cmn|粪便|tr=fènbiàn|sc=Hani}}, {{t+|cmn|屎|tr=shǐ|sc=Hani}}
* Czech: {{t+|cs|stolice|f}}, {{t+|cs|výkal|m}}
* Denmark: {{t+|da|afføring|c}}
* Estonia: {{t|et|fekaalid|p}}, {{t+|et|roe}}
* Finland: {{t+|fi|uloste}}
* Gamilaraay: {{t|kld|guna}}
* Georgia: {{t|ka|ფეკალია|sc=Geor}}, {{t|ka|განავალი|sc=Geor}}
* Greek: {{t+|el|περιττώματα|n-p|tr=perittómata}}, {{t+|el|κόπρανα|n-p|tr=kóprana}}, {{qualifier|lucah}} {{t+|el|σκατά|n-p|tr=skatá}}
* Hindi: {{t|hi|टट्टी|tr=ṭaṭṭī}}, {{t|hi|मल|tr=mal}}
* Hungary: {{t+|hu|széklet}}, {{t+|hu|ürülék}}
* Ilocano: {{t|ilo|takki}}
* Indonesia: {{t+|id|tinja}}
* Inggeris: {{t+|en|faeces}}
* Itali: {{t+|it|feci|f-p}}
* Jepun: {{t+|ja|糞|tr=[[ふん]], fun|sc=Jpan}}, {{t|ja|糞便|tr=[[ふんべん]], funben|sc=Jpan}}, {{t|ja|大便|tr=[[だいべん]], daiben|sc=Jpan}}, {{t+|ja|うんこ|tr=unko|sc=Jpan}}, {{t|ja|うんち|tr=unchi|sc=Jpan}}
* Jerman: {{t+|de|Fäkalien|f-p}}, {{t+|de|Kot|m}}
* Kazakh: {{t|kk|нысап|tr=nısap|sc=Cyrl}}
* Korea: {{t+|ko|똥|sc=Kore}}, {{t+|ko|뒤|sc=Kore}} {{qualifier|eufemisme}}
* Kyrgyz: {{t+|ky|фекалия|tr=fekaliya|sc=Cyrl}}
{{ter-tengah}}
* Lakota: {{t|lkt|čheslí}}
* Lao: {{t|lo|ອາຈົມ|tr=ʔàːcòm|sc=Laoo}}, {{t|lo|ອຸດຈາຣະ|tr=ʔútcàːlā|sc=Laoo}}, {{t+|lo|ຂີ້|tr=kʰȉː|sc=Laoo}}
* Latin: {{t|la|faeces}}
* Macedonia: {{t|mk|и́змет|m}}, {{t|mk|екскреме́нт|m}}
* Navajo: {{t|nv|chąąʼ}}
* Norway: {{t+|no|avføring}}
* Parsi: {{t+|fa|گه|tr=goh|sc=fa-Arab}}, {{t+|fa|ان|tr=an|sc=fa-Arab}}, {{t+|fa|پهن|tr=pehen|sc=fa-Arab}}, {{t+|fa|مدفوع|tr=madfu'|sc=fa-Arab}}, {{t+|fa|براز|tr=borâz|sc=fa-Arab}}
* Perancis: {{t+|fr|fèces|f-p}}, {{t+|fr|excrément|m}}
* Poland: {{t+|pl|kał|m}}
* Portugis: {{t+|pt|fezes|f-p}}
* Rusia: {{t+|ru|испражнение|alt=испражне́ния|n-p}}, {{t|ru|экскремент|alt=экскреме́нты|m-p}}, {{t+|ru|кал|m|sc=Cyrl}} {{qualifier|perubatan}}, {{t+|ru|фека́лии|f-p}}
* Samoa: {{t|sm|tae}}
* Sepanyol: {{t|es|heces|f-p}}
* Serbo-Croatian:
*: Cyril: {{t|sh|измет|m}}
*: Rumi: {{t+|sh|izmet|m}}
* Slovak: {{t|sk|výkal|m}}
* Slovene: {{t|sl|iztrebek|m}}, {{t+|sl|blato|n}}
* Swahili: [[mavi]] ''pl (nc 6)''
* Sweden: {{t+|sv|avföring}}, {{t+|sv|träck}}
* Tagalog: {{t+|tl|tae}}, {{t|tl|dumi}}
* Tajik: {{t|tg|саргин|tr=sargin|sc=Cyrl}}, {{t|tg|наҷосат|tr=najosat|sc=Cyrl}}
* Tausug: {{t|tsg|tay'}}
* Thai: {{t|th|อาจม|tr=aa-jom|sc=Thai}}, {{t+|th|อุจจาระ|tr=ùt-jaa-rá|sc=Thai}}, {{t+|th|ขี้|tr=kêe|sc=Thai}}
* Turki: {{t+|tr|bok}}, {{t+|tr|fışkı}}, {{t+|tr|dışkı}}, {{t+|tr|kaka}}, {{t+|tr|pislik}}
* Turkmen: {{t|tk|bok}}
* Ukraine: {{t|uk|фека́лії|f-p|sc=Cyrl}}, {{t|uk|ви́порожнення|n|sc=Cyrl}}, {{t|uk|екскреме́нти|m-p|sc=Cyrl}}, {{t|uk|кал|m|sc=Cyrl}}
* Urdu: {{t|ur|باٹھروم|tr=bathrum}}, {{t|ur|پا خانه|tr=pê khâneh}}
* Uzbek: {{t|uz|kal}}, {{t+|uz|axlat}}, {{t|uz|najas}}, {{t|uz|tezak}}
* Vietnam: {{t+|vi|cặn}}, {{t|vi|chất lắng}}, {{t+|vi|phân}}
* Volapük: {{t+|vo|jiedot}}
* Walloon: {{t|wa|crotes}} {{qualifier|umum, neutral}}, {{t|wa|caca}} {{qualifier|sopan}}, {{t+|wa|stron}} {{qualifier|digunakan untuk haiwan, atau tidak sopan untuk manusia}}, {{t+|wa|flate}} {{qualifier|lembu}}, {{t+|wa|polene}} {{qualifier|ayam}}, {{t|wa|crotin}} {{qualifier|kuda}}, {{t|wa|petale}}, {{t|wa|pecale}} {{qualifier|arnab, ruminan kecil}}, {{t|wa|crotale}} {{qualifier|arnab, ruminan kecil}}
{{ter-bawah}}
=== Terbitan ===
* [[penyahtinjaan]]/ڤڽهتينجا<sup>ء</sup>ن: proses pembuangan najis atau tinja melalui dubur.
=== Tesaurus ===
; Sinonim:
# [[najis]], [[tahi]], [[berak]].
# kumuhan, kumbahan.
=== Pautan luar ===
* {{R:PRPM}}
{{id}}
{{wikipedia|lang=id}}
==== Kata nama ====
# [[#Bahasa Melayu|tinja]]
{{pt}}
==== Kata kerja ====
{{pt-verb-form}}
# {{inflection of|tingir||1|s|pres|subj|lang=pt}}
# {{inflection of|tingir||3|s|pres|subj|lang=pt}}
# {{inflection of|tingir||1|s|impr|lang=pt}}
# {{inflection of|tingir||3|s|impr|lang=pt}}
gs9a77duluosz5pyoyv69zfz0xwgoc8
کونسونن
0
10005
190034
188404
2024-11-12T03:20:20Z
Mirlim
8057
190034
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# {{context|linguistik|lang=ms}} [[huruf|Huruf]] selain [[vokal]].
=== Etimologi ===
Daripada {{etyl|ms|en}} {{term|en|consonant}}.
=== Sebutan ===
* {{dewan|kon|so|nãn}}
* {{AFA|ms|/konsonan/}}
* {{rhymes|ms|nan|an}}
* {{penyempangan|ms|کون|سو|نن|sc=Arab}}
=== Tulisan Rumi ===
[[konsonan]]
=== Kata majmuk ===
* {{l|ms|ݢوݢوسن کوسونن|sc=Arab}}
=== Tesaurus ===
; Sinonim: {{l|ms|حروف بنر|sc=Arab}}, {{l|ms|حروف ماتي|sc=Arab}}.
=== Pautan luar ===
* {{R:PRPM}}
[[Kategori:Tulisan Jawi]]
71jj6f3tz53h1escmhb2txikm70h7xz
کچيل
0
10165
190029
186013
2024-11-12T03:13:15Z
Mirlim
8057
/* Sebutan */
190029
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-ks|r=kecil}}
# [[tidak]] [[besar]]; tidak [[luas]]; tidak [[lebar]]
# masih [[muda]] atau masih [[kanak-kanak]]
# tidak banyak bilangannya; [[sedikit]]
# tidak penting; tidak mustahak; [[remeh]]
=== Sebutan ===
* {{dewan|ke|cil}}
* {{AFA|ms|/kətʃil/}}
* {{rhymes|ms|tʃil|il}}
* {{penyempangan|ms|ک|چيل}}
=== Tulisan Rumi ===
[[kecil]]
=== Terbitan ===
* {{l|ms|سکچيل-کچيلڽ}}
* {{l|ms|مڠچيل}}
* {{l|ms|مڠچيلکن}}
* {{l|ms|ممڤرکچيل-کچيل}}
* {{l|ms|کچيل-کچيلن}}
* {{l|ms|ککچيلن}}
=== Tesaurus ===
; Antonim:
* {{l|ms|بسر}}
* {{l|ms|ݢدڠ}}
* {{l|ms|راي}}
=== Pautan luar ===
* {{R:PRPM}}
[[Kategori:Tulisan Jawi]]
2xl0c92mdsmhcgmcwjv67n7in9h92ds
nyamuk
0
10167
190085
189175
2024-11-12T06:08:35Z
Mirlim
8057
kemas kini
190085
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
{{wikipedia|lang=ms}}
[[Fail:Mosquito 2007-2.jpg|thumbnail|nyamuk]]
{{ms-kn|j=ڽاموق}}
# Serangga kecil yang terbang dalam keluarga Culicidae, yang dikenali kerana menggigit dan menghisap darah.
=== Etimologi ===
Daripada {{etyl|ms|poz-mly-pro}} {{l|poz-mly-pro|*ñamuk}} (banding {{etyl|bjn|bjn}} {{term|bjn|nyamuk}}), daripada {{etyl|ms|poz-pro}} {{m|poz-pro|*ñamuk}}, {{l|poz-pro|*lamuk}} (banding {{etyl|ace|ace}} {{term|ace|jamok}}, {{etyl|bug|bug}} {{term|bug|namok}}, {{etyl|ch|ch}} {{term|ch|ñamu}}, {{etyl|jv|jv}} {{term|jv|lemut}}, {{etyl|tl|tl}} {{term|tl|lamok}}, {{etyl|fj|fj}} {{term|fj|namu}}, {{etyl|sm|sm}} {{term|sm|namu}}).
=== Sebutan ===
* {{dewan|nya|muk}}
* {{a|Johor-Selangor}} {{IPA|ms|/ɲamoʔ/}}
* {{a|Riau-Lingga}} {{IPA|ms|/ɲamʊʔ/}}
* {{rhymes|ms|amoʔ|moʔ|oʔ|}}
=== Tulisan Jawi ===
{{ARchar|[[ڽاموق]]}}
=== Terjemahan ===
{{ter-atas|serangga terbang kecil keluarga ''Culicidae'', dikenali dengan menggit dan menghisap darah}}
* Abkhaz: {{t|ab|акәыбры}}
* Afrikaans: {{t|af|muskiet}}
* Albania: {{t|sq|mushkonjë}}
* Amuzgo: {{t|amu|kíta}}
* Arab: {{t|ar|بعوضة|f|tr=baʿūḍa|sc=Arab}}
*: Mesir: {{t|ar|نموسة|f|tr=namūsa|sc=Arab}}
* Armenia: {{t|hy|մոծակ}}
* Assam: {{t|as|মহ|sc=Beng}}
* Asturia: {{t|ast|mosquitu|m}}
* Azeri: {{t|az|ağcaqanad}}
* Bajau Pantai Barat: {{t|bdr|namuk}}
* Bashkir: {{t|ba|серәкәй}}
* Bau Bidayuh: {{t|sne|pirungang}}
* Belanda: {{t+|nl|mug|f}}
* Belarus: {{t|be|кама́р|m}}
* Benggali: {{t|bn|মশা|tr=môsha|sc=Beng}}
* Berber:
*: Tashelhit: {{t|shi|wabiba|m}}
* Bulgaria: {{t+|bg|кома́р|m}}
* Burma: {{t+|my|ခြင်}}
* Catalonia: {{t+|ca|mosquit|m}}
* Chamicuro: {{t|ccc|ayno}}
* Chechen: {{t|ce|чуьрк}}
* Cina:
*: Mandarin: {{t+|cmn|蚊子|tr=wénzi|sc=Hani}}
* Czech: {{t+|cs|komár|m}}
* Darkinjung: {{t|xda|dyuping}}
* Denmark: {{t|da|stikmyg|c}}
* Esperanto: {{t|eo|kulo}}
* Estonia: {{t+|et|sääsk}}, {{t|et|moskiito}}
* Fiji: {{t|fj|namu}}
* Finland: {{t+|fi|hyttynen}}, {{t+|fi|sääski}}, {{t+|fi|moskiitto}}
* Gaelik Scotland: {{t|gd|mosgìoto|m}}
* Galicia: {{t|gl|mosquito|m}}
* Georgia: {{t|ka|კოღო|sc=Geor}}, {{t|ka|ქინქლი|sc=Geor}}
* Greek: {{t+|el|κουνούπι|n|sc=Grek}}
* Gujarati: {{t|gu|મચ્છર|sc=Gujr}}
* Hindi: {{t|hi|मच्छर|tr=macchar|sc=Deva}}
* Hungary: {{t+|hu|szúnyog}}
* Ibrani: {{t|he|יתוש|m|tr=yatûsh}}
* Iceland: {{t+|is|moskítófluga|f}}
* Indonesia: {{t+|id|nyamuk}}
*: Aceh: {{t|ace|jamok}}
*: Bali: {{t|ban|legu}}
*: Banjar: {{t|bjn|ñamuk}}
*: Bugis: {{t|bug|namoʔ}}
*: Jawa: {{t|jv|lemut}}
*: Madura: {{t|mad|reŋŋeʔ}}
*: Minangkabau: {{t|min|ranŋiʔ}}
*: Sunda: {{t|su|reungit}}
* Inggeris: {{t+|en|mosquito}}
* Ingush: {{t|inh|зунгат}}
* Interlingua: {{t|ia|mosquito}}, {{t|ia|culice}}
* Itali: {{t+|it|zanzara|f}}
* Jepun: {{t+|ja|蚊|tr=[[か]], ka|sc=Jpan}}
* Jerman: {{t+|de|Mücke|f}}, {{t+|de|Moskito|m}}
* Jèrriais: {{t|nrf|moustique|f}}
* Kannada: {{t|kn|ನುಸಿಸೊಳ್ಳೆ|sc=Knda}}, {{t+|kn|ಸೊಳ್ಳೆ|sc=Knda}}
* Kazakh: {{t|kk|маса|sc=Cyrl}}, {{t|kk|москит|sc=Cyrl}}
* Khanty:
*: Kazym: {{t|kca-nor|пєԓӈа|sc=Cyrl}}
{{ter-tengah}}
* Khmer: {{t+|km|មូស|tr=muuh|sc=Khmr}}
* Kimaragang: {{t|kqr|rongit}}
* Komi-Zyrian: {{t|kpv|ном|sc=Cyrl}}
* Korea: {{t+|ko|모기|sc=Kore}}
* Kurdi:
*: Sorani: {{t|ckb|مێشوله}}
* Kyrgyz: {{t|ky|чиркей|sc=Cyrl}}
* Lao: {{t+|lo|ຍຸງ|sc=Laoo}}
* Latgalia: {{t|ltg|ūds|m}}
* Latin: {{t|la|culex|m}}
* Latvia: {{t+|lv|ods|m}}, {{t|lv|dzēlējods|m}} {{qualifier|formal}}, {{t|lv|knislis|m}}, {{t|lv|knausis|m}} {{qualifier|dialek}}, {{t|lv|moskīts|m}}
* Lithuania: {{t+|lt|uodas|m}}, {{t|lt|kuisys|m}} (dial.), {{t|lt|varmas|m}} (dial.)
* Livvi: {{t|olo|čakku}}, {{t|olo|pinʼoi}}
* Luo: {{t|luo|suna}}
* Macedonia: {{t|mk|комарец|m}}
* Malagasy: {{t+|mg|moka}}
* Malayalam: {{t|ml|കൊതുക്|sc=Mlym}}
* Malta: {{t|mt|nemusa|f}}
* Maori: {{t|mi|waeroa}}
* Mari:
*: Mari Barat: {{t|mrj|шӹнгӓ}}
*: Mari Timur: {{t|mhr|шыҥа}}
* Marwari: {{t|mwr|माछर}}
* Melanau Pusat: {{t|mel|kekiyaih}}
* Mongolia: {{t|mn|шумуул|sc=Cyrl}}, {{t|mn|дэлэнч|sc=Cyrl}}
* Murut Tagal: {{t|mvv|namuk}}, {{t|mvv|tukung}}
* Navajo: {{t|nv|tsʼíʼii daʼaneezíʼ}}, {{t|nv|tsʼíʼii}}
* Ngarrindjeri: {{t|nay|muruli}}
* Norway: {{t+|no|mygg|m}}
* Occitan: {{t+|oc|moissal|m}}, {{t+|oc|mosquilh|m}}
* Parsi: {{t+|fa|پشه|tr=paše}}
* Perancis: {{t+|fr|moustique|m}}
* Poland: {{t+|pl|komar|m}}
* Portugis: {{t+|pt|mosquito|m}}
* Punjabi: {{t|pa|ਮੱਛਰ|sc=Guru}}
* Romania: {{t+|ro|țânțar}}
* Rusia: {{t+|ru|кома́р|m}}, {{t+|ru|моски́т|m}}
* Samoa: {{t|sm|namu}}
* Samogitian: {{t|sgs|koisis|m}}
* Serbo-Croatia:
*: Cyril: {{t|sh|комарац|m}}, {{t|sh|комарица|f}}
*: Rumi: {{t+|sh|komarac|m}}, {{t|sh|komarica|f}}
* Sindhi: {{t|sd|मछर|sc=sd-Arab}}
* Slovak: {{t|sk|komár|m}}
* Slovene: {{t+|sl|komar|m}}
* Sepanyol: {{t+|es|mosquito|m}}, {{t+|es|mosco|m}} {{qualifier|Mexico}}, {{t+|es|plaga|f}} {{qualifier|Venezuela}}, {{t+|es|zancudo|m}} {{qualifier|Penggunaan standard Amerika Tengah|Colombia|Mexico|Peru|Venezuela}}
* Supyire: {{t|spp|lùpààn}}
* Swahili: [[mbu]] ''(nc 9/10)''
* Sweden: {{t+|sv|mygga|c}}
* Tagalog: {{t|tl|lamok}}
* Tajik: {{t|tg|пашша}}, {{t|tg|хомӯшак}}
* Tamil: {{t+|ta|கொசு}}, {{t+|ta|மசகம்}}, {{t|ta|மசம்}}
* Tatar: {{t+|tt|черки}}, {{t|tt|озынборын}}
* Tatar Krimea: {{t|crh|şırqıy}}
* Telugu: {{t+|te|దోమ}}
* Thai: {{t+|th|ยุง|tr=yung}}
* Turki: {{t+|tr|sivrisinek}}
* Turkmen: {{t|tk|çyybyn}}
* Udmurt: {{t|udm|нымы}}, {{t|udm|чибинь}}
* Ukraine: {{t+|uk|кома́р|m}}
* Vietnam: {{t+|vi|muỗi}}, {{t|vi|con muỗi}}
* Volapük: {{t+|vo|muskit}}
* Wales: {{t|cy|mosgito|m}}, {{t|cy|mosgitos|p}}
* Wolof: {{t+|wo|yoo|alt=yoo wi}}
* Yiddish: {{t|yi|קאָמאַר|m|tr=komar|sc=Hebr}}
* Yucatec: [[k'oxol]]
{{ter-bawah}}
=== Kata majmuk ===
* {{l|ms|nyamuk aedes}}
* {{l|ms|nyamuk biasa}}
* {{l|ms|nyamuk mati}}
* {{l|ms|nyamuk pers}}
* {{l|ms|nyamuk tiruk}}
* {{l|ms|tamparan nyamuk}}
=== Peribahasa ===
* '''Nyamuk''' mati gatal tak lepas
*#menaruh dendam terhadap orang yg berbuat jahat kpd kita walaupun ia sudah dihukum.
* '''Nyamuk''' lepas pijat-pijat kena pirik.
*#Mendapat celaka kerana kesalahan orang lain. pirik = memipis, menumbuk lumat-lumat.
*Ditempuh '''nyamuk''' terbalik, ditindih lalat tak dapat bangkit.
*#Terlalu lemah.
*Menepak '''nyamuk''' menjadi daki.
*#Tak akan mendapat nama baik kalau melawan orang yang lemah. (Biasa juga: Mengusir nyamuk menerima daki).
*Tepuk '''nyamuk''' menjadi daki.
*#Tak akan mendapat nama baik kalau melawan orang yang lemah. (Peribahasa lain yang sama makna: Menepak nyamuk menjadi daki).
=== Rujukan ===
* Kamus Istimewa Peribahasa Melayu
=== Pautan luar ===
* {{R:PRPM}}
[[Kategori:ms:Serangga]]
{{id}}
===Kata nama===
{{id-noun}}
# serangga kecil yang terbang dalam keluarga Culicidae, yang dikenali kerana menggigit dan menghisap darah.
===Etimologi===
Dari {{etyl|ms|id}} {{term|ms|nyamuk}}, dari {{etyl|poz-mly-pro|id}} {{m|poz-mly-pro|*ñamuk}}, dari {{etyl|poz-pro|id}} {{m|poz-pro|*ñamuk}}, {{m|poz-pro|*lamuk}}.
[[Kategori:id:Serangga]]
1f7vaqcfx5mt9nzhy8ec84a7fxz5wzj
کات نام
0
10197
190091
188813
2024-11-12T06:15:43Z
Mirlim
8057
kemas kini
190091
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Kata yang merujuk kepada orang, tempat atau benda, antaranya termasuk kata nama am dan kata nama khas.
=== Etimologi ===
{{compound|ms|کات|نام|sc=Arab}}
=== Sebutan ===
* {{dewan|ka|ta nã|mã}}
* {{AFA|ms|/kata nama/}}
* {{rhymes|ms|ma|a}}
* {{penyempangan|ms|کا|ت||نا|م}}
=== Tulisan Rumi ===
[[kata nama]]
=== Pautan luar ===
* {{R:PRPM}}
[[Kategori:Tulisan Jawi]]
lqg85sk14g61auh1jzjfgvv4f6csphw
larseni
0
10203
190011
188588
2024-11-11T12:46:48Z
Tofeiku
2269
kemas kini
190011
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# {{lb|ms|undang-undang}} Perbuatan mencuri barang milik perseorangan.
=== Etimologi ===
Daripada {{etyl|en|ms}} {{term|larceny|lang=en}}.
=== Sebutan ===
* {{dewan|lar|se|nĩ}}
* {{AFA|ms|/larsəni/}}
* {{rhymes|ms|ni}}
* {{penyempangan|ms|lar|se|ni}}
=== Tulisan Jawi ===
{{ARchar|[[لرسني]]}}
=== Terjemahan ===
{{ter-atas|perbuatan mencuri barang orang lain}}
* Finland: {{t+|fi|varkaus}}
* Iceland: {{t|is|stuldur|m}}, {{t+|is|þjófnaður|m}}
* Inggeris: {{t+|en|larceny}}
* Interlingue: {{t|ie|furte}}
* Parsi: {{t+|fa|دزدی|tr=dozdi}}
{{ter-tengah}}
* Portugis: {{t+|pt|furto|m}}
* Romania: {{t+|ro|furt}}
* Rusia: {{t+|ru|воровство|n|tr=vorovstvó}}, {{t+|ru|кража|f|sc=Cyrl}}
* Sepanyol: {{t+|es|hurto|m}}, {{t|es|latrocinio|m}}
* Slovene: {{t|sl|odtujitev|n}}, {{t+|sl|tatvina|f}}
{{ter-bawah}}
=== Pautan luar ===
* {{R:PRPM}}
li6ykapo8bowfpfbddfrvnogik9cyo4
کريڤ
0
10445
190040
188259
2024-11-12T03:27:04Z
Mirlim
8057
190040
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# {{konteks|tekstil|lang=ms}} Sejenis kain nipis daripada sutera, kapas atau benang bulu yang permukaannya berkedut-kedut.
# Bunyi seperti bunyi mengikis (mengerit).
=== Etimologi ===
{{sense|kain berkedut}} Daripada {{etyl|ms|en}} {{term|en|crêpe|}} krep.
=== Sebutan ===
{{sense|kain berkedut}}
* {{dewan|krép}}
* {{AFA|ms|/krep/}}
* {{rhymes|ms|rep|ep|p}}
* {{penyempangan|ms|کريڤ}}
{{sense|bunyi mengikis}}
* {{dewan|kerip}}
* {{AFA|ms|/kərip/}}
* {{rhymes|ms|rip|ip|p}}
* {{penyempangan|ms|ک|ريڤ}}
=== Tulisan Rumi ===
* {{sense|kain berkedut}} [[krep]]
* {{sense|bunyi mengikis}} [[kerip]]
=== Terbitan ===
{{sense|bunyi mengikis}}
* {{l|ms|ڤڠريڤ}}
* {{l|ms|مڠريڤ}}
=== Kata majmuk ===
{{sense|kain berkedut}}
* {{l|ms|کرتس کريڤ}}
=== Anagram ===
* {{l|ms|ڤکير}}
* {{l|ms|کيرڤ}}
* {{l|ms|کڤري}}
* {{l|ms|کڤير}}
* {{l|ms|کيڤر}}
[[Kategori:Tulisan Jawi]]
2sawa09sbbfsrqzjkg7uclqller0o9t
کأبادين
0
10942
190090
188408
2024-11-12T06:14:47Z
Mirlim
8057
kemas kini
190090
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Kewujudan yang [[abadi]], kekekalan.
=== Etimologi ===
{{apitan|ms|ک|ابادي|ن}}
=== Sebutan ===
* {{dewan|ke|a|ba|dian}}
* {{AFA|ms|/kəabadian/}}
* {{rhymes|ms|dian|ian|an}}
* {{penyempangan|ms|ک|أ|با|دين}}
=== Tulisan Rumi ===
[[keabadian]]
=== Kata majmuk ===
* {{l|ms|حکوم کأبادين تناݢ}}
* {{l|ms|حکوم کأبادين جيسيم}}
=== Pautan luar ===
* {{R:PRPM}}
[[Kategori:Tulisan Jawi]]
0hoj7elklmjb2wqz253miu1qw9u8zu7
کسيڠ
0
10953
190039
188895
2024-11-12T03:24:45Z
Mirlim
8057
/* Sebutan */
190039
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Sejenis serangga, Rhyncota sp.
=== Sebutan ===
* {{dewan|ke|sing}}
* {{AFA|ms|/kəsiŋ/}}
* {{rhymes|ms|siŋ|iŋ|ŋ}}
* {{penyempangan|ms|ک|سيڠ}}
=== Tulisan Rumi ===
[[kesing]]
=== Pautan luar ===
* {{R:PRPM}}
[[Kategori:Tulisan Jawi]]
bjjd3yp69kxwdcaikj55yy7jd3h2hph
April
0
11006
190027
185965
2024-11-12T03:05:10Z
Hakimi97
2668
/* Etimologi */
190027
wikitext
text/x-wiki
{{also|april|apríl}}
{{Pautan Projek Wikimedia}}
{{ms}}
{{wikipedia|lang=ms}}
=== Takrifan ===
{{ms-knk}}
# Bulan keempat dalam tahun Masihi yang mengandungi 30 [[hari]] antara [[Mac]] dan [[Mei]].
=== Etimologi ===
Daripada {{inh|en|enm|apprile}}, {{m|en|Aprill}}, dilatinkan semula daripada {{cog|enm|aueril}}, daripada {{der|en|fro|avrill}}, daripada {{der|en|la|Aprīlis||bulan dewi [[Venus]]}}, berkemungkinan berdasarkan {{der|en|ett|𐌀𐌐𐌓𐌖}}, daripada {{der|en|grc|Ἀφροδίτη||Venus}}. Menggantikan perkataan asli {{ncog|ang|ēastermōnaþ|lit=bulan Easter}}.
=== Sebutan ===
* {{dewan|a|pril}}
* {{AFA|ms|/april/}}
* {{rhymes|ms|pril}}
* {{penyempangan|ms|A|pril}}
=== Tulisan Jawi ===
{{ARchar|[[اڤريل]]}}
=== Terjemahan ===
{{ter-atas|bulan keempat}}
* Abaza: {{t|abq|апрель}}
* Abkhaz: {{t|ab|мшаҧы}}
* Afrikaans: {{t+|af|April}}
* Alabama: {{t|akz|hasiholtina istonóostàaka}}, {{t|akz|Eyprilka}}
* Albania: {{t|sq|prill}}
* Alutiiq: {{t|ems|Uqna'isurt'sqaaq Iraluq}}
* Amhara: {{t|am|ኤፕረል|sc=Ethi}}
* Apache:
*: Apache Barat: {{t|apw|Tʼąąʼ Náchoh}}
* Arab: {{t|ar|ابريل|alt=أبْرِيل|tr=’abrīl|m}}, {{t+|ar|نِيسَانٌ|tr=nisān|m}}
* Aragon: {{t+|an|abril|m}}
* Armenia: {{t+|hy|ապրիլ}}
*: Armenia Lama: {{t|xcl|ապրիլ}}
* Aromania: {{t|rup|aprir}}, {{t|rup|prir}}, {{t|rup|April}}
* Asturia: {{t+|ast|abril|m}}
* Azeri: {{t+|az|aprel}}
* Basque: {{t+|eu|apiril}}
* Belanda: {{t+|nl|april|m}}
* Belarus: {{t+|be|красаві́к|m}}
* Bengali: {{t|bn|এপ্রিল|sc=Beng|tr=ēpril}}
* Bislama: {{t|bi|epril}}
* Breton: {{t+|br|Ebrel}}, miz Ebrel
* Bulgaria: {{t+|bg|апри́л}}
* Burma: {{t+|my|ဧပြီ|tr=ebyi}}
* Catalonia: {{t+|ca|abril|m}}
* Chechen: {{t|ce|Оханан-бутт|sc=Cyrl}}
* Cherokee: {{t|chr|ᎧᏬᏂ|tr=Kawoni|sc=Cher}}
* Cina:
*: Mandarin: {{t+|cmn|四月|tr=sìyuè}}
* Chuvash: {{t|cv|ака |sc=Cyrl}}
* Cornish: {{t|kw|Ebrel}}, [[mys]] Ebrel
* Corsican: {{t+|co|aprile}}
* Czech: {{t+|cs|duben|m}}
* Dakota: {{t|dak|Wiitopa}}
* Dalmatian: {{t|dlm|aprail}}
* Denmark: {{t+|da|april}}
* Dhivehi: {{t|dv|އެޕްރީލް|sc=Thaa}}
* Esperanto: {{t+|eo|aprilo}}, {{t|eo|Aprilo}}
* Estonia: {{t+|et|aprill}}
* Ewe: {{t|ee|Afɔfiɛ}}
* Faroe: {{t|fo|apríl}}
* Fiji: {{t|fj|Epereli}}
* Filipino: Abril
* Finland: {{t+|fi|huhtikuu}}
* Frisia Barat: {{t+|fy|april}}, {{t+|fy|gersmoanne}}
* Friulia: {{t|fur|Avrîl}}
* Galicia: {{t+|gl|abril|m}}
* Georgia: {{t+|ka|აპრილი}}
* Gaelik Scotland: {{t|gd|Giblean|m}}
* Greek: {{t+|el|Απρίλιος|m}}
* Greenland: {{t+|kl|Apriili}}
* Hawaii: {{t|haw|ʻApelila}}
* Hindi: {{t+|hi|अप्रैल|tr=aprél|m}}
* Hungary: {{t+|hu|április}}
* Ibrani: {{t+|he|אַפְּרִיל|tr=apríl|m}}
* Iceland: {{t+|is|apríl|m}}, {{t|is|aprílmánuður|m}}
* Ido: {{t+|io|aprilo}}
* Ilocano: {{t|ilo|abril}}
* Inari Sami: {{t|smn|cuáŋuimáánu}}
* Indonesia: {{t+|id|april}}
* Inggeris: {{t+|en|April}}
* Inggeris Kuno: {{t|ang|ēastermōnaþ|m}}
* Interlingua: {{t|ia|april}}
* Interlingue: {{t|ie|april}}
* Ireland: {{t+|ga|Aibreán}}
* Itali: {{t+|it|aprile|m}}
* Jepun: {{t+|ja|四月|tr=しがつ, shigatsu}}, {{t+|ja|卯月|tr=うづき, uzuki}}
* Jawa: {{t|jv|april}}
* Jerman: {{t+|de|April|m}}, {{t+|de|Ostermond|m}}
* Jerman Kasar:
*: Jerman Kasar Jerman: {{t|nds-de|April|m}}, {{t|nds-de|Aprilmaand|m}}, {{t|nds-de|Oostermaand|m}}; {{t|nds-de|Pröl|m}} {{qualifier|Prusia Kasar}}
*: Jerman Kasar Belanda: {{t|nds-nl|april}}
* Kabuverdianu:
*: [[ALUPEC]]: [[abril]]
*: [[Badiu]]: [[abril]]
*: [[São Vicente]]: [[ébril]]
* Kannada: {{t+|kn|ಎಪ್ರಿಲ್}}
{{ter-tengah}}
* Kazakh: {{t+|kk|сәуір}}
* Khmer: {{t+|km|មេសា|tr=meysā}}
* Kiribati: {{t|gil|Eberi|sc=Cyrl}}
* Kreol Haiti: {{t|ht|avril}}
* Korea: {{t+|ko|사월|tr=saweol|sc=Kore}}
* Kurdi: {{t+|ku|avrêl}}
* Kyrgyz: {{t|ky|апрел}}
* Ladin: {{t|lld|oril}}
* Lao: {{t|lo|ເດືອນເມສາ|sc=Laoo}}
* Latin: {{t+|la|aprīlis}}
* Latvia: {{t+|lv|aprīlis}}
* Lezgi: {{t|lez|нава}}
* Limburg: {{t+|li|April}}
* Lithuania: {{t+|lt|balandis|m}}
* Livonia: {{t|liv|april}}
* Luxembourg: {{t+|lb|Abrëll|m}}, {{t|lb|Fréileng|m}}, {{t+|lb|Ouschtermount|m}}
* Macedonia: {{t+|mk|април|m}}
* Malta: {{t|mt|April}}
* Manchu: ([[duin biya]])
* Maori: {{t|mi|Āperire}}
* Marathi: {{t|mr|एप्रिल|tr=epril}}
* Montagnais: {{t|moe|shiship-pishimᵘ}}
* Navajo: {{t|nv|Tʼą́ą́chil}}
* Neapolitan: {{t|nap|abbrile}}
* Norway: {{t+|no|april}}
* Novial: {{t|nov|aprile}}
* Occitan: {{t+|oc|abril|m}}
* Ojibwe: {{t|oj|iskigamizige-giizis}}
* Oriya: {{t|or|ଅପ୍ରେଲ|sc=Orya}}
* Ossetia: {{t|os|апрель}}
* Parsi: {{t+|fa|آوریل|tr=âvrîl}}, {{t|fa|آپریل|tr=âpril|sc=fa-Arab}}
* Perancis: {{t+|fr|avril|m}}
* Poland: {{t+|pl|kwiecień|m}}
* Portugis: {{t+|pt|abril|m}}
* Romania: {{t+|ro|aprilie}}, {{qualifier|popular}} {{t+|ro|prier}}
* Romansch: {{t|rm|avrel|m}}
* Rusia: {{t+|ru|апре́ль|m}}
* Sami: [[cuoŋománnu]]
* Samoa: {{t|sm|aperila}}
* Sanskrit: {{t|sa|आंग्लवर्षस्य चतुर्थमास|tr=āṅglavarṣasya caturthamāsaḥ}}
* Sardinia: {{t|sc|abriri}}, {{t|sc|aprile}}, {{t|sc|albile}}
* Scots: {{t|sco|Aprile}}
* Sepanyol: {{t+|es|abril|m}}
* Serbo-Croatia:
*: Cyril: {{t|sh|април|m|sc=Cyrl}}
*: Rumi: {{t+|sh|april|m}}, {{t+|sh|travanj|m}}
* Sicilia: {{t+|scn|aprili|m}}
* Skolt Sami: {{t|sms|pââˊzzmään}}
* Slavonik Gereja Lama: {{t|cu|априль|m|sc=Cyrs}}
* Slovak: {{t+|sk|apríl|m}}
* Slovene: {{t|sl|apríl|m}}
* Sorbia Atas: {{t+|hsb|apryl|m}}, {{t|hsb|jutrownik|m}} {{qualifier|arkaik}}
* Sotho: {{t+|st|Mmesa}}
* Sweden: {{t+|sv|april}}
* Tagalog: {{t+|tl|Abril}}
* Tahiti: {{t|ty|’ēperēra}}
* Tajik: {{t+|tg|апрел}}
* Tamil: {{t+|ta|ஏப்ரல்}}
* Tatar: {{t|tt|äpril}}
* Tatar Krimea: {{t|crh|aprel}}
* Telugu: {{t+|te|ఏప్రిల్}}
* Thai: {{t+|th|เมษายน|tr=meh sáá yohn}}
* Tok Pisin: {{t|tpi|epril}}
* Tonga: {{t|to|'epeleli}}
* Turki: {{t+|tr|nisan}}
* Ukraine: {{t+|uk|кві́тень|m}}
* Urdu: {{t+|ur|اپریل|m|tr=aprél}}
* Uyghur: {{t|ug|ئاپريل}}
* Venice: {{t+|vec|avril}}
* Vietnam: {{t+|vi|tháng tư}} (月四, 月4)
* Volapük: {{t+|vo|prilul}}
* Võro: {{t|vro|mahlakuu}}
* Walloon: {{t+|wa|avri}}
* Wales: {{t+|cy|Ebrill|m}}
* Wolof: {{t|wo|Awril}}
* Yiddish: {{t+|yi|אַפּריל|m|tr=april|sc=Hebr}}
* Yup'ik: {{t|esu|Tengmiirvik}}
* Zulu: {{t|zu|i-ephuleli}}
* Zuni: {{t|zun|Łi'dekwakkya Łana}}
{{ter-bawah}}
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
[[Kategori:ms:Bulan kalendar Masihi]]
=={{seksyen|af}}==
==== Kata nama ====
{{af-kn|Aprilmaande}}
# {{l|ms|April}}
[[Kategori:af:Bulan]]
=={{seksyen|ee}}==
==== Kata nama khas ====
{{head|ee|kata nama khas}}
# {{l/ms|April}}
=== Lihat juga ===
* {{l|ee|Afɔfiɛ}}
[[Kategori:ee:Bulan]]
{{en}}
{{wikipedia|lang=en}}
==== Kata nama khas ====
{{en-proper noun|Aprils}}
# [[bulan|Bulan]] keempat [[kalendar Masihi]], selepas [[March]] dan sebelum [[May]]. Singkatan: '''[[Apr]]''' atau '''[[Apr.]]'''
#* '''1845''', Robert Browning, ''Home-Thoughts From Abroad'':
#*: Oh, to be in England
#*: Now that '''April'''’s there
# {{given name|female|from=Inggeris}} bagi seseorang yang dilahirkan pada bulan April; digunakan sejak awal abad ke-20.
#* '''1947''', Hilda Laurence, ''Death of a Doll'', page 27:
#*: I'm '''April''' Hooper. That sounds silly, the '''April''' part, but my mother was English and she always said there was nothing prettier than an English '''April'''.
=== Etimologi ===
Daripada {{etyl|enm|en}} {{m|enm|apprile}}, dirumikan semula daripada''[[aueril]]'', daripada {{etyl|fro|en}} {{m|fro|avrill}}, daripada {{etyl|la|en}} {{m|la|aprīlis||daripada bulan dewi [[Venus]]}}, mungkin berdasarkan daripada {{etyl|ett|en}} {{m|ett|Apru}}, daripada {{etyl|grc|en}} {{m|grc|Αφροδίτη||Venus}}.
=== Sebutan ===
* {{a|UK}} {{AFA|en|/ˈeɪprɪl/|/ˈeɪprəl/}}
* {{a|US}} {{enPR|āʹprəl}}, {{AFA|en|/ˈeɪprəl/}}
* {{audio|en|en-us-April.ogg|Audio (AS)}}
=== Terbitan ===
{{atas3}}
* [[Aprilesque]]
* [[April-esquire]]
* [[April-fish]]
* [[April fool]]<!--"April Fools' Day" di bawah "April fool"-->
* [[April-gentleman]]
* [[April-gowk]]
{{tengah3}}
* [[Aprilian]]
* [[Aprilish]]
* [[April Revolution]]
* [[April showers]]
* [[April showers bring May flowers]]
* [[April Theses]]
{{tengah3}}
* [[April Uprising]]
* [[Bloody April]]
* [[days of April]]
* [[mid-April]]
{{bawah}}
=== Tesaurus ===
; Sinonim:
* {{sense|bulan keempat}} {{l/en|Eastermonth}}
=== Anagram ===
* {{l|en|Pilar}}
=={{seksyen|de}}==
==== Kata nama ====
{{de-kn|m|Aprils|gen2=April|Aprile|pl2=Aprils}}
# {{l/ms|April}}
=== Sebutan ===
* {{AFA|de/aˈpʁɪl/}}
* {{audio|de|De-April.ogg|audio}}
* {{audio|de|De-April2.ogg|audio}}
=== Pautan luar ===
* {{R:Duden}}
[[Kategori:2000 perkataan asas bahasa Jerman]]
[[Kategori:de:Bulan]]
=={{seksyen|mt}}==
==== Kata nama khas ====
{{head|mt|kata nama khas|g=m}}
# {{l/ms|April}}
2ttlgzikm9eejgsvh2pe50vz3f2c5vu
کوڤيتيام
0
11132
190033
188877
2024-11-12T03:19:00Z
Mirlim
8057
190033
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
[[Fail:CoffeeShopSG.JPG|thumbnail|{{lang|ms|کوڤيتيام|sc=Arab}}]]
{{ms-kn}}
# [[kedai]] [[kopi]].
=== Etimologi ===
Gabungan bahasa Melayu {{term|ms|کوڤي}} + bahasa Hokkien {{term|nan|店|tr=tiàm}}
=== Sebutan ===
* {{dewan|ko|pi|tiam}}
* {{AFA|ms|/kopitiam/}}
* {{rhymes|ms|iam|am}}
* {{penyempangan|ms|کو|ڤي|تيام}}
=== Tulisan Rumi ===
[[kopitiam]]
=== Tesaurus ===
; Sinonim: {{l|ms|کداي کوڤي|sc=Arab}}.
=== Pautan luar ===
* {{R:PRPM}}
[[Kategori:Kata majmuk bahasa Melayu]]
kr39x6qnqhnnd8ys35l5jh40ytlmy63
Brunei
0
11315
189971
189295
2024-11-11T12:15:33Z
Tofeiku
2269
kemas kini
189971
wikitext
text/x-wiki
{{juga|brunei}}
{{Pautan Projek Wikimedia}}
{{wikipedia|lang=ms}}
== Bahasa Melayu ==
=== Kata nama ===
'''Brunei'''
# sebuah [[negara]] yang terletak di [[Asia Tenggara]]. Nama rasminya, [[Negara Brunei Darussalam]]
== Bahasa Catalonia ==
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
== Bahasa Finland ==
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
== Bahasa Indonesia ==
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
== Bahasa Inggeris ==
=== Sebutan ===
{{IPA|en|/bruːˈnaɪ/}}
* {{hyphenation|en|Bru|nei}}
* {{audio|en|En-us-Brunei.ogg|Audio (AS)}}
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
== Bahasa Itali==
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
=== Anagram ===
* [[burine#Bahasa Itali|burine]]
== Bahasa Jerman ==
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
== Bahasa Norway ==
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
==== Istilah berkaitan ====
* [[bruneier]]
* [[bruneisk]]
== Bahasa Poland ==
=== Sebutan ===
* {{audio|pl|Pl-Brunei.ogg|Audio}}
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
== Bahasa Portugis ==
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
== Bahasa Sweden ==
=== Kata nama ===
'''Brunei'''
# [[Brunei#Bahasa Melayu|Brunei]]
[[Kategori:Negara di Asia]]
[[Kategori:Kata nama khas Bahasa Melayu]]
[[Kategori:Kata nama khas Bahasa Catalonia]]
[[Kategori:Kata nama khas Bahasa Indonesia]]
[[Kategori:Kata nama khas Bahasa Inggeris]]
[[Kategori:Kata nama khas Bahasa Itali]]
[[Kategori:Kata nama khas Bahasa Jerman]]
[[Kategori:Kata nama khas Bahasa Norway]]
[[Kategori:Kata nama khas Bahasa Poland]]
[[Kategori:Kata nama khas Bahasa Portugis]]
[[Kategori:Kata nama khas Bahasa Sweden]]
gb5oktpqq17rrnyp83rigx6h268olcv
Kor'an
0
11706
190028
107783
2024-11-12T03:10:37Z
Mirlim
8057
190028
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-knk}}
# {{lb|ms|ejaan sekolah}} {{obsolete spelling of|ms|Quran}}
=== Sebutan ===
* {{dewan|Kor|'an}}
* {{AFA|ms|/kor.ʕan/}}
* {{rhymes|ms|ʕan}}
* {{penyempangan|ms|Kor|'an}}
=== Bentuk lain ===
* {{l/ms|Koran}}
* {{l/ms|Kur'an}}
* {{l/ms|Kuran}}
=== Rujukan ===
* {{R:Kamus Dewan 1970}}
pi8n1znc4dpr00hx53pyu8ewt8fresg
کوکب
0
11771
190032
189243
2024-11-12T03:17:02Z
Mirlim
8057
/* Kata nama khas */
190032
wikitext
text/x-wiki
{{juga|كوكب}}
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
[[Fail:HD 209458 b Artwork.jpg|thumb|{{ARchar|کوکب}}]]
{{ms-kn}}
# {{lb|ms|arkaik}} [[planet]].
=== Etimologi ===
Daripada {{bor|ms|ar|كوكب}}.
=== Sebutan ===
* {{dewan|kau|kab}}
* {{AFA|ms|/kau.kab/|}}
* {{rhymes|ms|kab|ab|}}
* {{penyempangan|ms|کو|کب}}
=== Tulisan Rumi ===
{{l/ms|kaukab}}
=== Tesaurus ===
; Sinonim: {{l|ms|ڤلانيت}}
=== Pautan luar ===
* {{R:PRPM}}
==Bahasa Parsi==
===Kata nama===
{{fa-kn|tr=koukab}}
# [[bintang]]
# [[dahlia]]
===Kata nama khas===
{{head|fa|kata nama khas|head='''کوکب'''|sc=fa-Arab|tr=Koukab}}
# [[w:Kochab|Kochab]], [[w:Kokab|Kokab]] (sebuah [[bintang]] dalam [[buruj]] [[Beruang Kecil]])
# {{given name|fa|perempuan}}, Kowkab, Kokab
===Etimologi===
Daripada {{etyl|ar|fa}} {{m|ar|كَوْكَب}}.
===Terbitan===
* {{l|fa|sc=fa-Arab|کوکبه}} (koukabe)
===Kata berkaitan===
* {{l|fa|ستاره|tr=setâre}}
* {{l|fa|اختر|tr=axtar}}
[[Kategori:fa:Jasad samawi]]
[[Kategori:fa:Bunga]]
==Bahasa Urdu==
===Kata nama===
{{ur-kn|tr=kaukab|g=m}}
# [[bintang]]
# [[buruj]]
===Etimologi===
Daripada {{etyl|ar|ur}} {{m|ar|كَوْكَب}}.
===Kata berkaitan===
* {{l|ur|کوکبہ|tr=kaukaba}}
[[Kategori:ur:Astronomi]]
90qe98oznna9e5nufgrfng06l0hceur
yank
0
11951
190065
108772
2024-11-12T05:41:14Z
Mirlim
8057
/* Sebutan */
190065
wikitext
text/x-wiki
==Bahasa Inggeris==
===Takrifan===
{{kata kerja|Inggeris}}
{{head|en|kata kerja}} (''jamak'' '''[[yanks]]''')
# untuk menarik sesuatu dengan secara tiba-tiba, kuat dan cepat.
# {{lb|en|slanga}} sesi [[pelancapan]].
===Sebutan===
* {{enPR|yăngk}}, {{IPA|en|/jæŋk/}}
* {{a|di A.S., juga:}} {{enPR|yāngk}}, {{IPA|en|/jeɪŋk/}}
* {{rhymes|en|æŋk}}
8wrp0x7ezxi06t147dt0l5basbq6055
yardsticks
0
11956
190068
108778
2024-11-12T05:42:56Z
Mirlim
8057
/* Kata nama */
190068
wikitext
text/x-wiki
==Bahasa Inggeris==
===Kata nama===
{{head|en|kata nama}}
# {{jamak|en|yardstick}}.
qxzkvwq7mj08cmiqljq972m1qqy9zqa
yaps
0
11958
190067
108784
2024-11-12T05:42:25Z
Mirlim
8057
/* Takrifan */
190067
wikitext
text/x-wiki
==Bahasa Inggeris==
===Takrifan===
{{kata nama|Inggeris}}
{{head|en|kata nama}}
# {{jamak|en|yap}}.
===Anagram===
* {{anagram|en|APYs|AsPy|Pays|aspy|pays|pyas|spay}}
mnmjp8djtr1bi7auulgrm0ji9437r2l
yanks
0
11959
190066
108785
2024-11-12T05:41:50Z
Mirlim
8057
/* Takrifan */
190066
wikitext
text/x-wiki
==Bahasa Inggeris==
===Takrifan===
{{kata kerja|Inggeris}}
{{head|en|kata kerja}}
# {{jamak|en|yank}}.
===Anagram===
* {{anagram|en|nasky|sanky|snaky}}
mqietc1nuc8gsrsv30kpj6iels9n50x
yarns
0
11963
190069
108790
2024-11-12T05:43:20Z
Mirlim
8057
/* Kata nama */
190069
wikitext
text/x-wiki
==Bahasa Inggeris==
===Kata nama===
{{head|en|kata nama}}
#{{jamak|en|yarn}}
===Anagram===
* {{anagram|en|N-rays|Ryans|snary}}
cc9s3did3j26w336kgpkllclhi1cv0l
yawn
0
11969
190072
108802
2024-11-12T05:46:18Z
Mirlim
8057
/* Sebutan */
190072
wikitext
text/x-wiki
{{juga|Yawn}}
==Bahasa Inggeris==
===Kata kerja===
{{head|en|kata kerja}} (''jamak'' '''[[yawns]]''')
# [[menguap]].
===Kata nama===
{{head|en|kata nama}}
# [[kuap]].
====Istilah terbitan====
* {{l|en|multicolour yawn}}
* {{l|en|Technicolor yawn}}
* {{l|en|yawnfest}}
===Etimologi===
Sebahagian daripada {{inh|en|enm|yanen}}, {{m|enm|yonen}}, {{m|enm|yenen|t=to yawn}}, daripada {{inh|en|ang|ġinian}}, {{m|ang|ġeonian|t=to yawn, gape}}, daripada {{inh|en|gem-pro|*ginōną|t=to yawn}}; dan sebahagiannya daripada {{inh|en|enm|gonen|t=to gape, yawn}}, daripada {{inh|en|ang|gānian|t=to yawn, gape}}, daripada {{inh|en|gem-pro|*gainōną|t=to yawn, gape}}; kedua-duanya daripada {{der|en|ine-pro|*ǵʰi-}}, {{m|ine-pro|*ǵʰeyh₁-|t=to yawn, gape}}. Seasal daripada {{cog|frr|jåne|t=to yawn}}, {{cog|stq|jaanje}}, {{m|stq|joanje|t=to yawn}}, {{cog|dum|genen}}, {{m|dum|ghenen|t=to yawn}}, {{cog|nds-de|jahnen|t=to yawn}}, {{cog|de|gähnen|t=to yawn, gape}}, dialek {{cog|sv|gana|t=to gape, gawk}}, dialek {{cog|no|gina|t=to gape}}.
Bandingkan juga {{cog|cu|зѣѭ}} ({{cog|ru|зи́нуть}}, {{m|ru|зия́ть}}), Yunani {{m|grc|χαίνω}}), Latin {{m|la|hiō}}, {{cog|xto|śew}}, {{cog|txb|kāyā}}, {{cog|lt|žioti}}, Rusia, Sanskrit {{m|sa|जेह्}}
===Sebutan===
* {{a|UK}} {{enPR|yôn}}, {{IPA|en|/jɔːn/}}
* {{rhymes|en|ɔːn}}
* {{a|US}} {{enPR|yôn}}, {{IPA|en|/jɔn/}}
* {{a|cot-caught}} {{enPR|yän}}, {{IPA|en|/jɑn/}}
* {{audio|en|en-us-yawn.ogg|Audio (A.S.)}}
===Anagram===
*{{anagram|en|awny|wany|wayn}}
fmikxs1qrs5cbcipkuqlysv3f1r66rn
yaws
0
11973
190073
108810
2024-11-12T05:47:19Z
Mirlim
8057
/* Kata nama */
190073
wikitext
text/x-wiki
==Bahasa Inggeris==
===Kata nama===
{{head|en|kata nama}}
# {{lb|en|perubatan}} penyakit [[puru]].
# {{jamak|en|yaw}}.
===Anagram===
*{{anagram|en|-ways|Sway|sway|ways}}
1pzz13bzi8daimapw7xvb4eg3ud0gh1
yeah
0
11975
190076
108814
2024-11-12T06:01:14Z
Mirlim
8057
/* Sebutan */
190076
wikitext
text/x-wiki
{{juga|þeah}}
=={{bahasa|en}}==
===Partikel===
{{head|en|partikel}}
# {{lb|en|informal}} [[ya]].
====Sinonim====
* {{sense|bersetuju}} {{l|en|yes}}, {{l|en|yep}}, {{l|en|yup}}, {{l|en|aye}}, {{l|en|ya}}, {{l|en|yea}}, {{l|en|uh-huh}}
===Kata seru===
{{head|en|kata seru}}
# meluahkan rasa gembira, teruja dan sebagainya.
#*: '''''Yeah!''' We did it!''
====Sinonim====
* {{sense|gembira}} {{l|en|hurrah}}, {{l|en|hurray}}, {{l|en|woohoo}}, {{l|en|yay}}, {{l|en|yippee}}<!--etc-->
====Istilah terbitan====
* {{l|en|yeah right}}
===Sebutan===
* {{IPA|en|[jɛə̯]}}, {{IPAchar|[jɛ.ə]}}, atau {{IPAchar|[jæə̯]}}
* {{audio|en|en-us-yeah.ogg|Audio (A.S.)}}
* {{audio|en|en-us-yeah-interjection.ogg|Audio (A.S.)}}
* {{rhymes|en|ɛə}}
===Lihat juga===
* {{l|en|yes}}
===Anagram===
* {{anagram|en|Haye|haye|heya}}
ml7jr3iq4c8bjopkxgq3bj5ldypfkwl
yearly
0
11992
190077
108834
2024-11-12T06:01:51Z
Mirlim
8057
/* Sebutan */
190077
wikitext
text/x-wiki
=={{bahasa|en}}==
===Kata sifat===
{{head|en|kata sifat}}
# [[tahunan]], berlaku sekali setahun.
#*: ''Christmas is a '''yearly''' celebration.''
====Sinonim====
* {{l|en|annual}}
* {{l|en|per annum}}
* {{l|en|perennial}}
===Etimologi===
Daripada {{inh|en|enm|yeerly}}, {{m|enm|yerely}}, daripada {{inh|en|ang|ġēarlīc|t=yearly, of the year, annual}}, bersamaan dengan ''year'' + ''-ly''. Seasal dengan {{cog|sco|yerelie|t=yearly}}, {{cog|stq|jierelk|t=yearly}}, {{cog|fy|jierliks|t=yearly}}, {{cog|nl|jaarlijks|t=yearly}}, {{cog|de|jährlich|t=yearly}}, {{cog|sv|årlig|t=yearly}}, {{cog|is|árlegur|t=yearly}}.
===Sebutan===
* {{audio|en|en-us-yearly.ogg|Audio (AS)}}
===Anagram===
*{{anagram|en|yarely}}
eurss7aivyomklq3kys5ekhtchuxdhi
yearn
0
11993
190080
108835
2024-11-12T06:03:22Z
Mirlim
8057
kemas kini
190080
wikitext
text/x-wiki
=={{bahasa|en}}==
===Kata kerja===
{{head|en|kata kerja}}
# {{lb|en|tak transitif}} teringin sekali, berhasrat benar (akan sesuatu).
#*: ''All I '''yearn''' for is a simple life.''
===Etimologi===
Daripada {{etyl|ang|en}} {{m|ang|giernan}}, daripada {{etyl|en|gem-pro}} {{m|gem-pro|*girnijaną}}.
===Sebutan===
* {{audio|en|en-us-yearn.ogg|Audio (AS)}}
* {{rhymes|en|ɜː(r)n}}
===Anagram===
* {{anagram|en|Aeryn|Arney|Neary|Neyra|Raney|Rayne|Yaren|aryne|rayne|renay|yarne}}
fz2uh2ypgvh0vzpyx20hbg1uyzw09g1
yeast
0
12002
190081
108844
2024-11-12T06:05:21Z
Mirlim
8057
kemas kini
190081
wikitext
text/x-wiki
=={{bahasa|en}}==
===Kata nama===
{{head|en|kata nama}} (''terhitung'' dan ''tak terhitung'', ''jamak'' '''[[yeasts]]''')
#[[ragi]], [[yis]]
====Istilah terbitan====
{{rel-top|istilah diterbitkan daripada ''yeast'' (kata nama)}}
* {{l|en|active dry yeast}}
* {{vern|baker's yeast}}
* {{l|en|brewer's yeast}}
* {{l|en|red yeast rice}}
{{der-mid}}
* {{l|en|true yeast}}
* {{l|en|yeast extract}}
* {{l|en|yeast infection}}
* {{l|en|yeasty}}
{{der-bottom}}
===Etimologi===
Daripada {{etyl|en|enm}} {{m|enm|yeest}}, {{m|enm|yest}}, {{m|enm|gest}}, {{m|enm|gist}}, daripada {{etyl|en|ang}} {{m|ang|ġist}}, {{m|ang|ġyst}}, daripada {{etyl|en|gem-pro}} {{m|gem-pro|*jestuz}}. Seasal dengan bahasa Frisia Saterland {{m|stq|Jääst||yeast}}, Belanda {{m|nl|gist||yeast}}, Jerman {{m|de|Gischt||yeast}}, Sweden {{m|sv|jäst||yeast}}.
===Sebutan===
* {{enPR|yēst}}, {{IPA|en|/jiːst/}}
* {{a|rare}} {{IPA|en|/iːst/}})
* {{rhymes|en|iːst}}
===Anagram===
* {{anagram|en|Yates|Yeats|as yet|teasy|yates|yeats}}
7byx1904b07mxd11b9c5diw8652ld1l
yates
0
12006
190071
108850
2024-11-12T05:44:23Z
Mirlim
8057
kemas kini
190071
wikitext
text/x-wiki
{{juga|Yates}}
=={{bahasa|en}}==
===Kata nama===
{{head|en|kata nama}}
#{{jamak|en|yate}}
===Anagram===
* {{anagram|en|Yeats|as yet|teasy|yeast|yeats}}
=={{bahasa|es}}==
===Kata nama===
{{head|es|kata nama|g=m-p}}
# {{jamak|es|yate}}
agylopjk5vzl75818y1s912yez8s01i
yeats
0
12007
190086
108851
2024-11-12T06:10:09Z
Mirlim
8057
/* Kata nama */
190086
wikitext
text/x-wiki
=={{bahasa|en}}==
===Kata nama===
{{head|en|kata nama}}
#{{jamak|en|yeat}}
===Anagram===
* {{anagram|en|Yates|as yet|teasy|yates|yeast}}
rwy0llzr8bkk0yy54x8ibck80ke7uji
yell
0
12008
190088
108852
2024-11-12T06:11:20Z
Mirlim
8057
kemas kini
190088
wikitext
text/x-wiki
{{juga|ye'll|Yell}}
=={{bahasa|en}}==
===Kata kerja===
{{head|en|kata kerja}}
# {{lb|en|tak transitif}} menjerit, melaung, memekik
# {{lb|en|transitif}} untuk menyampaikan dengan menjerit
===Etimologi===
{{PIE root|en|gʰel}}
Daripada {{etyl|en|enm}} {{m|enm|yellen}}, daripada {{etyl|en|ang}} {{m|ang|ġiellan}}, daripada {{etyl|en|gem-pro}} {{m|gem-pro|*gellaną}}.
===Sebutan===
* {{IPA|en|/jɛl/}}
* {{audio|en|en-us-yell.ogg|Audio (AS)}}
* {{rhymes|en|ɛl}}
===Tesaurus===
====Sinonim====
* {{sense|menjerit}} {{l|en|call}}, {{l|en|cry}}, {{l|en|holler}}, {{l|en|shout}}
====Istilah terbitan====
{{der-top|}}
* {{l|en|yell at}}
* {{l|en|yell silently}}
* {{l|en|yeller}}
{{der-bottom}}
===Anagram===
* {{anagram|en|Lyle}}
pdcjiz27zka0rkuops01p59pcntnfkm
Lyle
0
12009
190013
108853
2024-11-11T12:49:26Z
Tofeiku
2269
kemas kini
190013
wikitext
text/x-wiki
==Bahasa Inggeris==
===Kata nama khas===
{{head|en|kata nama khas}}
#{{surname|en|dot=}}
#{{given name|en|lelaki|from=surnames}}
===Etimologi===
Daripada {{etyl|enm|en}} dan {{etyl|fro|en}} (''del'') {{m|fro|isle||island}}. Dalam beberapa kes dari nama tempat di {{m|fro|Lisle}} dan {{m|fro|Lille}} di Perancis.
===Sebutan===
* {{IPA|en|/laɪl/|/ˈlaɪəl/}}
* {{rhymes|en|aɪl|aɪəl}}
===Bentuk alternatif===
* {{sense|nama keluarga}} {{l|en|Lisle}}
===Anagram===
* {{anagram|en|Yell|ye'll|yell}}
3123q9ls6j42ndpm62f4hanpmwqvo4b
todung
0
12136
190051
183545
2024-11-12T04:31:36Z
Mirlim
8057
/* Sebutan */
190051
wikitext
text/x-wiki
==Bahasa Kadazandusun==
=== Takrifan ===
====Kata nama====
{{head|dtp|kata nama}}
# [[hidung]]
===Sebutan===
* {{AFA|dtp|/tɔ.dʊŋ/}}
* {{penyempangan|dtp|to|dung}}
===Pautan luar===
* {{R:PRPM}}
==Bahasa Kimaragang==
===Takrifan===
====Kata nama====
{{inti|kqr|kata nama}}
# [[hidung]].
oscysalz0e4xdxc8lhf6wy7qcjbyagy
dahoq
0
12202
189981
109419
2024-11-11T12:23:48Z
Tofeiku
2269
kemas kini
189981
wikitext
text/x-wiki
==Bahasa Melayu Kedah==
===Takrifan===
====Kata sifat====
{{head|meo|kata sifat}}
# [[tamak]].
#: {{cp|meo|Dia tu '''dahoq''' sunggoh.|Dia itu '''tamak''' sungguh.}}
===Sebutan===
* {{AFA|meo|/dɑ.hɔ̃ʕ/}}
* {{rima|meo|hɔ̃ʕ}}
* {{penyempangan|meo|da|hoq}}
===Rujukan===
* {{R:GD Kedah}}
===Pautan luar===
* {{R:PRPM}}
e6b3cazsovllfx7hdacpkafnwjdqm9h
destinasi
0
12221
189965
110526
2024-11-11T12:10:55Z
Tofeiku
2269
kemas kini
189965
wikitext
text/x-wiki
=={{seksyen|ms}}==
===Takrifan===
{{ms-kn}}
# [[tidakan|Tindakan]] [[penentuan]] atau [[pelantikan]].
# [[tujuan|Tujuan]] yang mana ditakdirkan; pengakhiran yang sudah ditentukan, objek, atau penggunaan yang telah ditetapkan; reka bentuk muktamad.
# [[tempat|Tempat]] yang ditetapkan untuk akhir [[perjalanan]], atau yang mana sesuatu dihantar; tempat atau titik yang bertujuan.
====Kata terbitan====
* [[zon destinasi]]
* [[prinsip destinasi]]
* [[pelabuhan destinasi]]
* [[asalan dan destinasi]]
===Etimologi===
Daripada {{etyl|en|ms}} {{m|en|destination}}; daripada {{etyl|la|en}} {{m|la|dēstinātiō}}, daripada {{m|la|dēstinō||ditakdirkan, ditentukan, ditujui}}.
===Sebutan===
* {{dewan|dés|ti|na|si}}
* {{AFA|ms|/dés.ti.na.si/}}
* {{rhymes|ms|si}}
* {{penyempangan|ms|dés|ti|na|si}}
===Tulisan Jawi===
{{ARchar|[[ديستيناسي]]}}
===Terjemahan===
{{trans-top|tidakan penentuan atau pelantikan.}}
* Galician: {{t|gl|destino|m}}
* Inggeris {{t|en|destination}}
* Romania: {{t+|ro|destinare|f}}
* Rusia: {{t+|ru|назначе́ние|n}}
{{trans-mid}}
* Sepanyol: {{t+|es|destino|m}}
* Ukraine: {{t+|uk|призна́чення}}
{{trans-bottom}}
{{trans-top|tujuan yang mana ditakdirkan; pengakhiran yang sudah ditentukan}}
* Bulgaria: {{t+|bg|предназначе́ние|n}}
* Romania: {{t+|ro|destinație|f}}
* Inggeris {{t|en|destination}}
{{trans-mid}}
* Rusia: {{t+|ru|предназначе́ние|n}}, {{t+|ru|назначе́ние|n}}
* Ukraine: {{t+|uk|призна́чення}}
{{trans-bottom}}
{{trans-top|tempat yang ditetapkan untuk akhir perjalanan, atau yang mana sesuatu dihantar}}
* Bulgaria: {{t+|bg|местоназначе́ние|n}}
* Cina:
*: Mandarin: {{t+|cmn|目的地|tr=mùdìdì|sc=Hani}}
* Czech: {{t+|cs|destinace|f}}
* Belanda: {{t+|nl|bestemming}}
* Esperanto: {{t|eo|celloko}}
* Finland: {{t|fi|matkakohde}}, {{t+|fi|määränpää}}
* Perancis: {{t+|fr|destination|f}}, {{t+|fr|arrivée|f}}
* Georgia: {{t-needed|ka}}
* Jerman: {{t+|de|Reiseziel|n}}, {{t+|de|Bestimmungsort|m}}
* Yunani: {{t+|el|προορισμός|m}} (proorismós)
* Ibrani: {{t+|he|יעד|m|tr=ya'ad|sc=Hebr}}
* Iceland: {{t+|is|áfangastaður|m}}
* Inggeris {{t|en|destination}}
* Itali: {{t+|it|destinazione|f}}
* Jepun: {{t|ja|目的地|tr=もくてきち, mokutekichi|sc=Jpan}}
* Khmer: [[គម្យស្ថាន]]
* Korea: {{t+|ko|목적지}}
{{trans-mid}}
* Latin: {{t|la|fatum}}, {{t|la|fatum|n}}, {{t|la|dēstinātiō|f}}
* Maori: {{t|mi|ūnga }}
* Mongolia: {{t+|mn|зорьсон газар|sc=Cyrl}}
* Norwegia:
*: Bokmål: {{t|nb|destinasjon|m}}
*: Nynorsk: {{t|nn|destinasjon|m}}
* Poland: {{t+|pl|cel|m}}
* Portugis: {{t+|pt|destino|m}}
* Romania: {{t+|ro|destinație|f}}
* Rusia: {{t|ru|[[ме́сто]] [[назначение|назначе́ния]]|n}}, {{t|ru|[[пункт]] [[назначение|назначе́ния]]|m}}
* Sepanyol: {{t+|es|destino|m}}
* Sweden: {{t+|sv|mål|n}}, {{t+|sv|destination|c}}
* Telugu: {{t|te|గమ్యస్థానం}}
* Thai: {{t+|th|จุดหมาย}}, {{t|th|จุดหมายปลายทาง}}
* Tibet: {{t|bo|འགྲོ་ས}}, {{t|bo|ཕེབས་ས}}
* Ukraine: {{t+|uk|призна́чення}}
{{trans-bottom}}
=== Rujukan ===
* {{R:KD2}}
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
mh1imyv75ijxc18w66oi1dabfj7ch28
کاتيل
0
12339
190092
109791
2024-11-12T06:16:53Z
Mirlim
8057
/* Sebutan */
190092
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
[[Fail:Vrba postelja.jpg|thumb|right|{{lang|ms|کاتيل}}]]
{{ms-kn}}
# Sejenis perabot tempat seseorang tidur atau baring.
#* '''2017''', ''[http://www.utusanmelayu.com.my/%D9%86%D8%A7%D8%B3%D9%8A%D9%88%D9%86%D9%84/%D8%AA%D9%82-%D8%B3%D9%85%DA%A4%D8%AA-%D8%A8%D8%A7%D9%84%D8%B3-whatsapp-%D8%AA%D8%A8%D9%88%D8%A7%D9%86-%DA%A9%D9%84%D9%88%D8%A7%D8%B1-%D8%A8%D8%A7%D9%88%D9%87-%DA%A9%D8%A7%D8%AA%D9%8A%D9%84-1.526381 {{lang|ms|تق سمڤت بالس whatsapp، تبوان کلوار باوه کاتيل}}]'', Utusan Melayu.
#*:{{quote|ms|“ساي تيدق تاهو لڠسوڠ سجق بيلا تبوان مولا برسارڠ دباوه کاتيل تمڤت تيدور ساي ايت،” کاتاڽ.|"Saya tidak tahu langsung sejak bila tebuan mula bersarang di bawah katil tempat tidur saya itu," katanya.}}
===Etimologi===
{{bor|ms|ta|கட்டில்|tr=kattil}}, daripada {{der|hi|sa|खट्वा}}. Kata seasal dengan {{cog|pt|catre}}.
=== Sebutan ===
* {{dewan|ka|til}}
* {{AFA|ms|/ka.til/}}
* {{rhymes|ms|til}}
* {{penyempangan|ms|کا|تيل}}
=== Tulisan Rumi ===
{{l|ms|katil}}
===Tesaurus===
;Sinonim:
* {{l|ms|رانجڠ}}
=== Rujukan ===
* {{R:BKKM}}
=== Pautan luar ===
* {{R:PRPM}}
mn7qcj8aw272vbb7p2zx0oqrtiy2pcg
tingau
0
12355
190048
173303
2024-11-12T04:27:20Z
Mirlim
8057
/* Sebutan */
190048
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
====Kata nama====
[[Fail:Orange tabby cat sitting on fallen leaves-Hisashi-01A.jpg|thumb|tingau]]
{{head|dtp|kata nama}}
# [[kucing]].
#* '''2016''', Jainudin Nasir, ''[https://www.pressreader.com/malaysia/utusan-borneo-sabah/20161002/282230895186641 Bomba Ranau minanampasi tingau nansip]'', Utusan Borneo.
#*:{{quote|dtp|“Osonong mah tuh tulun togumu nokokito '''tingau''' nagansip dilo om ruminomut upis bomba montok mokianu ponulungan manampasi,”}}
===Sebutan===
* {{AFA|dtp|/ti.ŋau/}}
* {{rima|dtp|ŋau}}
* {{penyempangan|dtp|ti|ngau}}
[[Fail:LL-Q5317225 (dtp)-CorrelMoris38-tingau.wav|thumb]]
ccqaq0c81kt8uwnz3ehgl9o5xzb5cq0
triwangsa
0
12370
190057
109871
2024-11-12T05:15:14Z
Mirlim
8057
kemas kini
190057
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# {{lb|ms|sastera lama}} Tiga [[kasta]] (iaitu Brahman, Kesatria, Waisya).
===Etimologi===
{{prefix|ms|tri|wangsa}}
=== Sebutan ===
* {{dewan|tri|wang|sa}}
* {{AFA|ms|/tri.waŋ.sa/}}
* {{rhymes|ms|sa}}
* {{penyempangan|ms|tri|wang|sa}}
=== Tulisan Jawi ===
{{ARchar|[[تريواڠسا]]}}
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
l84e2k0y8fiwwshvyc6da29rvh1warl
lohong hitam
0
12394
190007
119103
2024-11-11T12:44:24Z
Tofeiku
2269
kemas kini
190007
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
[[Fail:Black hole - Messier 87.jpg|thumb|right|lohong hitam]]
{{ms-kn}}
# Objek di cakerawala yang terbentuk daripada letupan supernova, dan mempunyai medan graviti yang terlalu kuat sehingga halaju lepasan berhampiran lohong hitam melebihi kelajuan cahaya.
#* '''2017''', Ahmad Suhael Adnan, [https://www.bharian.com.my/node/235569 ''Lohong hitam''], Berita Harian:
#*: "Apabila mana-mana bintang mengorbit berhampiran '''lohong hitam''', satu cahaya bertenaga tinggi akan terhasil, namun ia hanya dapat dilihat menggunakan satelit dan teleskop di angkasa,"
===Etimologi===
{{compound|ms|lohong|hitam}}.
=== Sebutan ===
* {{dewan|lo|hong|hi|tam}}
* {{AFA|ms|/lo.hoŋ.hi.tam/}}
* {{rhymes|ms|tam}}
* {{penyempangan|ms|lo|hong||hi|tam}}
=== Tulisan Jawi ===
{{ARchar|[[لوهوڠ هيتم]]}}
=== Terjemahan ===
{{ter-atas|objek cakerawala}}
* Afrikaans: {{t|af|swartgat}}
* Albania: {{t|sq|vrimë e zezë|f}}
* Arab: {{t|ar|ثُقْب أَسْوَد|m}}
* Armenia: {{t|hy|սև խոռոչ}}
* Asturia: {{t|ast|furacu prietu|m}}, {{t|ast|fueyu prietu|m}}
* Azerbaijani: {{t|az|qara dəlik}}, {{t|az|qara çuxur}}
* Basque: {{t|eu|zulo beltz}}
* Belanda: {{t+|nl|zwart gat|n}}
* Belarus: {{t|be|чо́рная дзіра́|f}}
* Bengali: {{t+|bn|কৃষ্ণগহ্বর|tr=krishnôgôhbôr|sc=Beng}}, {{t+|bn|কৃষ্ণবিবর|tr=krishnôbibôr|sc=Beng}}, {{t|bn|ব্ল্যাকহোল|tr=blêk-hol|sc=Beng}}, {{t|bn|ব্ল্যাক হোল|tr=blêk hol|sc=Beng}}
* Bulgaria: {{t|bg|че́рна ду́пка|f}}
* Catalan: {{t+|ca|forat negre|m}}
* Chechen: {{t|ce|ӏаьржа ӏуьрг}}
* Cina:
*: Kantonis: {{t|yue|黑洞|tr=hak1 dung6|sc=Hani}}
*: Mandarin: {{t+|cmn|黑洞|tr=hēidòng|sc=Hani}}
*: Min Nan: {{t|nan|烏空|sc=Hans}}, {{t|nan|乌空|tr=[[o͘-khang]]|sc=Hans}}
* Czech: {{t+|cs|černá díra|f}}
* Denmark: {{t|da|sort hul}}
* Esperanto: {{t|eo|nigra truo}}
* Estonia: {{t+|et|must auk}}
* Finland: {{t+|fi|musta aukko}}
* Galicia: {{t+|gl|burato negro|m}}
* Georgia: {{t|ka|შავი ხვრელი}}
* Greek: {{t+|el|μαύρη τρύπα|f}}, {{t|el|μελανή οπή|f}}
* Gujarati: {{t|gu|કૃષ્ણ વિવર|sc=Gujr|tr=kr̥ṣṇa vivar}}
* Hindi: {{t|hi|काल कोठरी|f|tr=kāl koṭhrī|sc=Deva}}
* Hungary: {{t+|hu|fekete lyuk}}
* Ibrani: {{t+|he|חֹר שָׁחֹר|m}}
* Iceland: {{t+|is|svarthol}}
* Ido: {{t|io|nigra truo}}
* Indonesia: {{t|id|lubang hitam}}
* Inggeris: {{t+|en|black hole}}
* Ingush: {{t|inh|ӏаьржа ӏург}}
* Interlingua: {{t|ia|cavo nigre}}
* Ireland: {{t|ga|dúpholl|m}}
* Itali: {{t+|it|buco nero|m}}
* Jepun: {{t+|ja|ブラックホール|tr=burakku hōru}}
* Jerman: {{t+|de|schwarzes Loch|n}}
* Kannada: {{t+|kn|ಕಪ್ಪು ಕುಳಿ}}
* Korea: {{t+|ko|블랙홀}}
* Lao: {{t+|lo|ຂຸມດຳ}}
{{ter-tengah}}
* Latin: {{t|la|gurges ater|m}}
* Latvia: {{t|lv|melnais caurums}}
* Lithuania: {{t|lt|juodoji skylė|f}}
* Lombard: {{t|lmo|büüs negru}}
* Luxembourg: {{t|lb|schwaarzt Lach|n}}
* Macedonia: {{t|mk|црна дупка|f|sc=Cyrl}}
* Malayalam: {{t|ml|തമോദ്വാരം}}
* Malta: {{t|mt|toqba sewda|f}}
* Marathi: {{t|mr|कृष्णविवर|sc=Deva|tr=kr̥ṣṇavivar}}
* Mingrel: {{t|xmf|უჩა რხვილი}}
* Norway:
*: Bokmål: {{t|no|svart hull}}, {{t|no|sort hull}}
*: Nynorsk: {{t|nn|svart hòl}}
* Parsi: {{t|fa|سیاهچاله فضایی|tr=siyâh-čâle fazâyi|sc=fa-Arab}}, {{t|fa|سیاهچاله|tr=siyâh-čâle|sc=fa-Arab}}
* Perancis: {{t+|fr|trou noir|m}}
* Poland: {{t+|pl|czarna dziura|f}}
* Portugis: {{t+|pt|buraco negro|m}}
* Romania: {{t+|ro|gaură neagră|f}}
* Rusia: {{t+|ru|чёрная дыра́|f}}
* Samogitia: {{t|sgs|jouduojė skīlie|f}}
* Serbo-Croatia:
*: Arab: {{t|sh|ڄرنآ رۆپآ|f|sc=Arab}}
*: Cyril: {{t|sh|црна рупа|f|sc=Cyrl}}
*: Rumi: {{t|sh|crna rupa|f}}
* Sicilia: {{t|scn|purtùsu nìuru|m}}
* Slovak: {{t|sk|čierna diera|f}}
* Slovene: {{t+|sl|črna luknja|f}}
* Sepanyol: {{t+|es|agujero negro|m}}, {{t+|es|hoyo negro|m}}
* Svan: {{t|sva|მეშხე ჴურუ}}
* Swahili: {{t|sw|shimo jeusi}}
* Sweden: {{t+|sv|svart hål|n}}
* Tagalog: {{t|tl|itim na butas}}
* Tamil: {{t+|ta|கருங்குழி}}
* Telugu: {{t|te|కాలబిలము}}
* Thai: {{t|th|หลุมดำ}}
* Turki: {{t+|tr|kara delik}}
* Ukraine: {{t|uk|чо́рна діра́|f}}
* Urdu: {{t|ur|ثقب اسود|tr=suqb asvad|sc=ur-Arab}}
* Vietnam: {{t|vi|hố đen}}, {{t|vi|lỗ đen}}
* Volapük: {{t|vo|siblägahog}}
* Wales: {{t|cy|twll du|m}}
* Yiddish: {{t|yi|שוואַרצע לאָך}}
{{ter-bawah}}
=== Pautan luar ===
* {{R:PRPM}}
{{C|ms|Astronomi}}
bdekqear2o8e6amsrxwi6q6lijmrb08
duniê
0
12421
189976
109979
2024-11-11T12:18:24Z
Tofeiku
2269
kemas kini
189976
wikitext
text/x-wiki
==Bahasa Melayu Bali==
===Takrifan===
====Kata nama====
[[Fail:The Earth seen from Apollo 17.jpg|thumb|duniê]]
{{head|mhp|kata nama}}
# [[dunia]].
#: Idup di '''duniê''' ni dak adê têtêp.
#:: Hidup di '''dunia''' ini tidak ada yang kekal.
===Etimologi===
Daripada {{inh|mhp|ms|dunia}}.
===Sebutan===
* {{AFA|mhp|/du.niə/|p}}
* {{rima|mhp|niə}}
* {{penyempangan|mhp|du|niê}}
===Rujukan===
* {{R:Kamus Melayu Bali-Indonesia|page=46}}
9djgo7ku9nulnvgrvb44eboxodplzp3
189978
189976
2024-11-11T12:22:08Z
Tofeiku
2269
kemas kini
189978
wikitext
text/x-wiki
==Bahasa Melayu Bali==
===Takrifan===
====Kata nama====
[[Fail:The Earth seen from Apollo 17.jpg|thumb|duniê]]
{{head|mhp|kata nama}}
# [[dunia]].
#: Idup di '''duniê''' ni dak adê têtêp.
#:: Hidup di '''dunia''' ini tidak ada yang kekal.
===Etimologi===
Daripada {{inh|mhp|ms|dunia}}.
===Sebutan===
* {{AFA|mhp|/du.niə/}}
* {{rima|mhp|niə}}
* {{penyempangan|mhp|du|niê}}
===Rujukan===
* {{R:Kamus Melayu Bali-Indonesia|page=46}}
mwsgujqmtvp1mx5mqqx4umk6kupni3n
godu
0
12430
189996
138428
2024-11-11T12:33:42Z
Tofeiku
2269
kemas kini
189996
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
====Kata nama====
[[Fail:Heupferd fg01.jpg|thumb|godu]]
{{head|dtp|kata nama}}
# [[belalang]].
===Sebutan===
* {{AFA|dtp|/ɡɔ.dʊ/}}
* {{rima|dtp|du}}
* {{penyempangan|dtp|go|du}}
[[Kategori:dtp:Serangga]]
7mb1b17254ta41mbd2ehe6cdzdq9ae5
tompokikiu
0
12432
190052
110000
2024-11-12T04:33:07Z
Mirlim
8057
kemas kini
190052
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
====Kata nama====
[[Fail:Sympetrum flaveolum - side (aka).jpg|thumb|tompokikiu]]
{{head|dtp|kata nama}}
# [[pepatung]].
===Sebutan===
* {{AFA|dtp|/tom.po.ki.kiu/}}
* {{rima|dtp|kiu}}
* {{penyempangan|dtp|tom|po|ki|kiu}}
==Bahasa Tobilung==
===Takrifan===
====Kata nama====
[[Fail:Dragonfly in flight 5 (1351481586).jpg|thumb|tompokikiu]]
{{head|tgb|kata nama}}
# [[pepatung]].
===Sebutan===
* {{AFA|tgb|/tom.po.ki.kiu/}}
* {{rima|tgb|kiu}}
* {{penyempangan|tgb|tom|po|ki|kiu}}
===Rujukan===
* {{R:Kamus Kigambar Tobilung|2=37}}
===Pautan luar===
* {{R:Tobilung.net}}
[[Kategori:tgb:Serangga]]
2l319vtg8zn4f41gept01vm14n67hss
donde
0
12433
189970
109996
2024-11-11T12:15:06Z
Tofeiku
2269
kemas kini
189970
wikitext
text/x-wiki
{{juga|dónde}}
==Bahasa Itali==
===Adverba===
{{head|it|adverba}}
# {{lb|it|arkaik}} [[dari mana]]
#: {{syn|it|onde}}
#* Decameron I:3
#*: {{quote|it|né veggendo '''donde''' così prestamente come gli bisognavano avergli potesse|tidak melihat '''dari mana''' dia [Saladin] kemungkinan ambil lagi banyak duit dengan sangat pantas kerana dia memerlukannya}}
===Etimologi===
Terbit daripada {{inh|it|VL.|de unde||dari mana}}, daripada {{inh|it|la|dē}} + {{m|la|unde||dari mana}}.
===Sebutan===
* {{AFA|it|/ˈdon.de/|[ˈd̪on̪.d̪e]}}
* {{penyempangan|it|dón|de}}
==Bahasa Serbo-Croatia==
===Adverba===
{{head|sh|adverba}}
# ke tempat itu
===Bentuk lain===
* {{l|sh|donle|sc=Latn}}
==Bahasa Portugis==
===Pemendekan===
{{head|pt|pemendekan}}
# [[dari mana]]
===Etimologi===
''Pemendekan'' '''[[de]] [[onde]]''' ("dari mana").
===Sebutan===
* {{a|PT}} {{AFA|pt|/ˈdõ.dɨ/}}
* {{penyempangan|pt|don|de}}
qrxkn538g2zizfrzopu68rmqnpu5tw1
کلازيمن
0
12481
190036
116215
2024-11-12T03:22:11Z
Mirlim
8057
/* Sebutan */
190036
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Sesuatu yang telah menjadi lazim.
#* '''2018''', [http://kheu.gov.bn/PublishingImages/Lists/Khutbah/ViewAll/1%20Syawal%201439H%2015%20Jun%202018M.pdf {{ARchar|ادب برهاري راي دانڤواسا انم}}], Kementerian Hal Ehwal Ugama Negara Brunei Darussalam:
#*: {{ARchar|سباݢيمان "کالزمين" يڠ دعملکن دنݢارا کيت باݢي ممرياهکن سواسان هاري راي اياله دڠن عمالن زياره-منزيارهي، کونجوڠ-مڠونجوڠي قوم کلوارݢ، سانق سودارا، جيرن تتڠݢا دان صحابة هنداي باݢي سام٢ مموهون کمعافن دسمڤيڠ مڠرتکن لاݢي هوبوڠن صلة الرحم.}}
#*:: Sebagaimana '''kelaziman''' yang diamalkan di negara kita bagi memeriahkan suasana hari raya ialah dengan amalan ziarah-menziarahi, kunjung-mengunjungi kaum keluarga, sanak saudara, jiran tetangga dan sahabat handai bagi sama-sama memohon kemaafan di samping mengeratkan lagi hubungan silaturahim.
===Etimologi===
{{apitan|ms|ک|لازيم|ن}}.
=== Sebutan ===
* {{dewan|ke|la|zi|man}}
* {{AFA|ms|/kə.la.zi.man/}}
* {{rhymes|ms|man}}
* {{penyempangan|ms|ک|لا|زي|من}}
=== Tulisan Rumi ===
{{l|ms|kelaziman}}
=== Rujukan ===
* {{R:BKKM}}
=== Pautan luar ===
* {{R:PRPM}}
29bssag3xvlkotp2txahsi9m1mjb3wq
190037
190036
2024-11-12T03:22:37Z
Mirlim
8057
/* Takrifan */
190037
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Sesuatu yang telah menjadi lazim.
#* '''2018''', [http://kheu.gov.bn/PublishingImages/Lists/Khutbah/ViewAll/1%20Syawal%201439H%2015%20Jun%202018M.pdf {{ARchar|ادب برهاري راي دانڤواسا انم}}], Kementerian Hal Ehwal Ugama Negara Brunei Darussalam:
#*: {{ARchar|سباݢيمان '''کالزمين''' يڠ دعملکن دنݢارا کيت باݢي ممرياهکن سواسان هاري راي اياله دڠن عمالن زياره-منزيارهي، کونجوڠ-مڠونجوڠي قوم کلوارݢ، سانق سودارا، جيرن تتڠݢا دان صحابة هنداي باݢي سام٢ مموهون کمعافن دسمڤيڠ مڠرتکن لاݢي هوبوڠن صلة الرحم.}}
#*:: Sebagaimana '''kelaziman''' yang diamalkan di negara kita bagi memeriahkan suasana hari raya ialah dengan amalan ziarah-menziarahi, kunjung-mengunjungi kaum keluarga, sanak saudara, jiran tetangga dan sahabat handai bagi sama-sama memohon kemaafan di samping mengeratkan lagi hubungan silaturahim.
===Etimologi===
{{apitan|ms|ک|لازيم|ن}}.
=== Sebutan ===
* {{dewan|ke|la|zi|man}}
* {{AFA|ms|/kə.la.zi.man/}}
* {{rhymes|ms|man}}
* {{penyempangan|ms|ک|لا|زي|من}}
=== Tulisan Rumi ===
{{l|ms|kelaziman}}
=== Rujukan ===
* {{R:BKKM}}
=== Pautan luar ===
* {{R:PRPM}}
j3xa9yrk5pxolbup4c2szdc8gmxnd51
190038
190037
2024-11-12T03:23:22Z
Mirlim
8057
190038
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Sesuatu yang telah menjadi lazim.
#* '''2018''', [http://kheu.gov.bn/PublishingImages/Lists/Khutbah/ViewAll/1%20Syawal%201439H%2015%20Jun%202018M.pdf {{ARchar|ادب برهاري راي دانڤواسا انم}}], Kementerian Hal Ehwal Ugama Negara Brunei Darussalam:
#*: {{ARchar|سباݢيمان '''کلازيمن''' يڠ دعملکن دنݢارا کيت باݢي ممرياهکن سواسان هاري راي اياله دڠن عمالن زياره-منزيارهي، کونجوڠ-مڠونجوڠي قوم کلوارݢ، سانق سودارا، جيرن تتڠݢا دان صحابة هنداي باݢي سام٢ مموهون کمعافن دسمڤيڠ مڠرتکن لاݢي هوبوڠن صلة الرحم.}}
#*:: Sebagaimana '''kelaziman''' yang diamalkan di negara kita bagi memeriahkan suasana hari raya ialah dengan amalan ziarah-menziarahi, kunjung-mengunjungi kaum keluarga, sanak saudara, jiran tetangga dan sahabat handai bagi sama-sama memohon kemaafan di samping mengeratkan lagi hubungan silaturahim.
===Etimologi===
{{apitan|ms|ک|لازيم|ن}}.
=== Sebutan ===
* {{dewan|ke|la|zi|man}}
* {{AFA|ms|/kə.la.zi.man/}}
* {{rhymes|ms|man}}
* {{penyempangan|ms|ک|لا|زي|من}}
=== Tulisan Rumi ===
{{l|ms|kelaziman}}
=== Rujukan ===
* {{R:BKKM}}
=== Pautan luar ===
* {{R:PRPM}}
ec1gcl93okp0qcun724qp8cexz8f447
dukacita
0
12528
189973
110145
2024-11-11T12:16:26Z
Tofeiku
2269
kemas kini
189973
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-ks}}
# Duka, susah (sedih) hati.
#* '''1972''', ''[http://eresources.nlb.gov.sg/newspapers/Digitised/Article/beritaharian19721105-1.2.19.1?ST=1&AT=filter&K=dukacita&KA=dukacita&DF=&DT=&Display=0&AO=false&NPT=&L=&CTA=&NID=&CT=&WC=&YR=1972&QT=dukacita&oref=article Tini dah hanyut]'', Berita Harian, m/s 4.
#*:{{quote|ms|Tiba-tiba Tini mendengar perintah. Kawan-kawannya gopoh-gopoh mengangkat bangku hendak pulang, dan dia dengan perasaan yang amat '''dukacita''', mengangkat juga dengan tenaga yang amat lemah.}}
=== Sebutan ===
* {{dewan|du|ka|ci|ta}}
* {{AFA|ms|/du.ka.t͡ʃi.ta/}}
* {{rhymes|ms|ta}}
* {{penyempangan|ms|du|ka|ci|ta}}
=== Tulisan Jawi ===
{{ARchar|[[دوکاچيتا]]}}
=== Terbitan ===
* {{l|ms|berdukacita}}
* {{l|ms|kedukacitaan}}
* {{l|ms|mendukacitakan}}
=== Ejaan lain ===
* {{sense|ejaan sekolah}} {{l|ms|dukachita}}
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
6a5ahxy40laocl0mmnbiw4bv780eru1
کاتݢوري
0
12531
190093
110152
2024-11-12T06:19:54Z
Mirlim
8057
kemas kini
190093
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Bahagian dalam sesuatu sistem [[klasifikasi]], kumpulan (golongan dan sebagainya) besar berdasarkan ciri-ciri tertentu.
# Asas atau [[dasar]] sesuatu [[pengertian]] (dalam falsafah).
===Etimologi===
Daripada {{etyl|en|ms}} {{term|category|lang=en|t=kategori}}.
=== Sebutan ===
* {{dewan|ka|te|go|ri}}
* {{AFA|ms|/ka.tə.ɡo.ri/}}
* {{rhymes|ms|ri}}
* {{penyempangan|ms|کا|ت|ݢو|ري}}
=== Tulisan Rumi ===
{{l|ms|kategori}}
=== Terbitan ===
* {{l|ms|ڤڠکاتݢورين}}
* {{l|ms|مڠکاتݢوريکن}}
=== Tesaurus ===
;Sinonim:
* {{sense|bahagian dalam klasifikasi}} {{l|ms|کومڤولن}}, {{l|ms|ݢولوڠن}}, {{l|ms|بهاݢين}}, {{l|ms|کلاسيفيکاسي}}, {{l|ms|مرتابت}}, {{l|ms|تيڠکاتن}}, {{l|ms|درجة}}
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
553hl2pln9sb8qsu2egnkpqbtyjgtpy
ginuring
0
12545
189994
110167
2024-11-11T12:32:55Z
Tofeiku
2269
kemas kini
189994
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
====Kata kerja====
{{dtp-kk}}
# [[digoreng]]
===Etimologi===
{{sisipan|dtp|guring|in|t1=goreng}}
===Sebutan===
* {{AFA|dtp|/ɡi.nu.riŋ/}}
* {{rima|dtp|riŋ}}
* {{penyempangan|dtp|gi|nu|ring}}
7slxge17901ffwnmxrjykxf0n8k21vs
tulunan
0
12559
190060
182186
2024-11-12T05:36:20Z
Mirlim
8057
190060
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
[[Fail:Pillows on a hotel bed.jpg|thumb|tulunan]]
====Kata nama====
{{head|dtp|kata nama}}
# [[bantal]].
#:{{ux|dtp|Ogumu '''tulunan''' id linimput ku.|Banyak '''bantal''' di bilik saya.}}
===Sebutan===
* {{AFA|dtp|/tʊ.lʊ.nan/}}
* {{rima|dtp|nan}}
* {{penyempangan|dtp|tu|lu|nan}}
===Rujukan===
* {{R:Daftar Kata BKD-BM|2=176}}
cwhgxbwkg7u4xx4ucrb6g1vjt55t8yi
gonit
0
12563
189997
182154
2024-11-11T12:34:16Z
Tofeiku
2269
kemas kini
189997
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
[[Fail:Blesk.jpg|thumb|gonit]]
====Kata nama====
{{head|dtp|kata nama}}
# [[kilat]].
#: {{ux|dtp|Lobi sikap o '''gonit''' ko ilo tinggorud.|'''Kilat''' lebih pantas daripada guruh.}}
===Sebutan===
* {{AFA|dtp|/ɡɔ.nit/}}
* {{rima|dtp|nit}}
* {{penyempangan|dtp|go|nit}}
===Rujukan===
* {{R:Daftar Kata BKD-BM|2=22}}
6cbrb9bfok80endeveepwzptjrr0bgs
tujuh likur
0
12594
190059
110240
2024-11-12T05:34:31Z
Mirlim
8057
/* Sebutan */
190059
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# Malam yang kedua puluh tujuh (dalam bulan [[Ramadan]]).
#* '''1976''', ''[http://eresources.nlb.gov.sg/newspapers/Digitised/Article/beritaharian19760926-1.2.32?ST=1&AT=filter&K=tujuh+likur&KA=tujuh+likur&DF=&DT=&Display=0&AO=false&NPT=&L=&CTA=&NID=&CT=&WC=&YR=1976&QT=tujuh,likur&oref=article Taman Seni]'', Berita Harian, m/s 5.
#*:{{quote|ms|Di luar, rumah-rumah sebelah menyebelah dan di tempat-tempat lain seperti surau dan masjid dihiasi begitu rupa. Lampu-lampu warna dipasang. Gemerlap di sana sini. Iaitu sejak malam '''tujuh likur'''. Malam Lailatulkadar.}}
=== Etimologi ===
{{compound|ms|tujuh|likur|t2=bilangan antara 20 – 30}}
=== Sebutan ===
* {{dewan|tu|juh|li|kur}}
* {{AFA|ms|/tu.d͡ʒuh.li.kur/}}
* {{rhymes|ms|kur}}
* {{penyempangan|ms|tu|juh||li|kur}}
=== Tulisan Jawi ===
{{ARchar|[[توجوه ليکور]]}}
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
lz72qbh6ciynqn1qjikjkddwfmd9h9w
gufi
0
12652
190003
110360
2024-11-11T12:37:39Z
Tofeiku
2269
kemas kini
190003
wikitext
text/x-wiki
=={{seksyen|it}}==
===Kata nama===
{{head|it|bentuk jamak kata nama|g=m}}
# {{plural of|it|gufo}}
===Kata kerja===
{{head|it|bentuk kata kerja}}
# {{inflection of|gufare||indc|pres|s|2|lang=it}}
# {{inflection of|gufare||subj|pres|s|1|lang=it}}
# {{inflection of|gufare||subj|pres|s|2|lang=it}}
# {{inflection of|gufare||subj|pres|s|3|lang=it}}
# {{inflection of|gufare||impr|s|3|lang=it}}
ck2udiu7q84sqaow6nf68vie9kwu5if
transitif
0
12703
190055
110440
2024-11-12T05:13:26Z
Mirlim
8057
kemas kini
190055
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# {{label|ms|linguistik}} Kata kerja yang mempunyai [[penyambut]] (objek).
#* '''1985''', ''[http://eresources.nlb.gov.sg/newspapers/Digitised/Article/beritaharian19850521-1.2.37?ST=1&AT=filter&K=transitif&KA=transitif&DF=&DT=&Display=0&AO=false&NPT=&L=&CTA=&NID=beritaharian&CT=&WC=&YR=1985&QT=transitif&oref=article Kejanggalan2 dlm 'bentuk frasa']'', Berita Harian, m/s 5.
#*:{{quote|ms|Tetapi, oleh kerana pelaku kk '''transitif''' itu "kami" (kata ganti pertama) maka kk '''transitif''' itu tertakluk kepada peraturan 'pasifan semu'.}}
=== Etimologi ===
Daripada {{etyl|en|ms}} {{m|en|transitive|t=transitif}}.
=== Sebutan ===
* {{dewan|tran|si|tif}}
* {{AFA|ms|/tran.si.tif/}}
* {{rhymes|ms|tif}}
* {{penyempangan|ms|tran|si|tif}}
=== Tulisan Jawi ===
{{ARchar|[[ترنسيتيف]]}}
=== Terjemahan ===
{{ter-atas|menyambut objek}}
* Albania: {{t+|sq|kalimtar}}
* Arab: {{t|ar|مُتَعَدٍّ}} {{qualifier|tidak tentu}}
* Armenia: {{t+|hy|անցողական}}
* Azerbaijan: {{t+|az|təsirli}}
* Belanda: {{t+|nl|overgankelijk}}, {{t+|nl|transitief}}
* Belarus: {{t|be|перахо́дны}}
* Bulgaria: {{t+|bg|прехо́ден}}
* Catalan: {{t+|ca|transitiu}}
* Cina:
*: Mandarin: {{t+|cmn|及物|tr=jíwù}}
* Czech: {{t+|cs|přechodný}}
* Denmark: {{t+|da|transitiv}}
* Esperanto: {{t+|eo|transitiva}}
* Finland: {{t+|fi|transitiivinen}}, {{t+|fi|siirtyvä}}
* Gaelik Scotland: {{t|gd|aisigeach}}, {{t|gd|aistreach}}, {{t|gd|asdolach}}
* Galicia: {{t|gl|transitivo}}
* Georgia: {{t|ka|გარდამავალი}}
* Greek: {{t+|el|μεταβατικός}}
*: Kuno: {{t|grc|μεταβατικός}}, {{t|grc|ἀλλοπαθής}}, {{t|grc|διαβιβαστικός}}
* Hungary: {{t+|hu|tárgyas}}
* Inggeris: {{t+|en|transitive}}
* Irish: {{t|ga|aistreach}}
* Itali: {{t+|it|transitivo}}
* Jepun: {{t|ja|他動|tr=たどう, tadō}}
* Jerman: {{t+|de|transitiv}}
* Korea: {{t|ko|타동}} ({{t|ko|他動}})
{{ter-tengah}}
* Kurdish: {{t+|kmr|têper}}, {{t+|kmr|gerguhêz}}
* Macedonia: {{t|mk|преоден}}
* Mongolia: {{t+|mn|тусах}}
* Norman: {{t|nrf|transitif}}
* Norway: {{t+|no|transitiv}}
* Novial: {{t|nov|transitiv}}
* Occitan: {{t+|oc|transitiu}}
* Perancis: {{t+|fr|transitif}}
* Poland: {{t+|pl|przechodni}}
* Portugis: {{t+|pt|transitivo}}
* Romania: {{t+|ro|tranzitiv}}
* Rusia: {{t+|ru|перехо́дный}}
* Sepanyol: {{t+|es|transitivo}}
* Serbo-Croatia:
*: Cyril: {{t|sh|пре́лазан}}, {{t|sh|прије́лазан}}
*: Rumi: {{t+|sh|prélazan}}, {{t+|sh|prijélazan}}
* Slovak: {{t|sk|prechodný}}
* Slovene: {{t|sl|prehoden}}
* Sweden: {{t+|sv|transitiv}}
* Turki: {{t+|tr|geçişli}}
* Ukraine: {{t+|uk|перехідни́й}}
* Vietnam: {{t+|vi|ngoại }}
* Volapük: {{t+|vo|loveädik}}
{{ter-bawah}}
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
k14421mgezu0pzwx3185mae769hegw5
کيميا
0
12705
190030
110449
2024-11-12T03:15:04Z
Mirlim
8057
/* Sebutan */
190030
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
{{ms-kn}}
# {{label|ms|sains}} Ilmu [[sains]] asas yang berkaitan dengan [[struktur]], kelakuan, [[komposisi]] dan sifat [[tindak balas]] yang berlaku antara [[atom]], [[ion]], [[unsur]], atau [[sebatian]] serta hukum-hukum yang menerangkan [[fenomena]] kimia.
#* '''1345H''', ''[http://eprints.um.edu.my/16629/5/Page_5.pdf Spirit daripada sekam]'', Majalah Pengasuh, m/s 5.
#*:{{quote|ms|دقتور هرݢريڤس - سؤرڠ درڤد علماء "کيميا" دسلاتن اوستريليا - ايت بوله مڠلوارکن سڤيرية درڤد سکم، دڠن جالن کڤڠتاهوانن يڠموده، دي اکن ممباڠونکن تمڤتکرج يڠترتنتو باݢي مڠکوکس سڤيرية ايت دان اي مڠاکو بهاوا تياڤ٢ ساتو تن سکم بوله داڤت 50 ݢيلين سڤيرية.|Doktor Hargerips - seorang daripada ulama '''kimia''' di Selatan Australia - itu boleh mengeluarkan spirit daripada sekam, dengan jalan kepengetahuanan yang mudah, dia akan membangunkan tempat kerja yang tertentu bagi mengkukus spirit itu dan ia mengaku bahawa tiap-tiap satu tan sekam boleh dapat 50 gelen spirit.}}
=== Etimologi ===
Daripada {{der|ms|ar|كِيمِيَاء}}.
=== Sebutan ===
* {{dewan|ki|mia}}
* {{AFA|ms|/ki.mia/}}
* {{rhymes|ms|mia}}
* {{penyempangan|ms|کي|ميا}}
=== Tulisan Rumi ===
{{l|ms|kimia}}
=== Kata majmuk ===
* {{l|ms|اهلي کيميا}}
* {{l|ms|باج کيميا}}
* {{l|ms|عنصور کيميا}}
* {{l|ms|کيميا اناليسيس}}
* {{l|ms|کيميا اورݢانيک}}
* {{l|ms|کيميا تق اورݢانيک}}
* {{l|ms|کيميا حياة}}
* {{l|ms|کيميا فيزيک}}
* {{l|ms|کيميا ڤرايندوسترين}}
* {{l|ms|کيميا ݢوناءن}}
* {{l|ms|کيميا نوکليار}}
* {{l|ms|کيميا هاب}}
* {{l|ms|ݢابوڠنݢابوڠن کيميا}}
=== Rujukan ===
* {{R:BKKM}}
=== Pautan luar ===
* {{R:PRPM}}
pvw49g661f6ypedhdiphkpc8oz2n6e3
api dalam sekam
0
12808
190009
110717
2024-11-11T12:45:35Z
Tofeiku
2269
kemas kini
190009
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
==== Peribahasa ====
{{head|ms|peribahasa}}
# Perbuatan [[jahat]] yang [[tersembunyi]].
#* '''1978''', ''[http://eresources.nlb.gov.sg/newspapers/Digitised/Article/beritaharian19781004-1.2.40.2?ST=1&AT=search&k=api%20sekam&QT=api,sekam&oref=article Tawaran Ampun]'', Berita Harian, m/s 4.
#*:{{quote|ms|Adalah sukar untuk meramalkan sama ada berkurangnya kejadian pertempuran sekarang ini menunjukkan pengurangan sebenar rasa marah dan kecenderongan untuk mengganas semula. Sementara kerajaan sememangnya mengharapkan demikian, ia sebaliknya boleh merupakan satu keadaan yang menyerupai '''api dalam sekam'''.}}
# Cinta yang [[terpendam]].
=== Sebutan ===
* {{dewan|a|pi|da|lam|se|kam}}
* {{AFA|ms|/a.pi da.lam sə.kam/}}
* {{rhymes|ms|kam}}
* {{penyempangan|ms|a|pi||di||da|lam||se|kam}}
=== Tulisan Jawi ===
{{ARchar|[[اڤي دالم سکم]]}}
=== Tesaurus ===
; Sinonim : {{l/ms|api makan sekam}}, {{l|ms|api makan dedak}}.
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
i657kelv22yraqa1utp6g9o7i2zaisi
dakan
0
12932
189980
110924
2024-11-11T12:22:45Z
Tofeiku
2269
kemas kini
189980
wikitext
text/x-wiki
==Bahasa Belait==
===Takrifan===
[[Fail:Artocarpus integer Fruit and Tree.JPG|thumb|dakan]]
====Kata nama====
{{head|beg|kata nama}}
# [[cempedak]].
===Sebutan===
* {{AFA|beg|/da.kan/}}
* {{rima|beg|kan}}
* {{penyempangan|beg|da|kan}}
===Rujukan===
* {{R:DL7D}}
===Pautan luar===
* {{R:Gerbang Bahasa}}
sy0cvfdmx626ltqqxbu99pd4zcwn9bs
god jul
0
12940
190002
110937
2024-11-11T12:37:09Z
Tofeiku
2269
kemas kini
190002
wikitext
text/x-wiki
==Bahasa Denmark==
===Takrifan===
====Frasa====
{{head|da|frasa}}
# [[Selamat Hari Natal]]
===Nota penggunaan===
Diucapkan pada Malam Natal (sehari sebelum Hari Natal).
[[Kategori:Buku frasa bahasa Denmark]]
==Bahasa Norway Bokmål==
===Takrifan===
====Frasa====
{{head|nb|phrase}}
# [[Selamat Hari Natal]] {{topics|nb|Natal}}
===Sebutan===
* {{AFA|nb|/ɡuː jʉːl/|[ɡuʷː jʉʷːl]}}
===Nota penggunaan===
Diucapkan pada Malam Natal (sehari sebelum Hari Natal).
[[Kategori:Buku frasa bahasa Norway]]
==Bahasa Norway Nynorsk==
===Takrifan===
====Frasa====
{{head|nn|frasa}}
# [[Selamat Hari Natal]] {{topics|nn|Natal}}
===Bentuk lain===
* {{l|nn|god jol}}
==Bahasa Sweden==
===Takrifan===
====Frasa====
{{head|sv|frasa|head=[[god]] [[jul]]}}
# [[Selamat Hari Natal]]
#: {{ux|sv|'''God jul''', min vän.|'''Selamat Hari Natal''', kawanku}}
===Sebutan===
* {{AFA|sv|/ɡuː(d) jʉːl/|/ɡʊ jʉːl/}}
[[Kategori:Buku frasa bahasa Sweden]]
pubyn4d5nh3fzwdz6wz22a0bmv6qkss
ders
0
12951
189966
188616
2024-11-11T12:11:10Z
Tofeiku
2269
kemas kini
189966
wikitext
text/x-wiki
{{tr}}
==== Kata nama ====
{{head|tr|kata nama}}
# [[pelajaran]]
=== Etimologi ===
Daripada {{etyl|ar|tr}} {{m|ar|دَرْس}}.
=== Sebutan ===
* {{IPA|tr|/deɾs/}}
fem1ileiwqo38ov8h2jw5ecc95brh8u
decade
0
12974
189962
111021
2024-11-11T12:09:46Z
Tofeiku
2269
kemas kini
189962
wikitext
text/x-wiki
{{en}}{{wikipedia|lang=en}}
===Takrifan===
====Kata nama====
{{en-noun}}
# [[dekad]], tempoh sepuluh [[tahun]].
===Sebutan===
* {{a|RP}} {{IPA|en|/ˈdɛkeɪd/|/dəˈkeɪd/}}
* {{a|GA}} {{IPA|en|/ˈdɛkeɪd/|/dəˈkeɪd/}}
[[Kategori:en:Masa]]
3reds2eygcenci3hr4tdewouotv9pre
gel
0
13026
190005
111114
2024-11-11T12:38:33Z
Tofeiku
2269
kemas kini
190005
wikitext
text/x-wiki
{{ms}}
===Takrifan===
{{ms-kn}}
# Sejenis bahan [[kenyal]] seperti [[agar-agar]], lazimnya digunakan bagi tujuan [[fesyen]] dan [[dandanan]] [[rambut]].
===Etimologi===
{{bor|ms|en|gel}}.
===Sebutan===
* {{dewan|gé}}
* {{penyempangan|ms|gel}}
===Tulisan Jawi===
{{ARchar|ݢيل}}
===Pautan luar===
* {{R:PRPM}}
==Bahasa Inggeris==
{{wikipedia|lang=en}}
===Takrifan===
{{en-noun}}
# gel (bahan)
===Sebutan===
* {{IPA|en|/dʒɛl/}}
* {{rima|en|ɛl}}
* {{audio|en|en-us-gel.ogg|Audio (AS)}}
==Bahasa Temiar==
===Takrifan===
====Kata kerja====
{{head|tea|kata kerja}}
# [[duduk]]
===Sebutan===
* {{IPA|tea|/ɡɘl/}}
a1bg9kbzd7u3vixfnf3wqgai4cn5mdq
tikar
0
13087
190047
111245
2024-11-12T04:25:59Z
Mirlim
8057
/* Sebutan */
190047
wikitext
text/x-wiki
{{ms}}
===Takrifan===
{{ms-kn}}
# Suatu [[hamparan]] yang dibentangkan sebagai [[alas]] bagi tujuan-tujuan seperti [[tidur]].
#* '''1986''', ''[https://eresources.nlb.gov.sg/newspapers/Digitised/Article/beritaharian19860119-1.2.19.4.2?ST=1&AT=search&k=tikar&QT=tikar&oref=article Usah buang baki tikar]'', Berita Harian, m/s 7.
#*: {{quote|ms| BAKI '''tikar''' getah jangan segera dibuang.}}
===Sebutan===
* {{dewan|ti|kar}}
* {{penyempangan|ms|ti|kar}}
===Tulisan Jawi===
{{ARchar|[[تيکر]]}}
===Rujukan===
* {{R:KD4}}
===Pautan luar===
* {{R:PRPM}}
3p3vk2mryvl5ekccocly6zzlmxd56ew
Modul:language-like
828
13233
190026
172030
2024-11-12T02:50:02Z
Hakimi97
2668
190026
Scribunto
text/plain
local export = {}
-- Implementation of getOtherNames() for languages, etymology languages,
-- families and scripts. If `onlyOtherNames` is passed in, only return
-- the names in the `otherNames` field, otherwise combine `otherNames`,
-- `aliases` and `varieties`.
function export.getOtherNames(self, onlyOtherNames)
local data
if self._extraData then
data = self._extraData
elseif self._rawData then
data = self._rawData
else
-- Called from [[Module:list of languages]]; fields already available directly.
data = self
end
if onlyOtherNames then
return data.otherNames or {}
end
-- Combine otherNames, aliases and varieties. First try to optimize and not create any
-- new memory. This is possible if exactly one of the three exist, and if it's `varieties`,
-- there are no nested lists in `varieties`.
if data.otherNames and not data.aliases and not data.varieties then
return data.otherNames
elseif data.aliases and not data.otherNames and not data.varieties then
return data.aliases
elseif data.varieties and not data.otherNames and not data.aliases then
local saw_table = false
for _, name in ipairs(data.varieties) do
if type(name) == "table" then
saw_table = true
break
end
end
if not saw_table then
return data.varieties
end
end
-- Have to do it the "hard way".
local ret = {}
if data.otherNames then
for _, name in ipairs(data.otherNames) do
table.insert(ret, name)
end
end
if data.aliases then
for _, name in ipairs(data.aliases) do
table.insert(ret, name)
end
end
if data.varieties then
for _, name in ipairs(data.varieties) do
if type(name) == "table" then
for _, n in ipairs(name) do
table.insert(ret, n)
end
else
table.insert(ret, name)
end
end
end
return ret
end
-- Implementation of getVarieties() for languages, etymology languages,
-- families and scripts. If `flatten` is passed in, flatten down to a
-- list of strings; otherwise, keep the structure.
function export.getVarieties(self, flatten)
local data
if self._extraData then
data = self._extraData
elseif self._rawData then
data = self._rawData
else
-- Called from [[Module:list of languages]]; fields already available directly.
data = self
end
if data.varieties then
-- If flattening not requested, just return them.
if not flatten then
return data.varieties
end
-- Check if no nested table; if so, just return the result.
local saw_table = false
for _, name in ipairs(data.varieties) do
if type(name) == "table" then
saw_table = true
break
end
end
if not saw_table then
return data.varieties
end
-- At this point, we need to flatten the varieties.
local ret = {}
for _, name in ipairs(data.varieties) do
if type(name) == "table" then
for _, n in ipairs(name) do
table.insert(ret, n)
end
else
table.insert(ret, name)
end
end
return ret
else
return {}
end
end
-- Implementation of template-callable getByCode() function for languages,
-- etymology languages, families and scripts. `item` is the language,
-- family or script in question; `args` is the arguments passed in by the
-- module invocation; `extra_processing`, if specified, is a function of
-- one argument (the requested property) and should return the value to
-- be returned to the caller, or nil if the property isn't recognized.
-- `extra_processing` is called after special-cased properties are handled
-- and before general-purpose processing code that works for all string
-- properties.
function export.templateGetByCode(args, extra_processing)
-- The item that the caller wanted to look up.
local item, itemname, list = args[1], args[2]
if itemname == "getOtherNames" then
list = item:getOtherNames()
elseif itemname == "getOnlyOtherNames" then
list = item:getOtherNames(true)
elseif itemname == "getAliases" then
list = item:getAliases()
elseif itemname == "getVarieties" then
list = item:getVarieties(true)
end
if list then
local index = args[3]; if index == "" then index = nil end
index = tonumber(index or error("Numeric index of the desired item in the list (parameter 3) has not been specified."))
return list[index] or ""
end
if itemname == "getFamily" and item.getFamily then
return item:getFamily():getCode()
end
if extra_processing then
local retval = extra_processing(itemname)
if retval then
return retval
end
end
if item[itemname] then
local ret = item[itemname](item)
if type(ret) == "string" then
return ret
else
error("The function \"" .. itemname .. "\" did not return a string value.")
end
end
error("Requested invalid item name \"" .. itemname .. "\".")
end
do
local function get_commons_cat_claim(item)
if not (item and mw.wikibase) then
return nil
end
local entity = mw.wikibase.getEntity(item)
if not entity then
return nil
end
local claim = entity:getBestStatements("P373")[1]
return claim and ("Kategori:" .. claim.mainsnak.datavalue.value) or nil
end
local function get_commons_cat_sitelink(item)
if not (item and mw.wikibase) then
return nil
end
local sitelink = mw.wikibase.sitelink(item, "commonswiki")
-- Reject any sitelinks that aren't categories.
return sitelink and sitelink:match("^Kategori:") and sitelink or nil
end
-- Implementation of getCommonsCategory() for languages, etymology
-- languages, families and scripts.
function export.getCommonsCategory(self)
local cached_value
cached_value = self._commons_category
if cached_value ~= nil then -- including false
return cached_value or nil
end
-- Checks are in decreasing order of likelihood for a useful match.
-- Get the Commons Category claim from the language's item.
local lang_item = self:getWikidataItem()
cached_value = get_commons_cat_claim(lang_item)
if cached_value == nil then
-- Otherwise, try the language's category's item.
local langcat_item = mw.wikibase.getEntityIdForTitle("Kategori:" .. self:getCategoryName())
cached_value = get_commons_cat_claim(langcat_item)
if cached_value == nil then
-- If there's no P373 claim, there might be a sitelink on the language's category's item.
cached_value = get_commons_cat_sitelink(langcat_item)
if cached_value == nil then
-- Otherwise, try for a sitelink on the language's own item.
cached_value = get_commons_cat_sitelink(lang_item)
if cached_value == nil then
cached_value = false
end
end
end
end
self._commons_category = cached_value
return cached_value or nil
end
end
return export
biywnevuq8eva3lnmv52oaa0mocatkg
gentok
0
13258
189990
111600
2024-11-11T12:31:06Z
Tofeiku
2269
kemas kini
189990
wikitext
text/x-wiki
==Bahasa Temiar==
===Takrifan===
====Kata nama====
{{head|tea|kata nama}}
# [[telinga]]
===Sebutan===
* {{IPA|tea|/ɡəntɔk/}}
* {{penyempangan|tea|gen|tok}}
szx92x0gdsc57uh0t2a4s7dkvtoc6tz
gumompus
0
13509
190006
112108
2024-11-11T12:38:59Z
Tofeiku
2269
kemas kini
190006
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
====Kata nama====
{{dtp-kn}}
# [[tengkujuh]]
#: {{ux|dtp|timpu '''gumompus'''|musim '''tengkujuh'''}}
===Sebutan===
* {{AFA|dtp|/ɡu.mom.pus/}}
* {{rima|dtp|pus}}
* {{penyempangan|dtp|gu|mom|pus}}
gpi5f15ug4jg3awjtlqc2eo2aja4rzt
tuteng
0
13602
190062
113183
2024-11-12T05:39:07Z
Mirlim
8057
/* Sebutan */
190062
wikitext
text/x-wiki
==Bahasa Melanau==
===Takrifan===
====Kata kerja====
{{head|mel|kata kerja}}
# [[minum]]
===Sebutan===
* {{penyempangan|mel|tu|teng}}
7ligyn2wt9fvfeo7pl66q66kmnjx6pz
gergasi
0
13629
189995
112294
2024-11-11T12:33:12Z
Tofeiku
2269
kemas kini
189995
wikitext
text/x-wiki
{{ms}}
===Takrifan===
{{ms-kn|j=ݢرݢاسي}}
# Sejenis [[makhluk]] yang sangat besar yang dikatakan memakan [[manusia]] dan sebagainya.
#: '''23 Mac 1961''', [https://eresources.nlb.gov.sg/newspapers/Digitised/Article/beritaharian19610323-1.2.22?ST=1&AT=search&k=gergasi&QT=gergasi&oref=article Gergasi Johor di-jumpai di-hutan Gemencheh], ''Berita Harian'', m/s 2
#:* {{quote|ms|Bekas2 tapak yang di-katakan ada-lah jejak '''gergasi''' yang di-jumpai di-hutan Johor beberapa bulan yang lalu telah diJumpai pula di-hutan Gedok, Gemencheh.}}
===Sebutan===
* {{penyempangan|ms|ger|ga|si}}
===Rujukan===
* {{R:KD4}}
===Pautan luar===
* {{R:PRPM}}
ize262bxrej9ccpismmh0vk42koz8k7
banyak makan garam
0
13637
190008
112304
2024-11-11T12:44:52Z
Tofeiku
2269
kemas kini
190008
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
==== Peribahasa ====
{{head|ms|peribahasa}}
# Mempunyai banyak [[pengalaman]] hidup.
=== Sebutan ===
* {{dewan|ba|nyak||ma|kan||ga|ram}}
* {{AFA|ms|/ba.ɲaʔ ma.kan ɡa.ram/}}
* {{rhymes|ms|ram}}
* {{penyempangan|ms|ba|nyak||ma|kan||ga|ram}}
=== Tulisan Jawi ===
{{ARchar|[[باڽق ماکن ݢارم]]}}
=== Tesaurus ===
; Sinonim : {{l|ms|sudah banyak makan asam garam}}, {{l|ms|tahu diasin garam}}, {{l|ms|banyak menelan garam}}, {{l|ms|makan garam}}.
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
qvdh3vvj8uramrgyuvj3cj99qxf2dyk
dahar
0
13744
189963
112458
2024-11-11T12:10:05Z
Tofeiku
2269
kemas kini
189963
wikitext
text/x-wiki
==Bahasa Sunda==
===Takrifan===
====Kata kerja====
{{head|su|kata kerja|aksara Sunda|[[ᮓᮠᮁ]]}}
# [[makan]]
===Sebutan===
* {{penyempangan|su|da|har}}
hf8iejalywvdazarjywdf9p5x6e1gth
جاوي ترکوروڠ سياڠ
0
13765
189987
189330
2024-11-11T12:29:56Z
Tofeiku
2269
Tofeiku telah memindahkan laman [[باݢاي جاوي ترکوروڠ سياڠ]] ke [[جاوي ترکوروڠ سياڠ]]
189330
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
==== Peribahasa ====
{{head|ms|peribahasa}}
# Orang yang tidak dapat bertindak sesuka hatinya kerana [[terkongkong]] oleh adat; sangat [[gelisah]].
===Etimologi===
Jawi atau lembu biasanya hanya dikurung pada waktu malam dan dibebaskan pada waktu siang.
=== Sebutan ===
* {{dewan|ba|gai||ja|wi||ter|ku|rung||siang}}
* {{AFA|ms|/ba.ɡai d͡ʒa.wi tər.ku.ruŋ siaŋ/}}
* {{rhymes|ms|siaŋ}}
* {{penyempangan|ms|با|ݢاي||جا|وي||تر|کو|روڠ||سياڠ}}
=== Tulisan Rumi ===
{{l|ms|bagai jawi terkurung siang}}
3m455azeh6e0f4s8sdtm7ljxgq8woqk
189989
189987
2024-11-11T12:30:30Z
Tofeiku
2269
kemas kini
189989
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
==== Peribahasa ====
{{head|ms|peribahasa}}
# Orang yang tidak dapat bertindak sesuka hatinya kerana [[terkongkong]] oleh adat; sangat [[gelisah]].
===Etimologi===
Jawi atau lembu biasanya hanya dikurung pada waktu malam dan dibebaskan pada waktu siang.
=== Sebutan ===
* {{dewan|ja|wi||ter|ku|rung||siang}}
* {{AFA|ms|/d͡ʒa.wi tər.ku.ruŋ siaŋ/}}
* {{rhymes|ms|siaŋ}}
* {{penyempangan|ms|جا|وي||تر|کو|روڠ||سياڠ}}
=== Tulisan Rumi ===
{{l|ms|jawi terkurung siang}}
eqmxbjpixolh3ptjsn4vgzpxdnpxz73
jawi terkurung siang
0
13766
189984
112481
2024-11-11T12:28:48Z
Tofeiku
2269
Tofeiku telah memindahkan laman [[bagai jawi terkurung siang]] ke [[jawi terkurung siang]]
112481
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
==== Peribahasa ====
{{head|ms|peribahasa}}
# Orang yang tidak dapat bertindak sesuka hatinya kerana [[terkongkong]] oleh adat; sangat [[gelisah]].
===Etimologi===
Jawi atau lembu biasanya hanya dikurung pada waktu malam dan dibebaskan pada waktu siang.
=== Sebutan ===
* {{dewan|ba|gai||ja|wi||ter|ku|rung||siang}}
* {{AFA|/ba.ɡai d͡ʒa.wi tər.ku.ruŋ siaŋ/|lang=ms}}
* {{rhymes|ms|siaŋ}}
* {{penyempangan|ba|gai||ja|wi||ter|ku|rung||siang|lang=ms}}
=== Tulisan Jawi ===
{{ARchar|[[باݢاي جاوي ترکوروڠ سياڠ]]}}
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
cbar1uwqyvlii8mj76kgfpqvjwlumli
189986
189984
2024-11-11T12:29:42Z
Tofeiku
2269
kemas kini
189986
wikitext
text/x-wiki
{{Pautan Projek Wikimedia}}
{{ms}}
=== Takrifan ===
==== Peribahasa ====
{{head|ms|peribahasa}}
# Orang yang tidak dapat bertindak sesuka hatinya kerana [[terkongkong]] oleh adat; sangat [[gelisah]].
===Etimologi===
Jawi atau lembu biasanya hanya dikurung pada waktu malam dan dibebaskan pada waktu siang.
=== Sebutan ===
* {{dewanja|wi||ter|ku|rung||siang}}
* {{AFA|ms|/d͡ʒa.wi tər.ku.ruŋ siaŋ/}}
* {{rhymes|ms|siaŋ}}
* {{penyempangan|ms|ja|wi||ter|ku|rung||siang}}
=== Tulisan Jawi ===
{{ARchar|[[جاوي ترکوروڠ سياڠ]]}}
=== Rujukan ===
* {{R:KD4}}
=== Pautan luar ===
* {{R:PRPM}}
ci2tizckloax893stpqb13eml46exmj
denga
0
13805
189964
112536
2024-11-11T12:10:22Z
Tofeiku
2269
kemas kini
189964
wikitext
text/x-wiki
==Bahasa Kenyah==
===Takrifan===
====Kata nama====
{{head|xkl|kata nama}}
# [[berita]]
===Sebutan===
* {{penyempangan|xkl|de|nga}}
ku7hqraum8pkug8g27rk3oag6vlji0u
trabajo
0
13836
190054
112576
2024-11-12T05:10:52Z
Mirlim
8057
/* Sebutan */
190054
wikitext
text/x-wiki
==Bahasa Sepanyol==
===Takrifan===
====Kata nama====
{{es-kn|m}}
# [[pekerjaan]]
# {{lb|es|fizik}} [[kerja]]
===Etimologi===
Terbitan substantif {{m|es|trabajar}}, atau mungkin daripada {{der|es|VL.|*tripalium||peralatan penyeksaan}}, daripada {{der|es|la|tripālis}}.
===Sebutan===
* {{es-IPA}}
* {{rima|es|axo}}
* {{penyempangan|es|tra|ba|jo}}
ix3k912e3bg7hh27mlbpbb81acih34i
tipu
0
13867
190050
184139
2024-11-12T04:30:46Z
Mirlim
8057
/* Sebutan */
190050
wikitext
text/x-wiki
=={{seksyen|en}}==
===Kata nama===
{{en-noun}}
# Sebatang pokok Amerika Selatan, {{taxlink|Tipuana tipu|species}}, yang ditanam sebagai hiasan di iklim musim sejuk yang sederhana.
#* {{quote-journal|en|work=Los Angeles Magazine|month=Oktober|year=2003|page=54|volume=48|issue=10|passage=A '''tipu''' tree serves as an umbrella, while an Indonesian door on the wall carries the ethnic motif and an iron table and chairs keep it modern.|translation=Sebatang pokok '''tipu''' berfungsi sebagai payung, manakala pintu Indonesia di dinding membawa motif etnik dan meja besi dan kerusi membuatnya moden.}}
===Anagram===
* {{anagrams|en|a=iptu|Tupi|ptui}}
[[Category:en:Pokok puak Dalbergieae]]
----
=={{seksyen|fi}}==
===Etimologi 1===
====Kata nama====
{{fi-noun}}
# [[anak]] [[ayam]] {{gloss|anak ayam yang sangat muda}}
# anak [[burung]]
# mana-mana burung kecil
# {{lb|fi|bahasa pasar}} wanita muda yang menawan
=====Deklensi=====
{{fi-decl-valo|tip|||u|a}}
=====Kata terbitan=====
* {{l|fi|tipula}}, {{l|fi|Tipula}}
* {{l|fi|tipunen}}
* {{l|fi|tiputanssi}}
=====Sinonim=====
* {{sense|ayam}} {{l|fi|kananpoika}}
* {{sense|anak burung}} {{l|fi|linnunpoika}}, {{l|fi|linnunpoikanen}}
* {{sense|burung kecil}} {{l|fi|pikkulintu}}
* {{sense|wanita cantik}} {{l|fi|kaunotar}}
===Etimologi 2===
====Kata kerja====
{{head|fi|bentuk kata kerja}}
# {{fi-form of|tippua|mood=indikatif|tense=konkritatif kini}}
# {{fi-form of|tippua|pr=orang kedua|pl=tunggal|mood=imperatif|tense=kini}}
# {{fi-form of|tippua|pr=orang kedua|pl=tunggal|mood=imperatif|tense=konkritatif kini}}
===Anagram===
* {{anagrams|fi|a=iptu|puit}}
----
=={{seksyen|lv}}==
===Kata nama===
{{head|lv|bentuk kata nama|g=m}}
# {{lv-inflection of|tips|acc|s}}
# {{lv-inflection of|tips|ins|s}}
# {{lv-inflection of|tips|gen|p}}
----
=={{seksyen|ms}}==
===Sebutan===
*{{hyphenation|ms|ti|pu}}
=== Takrifan ===
{{ms-kk|tipu}}
# perbuatan [[curang]] atau kata-kata [[dusta]] utk [[menyesatkan]] orang
===Kata terbitan===
* [[tipuan]]
* [[menipu]]
* [[tertipu]]
* [[penipuan]]
* [[penipu]]
===Bacaan lanjut===
{{R:PRPM}}
----
=={{seksyen|pi}}==
===Bentuk alternatif===
{{pi-alt}}
===Kata nama===
{{pi-noun|n}}
# [[plumbum]] {{gloss|besi}}
==Bahasa Kadazandusun==
===Takrifan===
====Kata kerja====
{{inti|dtp|kata kerja}}
# patah
===Sebutan===
* {{IPA|dtp|/ti.pʊ/}}
* {{penyempangan|dtp|ta|pu}}
=== Terbitan ===
{{der-top}}
* {{l|dtp|monipu}}
* {{l|dtp|minonipu}}
* {{l|dtp|mintipu}}
* {{l|dtp|mokitipu}}
* {{l|dtp|moninipu}}
* {{l|dtp|tinipu}}
* {{l|dtp|notipuan}}
* {{l|dtp|mitipu}}
* {{l|dtp|minokitipu}}
* {{l|dtp|notipu}}
* {{l|dtp|notipuan}}
* {{l|dtp|nokotipu}}
* {{l|dtp|nokotipuan}}
* {{l|dtp|kotipu}}
* {{l|dtp|kotipuan}}
* {{l|dtp|kinotipuan}}
* {{l|dtp|koponipuan}}
* {{l|dtp|otipu}}
* {{l|dtp|obintipu}}
* {{l|dtp|ongotipuan}}
* {{l|dtp|popotipu}}
* {{l|dtp|potipuan}}
* {{l|dtp|pinokitipuan}}
* {{l|dtp|pinonipuan}}
* {{l|dtp|pintipuan}}
* {{l|dtp|pokitipuan}}
* {{l|dtp|tipuo}}
* {{l|dtp|tipuon}}
* {{l|dtp|tumipu}}
* {{l|dtp|tuminipu}}
* {{l|dtp|songkotipuan}}
* {{l|dtp|sontipu-tipu}}
===Rujukan===
* {{Komoiboros DusunKadazan, Mongulud Boros Dusun Kadazan (MBDK) 1994}}
34av9ftnb6aey834439pdk60t48apn6
tri-
0
13905
190056
112666
2024-11-12T05:14:07Z
Mirlim
8057
/* Sebutan */
190056
wikitext
text/x-wiki
{{ms}}
===Takrifan===
====Awalan====
{{head|ms|awalan}}
# [[tiga]], 3
===Sebutan===
* {{penyempangan|ms|tri}}
===Tulisan Jawi===
{{ARchar|[[-تري]]}}
===Rujukan===
* {{R:KD4}}
===Pautan luar===
* {{R:PRPM}}
4d8ivjffws3jpcme58jyonoz7sa1ii6
ya'ugö
0
13952
190064
112745
2024-11-12T05:39:59Z
Mirlim
8057
/* Sebutan */
190064
wikitext
text/x-wiki
==Bahasa Nias==
===Takrifan===
====Kata ganti nama====
{{head|nia|kata ganti nama}}
# [[kamu]] (kata ganti nama tunggal kedua)
===Sebutan===
* {{penyempangan|nia|ya|u|gö}}
74ggp5kffz02n9apdh01hvodjg3fu97
grojogan
0
13998
189998
112802
2024-11-11T12:34:39Z
Tofeiku
2269
kemas kini
189998
wikitext
text/x-wiki
== Bahasa Jawa ==
=== Takrifan ===
==== Kata nama ====
{{head|jv|kata nama}}
# [[air terjun]]
=== Sebutan ===
* {{penyempangan|jv|gro|jo|gan}}
=== Tulisan Jawa ===
<big>[[ꦒꦿꦺꦴꦗꦺꦴꦒꦤ꧀]]</big>
o6dwmeljx7ulkc5qxlo3apvtav3s6ev
gönül
0
14033
189967
112847
2024-11-11T12:11:31Z
Tofeiku
2269
kemas kini
189967
wikitext
text/x-wiki
== Bahasa Turki ==
=== Takrifan ===
==== Kata nama ====
{{head|tr|kata nama}}
# {{lb|tr|sastera}} [[hati]]
=== Etimologi ===
Daripada {{der|tr|otk|𐰚𐰇𐰭𐰠|tr=köŋül}}, daripada {{inh|tr|trk-pro|*göjŋ-il||hati}}.
=== Sebutan ===
* {{IPA|tr|[ɟœ.nyl]}}
* {{penyempangan|tr|gö|nül}}
4vlfn12cgonqjqvjb35a1db23jlr785
denggan
0
14143
189968
112998
2024-11-11T12:11:51Z
Tofeiku
2269
kemas kini
189968
wikitext
text/x-wiki
== Bahasa Batak Toba ==
=== Takrifan ===
==== Kata sifat ====
{{head|bbc|kata sifat}}
# [[baik]], [[senang]]
=== Sebutan ===
* {{penyempangan|bbc|deng|gan}}
k2wo7l3cugm7npxfhhcw49gq7buyftf
gentek
0
14188
190004
113054
2024-11-11T12:38:08Z
Tofeiku
2269
kemas kini
190004
wikitext
text/x-wiki
==Bahasa Jahut==
===Takrifan===
[[Fail:Fruits of Asia 001 Rambutan.jpg|thumb|gentek]]
====Kata nama====
{{head|jah|kata nama}}
# [[rambutan]].
===Sebutan===
* {{AFA|jah|/ɡən.teʔ/}}
* {{rima|jah|teʔ}}
* {{penyempangan|jah|gen|tek}}
===Rujukan===
* [http://www.myjurnal.my/filebank/published_article/72821/3.pdf Bahasa Orang Asli Jahut: Penelitian Aspek Fonologi dan Leksikal, m/s 24]
[[Kategori:jah:Buah]]
0e2lwqlx8kp4ammen0fqi28id6sh7rz
dosén
0
14214
189972
113106
2024-11-11T12:16:00Z
Tofeiku
2269
kemas kini
189972
wikitext
text/x-wiki
== Bahasa Sunda ==
=== Takrifan ===
==== Kata nama ====
{{head|su|kata nama}}
# [[pensyarah]]
=== Sebutan ===
* {{penyempangan|su|do|sén}}
qinkrxik6gptzlfhfljpmlo4n2krjxo
tuwuhan
0
14225
190063
113121
2024-11-12T05:39:36Z
Mirlim
8057
/* Sebutan */
190063
wikitext
text/x-wiki
== Bahasa Jawa ==
=== Takrifan ===
==== Kata nama ====
{{head|jv|kata nama}}
# [[tumbuhan]]
=== Sebutan ===
* {{penyempangan|jv|tu|wu|han}}
=== Tulisan Jawa ===
* Hanacaraka: <big>[[ꦠꦸꦮꦸꦲꦤ꧀]]</big>
rvywt0qa7zsam314dxuh58a77rjgf20
Modul:ms/data/dial-sin/kertas
828
16521
189977
123918
2024-11-11T12:20:50Z
Tofeiku
2269
kembang
189977
Scribunto
text/plain
local export = {}
export.list = {
["maksud"] = "helaian nipis untuk menulis",
["nota"] = "",
["Baku-BN"] = { "kertas" },
["Baku-MY"] = { "kertas" },
["Baku-SG"] = { "kertas" },
["Baku-ID"] = { "kertas" },
["Dialek-BN"] = { "keratas" },
["Kedah"] = { "kretaeh" },
["Kelantan"] = { "khetah" },
["Melaka"] = { "ketas" },
["Pulau Pinang"]= { "retaih" },
["Sabah"] = { "katas" },
["Sarawak"] = { "kertas", "keretas" },
["Terengganu"] = { "khetah" },
["Deli"] = { "kertas" },
["Ketapang"] = { "kertas" },
["Langkat"] = { "kertas" },
["Riau"] = { "kertas" },
["Sambas"] = { "kartas", "kerattas" },
["Sumatera Utara"] = { "kertas" },
["Bangka"] = { "kertas" },
["Baba"] = { "kretair", "kretas" },
["Jambi"] = { "keghtas" },
["Kutai Tenggarong"] = { "kertas" },
["Makassar"] = { "kortas" },
["Betung"] = { "kote" },
["Desa Kesuma"] = { "kotas" },
}
return export
33o57ng7yzxdggo6lxj7b4hmcuff7ar
ter-
0
18334
190095
120046
2024-11-12T09:09:26Z
Mirlim
8057
190095
wikitext
text/x-wiki
==Bahasa Melayu==
===Takrifan===
====Awalan====
{{inti|ms|awalan}}
# {{alternative form of|ms|teR-}}
===Nota penggunaan===
{{l|ms|ter-}} ialah alomorf bagi {{l|ms|teR-}} untuk kata dasar yang bukan berawalan bunyi /r/.
==Bahasa Melayu Kelantan==
===Bentuk Alternatif===
* {{l|mfa|tr-}}
===Takrifan===
====Awalan====
{{head|mfa|Awalan}}
# {{alomorf bagi|mfa|te-}}
=== Sebutan ===
* {{AFA|mfa|/təɣ/}}
===Nota penggunaan===
* Alomorf {{l|mfa|ber-}} diimbuhkan pada kata dasar yang bermula dengan huruf vokal dan huruf /h/.
=== Rujukan ===
* {{R:Sintaksis Dialek Kelantan}}
7c3w29vwivhf7e85wcy0hpg73ci7thc
olombon
0
19311
190044
181538
2024-11-12T03:35:09Z
Rombituon
6133
/* Takrifan */
190044
wikitext
text/x-wiki
==Takrifan==
====Kata sifat====
{{inti | dtp | kata sifat}}
# gemuk
#: {{ux | dtp | '''Olombon''' ilo tanak.| Anak itu '''gemuk'''.}}
===Sebutan===
*{{penyempangan | dtp | o | lom | bon }}
gtewb8bhkylrx8i4f0ak6udhlcxkgy0
osonong
0
25958
189979
147102
2024-11-11T12:22:34Z
Rombituon
6133
/* Bahasa Kadazandusun */
189979
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
====Kata sifat====
{{inti|dtp|kata sifat}}
# [[baik]].
#: {{cp|dtp|'''Osonong''' kopio i Angel tu pinopoolos doho rasuk.|Si Angel sungguh '''baik''' kerana dia telah meminjamkan saya baju.}}
===Sebutan===
* {{IPA|dtp|/ɔ.sɔ.nɔŋ/}}
* {{penyempangan|dtp|o|so|nong}}
ehmpoul7y2s7138f1x617ab4qzyyp4g
ngoyon
0
26142
189982
132728
2024-11-11T12:23:57Z
Rombituon
6133
/* Bahasa Dusun */
189982
wikitext
text/x-wiki
== Bahasa Dusun ==
=== Kata kerja ===
# pergi
#: {{ux|dtp|Hombo '''ngoyon''' nu?
|Kamu '''pergi''' ke mana?}}
m762mufhiat6j2qgo4qehzho1eq9pa2
mogolit
0
27976
190041
135356
2024-11-12T03:28:33Z
Rombituon
6133
/* Bahasa Kadazandusun */
190041
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
====Kata kerja====
{{inti|dtp|kata kerja}}
# [[menandingi]]
# [[mengatasi]]
#: {{ux|dtp|'''Mogolit''' i Dudu di Nana id piboian lumoyou.
|Dudu '''menandingi''' Nana dalam pertandingan menyanyi.}}
#: {{ux|dtp|Manu oku do '''mogolit''' di tabangku.
|Saya ingin '''mengatasi''' abang saya.}}
jnc7t5n11lvr06h7x9imarqs7dn9w0n
linasu
0
27998
190042
135385
2024-11-12T03:31:54Z
Rombituon
6133
/* Bahasa Kadazandusun */
190042
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
====Kata adjektif====
{{inti|dtp|kata adjektif}}
# [[panas]]
# [[ingin mengekspresikan kepanasan dalam sesuatu situasi]]
#: {{ux|dtp|'''Linasu''' tadau baino.
|'''Panasnya''' hari ini.}}
===Takrifan===
====Kata nama====
{{inti|dtp|kata nama}}
# [[bahang]]
#: {{ux|dtp|Podumasan oku ontok '''linasu''' tadau mantad taap.
|Saya berpeluh kerana '''bahang''' matahari terus dari atap.}}
ohcqg53qb1tfkx1wqk1do6205zxwz1f
olingkung
0
30518
190043
162111
2024-11-12T03:33:46Z
Rombituon
6133
190043
wikitext
text/x-wiki
==Bahasa Kadazandusun==
===Takrifan===
====Kata sifat====
{{inti|dtp|kata sifat}}
# [[liar]].
#: {{ux|dtp|'''Olingkung''' tomod ilo tasu.
|Anjing itu sangat '''liar.'''}}
===Sebutan===
* {{IPA|dtp|/ɔ.liŋ.kʊŋ/}}
* {{penyempangan|dtp|o|ling|kung}}
0es5jbjqt3e8ndoslp8icx31uhob7o8
Modul:list of families
828
41403
190019
187745
2024-11-12T02:03:25Z
Hakimi97
2668
190019
Scribunto
text/plain
local concat = table.concat
local insert = table.insert
local sort = table.sort
local export = {}
local filters = {}
local function populate(t, stat, families, stats)
for code, data in pairs(t) do
local fam = data[3]
while fam do
stats[fam][stat][code] = true
if fam == "qfa-not" then
break
end
fam = families[fam]
fam = fam and fam[3] or nil
end
end
for code, fam in pairs(stats) do
local list = {}
for k in pairs(fam[stat]) do
insert(list, k)
end
stats[code][stat] = list
end
end
function export.show(frame)
local args = frame.args
local filter = filters[args[1]]
local families = require("Module:families/data")
local languages = require("Module:languages/data/all")
local stats = {}
for code, _ in pairs(families) do
stats[code] = {langs = {}, subfams = {}}
end
populate(languages, "langs", families, stats)
populate(families, "subfams", families, stats)
local codes = {}
for code, _ in pairs(families) do
insert(codes, code)
end
sort(codes)
local rows = {}
for i, code in ipairs(codes) do
local data = families[code]
local rt = nil
if data.otherNames then
local i = 1
rt = {}
while data.otherNames[i] do
insert(rt, data.otherNames[i])
i = i + 1
end
end
if (not filter) or filter(code, data, args) then
local catname = data[1] .. (data[1]:find("[Bb]ahasa%-bahasa") and "" or "Bahasa-bahasa ")
catname = catname:sub(1, 1):upper() .. catname:sub(2)
insert(rows, string.format(
' id="%s"\n' ..
'| <code>%s</code>\n' ..
'| [[:Kategori:%s|%s]]\n' ..
'| %s\n' ..
'| %s\n' ..
'| %u\n' ..
'| %u\n',
code, code,
catname, data[1],
(data[3] ~= nil) and ('[[#' .. data[3] .. '|' .. families[data[3]][1] .. ']]') or '',
rt and concat(rt, ", ") or " ",
#stats[code].subfams,
#stats[code].langs
))
end
end
return
"{| class=\"wikitable sortable\"\n" ..
"! Kod\n" ..
"! Nama berkanun\n" ..
"! Keluarga induk\n" ..
"! Nama lain\n" ..
"! Subkeluarga\n" ..
"! Bahasa-bahasa\n" ..
"|-" .. concat(rows, "\n|-") .. "\n|}"
end
filters["three-letter code"] = function (code, data, args)
local firstletter = args[2]
return data[3] ~= "qfa-not" and code:find("^" .. (firstletter or "[a-z]") .. "[a-z][a-z]$") ~= nil
end
filters["exceptional"] = function (code, data, args)
return data[3] ~= "qfa-not" and code:find("-") ~= nil
end
filters["special"] = function (code, data, args)
return data[3] == "qfa-not"
end
return export
beyswab7e3q5pnb5fd9z6ez0wqemwwf
190022
190019
2024-11-12T02:25:22Z
Hakimi97
2668
190022
Scribunto
text/plain
local concat = table.concat
local insert = table.insert
local sort = table.sort
local export = {}
local filters = {}
local function populate(t, stat, families, stats)
for code, data in pairs(t) do
local fam = data[3]
while fam do
stats[fam][stat][code] = true
if fam == "qfa-not" then
break
end
fam = families[fam]
fam = fam and fam[3] or nil
end
end
for code, fam in pairs(stats) do
local list = {}
for k in pairs(fam[stat]) do
insert(list, k)
end
stats[code][stat] = list
end
end
function export.show(frame)
local args = frame.args
local filter = filters[args[1]]
local families = require("Module:families/data")
local languages = require("Module:languages/data/all")
local stats = {}
for code, _ in pairs(families) do
stats[code] = {langs = {}, subfams = {}}
end
populate(languages, "langs", families, stats)
populate(families, "subfams", families, stats)
local codes = {}
for code, _ in pairs(families) do
insert(codes, code)
end
sort(codes)
local rows = {}
for i, code in ipairs(codes) do
local data = families[code]
local rt = nil
if data.otherNames then
local i = 1
rt = {}
while data.otherNames[i] do
insert(rt, data.otherNames[i])
i = i + 1
end
end
if (not filter) or filter(code, data, args) then
local catname = data[1] .. (data[1]:find("[Bb]ahasa-bahasa") and "" or "Bahasa-bahasa ")
catname = catname:sub(1, 1):upper() .. catname:sub(2)
insert(rows, string.format(
' id="%s"\n' ..
'| <code>%s</code>\n' ..
'| [[:Kategori:%s|%s]]\n' ..
'| %s\n' ..
'| %s\n' ..
'| %u\n' ..
'| %u\n',
code, code,
catname, data[1],
(data[3] ~= nil) and ('[[#' .. data[3] .. '|' .. families[data[3]][1] .. ']]') or '',
rt and concat(rt, ", ") or " ",
#stats[code].subfams,
#stats[code].langs
))
end
end
return
"{| class=\"wikitable sortable\"\n" ..
"! Kod\n" ..
"! Nama berkanun\n" ..
"! Keluarga induk\n" ..
"! Nama lain\n" ..
"! Subkeluarga\n" ..
"! Bahasa-bahasa\n" ..
"|-" .. concat(rows, "\n|-") .. "\n|}"
end
filters["three-letter code"] = function (code, data, args)
local firstletter = args[2]
return data[3] ~= "qfa-not" and code:find("^" .. (firstletter or "[a-z]") .. "[a-z][a-z]$") ~= nil
end
filters["exceptional"] = function (code, data, args)
return data[3] ~= "qfa-not" and code:find("-") ~= nil
end
filters["special"] = function (code, data, args)
return data[3] == "qfa-not"
end
return export
qio3nd1jc16wh9n16f4t7o1kfal1m4v
Modul:list of families/toplevel
828
57791
190018
187746
2024-11-12T02:01:26Z
Hakimi97
2668
190018
Scribunto
text/plain
local export = {}
local filters = {}
local function get_parent(families, code)
if not families[code] then return nil end
local parent = families[code][3]
local last_parent = nil
while true do
if parent == nil or parent == "qfa-not" then
return last_parent
end
last_parent = parent
if not families[parent] then
return nil
end
parent = families[parent][3]
end
end
function export.show(frame)
local args = frame.args
local filter = filters[args[1]]
local families = require("Module:families/data")
local languages = require("Module:languages/data/all")
local stats = {}
for code, _ in pairs(families) do
if not get_parent(families, data) then
stats[code] = { langs = {}, subfams = {} }
end
end
for code, data in pairs(languages) do
local family_code = data[3]
family_code = get_parent(families, family_code) or family_code
local fdata = stats[family_code]
if fdata then
table.insert(fdata.langs, code)
end
end
for code, data in pairs(families) do
local family_code = data[3]
family_code = get_parent(families, family_code) or family_code
local fdata = stats[family_code]
if fdata then
table.insert(fdata.subfams, code)
end
end
local codes = {}
for code, _ in pairs(families) do
table.insert(codes, code)
end
table.sort(codes)
local rows = {}
for i, code in ipairs(codes) do
local data = families[code]
if not get_parent(families, code) then
local rt = nil
if data.otherNames then
local i = 1
rt = {}
while data.otherNames[i] do
table.insert(rt, data.otherNames[i])
i = i + 1
end
end
if (not filter) or filter(code, data, args) then
local catname = data[1] .. (data[1]:find("[Bb]ahasa%-bahasa") and "" or "Bahasa-bahasa ")
catname = catname:sub(1, 1):upper() .. catname:sub(2)
table.insert(rows, string.format(
' id="%s"\n' ..
'| <code>%s</code>\n' ..
'| [[:Kategori:%s|%s]]\n' ..
'| %s\n' ..
'| %u\n' ..
'| %u\n',
code, code,
catname, data[1],
rt and table.concat(rt, ", ") or " ",
#stats[code].subfams,
#stats[code].langs
))
end
end
end
return
"{| class=\"wikitable sortable\"\n" ..
"! Kod\n" ..
"! Nama berkanun\n" ..
"! Nama lain\n" ..
"! Semua subkeluarga\n" ..
"! Semua bahasa\n" ..
"|-" .. table.concat(rows, "\n|-") .. "\n|}"
end
filters["three-letter code"] = function (code, data, args)
local firstletter = args[2]
return data[3] ~= "qfa-not" and code:find("^" .. (firstletter or "[a-z]") .. "[a-z][a-z]$") ~= nil
end
filters["exceptional"] = function (code, data, args)
return data[3] ~= "qfa-not" and code:find("-") ~= nil
end
filters["special"] = function (code, data, args)
return data[3] == "qfa-not"
end
return export
dohe4h92pxb9ktqjn74oo5v7dnmh3b1
190023
190018
2024-11-12T02:25:41Z
Hakimi97
2668
190023
Scribunto
text/plain
local export = {}
local filters = {}
local function get_parent(families, code)
if not families[code] then return nil end
local parent = families[code][3]
local last_parent = nil
while true do
if parent == nil or parent == "qfa-not" then
return last_parent
end
last_parent = parent
if not families[parent] then
return nil
end
parent = families[parent][3]
end
end
function export.show(frame)
local args = frame.args
local filter = filters[args[1]]
local families = require("Module:families/data")
local languages = require("Module:languages/data/all")
local stats = {}
for code, _ in pairs(families) do
if not get_parent(families, data) then
stats[code] = { langs = {}, subfams = {} }
end
end
for code, data in pairs(languages) do
local family_code = data[3]
family_code = get_parent(families, family_code) or family_code
local fdata = stats[family_code]
if fdata then
table.insert(fdata.langs, code)
end
end
for code, data in pairs(families) do
local family_code = data[3]
family_code = get_parent(families, family_code) or family_code
local fdata = stats[family_code]
if fdata then
table.insert(fdata.subfams, code)
end
end
local codes = {}
for code, _ in pairs(families) do
table.insert(codes, code)
end
table.sort(codes)
local rows = {}
for i, code in ipairs(codes) do
local data = families[code]
if not get_parent(families, code) then
local rt = nil
if data.otherNames then
local i = 1
rt = {}
while data.otherNames[i] do
table.insert(rt, data.otherNames[i])
i = i + 1
end
end
if (not filter) or filter(code, data, args) then
local catname = data[1] .. (data[1]:find("[Bb]ahasa-bahasa") and "" or "Bahasa-bahasa ")
catname = catname:sub(1, 1):upper() .. catname:sub(2)
table.insert(rows, string.format(
' id="%s"\n' ..
'| <code>%s</code>\n' ..
'| [[:Kategori:%s|%s]]\n' ..
'| %s\n' ..
'| %u\n' ..
'| %u\n',
code, code,
catname, data[1],
rt and table.concat(rt, ", ") or " ",
#stats[code].subfams,
#stats[code].langs
))
end
end
end
return
"{| class=\"wikitable sortable\"\n" ..
"! Kod\n" ..
"! Nama berkanun\n" ..
"! Nama lain\n" ..
"! Semua subkeluarga\n" ..
"! Semua bahasa\n" ..
"|-" .. table.concat(rows, "\n|-") .. "\n|}"
end
filters["three-letter code"] = function (code, data, args)
local firstletter = args[2]
return data[3] ~= "qfa-not" and code:find("^" .. (firstletter or "[a-z]") .. "[a-z][a-z]$") ~= nil
end
filters["exceptional"] = function (code, data, args)
return data[3] ~= "qfa-not" and code:find("-") ~= nil
end
filters["special"] = function (code, data, args)
return data[3] == "qfa-not"
end
return export
jyuqcc6fgomcut6dxwbqkybg22zdfe3
bagai jawi terkurung siang
0
59670
189985
2024-11-11T12:28:48Z
Tofeiku
2269
Tofeiku telah memindahkan laman [[bagai jawi terkurung siang]] ke [[jawi terkurung siang]]
189985
wikitext
text/x-wiki
#LENCONG [[jawi terkurung siang]]
fj9ypb0yrtblumevrmbm9ra8nd7iyy3
باݢاي جاوي ترکوروڠ سياڠ
0
59671
189988
2024-11-11T12:29:56Z
Tofeiku
2269
Tofeiku telah memindahkan laman [[باݢاي جاوي ترکوروڠ سياڠ]] ke [[جاوي ترکوروڠ سياڠ]]
189988
wikitext
text/x-wiki
#LENCONG [[جاوي ترکوروڠ سياڠ]]
dpbbjso2wcowqma0wnrhn6soyy1xnik
SBW
0
59672
190075
2024-11-12T06:01:09Z
PeaceSeekers
3334
Mencipta laman baru dengan kandungan '== Bahasa Melayu == {{Wikipedia}} === Takrifan === ==== Kata nama ==== {{ms-kn}} # {{lb|ms|pertanian}} {{initialism of|ms|[[sarang]] [[burung walit]]}} === Pautan luar === * {{R:PRPM}}'
190075
wikitext
text/x-wiki
== Bahasa Melayu ==
{{Wikipedia}}
=== Takrifan ===
==== Kata nama ====
{{ms-kn}}
# {{lb|ms|pertanian}} {{initialism of|ms|[[sarang]] [[burung walit]]}}
=== Pautan luar ===
* {{R:PRPM}}
iw496xrfhvj074evd0jp7voop461tak
glycan
0
59673
190078
2024-11-12T06:02:36Z
PeaceSeekers
3334
Mencipta laman baru dengan kandungan '== Bahasa Inggeris == {{Wikipedia|lang=en}} === Takrifan === ==== Kata nama ==== {{en-kn}} # {{lb|en|biokimia}} [[glikan]]; sebarang [[sakarida]] atau [[karbohidrat]] berantai (terutamanya dalam [[glikoprotein]] atau [[glikolipid]]) === Sebutan === * {{audio|en|LL-Q1860 (eng)-Wodencafe-glycan.wav|a=US}}'
190078
wikitext
text/x-wiki
== Bahasa Inggeris ==
{{Wikipedia|lang=en}}
=== Takrifan ===
==== Kata nama ====
{{en-kn}}
# {{lb|en|biokimia}} [[glikan]]; sebarang [[sakarida]] atau [[karbohidrat]] berantai (terutamanya dalam [[glikoprotein]] atau [[glikolipid]])
=== Sebutan ===
* {{audio|en|LL-Q1860 (eng)-Wodencafe-glycan.wav|a=US}}
g751uldazddfu06tkz054sc7mw3vdis
190079
190078
2024-11-12T06:02:50Z
PeaceSeekers
3334
190079
wikitext
text/x-wiki
== Bahasa Inggeris ==
{{Wikipedia|lang=en}}
=== Takrifan ===
==== Kata nama ====
{{en-kn}}
# {{lb|en|biokimia}} [[glikan]]; sebarang [[sakarida]] atau [[karbohidrat]] berantai (terutamanya dalam [[glikoprotein]] atau [[glikolipid]])
=== Sebutan ===
* {{audio|en|LL-Q1860 (eng)-Wodencafe-glycan.wav|a=US}}
{{C|en|Karbohidrat}}
rh2dh0knweyac829j8irovgrfcfqart
glikan
0
59674
190082
2024-11-12T06:05:24Z
PeaceSeekers
3334
Mencipta laman baru dengan kandungan '== Bahasa Melayu == === Takrifan === ==== Kata nama ==== {{ms-kn}} # {{lb|ms|biokimia}} Sebarang [[sakarida]] atau [[karbohidrat]] berantai, terutamanya dalam [[glikoprotein]] atau [[glikolipid]]. === Pautan luar === * {{R:PRPM}} {{C|ms|Karbohidrat}}'
190082
wikitext
text/x-wiki
== Bahasa Melayu ==
=== Takrifan ===
==== Kata nama ====
{{ms-kn}}
# {{lb|ms|biokimia}} Sebarang [[sakarida]] atau [[karbohidrat]] berantai, terutamanya dalam [[glikoprotein]] atau [[glikolipid]].
=== Pautan luar ===
* {{R:PRPM}}
{{C|ms|Karbohidrat}}
n1fixs6lxkxac2xu94l34wlpaamfa1u
galactose
0
59675
190083
2024-11-12T06:08:02Z
PeaceSeekers
3334
Mencipta laman baru dengan kandungan '== Bahasa Inggeris == {{Wikipedia|lang=en}} === Takrifan === ==== Kata nama ==== {{en-kn|~}} # {{lb|en|karbohidrat}} [[galaktosa]] === Etimologi === Daripada {{der|en|grc|γάλακτος||susu}} {{suffix|en||ose|gloss2=gula}}. === Sebutan === * {{IPA|en|/ɡəˈlaktəʊz/|/ɡəˈlaktəʊs/|a=AS}} * {{audio|en|LL-Q1860 (eng)-Vealhurl-galactose.wav|a=England Selatan}}'
190083
wikitext
text/x-wiki
== Bahasa Inggeris ==
{{Wikipedia|lang=en}}
=== Takrifan ===
==== Kata nama ====
{{en-kn|~}}
# {{lb|en|karbohidrat}} [[galaktosa]]
=== Etimologi ===
Daripada {{der|en|grc|γάλακτος||susu}} {{suffix|en||ose|gloss2=gula}}.
=== Sebutan ===
* {{IPA|en|/ɡəˈlaktəʊz/|/ɡəˈlaktəʊs/|a=AS}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-galactose.wav|a=England Selatan}}
dsyz4mvgn9tz8rsxvsgbud4uvq0fcvv
Kategori:en:Karbohidrat
14
59676
190084
2024-11-12T06:08:24Z
PeaceSeekers
3334
Mencipta laman baru dengan kandungan '{{auto cat}}'
190084
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Kategori:en:Sebatian organik
14
59677
190087
2024-11-12T06:10:21Z
PeaceSeekers
3334
Mencipta laman baru dengan kandungan '{{auto cat}}'
190087
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
te-
0
59678
190094
2024-11-12T09:07:10Z
Mirlim
8057
Mencipta laman baru dengan kandungan '==Bahasa Melayu== ===Takrifan=== ====Awalan==== {{inti|ms|awalan}} # {{alternative form of|ms|teR-}} ===Nota penggunaan=== {{l|ms|te-}} ialah alomorf bagi {{l|ms|teR-}} untuk kata dasar yang berawalan bunyi /r/ ==Bahasa Melayu Kelantan== ===Bentuk Alternatif=== * {{l|mfa|t-}} ===Takrifan=== ====Awalan==== {{head|mfa|Awalan}} # {{lb|ms|Kelantan}} Digunakan sebagai penanda kerja ragam perfektif, ragam kebolehan atau sebagai ragam tak sengaja. # Alo...'
190094
wikitext
text/x-wiki
==Bahasa Melayu==
===Takrifan===
====Awalan====
{{inti|ms|awalan}}
# {{alternative form of|ms|teR-}}
===Nota penggunaan===
{{l|ms|te-}} ialah alomorf bagi {{l|ms|teR-}} untuk kata dasar yang berawalan bunyi /r/
==Bahasa Melayu Kelantan==
===Bentuk Alternatif===
* {{l|mfa|t-}}
===Takrifan===
====Awalan====
{{head|mfa|Awalan}}
# {{lb|ms|Kelantan}} Digunakan sebagai penanda kerja ragam perfektif, ragam kebolehan atau sebagai ragam tak sengaja.
# Alomorf kepada {{l|mfa|te-}}
=== Sebutan ===
* {{AFA|mfa|/tə/}}
=== Alomorf ===
* {{l|mfa|te-}}
* {{l|mfa|ter-}}
===Nota penggunaan===
* Kata dasar terdiri daripada kata kerja transitif, kata kerja tak transitif dan adverba, serta kata nama yang tertentu sahaja.
* Alomorf {{l|mfa|te-}} diimbuhkan pada kata dasar yang bermula dengan huruf konsonan, kecuali huruf /h/.
=== Rujukan ===
* {{R:Sintaksis Dialek Kelantan}}
lt6ulg4flhfrqb03eq5j93momyylj1d
t-
0
59679
190096
2024-11-12T09:11:24Z
Mirlim
8057
Mencipta laman baru dengan kandungan '==Bahasa Melayu Kelantan== ===Takrifan=== ====Awalan/Akhiran/Apitan/Suprafiksa==== {{head|mfa|Awalan/Akhiran/Apitan/Suprafiksa}} # {{alternative spelling of|mfa|te-}} === Sebutan === * {{AFA|mfa|/t/}}'
190096
wikitext
text/x-wiki
==Bahasa Melayu Kelantan==
===Takrifan===
====Awalan/Akhiran/Apitan/Suprafiksa====
{{head|mfa|Awalan/Akhiran/Apitan/Suprafiksa}}
# {{alternative spelling of|mfa|te-}}
=== Sebutan ===
* {{AFA|mfa|/t/}}
rkelwox9qpf6r4kdhhidlh80j0cxyeo
190098
190096
2024-11-12T09:12:44Z
Mirlim
8057
baiki
190098
wikitext
text/x-wiki
==Bahasa Melayu Kelantan==
===Takrifan===
====Awalan====
{{head|mfa|Awalan}}
# {{alternative spelling of|mfa|te-}}
=== Sebutan ===
* {{AFA|mfa|/t/}}
th983i8lesvnz2og7a2qpkue3ysc23l
tr-
0
59680
190097
2024-11-12T09:12:27Z
Mirlim
8057
Mencipta laman baru dengan kandungan '==Bahasa Melayu Kelantan== ===Takrifan=== ====Awalan==== {{head|mfa|Awalan}} # {{alternative spelling of|mfa|ter-}} === Sebutan === * {{AFA|mfa|/tɣ/}}'
190097
wikitext
text/x-wiki
==Bahasa Melayu Kelantan==
===Takrifan===
====Awalan====
{{head|mfa|Awalan}}
# {{alternative spelling of|mfa|ter-}}
=== Sebutan ===
* {{AFA|mfa|/tɣ/}}
a0xq7uvc840nrohz8bjifc0sj7rqw95