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>&amp;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>&amp;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>&amp;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 ber­kedut-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 "&nbsp;", #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 "&nbsp;", #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 "&nbsp;", #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 "&nbsp;", #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