উইকিঅভিধান bnwiktionary https://bn.wiktionary.org/wiki/%E0%A6%AA%E0%A7%8D%E0%A6%B0%E0%A6%A7%E0%A6%BE%E0%A6%A8_%E0%A6%AA%E0%A6%BE%E0%A6%A4%E0%A6%BE MediaWiki 1.47.0-wmf.12 case-sensitive মিডিয়া বিশেষ আলাপ ব্যবহারকারী ব্যবহারকারী আলাপ উইকিঅভিধান উইকিঅভিধান আলোচনা চিত্র চিত্র আলোচনা মিডিয়াউইকি মিডিয়াউইকি আলোচনা টেমপ্লেট টেমপ্লেট আলোচনা সাহায্য সাহায্য আলোচনা বিষয়শ্রেণী বিষয়শ্রেণী আলোচনা পরিশিষ্ট পরিশিষ্ট আলোচনা ছন্দ ছন্দ আলোচনা থিসরাস থিসরাস আলোচনা উদ্ধৃতি উদ্ধৃতি আলোচনা TimedText TimedText talk মডিউল মডিউল আলাপ ইভেন্ট ইভেন্ট আলোচনা 0 2386 514133 302271 2026-07-25T17:54:41Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309268-এর সাথে সংযোগ তৈরি করছি 514133 wikitext text/x-wiki {{Bengali character info}} ==ভূমিকা== === উচ্চারণ === */মুর্ধোন্নো শ/ * {{অডিও|bn|LL-Q9610 (ben)-Titodutta-ষ.wav|অডিও}} === বর্ণনা === বাংলা বর্ণমালার ত্রিংশ বা ৩০তম ব্যঞ্জনবর্ণ এবং মূর্ধা থেকে উচ্চার্য অঘোষ অল্পপ্রাণ উষ্ম ধ্বনির দ্যোতক। (বাংলায় শ-এর মতো উচ্চারিত।) ==== ব্যবহার ==== ====বৈশিষ্ট্য==== অঘোষ অল্পপ্রাণ উষ্ম ধ্বনি। [[বিষয়শ্রেণী:বাংলা ব্যঞ্জনবর্ণ]] {{লে|L309268|না}} o8jlj0w9i8p9t4auerb336j3qg2itdg 514134 514133 2026-07-25T17:54:49Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309267-এর সাথে সংযোগ তৈরি করছি 514134 wikitext text/x-wiki {{Bengali character info}} ==ভূমিকা== === উচ্চারণ === */মুর্ধোন্নো শ/ * {{অডিও|bn|LL-Q9610 (ben)-Titodutta-ষ.wav|অডিও}} === বর্ণনা === বাংলা বর্ণমালার ত্রিংশ বা ৩০তম ব্যঞ্জনবর্ণ এবং মূর্ধা থেকে উচ্চার্য অঘোষ অল্পপ্রাণ উষ্ম ধ্বনির দ্যোতক। (বাংলায় শ-এর মতো উচ্চারিত।) ==== ব্যবহার ==== ====বৈশিষ্ট্য==== অঘোষ অল্পপ্রাণ উষ্ম ধ্বনি। [[বিষয়শ্রেণী:বাংলা ব্যঞ্জনবর্ণ]] {{লে|L309268|না}} {{লে|L309267|না}} 7rwz91gkdiam8rkk6yzhw6xlmj2c4b4 হাতি 0 3224 514107 502024 2026-07-25T17:30:29Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309068-এর সাথে সংযোগ তৈরি করছি 514107 wikitext text/x-wiki =={{langname|bn}}== ===বিশেষ্য=== {{বিশেষ্য|bn}} [[চিত্র:Elephant near ndutu.jpg|thumb|right|200px|''হাতি'']] # বৃহত্তম স্থলচর স্তন্যপায়ী। # প্রোবোসিডিয়া (শূণ্ডধারী) বর্গের (order proboscidea) একমাত্র [[জীবিত]] বংশধর (জাতভাই ছিল ম্যামথ ইত্যাদি যারা বিলুপ্ত)। # শুঁড়কে হাত(হস্ত/কর)-এর মত ব্যবহার করতে পারার জন্য এর নাম "হাতি"("হস্তী"/"করী")। ====সমার্থক শব্দ==== # গজ === অনুবাদ === {{অনুবাদ-শীর্ষ}} * [[ইংরেজি]]: [[elephant]] * [[তামিল]]: [[யானை]] (উচ্চারণ: যানৈ) {{অনুবাদ-নীচ}} {{লে|L309068|না}} [[বিষয়শ্রেণী:bn:প্রাণিবিজ্ঞান]] [[বিষয়শ্রেণী:২-অক্ষর বিশিষ্ট বাংলা শব্দ]] {{লে|L1421699}} [[বিষয়শ্রেণী:জীববিজ্ঞান]] [[বিষয়শ্রেণী:বিজ্ঞান]] sd8ik1sfshid30c3e28aio06a7g0mfe খুলনা 0 6131 514029 148133 2026-07-25T14:09:11Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308665-এর সাথে সংযোগ তৈরি করছি 514029 wikitext text/x-wiki {{লে|L308665}} d9d9uk1i47r9ul7l0raris83tjzdzqb হ্যাংলামি 0 7004 514094 148604 2026-07-25T16:58:24Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309018-এর সাথে সংযোগ তৈরি করছি 514094 wikitext text/x-wiki {{লে|L309018|meaning= #হীন ভাবে লোভ প্রকাশ {{ux|bn|এতো হ্যাংলামি করিস কেন রে?}} }} ==সম্পর্কিত== [[হ্যাংলা]] tfqvtz69ges3ry4ska3qzo967lecufc হ্যাঁচকা 0 7038 514096 136863 2026-07-25T16:58:46Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309020-এর সাথে সংযোগ তৈরি করছি 514096 wikitext text/x-wiki {{লে|L309020}} 5gxr66vhmp96jfm8w4p8tcjmbsx1mch ষণ্ড 0 7879 514123 148726 2026-07-25T17:50:36Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309120-এর সাথে সংযোগ তৈরি করছি 514123 wikitext text/x-wiki {{লে|L309120}} === বিশেষ্য === {{বিশেষ্য|bn}} #[[ষাঁড়]]; # স্বাধীনভাবে বিচরণকারী বৃষ; ধর্ম্মের ষাঁড়; # ষণ্ড; নপুংসক; # যোনিরোগবিশেষ; # দৈত্যগুরু শুক্রাচার্য্যের পুত্র; প্রহ্লাদের শিক্ষাগুরু। [[বিষয়শ্রেণী:২-অক্ষর বিশিষ্ট বাংলা শব্দ]] atjx9eawp1xpuhpyqnwzwnozn102qaw ষত্ববিধান 0 7889 514121 88293 2026-07-25T17:49:07Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309109-এর সাথে সংযোগ তৈরি করছি 514121 wikitext text/x-wiki {{লে|L309109|meaning= [[স]] স্থলে [[ষ]] হওয়ার ব্যাকরণ নির্দ্দিষ্ট নিয়ম।}} n1uylz5g56wlxu1k38ekbk7m7ann6il ভোলা 0 9010 514042 87659 2026-07-25T14:44:01Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308687-এর সাথে সংযোগ তৈরি করছি 514042 wikitext text/x-wiki {{লে|L308687}} 233a337buywixio63l6vxtei2kd957c বগুড়া 0 9192 514053 148382 2026-07-25T14:53:22Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308683-এর সাথে সংযোগ তৈরি করছি 514053 wikitext text/x-wiki {{লে|L308683}} 5931wl3cstnet5bd3ie3tnaov0gl1jc পাবনা 0 9194 514038 447042 2026-07-25T14:18:57Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308681-এর সাথে সংযোগ তৈরি করছি 514038 wikitext text/x-wiki {{লে|L308681}} jv3mjeqotgn47mk9s51myse3wt1xuz5 কুমিল্লা 0 9195 514028 148109 2026-07-25T14:08:29Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308672-এর সাথে সংযোগ তৈরি করছি 514028 wikitext text/x-wiki {{লে|L308672}} b1rqvitgvnejb9xha4zmdyva0prc05s ঔষধীয় 0 14766 514145 295287 2026-07-25T17:58:05Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309286-এর সাথে সংযোগ তৈরি করছি 514145 wikitext text/x-wiki {{লে|L309286|ব্যুৎপত্তি= * [[সংস্কৃত]] জাত। }} 5rq3mrq0hgaaj9smy7t9kj95pms6j8w ঔষধালয় 0 14768 514146 446101 2026-07-25T18:02:08Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309287-এর সাথে সংযোগ তৈরি করছি 514146 wikitext text/x-wiki {{লে|L309287|ব্যুৎপত্তি= সংস্কৃত [[औषधालय]] থেকে। }} bj8j8hwa9udnnfsllpemslhbcx7kzfu ষ্ঠীবন 0 15218 514113 88350 2026-07-25T17:32:38Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309077-এর সাথে সংযোগ তৈরি করছি 514113 wikitext text/x-wiki {{লে|L309077}} |ব্যুৎপত্তি= [[সংস্কৃত]] “√ ষ্ঠিব্”-এর সাথে ‘অন’ যুক্ত হয়ে।|meaning= # [[থুতু]]}} 7199dhc6vn5wxot0o100d4u5axyux1u 514115 514113 2026-07-25T17:32:56Z Redmin 6857 514115 wikitext text/x-wiki {{লে|L309077 |ব্যুৎপত্তি= [[সংস্কৃত]] “√ ষ্ঠিব্”-এর সাথে ‘অন’ যুক্ত হয়ে।|meaning= # [[থুতু]]}} f5tgt599n5kddj1rznchsxzlb14zv7u উইকিঅভিধান:প্রশাসকদের আলোচনাসভা 4 25943 514063 512365 2026-07-25T16:19:21Z Shadabgdg 14931 /* Invitation to Participate in Kerala Culture Month 2026 */ নতুন অনুচ্ছেদ 514063 wikitext text/x-wiki #পুনর্নির্দেশ [[উইকিঅভিধান:আলোচনাসভা]] == WikiConference India 2026: Call for Submissions and Self-funded applications == প্রিয় সম্প্রদায় সদস্যবৃন্দ, আমরা আনন্দের সাথে জানাচ্ছি যে, ‘উইকিকনফারেন্স ইন্ডিয়া ২০২৬’-এর জন্য নিজস্ব অর্থায়নে নিবন্ধন এবং প্রস্তাবনা জমা দেওয়ার প্রক্রিয়া এখন শুরু হয়েছে। কেরালার কোচিতে, ২০২৬ সালের ৪ঠা থেকে ৬ই সেপ্টেম্বর উইকিকনফারেন্স ইন্ডিয়া ২০২৬ অনুষ্ঠিত হবে। এই সম্মেলনে ভারত ও দক্ষিণ এশিয়া জুড়ে ছড়িয়ে থাকা উইকিমিডিয়ান, কমিউনিটি লিডার, ডেভেলপার, গবেষক এবং উন্মুক্ত জ্ঞানের অনুরাগীরা পারস্পরিক সংযোগ স্থাপন করা, যৌথভাবে কাজ করা ও অভিজ্ঞতা বিনিময়ের উদ্দেশ্যে একত্রিত হবেন। উইকিকনফারেন্স ইন্ডিয়া ২০২৬-এর মূল প্রতিপাদ্য হলো: “জ্ঞানের উন্মুক্ত ভাণ্ডারের নতুন রূপায়ন: ক্রমবিকাশমান উইকিমিডিয়া ইকোসিস্টেমে সম্প্রদায়ের নেতৃত্ব।” উইকিমিডিয়া আন্দোলন যখন কৃত্রিম বুদ্ধিমত্তা এবং জ্ঞান সৃষ্টির নতুন মাধ্যমগুলির উত্থানসহ দ্রুত প্রযুক্তিগত পরিবর্তনের মধ্যে দিয়ে যাচ্ছে, তখন এই সম্মেলনের লক্ষ্য হলো—কমিউনিটি নেতৃত্ব, জ্ঞানের সমতা, আঞ্চলিক ভাষা, মুক্ত জ্ঞান এবং ভারত ও দক্ষিণ এশিয়ায় উইকিমিডিয়ার ভবিষ্যৎ নিয়ে আলোচনার সুযোগ তৈরি করা। স্ব-অর্থায়িত নিবন্ধন স্ব-অর্থায়িত নিবন্ধনের আবেদন প্রক্রিয়াটি এখন Pretix-এ চালু হয়েছে। নিবন্ধন ফর্ম: [৪] বিস্তারিত তথ্য এবং যোগ্যতার শর্তাবলি: [৫] প্রস্তাবনা জমা দেওয়া প্রস্তাবনা জমা দেওয়ার প্রক্রিয়াটি এখন Eventyay-তে চালু হয়েছে। আমরা কর্মশালা, আলোচনা, প্যানেল সেশন, অংশগ্রহণমূলক সেশন, লাইটনিং টক এবং পোস্টার উপস্থাপনার জন্য প্রস্তাবনা আহ্বান করছি। আপনি একজন অভিজ্ঞ অবদানকারী হোন কিংবা কমিউনিটির নতুন সদস্য—আপনার ধারণা, অভিজ্ঞতা ও শিক্ষা এই সম্মেলনের কর্মসূচিকে রূপ দিতে এবং এই আন্দোলনের গুরুত্বপূর্ণ আলোচনাগুলোতে অবদান রাখতে সহায়তা করতে পারে। বিস্তারিত তথ্য ও নির্দেশিকা: [৬] জমা দেওয়ার শেষ সময়সীমা: [১৫ই জুলাই ২০২৬] অংশগ্রহণের বিস্তারিত তথ্য, সময়সূচি, সম্মেলনের সর্বশেষ হালনাগাদ এবং জমা দেওয়ার নির্দেশনাসহ ‘উইকিকনফারেন্স ইন্ডিয়া ২০২৬’ বিষয়ক পূর্ণাঙ্গ তথ্যের জন্য অনুগ্রহ করে আনুষ্ঠানিক ঘোষণাটি দেখুন: বিস্তারিত ঘোষণা: [৭] আমরা সম্প্রদায় সদস্যদের উৎসাহিত করছি নিবন্ধন করতে, প্রস্তাবনা জমা দিতে এবং তাঁদের পরিচিত মহলে এই ঘোষণাটি ছড়িয়ে দিতে। শুভেচ্ছান্তে, উইকিকনফারেন্স ইন্ডিয়া ২০২৬ আয়োজনকারী দল [1] https://meta.wikimedia.org/wiki/WikiConference_India_2026 [2] https://meta.wikimedia.org/wiki/WikiConference_India_2026/Registration [3] https://pretix.eu/wikimedia-events/WCI2026/ [4] https://meta.wikimedia.org/wiki/WikiConference_India_2026/Programme/Submissions [5] https://diff.wikimedia.org/2026/06/26/shape-the-future-call-for-submissions-open-for-wikiconference-india-2026/ [[ব্যবহারকারী:Amrit Sufi|Amrit Sufi]] ([[ব্যবহারকারী আলাপ:Amrit Sufi|আলাপ]]) ১০:১২, ৩০ জুন ২০২৬ (ইউটিসি) == Invitation to Participate in Kerala Culture Month 2026 == Dear Wikimedia Contributors, We are excited to announce '''[https://meta.wikimedia.org/wiki/Kerala_Culture_Month_2026 Kerala Culture Month 2026]''', a collaborative campaign launched in conjunction with '''[https://meta.wikimedia.org/wiki/WikiConference_India_2026 WikiConference India 2026]'''. This initiative aims to expand and enhance content about Kerala across all Wikimedia projects, creating a comprehensive, open-access knowledge base. '''Campaign Focus:''' * Expand Wikipedia articles about Kerala in multiple languages * Improve content quality with citations, images, and comprehensive information * Populate Wikimedia Commons with freely licensed Kerala media * Enrich Wikidata with structured information about Kerala-related topics We invite you to contribute by writing new articles, enhancing existing ones, uploading media, or organizing data on Wikidata. Whether you're an experienced editor or new to Wikimedia, your participation matters. For more information and to get involved, visit the campaign page: https://meta.wikimedia.org/wiki/Kerala_Culture_Month_2026 on your preferred Wikimedia project. Best regards, ''Communications Team, WCI 2026'' [[ব্যবহারকারী:Shadabgdg|Shadabgdg]] ([[ব্যবহারকারী আলাপ:Shadabgdg|আলাপ]]) ১৬:১৯, ২৫ জুলাই ২০২৬ (ইউটিসি) l7k6k267mz00twj6xilfeae7yd8h78x মডিউল:আভিধানিক উপাত্ত 828 50158 514026 513941 2026-07-25T12:29:00Z Redmin 6857 514026 Scribunto text/plain local p = {} local i18n = require('মডিউল:আভিধানিক উপাত্ত/i18n') local references = require('মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ').format local getArgs = require('Module:Arguments').getArgs local wb = mw.wikibase local ustring = mw.ustring local html = mw.html local mw_lang = mw.language local entity_cache = {} local reference_cache = {} local forms local lang_code local lex_cat local matched_lemma local lang_id local function wrapStringInWikilinks(str) local exceptions = i18n.nolinks local result = str:gsub('(%S+)', function(token) local word, trailing_char = token:match('^(.-)([;,.:!?]*)$') local wrapped = word:gsub('[^(-/]+', function(part) if exceptions[part] then return part else return '[[' .. mw.text.nowiki(part) .. '#' .. i18n['content_lang_name'] .. '|' .. mw.text.nowiki(part) .. ']]' end end) return wrapped .. trailing_char end) return result end local function serializeTable(val, name, skipnewlines, depth) -- https://stackoverflow.com/a/6081639 skipnewlines = skipnewlines or false depth = depth or 0 local tmp = string.rep(" ", depth) if name then tmp = tmp .. name .. " = " end if type(val) == "table" then tmp = tmp .. "{" .. (not skipnewlines and "\n" or "") for k, v in pairs(val) do tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "") end tmp = tmp .. string.rep(" ", depth) .. "}" elseif type(val) == "number" then tmp = tmp .. tostring(val) elseif type(val) == "string" then tmp = tmp .. string.format("%q", val) elseif type(val) == "boolean" then tmp = tmp .. (val and "true" or "false") else tmp = tmp .. "\"[inserializable datatype:" .. type(val) .. "]\"" end return tmp end -- Use this to safely expand templates when you are not sure that they exist. local function safeExpand(frame, title, args) local _, result = pcall(function() return frame:expandTemplate{ title = title, args = args } end) if result:find('does not exist') then -- expandTemplate{} doesn't seem to throw any error that can be handled with pcall() so string search is the only viable option. return nil end return result end local function checkTitleCodePointInRange(title, start_point, end_point) return ustring.find( title, '[' ..ustring.char(start_point) .. '-' .. ustring.char(end_point) .. ']' ) end local function getLanguageForCategories(title) -- বিশেষ ভাষার জন্য if lang_id == 'Q11051' then -- হিন্দি/উর্দু if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- উর্দু lang_id = 'Q11051ur' elseif checkTitleCodePointInRange(title, 0x0900, 0x097f) then -- হিন্দি lang_id = 'Q11051hi' end elseif lang_id == 'Q58635' then -- পাঞ্জাবি if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- শাহমুখী lang_id = 'Q58635pnb' elseif checkTitleCodePointInRange(title, 0x0a00, 0x0a7f) then -- গুরুমুখী lang_id = 'Q58635pa' end elseif lang_id == 'Q56356571' then -- নয়া ফার্সি ভাষা if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- ফার্সি (ইরান/আফগানিস্তান) lang_id = 'Q56356571fa' elseif checkTitleCodePointInRange(title, 0x0400, 0x04ff) then -- তাজিক lang_id = 'Q56356571tg' end elseif lang_id == 'Q256' then if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then lang_id = 'Q56356571ota' else lang_id = 'Q56356571tr' end end return lang_id end local function getEntity(id) if entity_cache[id] == nil then entity_cache[id] = wb.getEntity(id) or error('Invalid ID provided: ' .. id) end return entity_cache[id] ~= false and entity_cache[id] or nil end -- Use this function to get the label of an item even if that item does not have any label in the wiki's content language or English. local function getLabel(id) if id == 'Q11051hi' then return 'হিন্দি' elseif id == 'Q11051ur' then return 'উর্দু' elseif id == 'Q56356571fa' then return 'ফার্সি' elseif id == 'Q56356571tg' then return 'তাজিক' elseif id == 'Q58635pa' or id == 'Q58635pnb' then return 'পাঞ্জাবি' elseif id == 'Q256tr' then return 'তুর্কি' elseif id == 'Q256ota' then return 'উসমানীয় তুর্কি' end local label = wb.getLabel(id) if label then return label end local labels = getEntity(id).labels if not labels then return id end for _, v in pairs(labels) do if v and v.value then return v.value end end end local function getReference(id, reference) local out_id = nil local url_value if reference_cache[id] == nil then local ref_text = references(reference, wb, mw_lang, i18n['content_lang_code'], i18n['wikipedia']) if reference.snaks then if reference.snaks['P248'] then for _, snak in pairs(reference.snaks['P248']) do if snak.datavalue and snak.datavalue.value.id == 'Q428' then -- কুরআন ref_text = ustring.gsub(ref_text, 'নামক অনুচ্ছেদ', 'নং আয়াত') break end end end if reference.snaks['P854'] then local snak = reference.snaks['P854'][1] if snak.datavalue then url_value = snak.datavalue.value end end end if url_value then ref_text = ref_text .. ', [' .. url_value .. ' সংযোগ]' end reference_cache[id] = ref_text else out_id = id end return {out_id, reference_cache[id]} end -- Returns the Wiktionary language code for a lexeme entity or nil, in the latter case, getLemmas() can be relied on to fetch the language code by stripping extraneous bits from the 'language' string as necessary local function getLexemeLanguageCode(lexeme) local lang_item_id = lexeme:getLanguage() local lang_entity = getEntity(lang_item_id) for i, statement_property in ipairs({'P305','P424', 'P220'}) do -- আইইটিএফ ভাষা ট্যাগ, উইকিমিডিয়া ভাষা কোড, আইএসও ৬৩৯-৩ local statements = lang_entity:getBestStatements(statement_property) if statements[1] then local code = statements[1].mainsnak.datavalue.value if code == 'hr' then return 'sh' elseif code == 'pan' then return 'pa' else return code end end end end local function getLexemeLanguageCodeForEtymology(lexeme) local lang_item_id = lexeme:getLanguage() if lang_item_id == 'Q56356571' then return 'fa' -- @TODO: Implement a proper solution end return getLexemeLanguageCode(lexeme) end -- Return the first form of the lexeme which has exactly the given grammatical feature. local function formWithSingleGrammaticalFeature( item_id ) for i = 1, #forms do local grammaticalFeatures = forms[i]:getGrammaticalFeatures() if #grammaticalFeatures == 1 and grammaticalFeatures[1] == item_id then return forms[i] end end return nil end local function getArticleLinkTemplate(frame, stmt_value) local template = '' local sitelink = getEntity(stmt_value):getSitelink(i18n['wikipedia']) if sitelink then template = frame:expandTemplate{ title=i18n['template_wikipedia'], args={sitelink} } end return template end local function getArticleLinks(frame, sense ) local article_links = '' for i, stmt in pairs(sense:getAllStatements('P5137')) do -- এই অর্থের জন্য আইটেম article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id) end for i, stmt in pairs(sense:getAllStatements('P9970')) do -- এই অর্থের জন্য বিধেয় article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id) end return article_links end -- @TODO: Generalise local function expandTemplateForProperty(frame, object, property, template) local lemmas = {} local n = 0 for _, stmt in pairs(object:getAllStatements(property)) do local lex = wb.lexeme.splitLexemeId(stmt.mainsnak.datavalue.value.id) if lex then lex = getEntity(lex) n = n + 1 lemmas[n] = lex:getLemma(lang_code) end end if not lang_code or n == 0 then return '' end -- Build args: first lang_code, then lemmas local args = {lang_code} for i = 1, n do args[#args + 1] = lemmas[i] end return frame:expandTemplate{ title = template, args = args } end local function getExternalLinks( entity ) -- T418639 local external_links = {} if entity.claims == nil then return external_links end local formatter_urls = require('মডিউল:আভিধানিক উপাত্ত/urls').formatter_urls for property_id, statements in pairs(entity.claims) do local formatter_url = formatter_urls[property_id] if formatter_url then local property_source = wb.getBestStatements(property_id, 'P9073') local source_name if next(property_source) then source_name = getLabel(property_source[1].mainsnak.datavalue.value.id) or property_source[1].mainsnak.datavalue.value.id else source_name = getLabel(property_id) or property_id end for i = 1, #statements do local stmt = statements[i] if stmt.mainsnak.datavalue then local formatted_link = ustring.gsub( ustring.gsub(formatter_url, '$1', stmt.mainsnak.datavalue.value), ' ', '+' ) table.insert(external_links, '[' .. formatted_link .. ' ' .. source_name .. ']') end end end end return external_links end p.getExternalLinks = getExternalLinks -- রেখে দিন যাতে ডিবাগিং সম্ভব হয় local function heading_level(text, level) return '<h' .. level .. '>' .. ' ' .. text .. ' ' .. '</h' .. level .. '>' end local function termSpan( term ) local text = term[1] local lang = term[2] local dir = mw_lang.new( lang ):getDir() local span = html.create( 'span' ) span:attr( 'lang', lang ) :attr( 'dir', dir ) :wikitext( text ) return tostring( span ) end local function getLemmata( current_lexeme ) local lemma_string = '' for i, rep in pairs(current_lexeme:getLemmas()) do if lemma_string == '' then lemma_string = termSpan(rep) else lemma_string = lemma_string .. '/' .. termSpan(rep) end end return lemma_string end local function getLinkedLemmata(lexeme, frame) local lemma_string = '' local lang for i, rep in pairs(lexeme:getLemmas()) do lang = getLexemeLanguageCode(lexeme) if lang == nil then lang = string.gsub(rep[2], '-%S+', '') end if lemma_string == '' then lemma_string = frame:expandTemplate{title='link', args={lang, rep[1]}} else lemma_string = lemma_string .. '/' .. frame:expandTemplate{title='link', args={lang, rep[1]}} end end return lemma_string end local function getExamples( current_lexeme, sense_id, references_seen ) local examples = html.create('dl') local example_text, example_lang, example_form, example_str for i, stmt in pairs(current_lexeme:getAllStatements('P5831')) do -- ব্যবহারের উদাহরণ if stmt.qualifiers and stmt.qualifiers['P6072'] and stmt.qualifiers['P6072'][1].datavalue.value.id == sense_id then -- বিষয়ে লেক্সিমের অর্থ example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>') example_lang = stmt.mainsnak.datavalue.value.language local example_form_strs = {} if stmt.qualifiers['P1810'] then table.insert(example_form_strs, stmt.qualifiers['P1810'][1].datavalue.value) elseif stmt.qualifiers['P5830'] then example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ for _, rep in pairs(example_form:getRepresentations()) do table.insert(example_form_strs, rep[1]) end end for _, example_form_str in pairs(example_form_strs) do local new_example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''") if new_example_text ~= example_text then example_str = termSpan({new_example_text, example_lang}) break end example_text = new_example_text end if example_str == nil then example_str = termSpan({example_text, example_lang}) end local reference_text = '' if stmt.references then for j, reference in pairs(stmt.references) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. got_reference[2] end end if example_str then examples:tag('dd'):wikitext("''" .. example_str .. "''") if reference_text ~= '' then examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text) end end end end for i, stmt in pairs(wb.getAllStatements(sense_id, 'P5831')) do -- ব্যবহারের উদাহরণ example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>') example_lang = stmt.mainsnak.datavalue.value.language local example_form_str = nil if stmt.qualifiers then if stmt.qualifiers['P5830'] then example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- subject lexeme form end if stmt.qualifiers['P1810'] then example_form_str = stmt.qualifiers['P1810'][1].datavalue.value end end if example_form and example_form_str == nil then example_form_str = example_form:getRepresentation(i18n['content_lang_code']) end if example_form and example_form_str == nil then example_form_str = example_form:getRepresentations()[1][1] end if example_form_str then example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''") end example_str = termSpan({example_text, example_lang}) local reference_text = '' if stmt.references then for j, reference in pairs(stmt.references) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. got_reference[2] end end if example_str then examples:tag('dd'):wikitext("''" .. example_str .. "''") if reference_text ~= '' then examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text) end end end return { tostring(examples) , references_seen } end -- This calls frame:preprocess() instead of :callParserFunction() because the latter does not work for Wikifunctions function calls yet (see https://www.wikifunctions.org/wiki/Wikifunctions:Embedded_function_calls). local function callWikifunctionsFunction(args, frame) return frame:preprocess('{{#function:' .. args .. '}}') .. i18n.tocatlink('উইকিফাংশন্স-এর ফাংশন ব্যবহার করা পাতা') end local function getOneValueForProperty(object, property) local val local stmts = object:getAllStatements(property) if #stmts ~= 0 then val = stmts[1].mainsnak.datavalue.value end return val end local function getLastValueForProperty(object, property) local val, count local stmts = object:getAllStatements(property) for i, j in ipairs(stmts) do count = i end if count then val = stmts[count].mainsnak.datavalue.value end return val end local function getTranslations(frame, senses) if #senses == 0 then return nil end local all_translations = {} local wmlang, item, label for _, sense in pairs(senses) do local translation_set = {} local gloss = sense:getGloss(i18n['content_lang_code']) if lex_cat ~= 'Q34698' then item = getOneValueForProperty(sense, 'P5137') if item then item = item.id label = getLabel(item) end end if item then wmlang = require("Module:wikimedia languages") end for _, stmt in pairs(sense:getAllStatements('P5972')) do local translation = stmt.mainsnak.datavalue.value.id local lexeme_id = wb.lexeme.splitLexemeId(translation) local trans_lexeme = getEntity(lexeme_id) local lang_name = getLabel(trans_lexeme:getLanguage()) local trans_code = getLexemeLanguageCode(trans_lexeme) if trans_code then table.insert(translation_set, lang_name .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={trans_code, getLinkedLemmata(trans_lexeme, frame) .. '<br/>'}}) else table.insert(translation_set, lang_name .. ': ' .. getLinkedLemmata(trans_lexeme, frame) .. '<br/>' .. i18n.trans_category(lang_name)) end end if item then for _, v in pairs(getEntity(item).labels) do if string.find(v.language, '-') == nil then -- @TODO: Implement deduplication of translation and get rid of this check local lang = wmlang.getByCode(v.language) local wikt = lang:getWiktionaryLanguage() if wikt:hasType('regular') then table.insert(translation_set, getLabel(wikt:getWikidataItem()) .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={wikt:getCode(), v.value .. '<br/>'}}) end end end end if #translation_set > 0 then local block = frame:expandTemplate{ title = i18n['template_trans-top'], args = { gloss or label } } block = block .. table.concat(translation_set, '\n') .. frame:expandTemplate{ title = i18n['template_trans-bottom'] } table.insert(all_translations, block) end end if #all_translations == 0 then return nil end return heading_level(i18n['heading_translation'], 4) .. ' \n' .. table.concat(all_translations, '\n') end local createicon = function(langcode, entityID, propertyID) langcode = langcode or "" propertyID = propertyID or "" local icon = "&nbsp;<span class='penicon autoconfirmed-show'>[[" -- "&nbsp;<span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge .. "File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt=" .. i18n['edit_wikidata'] .. "|link=https://www.wikidata.org/entity/" .. entityID if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end if propertyID ~= "" then icon = icon .. "#" .. propertyID end icon = icon .. "|" .. i18n['edit_wikidata'] .. "]]</span>" return icon end local function getMeanings(frame, args, current_lexeme, senses, references_seen, language_name) if #senses == 0 then return {createicon(i18n['content_lang_code'], current_lexeme:getId()) .. "''" .. i18n['text_category_rfdef'] .. "''" .. i18n.tocatlink(i18n['category_rfdef']), references_seen} end local meanings = html.create( 'ol' ) local idlinkset = {} for i, sense in pairs(senses) do local item_label_gloss_parts = {} local gloss_text_parts = {} local main_gloss_text = frame:expandTemplate{ title=i18n['template_anchor'], args={sense:getId()} } local specifiers = {} for k, property_id in ipairs({'P6084', 'P6191', 'P9488'}) do -- অবস্থান যেখানে শব্দার্থ ব্যবহৃত, যে রীতিতে শব্দার্থ ব্যবহৃত হয়, যে ক্ষেত্রে ব্যবহৃত for _, stmt in pairs(sense:getAllStatements(property_id)) do local stmt_value = stmt.mainsnak.datavalue.value.id local reference_text = '' local refs = stmt.references if refs then for j, reference in pairs(refs) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. frame:extensionTag('ref', got_reference[2]) end end local val = getLabel(stmt_value) table.insert(specifiers, val .. reference_text) if property_id == 'P9488' and lang_code ~= nil then table.insert(item_label_gloss_parts, i18n.tocatlink(lang_code .. ':' .. val)) end end end if #specifiers > 0 then main_gloss_text = main_gloss_text .. "(''" .. table.concat(specifiers, "'', ''") .. "'') " end local gloss = sense:getGloss( i18n['content_lang_code'] ) if gloss then main_gloss_text = main_gloss_text .. wrapStringInWikilinks(gloss) if gloss:match('^প্রদত্ত%s*(%S-)%s*নাম$') then -- given names main_gloss_text = main_gloss_text .. i18n.tocatlink(language_name .. ' ' .. i18n['category_given_names']) end else local other_gloss_text, other_gloss_lang, item_label local stmt_value = getOneValueForProperty(sense, 'P5137') if stmt_value then stmt_value = stmt_value.id item_label = getLabel(stmt_value) end if item_label then table.insert(item_label_gloss_parts, '[[:d:' .. stmt_value .. '|' .. item_label .. ']]') end if #item_label_gloss_parts > 0 then other_gloss_text = table.concat(item_label_gloss_parts, '; ') end if other_gloss_text == nil then for _, fallback_lang in ipairs(mw_lang.getFallbacksFor( i18n['content_lang_code'] )) do if sense:getGloss( fallback_lang ) then other_gloss_text, other_gloss_lang = sense:getGloss( fallback_lang ) end end if other_gloss_lang == nil then local glosses = sense:getGlosses() for _, gloss in pairs(glosses) do other_gloss_text = gloss[1] other_gloss_lang = gloss[2] break end end main_gloss_text = main_gloss_text .. other_gloss_text .. "<sup><em>" .. mw_lang.fetchLanguageName(other_gloss_lang, i18n['content_lang_code']) .. "</em></sup>" else main_gloss_text = main_gloss_text .. "''" .. other_gloss_text .. "''" end main_gloss_text = main_gloss_text .. i18n.tocatlink(i18n['category_rfdef_equivalent']) end local synonym = expandTemplateForProperty(frame, sense, 'P5973', i18n['template_synonym']) if synonym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. synonym end local antonym = expandTemplateForProperty(frame, sense, 'P5974', i18n['template_antonym']) if antonym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. antonym end local hypernym = expandTemplateForProperty(frame, sense, 'P6593', i18n['template_hypernym']) if hypernym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. hypernym end if lex_cat == 'Q1084' or lex_cat == 'Q147276' then -- noun or proper noun local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-noun']) main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym elseif lex_cat == 'Q34698' then local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-adj']) main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym end table.insert(gloss_text_parts, main_gloss_text .. createicon(i18n['content_lang_code'], sense:getId())) for _, stmt in pairs(sense:getAllStatements('P8394')) do -- টিপ্পনীর উদ্ধৃতি local gloss_quote = termSpan({stmt.mainsnak.datavalue.value.text, stmt.mainsnak.datavalue.value.language}) if stmt.references[1] then local got_reference = getReference ( stmt.references[1].hash, stmt.references[1] ) gloss_quote = '"' .. gloss_quote .. '" ' .. got_reference[2] end table.insert(references_seen, stmt.references[1].hash) table.insert(gloss_text_parts, frame:extensionTag('ref', gloss_quote)) end for _, stmt in pairs(sense:getAllStatements('P1343')) do -- বর্ণিত উৎস -- TODO: do away with making fake reference objects local fake_reference = { ['snaks'] = {} } fake_reference.snaks['P248'] = { [1] = stmt.mainsnak } local qualifiers_order = stmt['qualifiers-order'] if qualifiers_order then for _, k in ipairs(qualifiers_order) do fake_reference.snaks[k] = stmt.qualifiers[k] end end fake_reference.hash = mw.hash.hashValue('sha3-512', serializeTable(fake_reference)) table.insert(references_seen, fake_reference.hash) local got_reference = getReference(fake_reference.hash, fake_reference) if got_reference[1] == nil then table.insert(gloss_text_parts, frame:extensionTag('ref', got_reference[2], {name = fake_reference.hash})) else table.insert(gloss_text_parts, frame:extensionTag{name = 'ref', content='', args = {name = got_reference[1]}}) end end local first_sense_image = '' local sense_images = sense:getAllStatements('P18') if next(sense_images) then first_sense_image = sense_images[1].mainsnak.datavalue.value end if first_sense_image ~= '' then table.insert(gloss_text_parts, '[[File:' .. first_sense_image .. "|thumb|'''" .. getLemmata(current_lexeme) .. "'''—" .. main_gloss_text .. ']]') end local idlinks = getExternalLinks(sense) if #idlinks > 0 then local idlinktext = '<small>(' for _, idlink in pairs(idlinks) do idlinktext = idlinktext .. idlink .. '\n' end idlinktext = idlinktext .. ')</small>' table.insert(gloss_text_parts, idlinktext) table.insert(idlinkset, idlinks) end local externallinks = getArticleLinks(frame, sense) if externallinks ~= '' then table.insert(gloss_text_parts, externallinks) end local new_notes = {} local sense_keys = { sense:getId(), string.sub(sense:getId(), string.find(sense:getId(), '-')+1) } for _, v in ipairs(sense_keys) do if args[v] then table.insert(new_notes, args[v]) end end if #new_notes > 0 then for _, v in ipairs(new_notes) do if i == 1 then table.insert(gloss_text_parts, '<br/>' .. v) else table.insert(gloss_text_parts, v) end end end local examples examples, references_seen = unpack(getExamples( current_lexeme, sense:getId(), references_seen )) local gloss_text = table.concat(gloss_text_parts, '\n') meanings:tag('li'):wikitext(gloss_text):wikitext(examples) end return {meanings, references_seen, idlinkset} end local function getPronunciationBaseForm() local base_form = nil -- (!) অন্য ভাষার শব্দের যদি অন্য রকম মূল ফর্ম থাকে সেগুলো এখানে নতুন if বিবৃতি দিয়ে যোগ করা যায়। if lang_code == 'bn' then if lex_cat == 'Q1084' then -- বিশেষ্য base_form = formWithSingleGrammaticalFeature( 'Q131105' ) -- কর্তৃকারক elseif lex_cat == 'Q24905' then -- ক্রিয়া base_form = formWithSingleGrammaticalFeature( 'Q1350145' ) -- ক্রিয়া বিশেষ্য end end if base_form == nil then for i, form in pairs(forms) do base_form = form break end end return base_form end local function getCombines( current_lexeme, frame ) local combines = '' local index_mappings = {} for i, stmt in pairs(current_lexeme:getAllStatements('P5238')) do if stmt.qualifiers and stmt.qualifiers['P1545'] then -- ক্রম local current_index = tonumber(stmt.qualifiers['P1545'][1].datavalue.value) index_mappings[current_index] = stmt end end if #index_mappings ~= 0 then for i, stmt in ipairs(index_mappings) do if stmt.mainsnak.datavalue then local part_lexeme_id = stmt.mainsnak.datavalue.value.id local part_lexeme = getEntity(part_lexeme_id) local current_substring = getLinkedLemmata(part_lexeme, frame) local part_etymology = getEtymology(part_lexeme, frame, 'partial') if part_etymology ~= '' and part_etymology then current_substring = current_substring .. ' (← ' .. part_etymology .. ')' end if combines == '' then combines = current_substring else -- @TODO: This should use the 'affix' and 'compound' templates instead. combines = combines .. ' + ' .. current_substring end end end end return combines end function getRoots(lexeme, frame) local stmts = lexeme:getAllStatements('P5920') if #stmts == 0 then return '', '', '' end local root_lexeme = getEntity(stmts[1].mainsnak.datavalue.value.id) return getLexemeLanguageCode(root_lexeme), '√' .. getLinkedLemmata(root_lexeme, frame), root_lexeme:getLemma('ar') end function getEtymology( current_lexeme, frame, mode ) -- @TODO: Fix the etymology chains that are not possible to render local etymology = '' local current_combines = getCombines(current_lexeme, frame) local root_lang, current_roots, root_str = getRoots(current_lexeme, frame) if mode ~= 'partial' and root_str then --frame:expandTemplate{title=i18n['template_root'], args={lang_code, root_lang, root_str}} end local stmts = current_lexeme:getAllStatements('P5191') local new_etymology_string if #stmts == 0 then if current_roots ~= '' and current_combines ~= '' and current_roots then return current_roots .. '<br/>(' .. current_combines .. ')' elseif current_roots ~= '' then if lang_code == 'ar' and mode ~= 'partial' and root_str ~= matched_lemma then return frame:expandTemplate{title=i18n['template_ar-rootbox'], args={root_str}} else return current_roots end else return current_combines end end local origin_lexeme_string for i, stmt in pairs(stmts) do local origin_lexeme_dv = stmt.mainsnak.datavalue -- If this is nil, the origin lexeme is not known. if origin_lexeme_dv then local origin_lexeme = getEntity(origin_lexeme_dv.value.id) local origin_lexeme_lang = getLabel(origin_lexeme:getLanguage()) local sitelink = i18n.wplink(origin_lexeme:getLanguage(), origin_lexeme_lang, wb) if sitelink ~= '' then origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. sitelink .. ')' else origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. origin_lexeme_lang .. ')' end if stmt.qualifiers and stmt.qualifiers['P5886'] then local mode_of_derivation = stmt.qualifiers['P5886'][1].datavalue.value.id if mode_of_derivation == 'Q1345001' then -- @TODO: Add support for showing gender origin_lexeme_string = frame:expandTemplate{title=i18n['template_borrowed'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_borrowing'] elseif mode_of_derivation == 'Q845079' then origin_lexeme_string = ustring.gsub(i18n['etymology_learned_borrowing'], '$1', origin_lexeme_string) elseif mode_of_derivation == 'Q56611986' then origin_lexeme_string = frame:expandTemplate{title=i18n['template_inherited'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_inheritance'] elseif mode_of_derivation == 'Q189743' then origin_lexeme_string = frame:expandTemplate{title=i18n['template_ellipsis'], args={lang_code, getLemmata(origin_lexeme)}} .. ' ' .. i18n['etymology_ellipsis'] end end local origin_origin = getEtymology(origin_lexeme, frame) if origin_origin ~= '' and origin_origin then new_etymology_string = origin_lexeme_string .. ' ← ' .. origin_origin else new_etymology_string = origin_lexeme_string end end if etymology == '' then etymology = new_etymology_string elseif origin_lexeme_string and etymology then etymology = etymology .. ' ' .. origin_lexeme_string elseif origin_lexeme_string and etymology == nil then etymology = origin_lexeme_string end end if current_roots ~= '' and etymology and current_roots then etymology = etymology .. ' ' .. current_roots elseif current_roots ~= '' and etymology == nil then etymology = current_roots end if current_combines ~= '' and etymology then etymology = etymology .. '<br/>(' .. current_combines .. ')' end return etymology end local function pronunciationBlock(block, value) return '* ' .. i18n['text_' .. block] .. ' ' .. value end local function getPronunciation(frame, current_lexeme, lang_name) local pronunciations = {} local base_form = getPronunciationBaseForm() local iast, iso15919_transcription, itrans, xsampa if base_form then for i, stmt in pairs(base_form:getAllStatements('P443')) do -- উচ্চারণের অডিও local pronunciation_file = stmt.mainsnak.datavalue.value local specifier_text = '' local specifiers = {} if stmt.qualifiers then for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন local qual = stmt.qualifiers[property_id] if qual then for _, qual in pairs(qual) do local stmt_value = qual.datavalue.value.id table.insert(specifiers, getLabel(stmt_value)) end end end end if #specifiers > 0 then specifier_text = table.concat(specifiers, "'', ''") end local audio_text if specifier_text ~= '' then audio_text = i18n['text_audio'] .. ' (' .. specifier_text .. ')' else audio_text = i18n['text_audio'] end table.insert(pronunciations, '* ' .. frame:expandTemplate{ title= i18n['template_audio'], args = {lang_name, pronunciation_file, audio_text} }) end iso15919_transcription = getOneValueForProperty(base_form, 'P5825') -- আইএসও ১৫৯১৯ প্রতিলিপিকরণ itrans = getOneValueForProperty(base_form, 'P8881') -- ITRANS iast = getOneValueForProperty(base_form, 'P7581') -- আইএএসটি প্রতিলিপিকরণ xsampa = getOneValueForProperty(base_form, 'P2859') local ipa_transcription = base_form:getAllStatements('P898') -- আধ্বব প্রতিলিপিকরণ -- @TODO: অডিও ও প্রতিলিপিকরণ দুটোই থাকলে একটার ঠিক পরেই আরেকটা দেখানো উচিত if #ipa_transcription ~= 0 then for i, stmt in pairs(ipa_transcription) do local ipa_text = stmt.mainsnak.datavalue.value local specifier_text = '' local specifiers = {} if stmt.qualifiers then for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন for l, qual in ipairs(stmt.qualifiers[property_id]) do table.insert(specifiers, getLabel( qual.datavalue.value.id )) end end end if #specifiers > 0 then specifier_text = "(''" .. table.concat(specifiers, "'', ''") .. "'') " end local syllable_count if lang_code == 'tr' then syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z10029|' .. ipa_text, frame) else syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z30837|' .. ipa_text, frame) end table.insert(pronunciations, '* ' .. specifier_text .. frame:expandTemplate{ title= i18n['template_ipa'], args = {lang_name, ipa_text} } .. '\n* ' .. syllable_count) end -- The following checks are ordered based on which one is expected to be true in a higher number of cases. elseif lang_code == 'bn' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='bn-IPA', }) elseif lang_code == 'ar' then local lemma = current_lexeme:getLemma('ar') table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ar-IPA', args={lemma} }) elseif lang_code == 'en' then table.insert(pronunciations, '* ' .. i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z29940|' .. matched_lemma, frame)) elseif lang_code == 'pl' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='pl-IPA', }) elseif lang_code == 'ko' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ko-IPA', }) elseif lang_code == 'fi' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='fi-IPA', }) elseif lang_code == 'ta' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ta-IPA', }) elseif lang_code == 'fax' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='fax-pron', }) end end -- {{আধ্বব|en|/ˈɪntəvjuː/}} if iso15919_transcription then table.insert(pronunciations, pronunciationBlock('iso15919', iso15919_transcription)) end if itrans then table.insert(pronunciations, pronunciationBlock('itrans', itrans)) end if iast then table.insert(pronunciations, pronunciationBlock('iast', iast)) end if xsampa then table.insert(pronunciations, pronunciationBlock('xsampa', xsampa)) end return table.concat(pronunciations, '\n') end local function getAlternativeSpellings( current_lexeme, frame ) local alt_spellings = {} for i, stmt in pairs(current_lexeme:getAllStatements('P11577')) do -- বিকল্প বানান if stmt.mainsnak.datavalue then table.insert(alt_spellings, '* ' .. frame:expandTemplate{title=i18n['template_alter'], args={lang_code, getLemmata(getEntity(stmt.mainsnak.datavalue.value.id), frame)}}) end end return table.concat(alt_spellings, '\n') end function get_any_notes(sections, args, keys) local notes = {} for i, v in ipairs(keys) do if args[v] then table.insert(notes, args[v]) end end return notes end function add_specific_notes(sections, notes) for i, v in ipairs(notes) do table.insert(sections, v) end end local function add_any_notes(sections, args, keys, heading) for i, v in ipairs(keys) do if args[v] then if heading then table.insert(sections, heading) end table.insert(sections, args[v]) end end end local function getMatchingLemmaForPageTitle(lexeme, title) local lemmas = lexeme:getLemmas() local match for _, lemma_entry in ipairs(lemmas) do local lemma = lemma_entry[1] if lemma == title then match = lemma break end end if match == nil then if lang_code == 'ar' then match = lexeme:getLemma('ar') elseif lang_code == 'rhg' then match = lexeme:getLemma('rhg-arab') elseif lang_id == 'Q11051ur' then match = lexeme:getLemma('ur') elseif lang_code == 'arz' then match = lexeme:getLemma('arz') end end return match end -- Returns the grammatical gender of a lexeme local function getGenderOfLexeme(lexeme) local gender = '' local stmts = lexeme:getAllStatements('P5185') -- ব্যাকরণগত লিঙ্গ if #stmts ~= 0 and stmts[1].mainsnak.datavalue then if #stmts == 1 then local gender_qid = stmts[1].mainsnak.datavalue.value.id if gender_qid == 'Q499327' then gender = 'm' elseif gender_qid == 'Q1775415' then gender = 'f' elseif gender_qid == 'Q1775461' then gender = 'n' elseif gender_qid == 'Q1305037' then gender = 'c' end end else for i, stmt in pairs(stmts) do local qid = stmts[i].mainsnak.datavalue if qid then qid = qid.value.id end if qid == 'Q499327' then gender = gender .. 'm' elseif qid == 'Q1775415' then gender = gender .. 'f' end end end if gender == '' then return nil end return gender end -- Returns the semantic gender for a sense -- @TODO: Complete this local function getGenderForSense(sense) local gender = '' local stmts = sense:getAllStatements('P10339') -- semantic gender if #stmts ~= 0 and stmts[1].mainsnak.datavalue then if #stmts == 1 then local gender_qid = stmts[1].mainsnak.datavalue.value.id if gender_qid == 'Q6581097' then gender = 'm' elseif gender_qid == 'Q1775415' then gender = 'f' elseif gender_qid == 'Q1775461' then gender = 'n' elseif gender_qid == 'Q1305037' then gender = 'c' elseif gender_qid == 'Q70853302' then gender = 'mfbysense' end end else for i, stmt in pairs(stmts) do local qid = stmts[i].mainsnak.datavalue if qid then qid = qid.value.id end if qid == 'Q499327' then gender = gender .. 'm' elseif qid == 'Q1775415' then gender = gender .. 'f' end end end return gender end local function buildLanguageAgnosticInflectionTable() local has_image = false local form_images = {} for i, form in ipairs(forms) do local form_image = form:getAllStatements('P7407') if next(form_image) then form_images[i] = form_image[1].mainsnak.datavalue.value has_image = true end end local table_class = "wikitable mw-collapsible sortable" if not has_image then table_class = table_class .. " mw-collapsed" end local text = "{| class='" .. table_class .. "' style='border:solid 1px rgb(80%,80%,100%); text-align:center;'\n" text = text .. "|+ " .. i18n['heading_inflection_table'] .. "\n" text = text .. "|- \n" text = text .. "! " .. i18n['heading_form'] .. " !! " .. i18n['heading_grammatical_features'] if has_image then text = text .. " !! " .. (i18n['heading_image']) end text = text .. " \n" for i, form in ipairs(forms) do local rep = form:getRepresentations() local feat = form:getGrammaticalFeatures() local rep_text = "" for j, r in pairs(rep) do if rep_text == "" then rep_text = r[1] else rep_text = rep_text .. " / " .. r[1] end end local feat_text = "" if feat then for j, f in ipairs(feat) do local label = getLabel(f) or f if feat_text == "" then feat_text = label else feat_text = feat_text .. ", " .. label end end end text = text .. "|-\n" text = text .. "| " .. (rep_text ~= "" and rep_text or "—") text = text .. " || " .. (feat_text ~= "" and feat_text or "—") if has_image then local image_cell = "—" if form_images[i] then image_cell = "[[চিত্র:" .. form_images[i] .. "|50px]]" end text = text .. " || " .. image_cell end text = text .. "\n" end text = text .. "|}" return text end function p.all(frame) local args = getArgs(frame) local lexeme_id = args[1] local current_lexeme = getEntity(lexeme_id) local language = current_lexeme:getLanguage() lang_id = language local senses = current_lexeme:getSenses() local add_heading = true forms = current_lexeme:getForms() if args[2] then local val = mw.text.trim(tostring(args[2])) if val == "false" or val == "0" or val == "না" then add_heading = false end end local references_seen = {} local sections = {} local title = mw.title.getCurrentTitle().text local lang_category = getLanguageForCategories(title, true) local lang_name = getLabel(lang_category) local conj_class = getLastValueForProperty(current_lexeme, 'P5186') if conj_class then conj_class = wb.getLabelByLang(getLastValueForProperty(current_lexeme, 'P5186').id, 'en'):gsub('Form ', '') end if add_heading == true then local lang_heading = heading_level(lang_name, 2) table.insert(sections, lang_heading) end lang_code = getLexemeLanguageCode(current_lexeme) matched_lemma = getMatchingLemmaForPageTitle(current_lexeme, title) lex_cat = current_lexeme:getLexicalCategory() local cat = i18n.lang_category(getLabel(lex_cat), lang_name) local lex_cat_template, ety_added, pron_added, alt_added if cat then table.insert(sections, heading_level(getLabel(lex_cat) .. cat .. frame:expandTemplate{ title = i18n['template_anchor'], args = { lexeme_id } }, 3)) table.insert(sections, frame:expandTemplate{ title= i18n['template_lexeme'], args = {lexeme_id} }) add_any_notes(sections, args, i18n['manual_category']) local etymology = getEtymology( current_lexeme, frame ) if etymology ~= '' and etymology then table.insert(sections, heading_level(i18n['heading_etymology'], 4)) table.insert(sections, tostring(etymology)) ety_added = true end if ety_added then add_any_notes(sections, args, i18n['manual_etymology']) else add_any_notes(sections, args, i18n['manual_etymology'], heading_level(i18n['heading_etymology'], 4)) end local pronunciation = getPronunciation( frame, current_lexeme, lang_name) if pronunciation ~= '' then table.insert(sections, heading_level(i18n['heading_pronunciation'], 4)) table.insert(sections, tostring(pronunciation)) pron_added = true end if pron_added then add_any_notes(sections, args, i18n['manual_pronunciation']) else add_any_notes(sections, args, i18n['manual_pronunciation'], heading_level(i18n['heading_pronunciation'], 4)) end local alternative_spellings = getAlternativeSpellings(current_lexeme, frame) if alternative_spellings ~= '' then table.insert(sections, heading_level(i18n['heading_alternative_spellings'], 4)) table.insert(sections, alternative_spellings) alt_added = true end if alt_added then add_any_notes(sections, args, i18n['manual_alternative_spellings']) else add_any_notes(sections, args, i18n['manual_alternative_spellings'], heading_level( i18n['heading_alternative_spellings'], 4)) end local gender = getGenderOfLexeme(current_lexeme) if lang_code and lang_code ~= 'ksy' and lang_code ~= 'rkt' then -- Skip for Kharia Thar, Rangpuri if lex_cat == 'Q34698' then -- বিশেষণ if lang_code == 'en' or lang_code == 'bn' then if #forms <= 1 then lex_cat_template = frame:expandTemplate{title= lang_code .. '-বিশেষণ'} end else if lang_code ~= 'fr' then lex_cat_template = safeExpand(frame, lang_code .. '-adj') if not lex_cat_template then lex_cat_template = safeExpand(frame, lang_code .. '-বিশেষণ') end end end elseif lex_cat == 'Q1084' then -- @TODO: Also check for plural forms -- The following checks are ordered based on which one is expected to be true in a higher number of cases. if language == 'Q13955' then if matched_lemma then lex_cat_template = safeExpand(frame, 'ar-noun', {matched_lemma,gender}) else lex_cat_template = frame:expandTemplate{title='ar-noun', args={nil,gender}} end elseif language == 'Q29919' then lex_cat_template = frame:expandTemplate{title='arz-noun', args={g=gender}} elseif language == 'Q397' then if matched_lemma then lex_cat_template = frame:expandTemplate{title='la-noun', args={matched_lemma,g=gender}} end elseif language == 'Q11059' then lex_cat_template = frame:expandTemplate{title='sa-noun', args={g=gender}} elseif language ~= 'Q1860' then -- These templates require the gender to be passed as the 1st argument. lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix'], {gender}) if not lex_cat_template then lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix_fallback'], {gender}) end end elseif lex_cat == 'Q24905' then -- ক্রিয়া if lang_code == 'ar' then if conj_class then lex_cat_template = frame:expandTemplate{title='ar-verb', args={conj_class}} end else lex_cat_template = safeExpand(frame, lang_code .. '-verb') end end end -- elseif lex_cat == 'Q147276' then -- lex_cat_template = safeExpand(frame, lang_code .. '-proper noun', {gender}) -- if not lex_cat_template then -- lex_cat_template = safeExpand(frame, lang_code .. '-নামবাচক বিশেষ্য', {gender}) -- end end if lex_cat_template then table.insert(sections, lex_cat_template) else if matched_lemma then table.insert(sections, heading_level(matched_lemma, 4)) else table.insert(sections, i18n.tocatlink(i18n['category_no_matching_lemma'])) end end local meanings, references_seen, sense_extlinks = unpack(getMeanings( frame, args, current_lexeme, senses, references_seen, lang_name)) table.insert(sections, tostring(meanings)) add_any_notes(sections, args, i18n['manual_meaning']) local instance_of = current_lexeme:getAllStatements('P31') -- সত্ত্বার ধরন if #instance_of ~= 0 then local instance_of_entity = instance_of[1].mainsnak.datavalue.value.id if instance_of_entity == 'Q376431' then -- বর্ণের নাম table.insert(sections, i18n.tocatlink(lang_code .. ':রং')) else table.insert(sections, heading_level(i18n['heading_special_info'], 4) .. i18n['text_instance_of'] .. ' ' .. '[[d:' .. instance_of_entity .. '|' .. getLabel(instance_of_entity) .. ']]' .. i18n['text_sentence_terminator']) end end if lex_cat ~= 'Q9788' then local translations = getTranslations(frame, senses) if translations then table.insert(sections, translations) end end -- (!) বিশেষ ভাষার বিভক্তির সারণি যদি থাকে সেগুলো এখানে নতুন if বিবৃতি যোগ করা যায়। if next(forms) then if language == 'Q9610' then -- বাংলা if lex_cat == 'Q24905' then local conjTable = require('মডিউল:আভিধানিক উপাত্ত/Q9610').getConjTable(frame, forms) table.insert(sections, conjTable) elseif lex_cat == 'Q1084' or lex_cat == 'Q36224' or lex_cat == 'Q147276' or lex_cat == 'Q956030' then table.insert(sections, callWikifunctionsFunction('Z33243|' .. lexeme_id .. '|', frame)) else if #forms > 1 then table.insert(sections, buildLanguageAgnosticInflectionTable()) end end --elseif language == 'Q13955' then -- ar -- if lex_cat == 'Q1084' then -- table.insert(sections, frame:expandTemplate{title='ar-decl-noun', args={lemma}}) -- end --elseif lang_code == 'ar' and lex_cat == 'Q24905' then --table.insert(sections, frame:expandTemplate{title='ar-conj', args={conj_class}}) elseif language == 'Q11051' and lex_cat == 'Q1084' then -- de if lang_id == "Q11051hi" then table.insert(sections, callWikifunctionsFunction('Z37337|' .. lexeme_id .. '|', frame)) else table.insert(sections, callWikifunctionsFunction('Z37346|' .. lexeme_id .. '|', frame)) end elseif language == 'Q188' and lex_cat == 'Q1084' then -- de table.insert(sections, callWikifunctionsFunction('Z28602|' .. lexeme_id .. '|', frame)) elseif lang_code == 'as' and lex_cat == 'Q1084' then table.insert(sections, callWikifunctionsFunction('Z37219|' .. lexeme_id .. '|', frame)) elseif lang_code == 'ml' and lex_cat == 'Q1084' then table.insert(sections, callWikifunctionsFunction('Z37217|' .. lexeme_id .. '|', frame)) --elseif language == 'Q397' and lex_cat == 'Q1084' then -- la -- table.insert(sections, callWikifunctionsFunction('Z26333|' .. matched_lemma .. '|', frame)) elseif language == 'Q150' and lex_cat == 'Q34698' then -- fr table.insert(sections, callWikifunctionsFunction('Z36435|' .. lexeme_id .. '|', frame)) elseif language == 'Q652' and lex_cat == 'Q34698' then -- ইতালীয় table.insert(sections, callWikifunctionsFunction('Z36407|' .. lexeme_id .. '|', frame)) elseif language == 'Q809' or language == 'Q9058' or language == 'Q6654' or language == 'Q9056' then -- পোলীয়, স্লোভাক, ক্রোয়েশীয়, চেক table.insert(sections, callWikifunctionsFunction('Z36421|' .. lexeme_id .. '|', frame)) elseif #forms > 1 and language ~= 'Q150' then table.insert(sections, buildLanguageAgnosticInflectionTable()) end end if lex_cat == 'Q134830' then table.insert(sections, frame:expandTemplate{title='prefixsee', args={lang_code}}) elseif lex_cat == 'Q102047' then table.insert(sections, frame:expandTemplate{title='suffixsee', args={lang_code}}) -- elseif lex_cat == 'Q111029' then -- table.insert(sections, frame:expandTemplate{title='rootsee', args={'+', lang_code, matched_lemma}}) end local reference_notes = get_any_notes(sections, args, i18n['manual_reference']) if #references_seen > 0 or #reference_notes > 0 then table.insert(sections, heading_level(i18n['heading_references'], 4)) table.insert(sections, frame:extensionTag('references')) add_specific_notes(sections, reference_notes) end local external_link_table = getExternalLinks ( current_lexeme ) if #external_link_table > 0 then local external_links = '* ' .. table.concat(external_link_table, '\n* ') table.insert(sections, heading_level(i18n['heading_external_links'], 4)) table.insert(sections, external_links) end add_any_notes(sections, args, i18n['manual_external_link']) if #references_seen == 0 and #reference_notes == 0 and sense_extlinks and #sense_extlinks == 0 and #external_link_table == 0 and #get_any_notes(sections, args, i18n['manual_external_link']) == 0 then table.insert(sections, i18n.rfref_category(lang_name)) end return table.concat(sections,"\n\n") end return p 9dogaedf3kcx7rp5xup07jdxkkeowik 514040 514026 2026-07-25T14:32:00Z Redmin 6857 514040 Scribunto text/plain local p = {} local i18n = require('মডিউল:আভিধানিক উপাত্ত/i18n') local references = require('মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ').format local getArgs = require('Module:Arguments').getArgs local wb = mw.wikibase local ustring = mw.ustring local html = mw.html local mw_lang = mw.language local entity_cache = {} local reference_cache = {} local forms local lang_code local lex_cat local matched_lemma local lang_id local function wrapStringInWikilinks(str) local exceptions = i18n.nolinks local result = str:gsub('(%S+)', function(token) local word, trailing_char = token:match('^(.-)([;,.:!?]*)$') local wrapped = word:gsub('[^(-/]+', function(part) if exceptions[part] then return part else return '[[' .. mw.text.nowiki(part) .. '#' .. i18n['content_lang_name'] .. '|' .. mw.text.nowiki(part) .. ']]' end end) return wrapped .. trailing_char end) return result end local function serializeTable(val, name, skipnewlines, depth) -- https://stackoverflow.com/a/6081639 skipnewlines = skipnewlines or false depth = depth or 0 local tmp = string.rep(" ", depth) if name then tmp = tmp .. name .. " = " end if type(val) == "table" then tmp = tmp .. "{" .. (not skipnewlines and "\n" or "") for k, v in pairs(val) do tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "") end tmp = tmp .. string.rep(" ", depth) .. "}" elseif type(val) == "number" then tmp = tmp .. tostring(val) elseif type(val) == "string" then tmp = tmp .. string.format("%q", val) elseif type(val) == "boolean" then tmp = tmp .. (val and "true" or "false") else tmp = tmp .. "\"[inserializable datatype:" .. type(val) .. "]\"" end return tmp end -- Use this to safely expand templates when you are not sure that they exist. local function safeExpand(frame, title, args) local _, result = pcall(function() return frame:expandTemplate{ title = title, args = args } end) if result:find('does not exist') then -- expandTemplate{} doesn't seem to throw any error that can be handled with pcall() so string search is the only viable option. return nil end return result end local function checkTitleCodePointInRange(title, start_point, end_point) return ustring.find( title, '[' ..ustring.char(start_point) .. '-' .. ustring.char(end_point) .. ']' ) end local function getLanguageForCategories(title) -- বিশেষ ভাষার জন্য if lang_id == 'Q11051' then -- হিন্দি/উর্দু if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- উর্দু lang_id = 'Q11051ur' elseif checkTitleCodePointInRange(title, 0x0900, 0x097f) then -- হিন্দি lang_id = 'Q11051hi' end elseif lang_id == 'Q58635' then -- পাঞ্জাবি if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- শাহমুখী lang_id = 'Q58635pnb' elseif checkTitleCodePointInRange(title, 0x0a00, 0x0a7f) then -- গুরুমুখী lang_id = 'Q58635pa' end elseif lang_id == 'Q56356571' then -- নয়া ফার্সি ভাষা if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- ফার্সি (ইরান/আফগানিস্তান) lang_id = 'Q56356571fa' elseif checkTitleCodePointInRange(title, 0x0400, 0x04ff) then -- তাজিক lang_id = 'Q56356571tg' end elseif lang_id == 'Q256' then if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then lang_id = 'Q56356571ota' else lang_id = 'Q56356571tr' end end return lang_id end local function getEntity(id) if entity_cache[id] == nil then entity_cache[id] = wb.getEntity(id) or error('Invalid ID provided: ' .. id) end return entity_cache[id] ~= false and entity_cache[id] or nil end -- Use this function to get the label of an item even if that item does not have any label in the wiki's content language or English. local function getLabel(id) if id == 'Q11051hi' then return 'হিন্দি' elseif id == 'Q11051ur' then return 'উর্দু' elseif id == 'Q56356571fa' then return 'ফার্সি' elseif id == 'Q56356571tg' then return 'তাজিক' elseif id == 'Q58635pa' or id == 'Q58635pnb' then return 'পাঞ্জাবি' elseif id == 'Q256tr' then return 'তুর্কি' elseif id == 'Q256ota' then return 'উসমানীয় তুর্কি' end local label = wb.getLabel(id) if label then return label end local labels = getEntity(id).labels if not labels then return id end for _, v in pairs(labels) do if v and v.value then return v.value end end end local function getReference(id, reference) local out_id = nil local url_value if reference_cache[id] == nil then local ref_text = references(reference, wb, mw_lang, i18n['content_lang_code'], i18n['wikipedia']) if reference.snaks then if reference.snaks['P248'] then for _, snak in pairs(reference.snaks['P248']) do if snak.datavalue and snak.datavalue.value.id == 'Q428' then -- কুরআন ref_text = ustring.gsub(ref_text, 'নামক অনুচ্ছেদ', 'নং আয়াত') break end end end if reference.snaks['P854'] then local snak = reference.snaks['P854'][1] if snak.datavalue then url_value = snak.datavalue.value end end end if url_value then ref_text = ref_text .. ', [' .. url_value .. ' সংযোগ]' end reference_cache[id] = ref_text else out_id = id end return {out_id, reference_cache[id]} end -- Returns the Wiktionary language code for a lexeme entity or nil, in the latter case, getLemmas() can be relied on to fetch the language code by stripping extraneous bits from the 'language' string as necessary local function getLexemeLanguageCode(lexeme) local lang_item_id = lexeme:getLanguage() local lang_entity = getEntity(lang_item_id) for i, statement_property in ipairs({'P305','P424', 'P220'}) do -- আইইটিএফ ভাষা ট্যাগ, উইকিমিডিয়া ভাষা কোড, আইএসও ৬৩৯-৩ local statements = lang_entity:getBestStatements(statement_property) if statements[1] then local code = statements[1].mainsnak.datavalue.value if code == 'hr' then return 'sh' elseif code == 'pan' then return 'pa' else return code end end end end local function getLexemeLanguageCodeForEtymology(lexeme) local lang_item_id = lexeme:getLanguage() if lang_item_id == 'Q56356571' then return 'fa' -- @TODO: Implement a proper solution end return getLexemeLanguageCode(lexeme) end -- Return the first form of the lexeme which has exactly the given grammatical feature. local function formWithSingleGrammaticalFeature( item_id ) for i = 1, #forms do local grammaticalFeatures = forms[i]:getGrammaticalFeatures() if #grammaticalFeatures == 1 and grammaticalFeatures[1] == item_id then return forms[i] end end return nil end local function getArticleLinkTemplate(frame, stmt_value) local template = '' local sitelink = getEntity(stmt_value):getSitelink(i18n['wikipedia']) if sitelink then template = frame:expandTemplate{ title=i18n['template_wikipedia'], args={sitelink} } end return template end local function getArticleLinks(frame, sense ) local article_links = '' for i, stmt in pairs(sense:getAllStatements('P5137')) do -- এই অর্থের জন্য আইটেম article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id) end for i, stmt in pairs(sense:getAllStatements('P9970')) do -- এই অর্থের জন্য বিধেয় article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id) end return article_links end -- @TODO: Generalise local function expandTemplateForProperty(frame, object, property, template) local lemmas = {} local n = 0 for _, stmt in pairs(object:getAllStatements(property)) do local lex = wb.lexeme.splitLexemeId(stmt.mainsnak.datavalue.value.id) if lex then lex = getEntity(lex) n = n + 1 lemmas[n] = lex:getLemma(lang_code) end end if not lang_code or n == 0 then return '' end -- Build args: first lang_code, then lemmas local args = {lang_code} for i = 1, n do args[#args + 1] = lemmas[i] end return frame:expandTemplate{ title = template, args = args } end local function getExternalLinks( entity ) -- T418639 local external_links = {} if entity.claims == nil then return external_links end local formatter_urls = require('মডিউল:আভিধানিক উপাত্ত/urls').formatter_urls for property_id, statements in pairs(entity.claims) do local formatter_url = formatter_urls[property_id] if formatter_url then local property_source = wb.getBestStatements(property_id, 'P9073') local source_name if next(property_source) then source_name = getLabel(property_source[1].mainsnak.datavalue.value.id) or property_source[1].mainsnak.datavalue.value.id else source_name = getLabel(property_id) or property_id end for i = 1, #statements do local stmt = statements[i] if stmt.mainsnak.datavalue then local formatted_link = ustring.gsub( ustring.gsub(formatter_url, '$1', stmt.mainsnak.datavalue.value), ' ', '+' ) table.insert(external_links, '[' .. formatted_link .. ' ' .. source_name .. ']') end end end end return external_links end p.getExternalLinks = getExternalLinks -- রেখে দিন যাতে ডিবাগিং সম্ভব হয় local function heading_level(text, level) return '<h' .. level .. '>' .. ' ' .. text .. ' ' .. '</h' .. level .. '>' end local function termSpan( term ) local text = term[1] local lang = term[2] local dir = mw_lang.new( lang ):getDir() local span = html.create( 'span' ) span:attr( 'lang', lang ) :attr( 'dir', dir ) :wikitext( text ) return tostring( span ) end local function getLemmata( current_lexeme ) local lemma_string = '' for i, rep in pairs(current_lexeme:getLemmas()) do if lemma_string == '' then lemma_string = termSpan(rep) else lemma_string = lemma_string .. '/' .. termSpan(rep) end end return lemma_string end local function getLinkedLemmata(lexeme, frame) local lemma_string = '' local lang for i, rep in pairs(lexeme:getLemmas()) do lang = getLexemeLanguageCode(lexeme) if lang == nil then lang = string.gsub(rep[2], '-%S+', '') end if lemma_string == '' then lemma_string = frame:expandTemplate{title='link', args={lang, rep[1]}} else lemma_string = lemma_string .. '/' .. frame:expandTemplate{title='link', args={lang, rep[1]}} end end return lemma_string end local function getExamples( current_lexeme, sense_id, references_seen ) local examples = html.create('dl') local example_text, example_lang, example_form, example_str for i, stmt in pairs(current_lexeme:getAllStatements('P5831')) do -- ব্যবহারের উদাহরণ if stmt.qualifiers and stmt.qualifiers['P6072'] and stmt.qualifiers['P6072'][1].datavalue.value.id == sense_id then -- বিষয়ে লেক্সিমের অর্থ example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>') example_lang = stmt.mainsnak.datavalue.value.language local example_form_strs = {} if stmt.qualifiers['P1810'] then table.insert(example_form_strs, stmt.qualifiers['P1810'][1].datavalue.value) elseif stmt.qualifiers['P5830'] then example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ for _, rep in pairs(example_form:getRepresentations()) do table.insert(example_form_strs, rep[1]) end end for _, example_form_str in pairs(example_form_strs) do local new_example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''") if new_example_text ~= example_text then example_str = termSpan({new_example_text, example_lang}) break end example_text = new_example_text end if example_str == nil then example_str = termSpan({example_text, example_lang}) end local reference_text = '' if stmt.references then for j, reference in pairs(stmt.references) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. got_reference[2] end end if example_str then examples:tag('dd'):wikitext("''" .. example_str .. "''") if reference_text ~= '' then examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text) end end end end for i, stmt in pairs(wb.getAllStatements(sense_id, 'P5831')) do -- ব্যবহারের উদাহরণ example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>') example_lang = stmt.mainsnak.datavalue.value.language local example_form_str = nil if stmt.qualifiers then if stmt.qualifiers['P5830'] then example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- subject lexeme form end if stmt.qualifiers['P1810'] then example_form_str = stmt.qualifiers['P1810'][1].datavalue.value end end if example_form and example_form_str == nil then example_form_str = example_form:getRepresentation(i18n['content_lang_code']) end if example_form and example_form_str == nil then example_form_str = example_form:getRepresentations()[1][1] end if example_form_str then example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''") end example_str = termSpan({example_text, example_lang}) local reference_text = '' if stmt.references then for j, reference in pairs(stmt.references) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. got_reference[2] end end if example_str then examples:tag('dd'):wikitext("''" .. example_str .. "''") if reference_text ~= '' then examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text) end end end return { tostring(examples) , references_seen } end -- This calls frame:preprocess() instead of :callParserFunction() because the latter does not work for Wikifunctions function calls yet (see https://www.wikifunctions.org/wiki/Wikifunctions:Embedded_function_calls). local function callWikifunctionsFunction(args, frame) return frame:preprocess('{{#function:' .. args .. '}}') .. i18n.tocatlink('উইকিফাংশন্স-এর ফাংশন ব্যবহার করা পাতা') end local function getOneValueForProperty(object, property) local val local stmts = object:getAllStatements(property) if #stmts ~= 0 then val = stmts[1].mainsnak.datavalue.value end return val end local function getLastValueForProperty(object, property) local val, count local stmts = object:getAllStatements(property) for i, j in ipairs(stmts) do count = i end if count then val = stmts[count].mainsnak.datavalue.value end return val end local function getTranslations(frame, senses) if #senses == 0 then return nil end local all_translations = {} local wmlang, item, label for _, sense in pairs(senses) do local translation_set = {} local gloss = sense:getGloss(i18n['content_lang_code']) if lex_cat ~= 'Q34698' then item = getOneValueForProperty(sense, 'P5137') if item then item = item.id label = getLabel(item) end end if item then wmlang = require("Module:wikimedia languages") end for _, stmt in pairs(sense:getAllStatements('P5972')) do local translation = stmt.mainsnak.datavalue.value.id local lexeme_id = wb.lexeme.splitLexemeId(translation) local trans_lexeme = getEntity(lexeme_id) local lang_name = getLabel(trans_lexeme:getLanguage()) local trans_code = getLexemeLanguageCode(trans_lexeme) if trans_code then table.insert(translation_set, lang_name .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={trans_code, getLinkedLemmata(trans_lexeme, frame) .. '<br/>'}}) else table.insert(translation_set, lang_name .. ': ' .. getLinkedLemmata(trans_lexeme, frame) .. '<br/>' .. i18n.trans_category(lang_name)) end end if item then for _, v in pairs(getEntity(item).labels) do if string.find(v.language, '-') == nil then -- @TODO: Implement deduplication of translation and get rid of this check local lang = wmlang.getByCode(v.language) local wikt = lang:getWiktionaryLanguage() if wikt:hasType('regular') then table.insert(translation_set, getLabel(wikt:getWikidataItem()) .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={wikt:getCode(), v.value .. '<br/>'}}) end end end end if #translation_set > 0 then local block = frame:expandTemplate{ title = i18n['template_trans-top'], args = { gloss or label } } block = block .. table.concat(translation_set, '\n') .. frame:expandTemplate{ title = i18n['template_trans-bottom'] } table.insert(all_translations, block) end end if #all_translations == 0 then return nil end return heading_level(i18n['heading_translation'], 4) .. ' \n' .. table.concat(all_translations, '\n') end local createicon = function(langcode, entityID, propertyID) langcode = langcode or "" propertyID = propertyID or "" local icon = "&nbsp;<span class='penicon autoconfirmed-show'>[[" -- "&nbsp;<span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge .. "File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt=" .. i18n['edit_wikidata'] .. "|link=https://www.wikidata.org/entity/" .. entityID if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end if propertyID ~= "" then icon = icon .. "#" .. propertyID end icon = icon .. "|" .. i18n['edit_wikidata'] .. "]]</span>" return icon end local function getMeanings(frame, args, current_lexeme, senses, references_seen, language_name) if #senses == 0 then return {createicon(i18n['content_lang_code'], current_lexeme:getId()) .. "''" .. i18n['text_category_rfdef'] .. "''" .. i18n.tocatlink(i18n['category_rfdef']), references_seen} end local meanings = html.create( 'ol' ) local idlinkset = {} for i, sense in pairs(senses) do local item_label_gloss_parts = {} local gloss_text_parts = {} local main_gloss_text = frame:expandTemplate{ title=i18n['template_anchor'], args={sense:getId()} } local specifiers = {} for k, property_id in ipairs({'P6084', 'P6191', 'P9488'}) do -- অবস্থান যেখানে শব্দার্থ ব্যবহৃত, যে রীতিতে শব্দার্থ ব্যবহৃত হয়, যে ক্ষেত্রে ব্যবহৃত for _, stmt in pairs(sense:getAllStatements(property_id)) do local stmt_value = stmt.mainsnak.datavalue.value.id local reference_text = '' local refs = stmt.references if refs then for j, reference in pairs(refs) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. frame:extensionTag('ref', got_reference[2]) end end local val = getLabel(stmt_value) table.insert(specifiers, val .. reference_text) if property_id == 'P9488' and lang_code ~= nil then table.insert(item_label_gloss_parts, i18n.tocatlink(lang_code .. ':' .. val)) end end end if #specifiers > 0 then main_gloss_text = main_gloss_text .. "(''" .. table.concat(specifiers, "'', ''") .. "'') " end local gloss = sense:getGloss( i18n['content_lang_code'] ) if gloss then main_gloss_text = main_gloss_text .. wrapStringInWikilinks(gloss) if gloss:match('^প্রদত্ত%s*(%S-)%s*নাম$') then -- given names main_gloss_text = main_gloss_text .. i18n.tocatlink(language_name .. ' ' .. i18n['category_given_names']) end else local other_gloss_text, other_gloss_lang, item_label local stmt_value = getOneValueForProperty(sense, 'P5137') if stmt_value then stmt_value = stmt_value.id item_label = getLabel(stmt_value) end if item_label then table.insert(item_label_gloss_parts, '[[:d:' .. stmt_value .. '|' .. item_label .. ']]') end if #item_label_gloss_parts > 0 then other_gloss_text = table.concat(item_label_gloss_parts, '; ') end if other_gloss_text == nil then for _, fallback_lang in ipairs(mw_lang.getFallbacksFor( i18n['content_lang_code'] )) do if sense:getGloss( fallback_lang ) then other_gloss_text, other_gloss_lang = sense:getGloss( fallback_lang ) end end if other_gloss_lang == nil then local glosses = sense:getGlosses() for _, gloss in pairs(glosses) do other_gloss_text = gloss[1] other_gloss_lang = gloss[2] break end end main_gloss_text = main_gloss_text .. other_gloss_text .. "<sup><em>" .. mw_lang.fetchLanguageName(other_gloss_lang, i18n['content_lang_code']) .. "</em></sup>" else main_gloss_text = main_gloss_text .. "''" .. other_gloss_text .. "''" end main_gloss_text = main_gloss_text .. i18n.tocatlink(i18n['category_rfdef_equivalent']) end local synonym = expandTemplateForProperty(frame, sense, 'P5973', i18n['template_synonym']) if synonym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. synonym end local antonym = expandTemplateForProperty(frame, sense, 'P5974', i18n['template_antonym']) if antonym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. antonym end local hypernym = expandTemplateForProperty(frame, sense, 'P6593', i18n['template_hypernym']) if hypernym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. hypernym end if lex_cat == 'Q1084' or lex_cat == 'Q147276' then -- noun or proper noun local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-noun']) main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym elseif lex_cat == 'Q34698' then local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-adj']) main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym end table.insert(gloss_text_parts, main_gloss_text .. createicon(i18n['content_lang_code'], sense:getId())) for _, stmt in pairs(sense:getAllStatements('P8394')) do -- টিপ্পনীর উদ্ধৃতি local gloss_quote = termSpan({stmt.mainsnak.datavalue.value.text, stmt.mainsnak.datavalue.value.language}) if stmt.references[1] then local got_reference = getReference ( stmt.references[1].hash, stmt.references[1] ) gloss_quote = '"' .. gloss_quote .. '" ' .. got_reference[2] end table.insert(references_seen, stmt.references[1].hash) table.insert(gloss_text_parts, frame:extensionTag('ref', gloss_quote)) end for _, stmt in pairs(sense:getAllStatements('P1343')) do -- বর্ণিত উৎস -- TODO: do away with making fake reference objects local fake_reference = { ['snaks'] = {} } fake_reference.snaks['P248'] = { [1] = stmt.mainsnak } local qualifiers_order = stmt['qualifiers-order'] if qualifiers_order then for _, k in ipairs(qualifiers_order) do fake_reference.snaks[k] = stmt.qualifiers[k] end end fake_reference.hash = mw.hash.hashValue('sha3-512', serializeTable(fake_reference)) table.insert(references_seen, fake_reference.hash) local got_reference = getReference(fake_reference.hash, fake_reference) if got_reference[1] == nil then table.insert(gloss_text_parts, frame:extensionTag('ref', got_reference[2], {name = fake_reference.hash})) else table.insert(gloss_text_parts, frame:extensionTag{name = 'ref', content='', args = {name = got_reference[1]}}) end end local first_sense_image = '' local sense_images = sense:getAllStatements('P18') if next(sense_images) then first_sense_image = sense_images[1].mainsnak.datavalue.value end if first_sense_image ~= '' then table.insert(gloss_text_parts, '[[File:' .. first_sense_image .. "|thumb|'''" .. getLemmata(current_lexeme) .. "'''—" .. main_gloss_text .. ']]') end local idlinks = getExternalLinks(sense) if #idlinks > 0 then local idlinktext = '<small>(' for _, idlink in pairs(idlinks) do idlinktext = idlinktext .. idlink .. '\n' end idlinktext = idlinktext .. ')</small>' table.insert(gloss_text_parts, idlinktext) table.insert(idlinkset, idlinks) end local externallinks = getArticleLinks(frame, sense) if externallinks ~= '' then table.insert(gloss_text_parts, externallinks) end local new_notes = {} local sense_keys = { sense:getId(), string.sub(sense:getId(), string.find(sense:getId(), '-')+1) } for _, v in ipairs(sense_keys) do if args[v] then table.insert(new_notes, args[v]) end end if #new_notes > 0 then for _, v in ipairs(new_notes) do if i == 1 then table.insert(gloss_text_parts, '<br/>' .. v) else table.insert(gloss_text_parts, v) end end end local examples examples, references_seen = unpack(getExamples( current_lexeme, sense:getId(), references_seen )) local gloss_text = table.concat(gloss_text_parts, '\n') meanings:tag('li'):wikitext(gloss_text):wikitext(examples) end return {meanings, references_seen, idlinkset} end local function getPronunciationBaseForm() local base_form = nil -- (!) অন্য ভাষার শব্দের যদি অন্য রকম মূল ফর্ম থাকে সেগুলো এখানে নতুন if বিবৃতি দিয়ে যোগ করা যায়। if lang_code == 'bn' then if lex_cat == 'Q1084' then -- বিশেষ্য base_form = formWithSingleGrammaticalFeature( 'Q131105' ) -- কর্তৃকারক elseif lex_cat == 'Q24905' then -- ক্রিয়া base_form = formWithSingleGrammaticalFeature( 'Q1350145' ) -- ক্রিয়া বিশেষ্য end end if base_form == nil then for i, form in pairs(forms) do base_form = form break end end return base_form end local function getCombines( current_lexeme, frame ) local combines = '' local index_mappings = {} for i, stmt in pairs(current_lexeme:getAllStatements('P5238')) do if stmt.qualifiers and stmt.qualifiers['P1545'] then -- ক্রম local current_index = tonumber(stmt.qualifiers['P1545'][1].datavalue.value) index_mappings[current_index] = stmt end end if #index_mappings ~= 0 then for i, stmt in ipairs(index_mappings) do if stmt.mainsnak.datavalue then local part_lexeme_id = stmt.mainsnak.datavalue.value.id local part_lexeme = getEntity(part_lexeme_id) local current_substring = getLinkedLemmata(part_lexeme, frame) local part_etymology = getEtymology(part_lexeme, frame, 'partial') if part_etymology ~= '' and part_etymology then current_substring = current_substring .. ' (← ' .. part_etymology .. ')' end if combines == '' then combines = current_substring else -- @TODO: This should use the 'affix' and 'compound' templates instead. combines = combines .. ' + ' .. current_substring end end end end return combines end function getRoots(lexeme, frame) local stmts = lexeme:getAllStatements('P5920') if #stmts == 0 then return '', '', '' end local root_lexeme = getEntity(stmts[1].mainsnak.datavalue.value.id) return getLexemeLanguageCode(root_lexeme), '√' .. getLinkedLemmata(root_lexeme, frame), root_lexeme:getLemma('ar') end function getEtymology( current_lexeme, frame, mode ) -- @TODO: Fix the etymology chains that are not possible to render local etymology = '' local current_combines = getCombines(current_lexeme, frame) local root_lang, current_roots, root_str = getRoots(current_lexeme, frame) if mode ~= 'partial' and root_str then --frame:expandTemplate{title=i18n['template_root'], args={lang_code, root_lang, root_str}} end local stmts = current_lexeme:getAllStatements('P5191') local new_etymology_string if #stmts == 0 then if current_roots ~= '' and current_combines ~= '' and current_roots then return current_roots .. '<br/>(' .. current_combines .. ')' elseif current_roots ~= '' then if lang_code == 'ar' and mode ~= 'partial' and root_str ~= matched_lemma then return frame:expandTemplate{title=i18n['template_ar-rootbox'], args={root_str}} else return current_roots end else return current_combines end end local origin_lexeme_string for i, stmt in pairs(stmts) do local origin_lexeme_dv = stmt.mainsnak.datavalue -- If this is nil, the origin lexeme is not known. if origin_lexeme_dv then local origin_lexeme = getEntity(origin_lexeme_dv.value.id) local origin_lexeme_lang = getLabel(origin_lexeme:getLanguage()) local sitelink = i18n.wplink(origin_lexeme:getLanguage(), origin_lexeme_lang, wb) if sitelink ~= '' then origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. sitelink .. ')' else origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. origin_lexeme_lang .. ')' end if stmt.qualifiers and stmt.qualifiers['P5886'] then local mode_of_derivation = stmt.qualifiers['P5886'][1].datavalue.value.id if mode_of_derivation == 'Q1345001' then -- @TODO: Add support for showing gender origin_lexeme_string = frame:expandTemplate{title=i18n['template_borrowed'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_borrowing'] elseif mode_of_derivation == 'Q845079' then origin_lexeme_string = ustring.gsub(i18n['etymology_learned_borrowing'], '$1', origin_lexeme_string) elseif mode_of_derivation == 'Q56611986' then origin_lexeme_string = frame:expandTemplate{title=i18n['template_inherited'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_inheritance'] elseif mode_of_derivation == 'Q189743' then origin_lexeme_string = frame:expandTemplate{title=i18n['template_ellipsis'], args={lang_code, getLemmata(origin_lexeme)}} .. ' ' .. i18n['etymology_ellipsis'] end end local origin_origin = getEtymology(origin_lexeme, frame) if origin_origin ~= '' and origin_origin then new_etymology_string = origin_lexeme_string .. ' ← ' .. origin_origin else new_etymology_string = origin_lexeme_string end end if etymology == '' then etymology = new_etymology_string elseif origin_lexeme_string and etymology then etymology = etymology .. ' ' .. origin_lexeme_string elseif origin_lexeme_string and etymology == nil then etymology = origin_lexeme_string end end if current_roots ~= '' and etymology and current_roots then etymology = etymology .. ' ' .. current_roots elseif current_roots ~= '' and etymology == nil then etymology = current_roots end if current_combines ~= '' and etymology then etymology = etymology .. '<br/>(' .. current_combines .. ')' end return etymology end local function pronunciationBlock(block, value) return '* ' .. i18n['text_' .. block] .. ' ' .. value end local function getPronunciation(frame, current_lexeme, lang_name) local pronunciations = {} local base_form = getPronunciationBaseForm() local iast, iso15919_transcription, itrans, xsampa if base_form then for i, stmt in pairs(base_form:getAllStatements('P443')) do -- উচ্চারণের অডিও local pronunciation_file = stmt.mainsnak.datavalue.value local specifier_text = '' local specifiers = {} if stmt.qualifiers then for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন local qual = stmt.qualifiers[property_id] if qual then for _, qual in pairs(qual) do local stmt_value = qual.datavalue.value.id table.insert(specifiers, getLabel(stmt_value)) end end end end if #specifiers > 0 then specifier_text = table.concat(specifiers, "'', ''") end local audio_text if specifier_text ~= '' then audio_text = i18n['text_audio'] .. ' (' .. specifier_text .. ')' else audio_text = i18n['text_audio'] end table.insert(pronunciations, '* ' .. frame:expandTemplate{ title= i18n['template_audio'], args = {lang_name, pronunciation_file, audio_text} }) end iso15919_transcription = getOneValueForProperty(base_form, 'P5825') -- আইএসও ১৫৯১৯ প্রতিলিপিকরণ itrans = getOneValueForProperty(base_form, 'P8881') -- ITRANS iast = getOneValueForProperty(base_form, 'P7581') -- আইএএসটি প্রতিলিপিকরণ xsampa = getOneValueForProperty(base_form, 'P2859') local ipa_transcription = base_form:getAllStatements('P898') -- আধ্বব প্রতিলিপিকরণ -- @TODO: অডিও ও প্রতিলিপিকরণ দুটোই থাকলে একটার ঠিক পরেই আরেকটা দেখানো উচিত if #ipa_transcription ~= 0 then for i, stmt in pairs(ipa_transcription) do local ipa_text = stmt.mainsnak.datavalue.value local specifier_text = '' local specifiers = {} if stmt.qualifiers then for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন for l, qual in ipairs(stmt.qualifiers[property_id]) do table.insert(specifiers, getLabel( qual.datavalue.value.id )) end end end if #specifiers > 0 then specifier_text = "(''" .. table.concat(specifiers, "'', ''") .. "'') " end local syllable_count if lang_code == 'tr' then syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z10029|' .. ipa_text, frame) else syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z30837|' .. ipa_text, frame) end table.insert(pronunciations, '* ' .. specifier_text .. frame:expandTemplate{ title= i18n['template_ipa'], args = {lang_name, ipa_text} } .. '\n** ' .. syllable_count) end -- The following checks are ordered based on which one is expected to be true in a higher number of cases. elseif lang_code == 'bn' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='bn-IPA', }) elseif lang_code == 'ar' then local lemma = current_lexeme:getLemma('ar') table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ar-IPA', args={lemma} }) elseif lang_code == 'en' then table.insert(pronunciations, '* ' .. i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z29940|' .. matched_lemma, frame)) elseif lang_code == 'pl' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='pl-IPA', }) elseif lang_code == 'ko' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ko-IPA', }) elseif lang_code == 'fi' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='fi-IPA', }) elseif lang_code == 'ta' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ta-IPA', }) elseif lang_code == 'fax' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='fax-pron', }) end end -- {{আধ্বব|en|/ˈɪntəvjuː/}} if iso15919_transcription then table.insert(pronunciations, pronunciationBlock('iso15919', iso15919_transcription)) end if itrans then table.insert(pronunciations, pronunciationBlock('itrans', itrans)) end if iast then table.insert(pronunciations, pronunciationBlock('iast', iast)) end if xsampa then table.insert(pronunciations, pronunciationBlock('xsampa', xsampa)) end return table.concat(pronunciations, '\n') end local function getAlternativeSpellings( current_lexeme, frame ) local alt_spellings = {} for i, stmt in pairs(current_lexeme:getAllStatements('P11577')) do -- বিকল্প বানান if stmt.mainsnak.datavalue then table.insert(alt_spellings, '* ' .. frame:expandTemplate{title=i18n['template_alter'], args={lang_code, getLemmata(getEntity(stmt.mainsnak.datavalue.value.id), frame)}}) end end return table.concat(alt_spellings, '\n') end function get_any_notes(sections, args, keys) local notes = {} for i, v in ipairs(keys) do if args[v] then table.insert(notes, args[v]) end end return notes end local function add_specific_notes(sections, notes) for i, v in ipairs(notes) do table.insert(sections, v) end end local function add_any_notes(sections, args, keys, heading) for i, v in ipairs(keys) do if args[v] then if heading then table.insert(sections, heading) end table.insert(sections, args[v]) end end end local function getMatchingLemmaForPageTitle(lexeme, title) local lemmas = lexeme:getLemmas() local match for _, lemma_entry in ipairs(lemmas) do local lemma = lemma_entry[1] if lemma == title then match = lemma break end end if match == nil then if lang_code == 'ar' then match = lexeme:getLemma('ar') elseif lang_code == 'rhg' then match = lexeme:getLemma('rhg-arab') elseif lang_id == 'Q11051ur' then match = lexeme:getLemma('ur') elseif lang_code == 'arz' then match = lexeme:getLemma('arz') end end return match end -- Returns the grammatical gender of a lexeme local function getGenderOfLexeme(lexeme) local gender = '' local stmts = lexeme:getAllStatements('P5185') -- ব্যাকরণগত লিঙ্গ if #stmts ~= 0 and stmts[1].mainsnak.datavalue then if #stmts == 1 then local gender_qid = stmts[1].mainsnak.datavalue.value.id if gender_qid == 'Q499327' then gender = 'm' elseif gender_qid == 'Q1775415' then gender = 'f' elseif gender_qid == 'Q1775461' then gender = 'n' elseif gender_qid == 'Q1305037' then gender = 'c' end end else for i, stmt in pairs(stmts) do local qid = stmts[i].mainsnak.datavalue if qid then qid = qid.value.id end if qid == 'Q499327' then gender = gender .. 'm' elseif qid == 'Q1775415' then gender = gender .. 'f' end end end if gender == '' then return nil end return gender end -- Returns the semantic gender for a sense -- @TODO: Complete this local function getGenderForSense(sense) local gender = '' local stmts = sense:getAllStatements('P10339') -- semantic gender if #stmts ~= 0 and stmts[1].mainsnak.datavalue then if #stmts == 1 then local gender_qid = stmts[1].mainsnak.datavalue.value.id if gender_qid == 'Q6581097' then gender = 'm' elseif gender_qid == 'Q1775415' then gender = 'f' elseif gender_qid == 'Q1775461' then gender = 'n' elseif gender_qid == 'Q1305037' then gender = 'c' elseif gender_qid == 'Q70853302' then gender = 'mfbysense' end end else for i, stmt in pairs(stmts) do local qid = stmts[i].mainsnak.datavalue if qid then qid = qid.value.id end if qid == 'Q499327' then gender = gender .. 'm' elseif qid == 'Q1775415' then gender = gender .. 'f' end end end return gender end local function buildLanguageAgnosticInflectionTable() local has_image = false local form_images = {} for i, form in ipairs(forms) do local form_image = form:getAllStatements('P7407') if next(form_image) then form_images[i] = form_image[1].mainsnak.datavalue.value has_image = true end end local table_class = "wikitable mw-collapsible sortable" if not has_image then table_class = table_class .. " mw-collapsed" end local text = "{| class='" .. table_class .. "' style='border:solid 1px rgb(80%,80%,100%); text-align:center;'\n" text = text .. "|+ " .. i18n['heading_inflection_table'] .. "\n" text = text .. "|- \n" text = text .. "! " .. i18n['heading_form'] .. " !! " .. i18n['heading_grammatical_features'] if has_image then text = text .. " !! " .. (i18n['heading_image']) end text = text .. " \n" for i, form in ipairs(forms) do local rep = form:getRepresentations() local feat = form:getGrammaticalFeatures() local rep_text = "" for j, r in pairs(rep) do if rep_text == "" then rep_text = r[1] else rep_text = rep_text .. " / " .. r[1] end end local feat_text = "" if feat then for j, f in ipairs(feat) do local label = getLabel(f) or f if feat_text == "" then feat_text = label else feat_text = feat_text .. ", " .. label end end end text = text .. "|-\n" text = text .. "| " .. (rep_text ~= "" and rep_text or "—") text = text .. " || " .. (feat_text ~= "" and feat_text or "—") if has_image then local image_cell = "—" if form_images[i] then image_cell = "[[চিত্র:" .. form_images[i] .. "|50px]]" end text = text .. " || " .. image_cell end text = text .. "\n" end text = text .. "|}" return text end function p.all(frame) local args = getArgs(frame) local lexeme_id = args[1] local current_lexeme = getEntity(lexeme_id) local language = current_lexeme:getLanguage() lang_id = language local senses = current_lexeme:getSenses() local add_heading = true forms = current_lexeme:getForms() if args[2] then local val = mw.text.trim(tostring(args[2])) if val == "false" or val == "0" or val == "না" then add_heading = false end end local references_seen = {} local sections = {} local title = mw.title.getCurrentTitle().text local lang_category = getLanguageForCategories(title, true) local lang_name = getLabel(lang_category) local conj_class = getLastValueForProperty(current_lexeme, 'P5186') if conj_class then conj_class = wb.getLabelByLang(getLastValueForProperty(current_lexeme, 'P5186').id, 'en'):gsub('Form ', '') end if add_heading == true then local lang_heading = heading_level(lang_name, 2) table.insert(sections, lang_heading) end lang_code = getLexemeLanguageCode(current_lexeme) matched_lemma = getMatchingLemmaForPageTitle(current_lexeme, title) lex_cat = current_lexeme:getLexicalCategory() local cat = i18n.lang_category(getLabel(lex_cat), lang_name) local lex_cat_template, ety_added, pron_added, alt_added if cat then table.insert(sections, heading_level(getLabel(lex_cat) .. cat .. frame:expandTemplate{ title = i18n['template_anchor'], args = { lexeme_id } }, 3)) table.insert(sections, frame:expandTemplate{ title= i18n['template_lexeme'], args = {lexeme_id} }) add_any_notes(sections, args, i18n['manual_category']) local etymology = getEtymology( current_lexeme, frame ) if etymology ~= '' and etymology then table.insert(sections, heading_level(i18n['heading_etymology'], 4)) table.insert(sections, tostring(etymology)) ety_added = true end if ety_added then add_any_notes(sections, args, i18n['manual_etymology']) else add_any_notes(sections, args, i18n['manual_etymology'], heading_level(i18n['heading_etymology'], 4)) end local pronunciation = getPronunciation( frame, current_lexeme, lang_name) if pronunciation ~= '' then table.insert(sections, heading_level(i18n['heading_pronunciation'], 4)) table.insert(sections, tostring(pronunciation)) pron_added = true end if pron_added then add_any_notes(sections, args, i18n['manual_pronunciation']) else add_any_notes(sections, args, i18n['manual_pronunciation'], heading_level(i18n['heading_pronunciation'], 4)) end local alternative_spellings = getAlternativeSpellings(current_lexeme, frame) if alternative_spellings ~= '' then table.insert(sections, heading_level(i18n['heading_alternative_spellings'], 4)) table.insert(sections, alternative_spellings) alt_added = true end if alt_added then add_any_notes(sections, args, i18n['manual_alternative_spellings']) else add_any_notes(sections, args, i18n['manual_alternative_spellings'], heading_level( i18n['heading_alternative_spellings'], 4)) end local gender = getGenderOfLexeme(current_lexeme) if lang_code and lang_code ~= 'ksy' and lang_code ~= 'rkt' then -- Skip for Kharia Thar, Rangpuri if lex_cat == 'Q34698' then -- বিশেষণ if lang_code == 'en' or lang_code == 'bn' then if #forms <= 1 then lex_cat_template = frame:expandTemplate{title= lang_code .. '-বিশেষণ'} end else if lang_code ~= 'fr' then lex_cat_template = safeExpand(frame, lang_code .. '-adj') if not lex_cat_template then lex_cat_template = safeExpand(frame, lang_code .. '-বিশেষণ') end end end elseif lex_cat == 'Q1084' then -- @TODO: Also check for plural forms -- The following checks are ordered based on which one is expected to be true in a higher number of cases. if language == 'Q13955' then if matched_lemma then lex_cat_template = safeExpand(frame, 'ar-noun', {matched_lemma,gender}) else lex_cat_template = frame:expandTemplate{title='ar-noun', args={nil,gender}} end elseif language == 'Q29919' then lex_cat_template = frame:expandTemplate{title='arz-noun', args={g=gender}} elseif language == 'Q397' then if matched_lemma then lex_cat_template = frame:expandTemplate{title='la-noun', args={matched_lemma,g=gender}} end elseif language == 'Q11059' then lex_cat_template = frame:expandTemplate{title='sa-noun', args={g=gender}} elseif language ~= 'Q1860' then -- These templates require the gender to be passed as the 1st argument. lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix'], {gender}) if not lex_cat_template then lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix_fallback'], {gender}) end end elseif lex_cat == 'Q24905' then -- ক্রিয়া if lang_code == 'ar' then if conj_class then lex_cat_template = frame:expandTemplate{title='ar-verb', args={conj_class}} end else lex_cat_template = safeExpand(frame, lang_code .. '-verb') end end end -- elseif lex_cat == 'Q147276' then -- lex_cat_template = safeExpand(frame, lang_code .. '-proper noun', {gender}) -- if not lex_cat_template then -- lex_cat_template = safeExpand(frame, lang_code .. '-নামবাচক বিশেষ্য', {gender}) -- end end if lex_cat_template then table.insert(sections, lex_cat_template) else if matched_lemma then table.insert(sections, heading_level(matched_lemma, 4)) else table.insert(sections, i18n.tocatlink(i18n['category_no_matching_lemma'])) end end local meanings, references_seen, sense_extlinks = unpack(getMeanings( frame, args, current_lexeme, senses, references_seen, lang_name)) table.insert(sections, tostring(meanings)) add_any_notes(sections, args, i18n['manual_meaning']) local instance_of = current_lexeme:getAllStatements('P31') -- সত্ত্বার ধরন if #instance_of ~= 0 then local instance_of_entity = instance_of[1].mainsnak.datavalue.value.id if instance_of_entity == 'Q376431' then -- বর্ণের নাম table.insert(sections, i18n.tocatlink(lang_code .. ':রং')) else table.insert(sections, heading_level(i18n['heading_special_info'], 4) .. i18n['text_instance_of'] .. ' ' .. '[[d:' .. instance_of_entity .. '|' .. getLabel(instance_of_entity) .. ']]' .. i18n['text_sentence_terminator']) end end if lex_cat ~= 'Q9788' then local translations = getTranslations(frame, senses) if translations then table.insert(sections, translations) end end -- (!) বিশেষ ভাষার বিভক্তির সারণি যদি থাকে সেগুলো এখানে নতুন if বিবৃতি যোগ করা যায়। if next(forms) then if language == 'Q9610' then -- বাংলা if lex_cat == 'Q24905' then local conjTable = require('মডিউল:আভিধানিক উপাত্ত/Q9610').getConjTable(frame, forms) table.insert(sections, conjTable) elseif lex_cat == 'Q1084' or lex_cat == 'Q36224' or lex_cat == 'Q147276' or lex_cat == 'Q956030' then table.insert(sections, callWikifunctionsFunction('Z33243|' .. lexeme_id .. '|', frame)) else if #forms > 1 then table.insert(sections, buildLanguageAgnosticInflectionTable()) end end --elseif language == 'Q13955' then -- ar -- if lex_cat == 'Q1084' then -- table.insert(sections, frame:expandTemplate{title='ar-decl-noun', args={lemma}}) -- end --elseif lang_code == 'ar' and lex_cat == 'Q24905' then --table.insert(sections, frame:expandTemplate{title='ar-conj', args={conj_class}}) elseif language == 'Q11051' and lex_cat == 'Q1084' then -- de if lang_id == "Q11051hi" then table.insert(sections, callWikifunctionsFunction('Z37337|' .. lexeme_id .. '|', frame)) else table.insert(sections, callWikifunctionsFunction('Z37346|' .. lexeme_id .. '|', frame)) end elseif language == 'Q188' and lex_cat == 'Q1084' then -- de table.insert(sections, callWikifunctionsFunction('Z28602|' .. lexeme_id .. '|', frame)) elseif lang_code == 'as' and lex_cat == 'Q1084' then table.insert(sections, callWikifunctionsFunction('Z37219|' .. lexeme_id .. '|', frame)) elseif lang_code == 'ml' and lex_cat == 'Q1084' then table.insert(sections, callWikifunctionsFunction('Z37217|' .. lexeme_id .. '|', frame)) --elseif language == 'Q397' and lex_cat == 'Q1084' then -- la -- table.insert(sections, callWikifunctionsFunction('Z26333|' .. matched_lemma .. '|', frame)) elseif language == 'Q150' and lex_cat == 'Q34698' then -- fr table.insert(sections, callWikifunctionsFunction('Z36435|' .. lexeme_id .. '|', frame)) elseif language == 'Q652' and lex_cat == 'Q34698' then -- ইতালীয় table.insert(sections, callWikifunctionsFunction('Z36407|' .. lexeme_id .. '|', frame)) elseif language == 'Q809' or language == 'Q9058' or language == 'Q6654' or language == 'Q9056' then -- পোলীয়, স্লোভাক, ক্রোয়েশীয়, চেক table.insert(sections, callWikifunctionsFunction('Z36421|' .. lexeme_id .. '|', frame)) elseif #forms > 1 and language ~= 'Q150' then table.insert(sections, buildLanguageAgnosticInflectionTable()) end end if lex_cat == 'Q134830' then table.insert(sections, frame:expandTemplate{title='prefixsee', args={lang_code}}) elseif lex_cat == 'Q102047' then table.insert(sections, frame:expandTemplate{title='suffixsee', args={lang_code}}) -- elseif lex_cat == 'Q111029' then -- table.insert(sections, frame:expandTemplate{title='rootsee', args={'+', lang_code, matched_lemma}}) end local reference_notes = get_any_notes(sections, args, i18n['manual_reference']) if #references_seen > 0 or #reference_notes > 0 then table.insert(sections, heading_level(i18n['heading_references'], 4)) table.insert(sections, frame:extensionTag('references')) add_specific_notes(sections, reference_notes) end local external_link_table = getExternalLinks ( current_lexeme ) if #external_link_table > 0 then local external_links = '* ' .. table.concat(external_link_table, '\n* ') table.insert(sections, heading_level(i18n['heading_external_links'], 4)) table.insert(sections, external_links) end add_any_notes(sections, args, i18n['manual_external_link']) if #references_seen == 0 and #reference_notes == 0 and sense_extlinks and #sense_extlinks == 0 and #external_link_table == 0 and #get_any_notes(sections, args, i18n['manual_external_link']) == 0 then table.insert(sections, i18n.rfref_category(lang_name)) end return table.concat(sections,"\n\n") end return p kbf2y32eq9t7z9395sx4b0xtfnxgchq 514046 514040 2026-07-25T14:49:02Z Redmin 6857 514046 Scribunto text/plain local p = {} local i18n = require('মডিউল:আভিধানিক উপাত্ত/i18n') local references = require('মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ').format local getArgs = require('Module:Arguments').getArgs local wb = mw.wikibase local ustring = mw.ustring local html = mw.html local mw_lang = mw.language local entity_cache = {} local reference_cache = {} local forms local lang_code local lex_cat local matched_lemma local lang_id local function wrapStringInWikilinks(str) local exceptions = i18n.nolinks local result = str:gsub('(%S+)', function(token) local word, trailing_char = token:match('^(.-)([;,.:!’?]*)$') local wrapped = word:gsub('[^(-/]+', function(part) if exceptions[part] then return part else return '[[' .. mw.text.nowiki(part) .. '#' .. i18n['content_lang_name'] .. '|' .. mw.text.nowiki(part) .. ']]' end end) return wrapped .. trailing_char end) return result end local function serializeTable(val, name, skipnewlines, depth) -- https://stackoverflow.com/a/6081639 skipnewlines = skipnewlines or false depth = depth or 0 local tmp = string.rep(" ", depth) if name then tmp = tmp .. name .. " = " end if type(val) == "table" then tmp = tmp .. "{" .. (not skipnewlines and "\n" or "") for k, v in pairs(val) do tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "") end tmp = tmp .. string.rep(" ", depth) .. "}" elseif type(val) == "number" then tmp = tmp .. tostring(val) elseif type(val) == "string" then tmp = tmp .. string.format("%q", val) elseif type(val) == "boolean" then tmp = tmp .. (val and "true" or "false") else tmp = tmp .. "\"[inserializable datatype:" .. type(val) .. "]\"" end return tmp end -- Use this to safely expand templates when you are not sure that they exist. local function safeExpand(frame, title, args) local _, result = pcall(function() return frame:expandTemplate{ title = title, args = args } end) if result:find('does not exist') then -- expandTemplate{} doesn't seem to throw any error that can be handled with pcall() so string search is the only viable option. return nil end return result end local function checkTitleCodePointInRange(title, start_point, end_point) return ustring.find( title, '[' ..ustring.char(start_point) .. '-' .. ustring.char(end_point) .. ']' ) end local function getLanguageForCategories(title) -- বিশেষ ভাষার জন্য if lang_id == 'Q11051' then -- হিন্দি/উর্দু if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- উর্দু lang_id = 'Q11051ur' elseif checkTitleCodePointInRange(title, 0x0900, 0x097f) then -- হিন্দি lang_id = 'Q11051hi' end elseif lang_id == 'Q58635' then -- পাঞ্জাবি if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- শাহমুখী lang_id = 'Q58635pnb' elseif checkTitleCodePointInRange(title, 0x0a00, 0x0a7f) then -- গুরুমুখী lang_id = 'Q58635pa' end elseif lang_id == 'Q56356571' then -- নয়া ফার্সি ভাষা if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- ফার্সি (ইরান/আফগানিস্তান) lang_id = 'Q56356571fa' elseif checkTitleCodePointInRange(title, 0x0400, 0x04ff) then -- তাজিক lang_id = 'Q56356571tg' end elseif lang_id == 'Q256' then if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then lang_id = 'Q56356571ota' else lang_id = 'Q56356571tr' end end return lang_id end local function getEntity(id) if entity_cache[id] == nil then entity_cache[id] = wb.getEntity(id) or error('Invalid ID provided: ' .. id) end return entity_cache[id] ~= false and entity_cache[id] or nil end -- Use this function to get the label of an item even if that item does not have any label in the wiki's content language or English. local function getLabel(id) if id == 'Q11051hi' then return 'হিন্দি' elseif id == 'Q11051ur' then return 'উর্দু' elseif id == 'Q56356571fa' then return 'ফার্সি' elseif id == 'Q56356571tg' then return 'তাজিক' elseif id == 'Q58635pa' or id == 'Q58635pnb' then return 'পাঞ্জাবি' elseif id == 'Q256tr' then return 'তুর্কি' elseif id == 'Q256ota' then return 'উসমানীয় তুর্কি' end local label = wb.getLabel(id) if label then return label end local labels = getEntity(id).labels if not labels then return id end for _, v in pairs(labels) do if v and v.value then return v.value end end end local function getReference(id, reference) local out_id = nil local url_value if reference_cache[id] == nil then local ref_text = references(reference, wb, mw_lang, i18n['content_lang_code'], i18n['wikipedia']) if reference.snaks then if reference.snaks['P248'] then for _, snak in pairs(reference.snaks['P248']) do if snak.datavalue and snak.datavalue.value.id == 'Q428' then -- কুরআন ref_text = ustring.gsub(ref_text, 'নামক অনুচ্ছেদ', 'নং আয়াত') break end end end if reference.snaks['P854'] then local snak = reference.snaks['P854'][1] if snak.datavalue then url_value = snak.datavalue.value end end end if url_value then ref_text = ref_text .. ', [' .. url_value .. ' সংযোগ]' end reference_cache[id] = ref_text else out_id = id end return {out_id, reference_cache[id]} end -- Returns the Wiktionary language code for a lexeme entity or nil, in the latter case, getLemmas() can be relied on to fetch the language code by stripping extraneous bits from the 'language' string as necessary local function getLexemeLanguageCode(lexeme) local lang_item_id = lexeme:getLanguage() local lang_entity = getEntity(lang_item_id) for i, statement_property in ipairs({'P305','P424', 'P220'}) do -- আইইটিএফ ভাষা ট্যাগ, উইকিমিডিয়া ভাষা কোড, আইএসও ৬৩৯-৩ local statements = lang_entity:getBestStatements(statement_property) if statements[1] then local code = statements[1].mainsnak.datavalue.value if code == 'hr' then return 'sh' elseif code == 'pan' then return 'pa' else return code end end end end local function getLexemeLanguageCodeForEtymology(lexeme) local lang_item_id = lexeme:getLanguage() if lang_item_id == 'Q56356571' then return 'fa' -- @TODO: Implement a proper solution end return getLexemeLanguageCode(lexeme) end -- Return the first form of the lexeme which has exactly the given grammatical feature. local function formWithSingleGrammaticalFeature( item_id ) for i = 1, #forms do local grammaticalFeatures = forms[i]:getGrammaticalFeatures() if #grammaticalFeatures == 1 and grammaticalFeatures[1] == item_id then return forms[i] end end return nil end local function getArticleLinkTemplate(frame, stmt_value) local template = '' local sitelink = getEntity(stmt_value):getSitelink(i18n['wikipedia']) if sitelink then template = frame:expandTemplate{ title=i18n['template_wikipedia'], args={sitelink} } end return template end local function getArticleLinks(frame, sense ) local article_links = '' for i, stmt in pairs(sense:getAllStatements('P5137')) do -- এই অর্থের জন্য আইটেম article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id) end for i, stmt in pairs(sense:getAllStatements('P9970')) do -- এই অর্থের জন্য বিধেয় article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id) end return article_links end -- @TODO: Generalise local function expandTemplateForProperty(frame, object, property, template) local lemmas = {} local n = 0 for _, stmt in pairs(object:getAllStatements(property)) do local lex = wb.lexeme.splitLexemeId(stmt.mainsnak.datavalue.value.id) if lex then lex = getEntity(lex) n = n + 1 lemmas[n] = lex:getLemma(lang_code) end end if not lang_code or n == 0 then return '' end -- Build args: first lang_code, then lemmas local args = {lang_code} for i = 1, n do args[#args + 1] = lemmas[i] end return frame:expandTemplate{ title = template, args = args } end local function getExternalLinks( entity ) -- T418639 local external_links = {} if entity.claims == nil then return external_links end local formatter_urls = require('মডিউল:আভিধানিক উপাত্ত/urls').formatter_urls for property_id, statements in pairs(entity.claims) do local formatter_url = formatter_urls[property_id] if formatter_url then local property_source = wb.getBestStatements(property_id, 'P9073') local source_name if next(property_source) then source_name = getLabel(property_source[1].mainsnak.datavalue.value.id) or property_source[1].mainsnak.datavalue.value.id else source_name = getLabel(property_id) or property_id end for i = 1, #statements do local stmt = statements[i] if stmt.mainsnak.datavalue then local formatted_link = ustring.gsub( ustring.gsub(formatter_url, '$1', stmt.mainsnak.datavalue.value), ' ', '+' ) table.insert(external_links, '[' .. formatted_link .. ' ' .. source_name .. ']') end end end end return external_links end p.getExternalLinks = getExternalLinks -- রেখে দিন যাতে ডিবাগিং সম্ভব হয় local function heading_level(text, level) return '<h' .. level .. '>' .. ' ' .. text .. ' ' .. '</h' .. level .. '>' end local function termSpan( term ) local text = term[1] local lang = term[2] local dir = mw_lang.new( lang ):getDir() local span = html.create( 'span' ) span:attr( 'lang', lang ) :attr( 'dir', dir ) :wikitext( text ) return tostring( span ) end local function getLemmata( current_lexeme ) local lemma_string = '' for i, rep in pairs(current_lexeme:getLemmas()) do if lemma_string == '' then lemma_string = termSpan(rep) else lemma_string = lemma_string .. '/' .. termSpan(rep) end end return lemma_string end local function getLinkedLemmata(lexeme, frame) local lemma_string = '' local lang for i, rep in pairs(lexeme:getLemmas()) do lang = getLexemeLanguageCode(lexeme) if lang == nil then lang = string.gsub(rep[2], '-%S+', '') end if lemma_string == '' then lemma_string = frame:expandTemplate{title='link', args={lang, rep[1]}} else lemma_string = lemma_string .. '/' .. frame:expandTemplate{title='link', args={lang, rep[1]}} end end return lemma_string end local function getExamples( current_lexeme, sense_id, references_seen ) local examples = html.create('dl') local example_text, example_lang, example_form, example_str for i, stmt in pairs(current_lexeme:getAllStatements('P5831')) do -- ব্যবহারের উদাহরণ if stmt.qualifiers and stmt.qualifiers['P6072'] and stmt.qualifiers['P6072'][1].datavalue.value.id == sense_id then -- বিষয়ে লেক্সিমের অর্থ example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>') example_lang = stmt.mainsnak.datavalue.value.language local example_form_strs = {} if stmt.qualifiers['P1810'] then table.insert(example_form_strs, stmt.qualifiers['P1810'][1].datavalue.value) elseif stmt.qualifiers['P5830'] then example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ for _, rep in pairs(example_form:getRepresentations()) do table.insert(example_form_strs, rep[1]) end end for _, example_form_str in pairs(example_form_strs) do local new_example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''") if new_example_text ~= example_text then example_str = termSpan({new_example_text, example_lang}) break end example_text = new_example_text end if example_str == nil then example_str = termSpan({example_text, example_lang}) end local reference_text = '' if stmt.references then for j, reference in pairs(stmt.references) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. got_reference[2] end end if example_str then examples:tag('dd'):wikitext("''" .. example_str .. "''") if reference_text ~= '' then examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text) end end end end for i, stmt in pairs(wb.getAllStatements(sense_id, 'P5831')) do -- ব্যবহারের উদাহরণ example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>') example_lang = stmt.mainsnak.datavalue.value.language local example_form_str = nil if stmt.qualifiers then if stmt.qualifiers['P5830'] then example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- subject lexeme form end if stmt.qualifiers['P1810'] then example_form_str = stmt.qualifiers['P1810'][1].datavalue.value end end if example_form and example_form_str == nil then example_form_str = example_form:getRepresentation(i18n['content_lang_code']) end if example_form and example_form_str == nil then example_form_str = example_form:getRepresentations()[1][1] end if example_form_str then example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''") end example_str = termSpan({example_text, example_lang}) local reference_text = '' if stmt.references then for j, reference in pairs(stmt.references) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. got_reference[2] end end if example_str then examples:tag('dd'):wikitext("''" .. example_str .. "''") if reference_text ~= '' then examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text) end end end return { tostring(examples) , references_seen } end -- This calls frame:preprocess() instead of :callParserFunction() because the latter does not work for Wikifunctions function calls yet (see https://www.wikifunctions.org/wiki/Wikifunctions:Embedded_function_calls). local function callWikifunctionsFunction(args, frame) return frame:preprocess('{{#function:' .. args .. '}}') .. i18n.tocatlink('উইকিফাংশন্স-এর ফাংশন ব্যবহার করা পাতা') end local function getOneValueForProperty(object, property) local val local stmts = object:getAllStatements(property) if #stmts ~= 0 then val = stmts[1].mainsnak.datavalue.value end return val end local function getLastValueForProperty(object, property) local val, count local stmts = object:getAllStatements(property) for i, j in ipairs(stmts) do count = i end if count then val = stmts[count].mainsnak.datavalue.value end return val end local function getTranslations(frame, senses) if #senses == 0 then return nil end local all_translations = {} local wmlang, item, label for _, sense in pairs(senses) do local translation_set = {} local gloss = sense:getGloss(i18n['content_lang_code']) if lex_cat ~= 'Q34698' then item = getOneValueForProperty(sense, 'P5137') if item then item = item.id label = getLabel(item) end end if item then wmlang = require("Module:wikimedia languages") end for _, stmt in pairs(sense:getAllStatements('P5972')) do local translation = stmt.mainsnak.datavalue.value.id local lexeme_id = wb.lexeme.splitLexemeId(translation) local trans_lexeme = getEntity(lexeme_id) local lang_name = getLabel(trans_lexeme:getLanguage()) local trans_code = getLexemeLanguageCode(trans_lexeme) if trans_code then table.insert(translation_set, lang_name .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={trans_code, getLinkedLemmata(trans_lexeme, frame) .. '<br/>'}}) else table.insert(translation_set, lang_name .. ': ' .. getLinkedLemmata(trans_lexeme, frame) .. '<br/>' .. i18n.trans_category(lang_name)) end end if item then for _, v in pairs(getEntity(item).labels) do if string.find(v.language, '-') == nil then -- @TODO: Implement deduplication of translation and get rid of this check local lang = wmlang.getByCode(v.language) local wikt = lang:getWiktionaryLanguage() if wikt:hasType('regular') then table.insert(translation_set, getLabel(wikt:getWikidataItem()) .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={wikt:getCode(), v.value .. '<br/>'}}) end end end end if #translation_set > 0 then local block = frame:expandTemplate{ title = i18n['template_trans-top'], args = { gloss or label } } block = block .. table.concat(translation_set, '\n') .. frame:expandTemplate{ title = i18n['template_trans-bottom'] } table.insert(all_translations, block) end end if #all_translations == 0 then return nil end return heading_level(i18n['heading_translation'], 4) .. ' \n' .. table.concat(all_translations, '\n') end local createicon = function(langcode, entityID, propertyID) langcode = langcode or "" propertyID = propertyID or "" local icon = "&nbsp;<span class='penicon autoconfirmed-show'>[[" -- "&nbsp;<span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge .. "File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt=" .. i18n['edit_wikidata'] .. "|link=https://www.wikidata.org/entity/" .. entityID if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end if propertyID ~= "" then icon = icon .. "#" .. propertyID end icon = icon .. "|" .. i18n['edit_wikidata'] .. "]]</span>" return icon end local function getMeanings(frame, args, current_lexeme, senses, references_seen, language_name) if #senses == 0 then return {createicon(i18n['content_lang_code'], current_lexeme:getId()) .. "''" .. i18n['text_category_rfdef'] .. "''" .. i18n.tocatlink(i18n['category_rfdef']), references_seen} end local meanings = html.create( 'ol' ) local idlinkset = {} for i, sense in pairs(senses) do local item_label_gloss_parts = {} local gloss_text_parts = {} local main_gloss_text = frame:expandTemplate{ title=i18n['template_anchor'], args={sense:getId()} } local specifiers = {} for k, property_id in ipairs({'P6084', 'P6191', 'P9488'}) do -- অবস্থান যেখানে শব্দার্থ ব্যবহৃত, যে রীতিতে শব্দার্থ ব্যবহৃত হয়, যে ক্ষেত্রে ব্যবহৃত for _, stmt in pairs(sense:getAllStatements(property_id)) do local stmt_value = stmt.mainsnak.datavalue.value.id local reference_text = '' local refs = stmt.references if refs then for j, reference in pairs(refs) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. frame:extensionTag('ref', got_reference[2]) end end local val = getLabel(stmt_value) table.insert(specifiers, val .. reference_text) if property_id == 'P9488' and lang_code ~= nil then table.insert(item_label_gloss_parts, i18n.tocatlink(lang_code .. ':' .. val)) end end end if #specifiers > 0 then main_gloss_text = main_gloss_text .. "(''" .. table.concat(specifiers, "'', ''") .. "'') " end local gloss = sense:getGloss( i18n['content_lang_code'] ) if gloss then main_gloss_text = main_gloss_text .. wrapStringInWikilinks(gloss) if gloss:match('^প্রদত্ত%s*(%S-)%s*নাম$') then -- given names main_gloss_text = main_gloss_text .. i18n.tocatlink(language_name .. ' ' .. i18n['category_given_names']) end else local other_gloss_text, other_gloss_lang, item_label local stmt_value = getOneValueForProperty(sense, 'P5137') if stmt_value then stmt_value = stmt_value.id item_label = getLabel(stmt_value) end if item_label then table.insert(item_label_gloss_parts, '[[:d:' .. stmt_value .. '|' .. item_label .. ']]') end if #item_label_gloss_parts > 0 then other_gloss_text = table.concat(item_label_gloss_parts, '; ') end if other_gloss_text == nil then for _, fallback_lang in ipairs(mw_lang.getFallbacksFor( i18n['content_lang_code'] )) do if sense:getGloss( fallback_lang ) then other_gloss_text, other_gloss_lang = sense:getGloss( fallback_lang ) end end if other_gloss_lang == nil then local glosses = sense:getGlosses() for _, gloss in pairs(glosses) do other_gloss_text = gloss[1] other_gloss_lang = gloss[2] break end end main_gloss_text = main_gloss_text .. other_gloss_text .. "<sup><em>" .. mw_lang.fetchLanguageName(other_gloss_lang, i18n['content_lang_code']) .. "</em></sup>" else main_gloss_text = main_gloss_text .. "''" .. other_gloss_text .. "''" end main_gloss_text = main_gloss_text .. i18n.tocatlink(i18n['category_rfdef_equivalent']) end local synonym = expandTemplateForProperty(frame, sense, 'P5973', i18n['template_synonym']) if synonym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. synonym end local antonym = expandTemplateForProperty(frame, sense, 'P5974', i18n['template_antonym']) if antonym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. antonym end local hypernym = expandTemplateForProperty(frame, sense, 'P6593', i18n['template_hypernym']) if hypernym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. hypernym end if lex_cat == 'Q1084' or lex_cat == 'Q147276' then -- noun or proper noun local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-noun']) main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym elseif lex_cat == 'Q34698' then local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-adj']) main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym end table.insert(gloss_text_parts, main_gloss_text .. createicon(i18n['content_lang_code'], sense:getId())) for _, stmt in pairs(sense:getAllStatements('P8394')) do -- টিপ্পনীর উদ্ধৃতি local gloss_quote = termSpan({stmt.mainsnak.datavalue.value.text, stmt.mainsnak.datavalue.value.language}) if stmt.references[1] then local got_reference = getReference ( stmt.references[1].hash, stmt.references[1] ) gloss_quote = '"' .. gloss_quote .. '" ' .. got_reference[2] end table.insert(references_seen, stmt.references[1].hash) table.insert(gloss_text_parts, frame:extensionTag('ref', gloss_quote)) end for _, stmt in pairs(sense:getAllStatements('P1343')) do -- বর্ণিত উৎস -- TODO: do away with making fake reference objects local fake_reference = { ['snaks'] = {} } fake_reference.snaks['P248'] = { [1] = stmt.mainsnak } local qualifiers_order = stmt['qualifiers-order'] if qualifiers_order then for _, k in ipairs(qualifiers_order) do fake_reference.snaks[k] = stmt.qualifiers[k] end end fake_reference.hash = mw.hash.hashValue('sha3-512', serializeTable(fake_reference)) table.insert(references_seen, fake_reference.hash) local got_reference = getReference(fake_reference.hash, fake_reference) if got_reference[1] == nil then table.insert(gloss_text_parts, frame:extensionTag('ref', got_reference[2], {name = fake_reference.hash})) else table.insert(gloss_text_parts, frame:extensionTag{name = 'ref', content='', args = {name = got_reference[1]}}) end end local first_sense_image = '' local sense_images = sense:getAllStatements('P18') if next(sense_images) then first_sense_image = sense_images[1].mainsnak.datavalue.value end if first_sense_image ~= '' then table.insert(gloss_text_parts, '[[File:' .. first_sense_image .. "|thumb|'''" .. getLemmata(current_lexeme) .. "'''—" .. main_gloss_text .. ']]') end local idlinks = getExternalLinks(sense) if #idlinks > 0 then local idlinktext = '<small>(' for _, idlink in pairs(idlinks) do idlinktext = idlinktext .. idlink .. '\n' end idlinktext = idlinktext .. ')</small>' table.insert(gloss_text_parts, idlinktext) table.insert(idlinkset, idlinks) end local externallinks = getArticleLinks(frame, sense) if externallinks ~= '' then table.insert(gloss_text_parts, externallinks) end local new_notes = {} local sense_keys = { sense:getId(), string.sub(sense:getId(), string.find(sense:getId(), '-')+1) } for _, v in ipairs(sense_keys) do if args[v] then table.insert(new_notes, args[v]) end end if #new_notes > 0 then for _, v in ipairs(new_notes) do if i == 1 then table.insert(gloss_text_parts, '<br/>' .. v) else table.insert(gloss_text_parts, v) end end end local examples examples, references_seen = unpack(getExamples( current_lexeme, sense:getId(), references_seen )) local gloss_text = table.concat(gloss_text_parts, '\n') meanings:tag('li'):wikitext(gloss_text):wikitext(examples) end return {meanings, references_seen, idlinkset} end local function getPronunciationBaseForm() local base_form = nil -- (!) অন্য ভাষার শব্দের যদি অন্য রকম মূল ফর্ম থাকে সেগুলো এখানে নতুন if বিবৃতি দিয়ে যোগ করা যায়। if lang_code == 'bn' then if lex_cat == 'Q1084' then -- বিশেষ্য base_form = formWithSingleGrammaticalFeature( 'Q131105' ) -- কর্তৃকারক elseif lex_cat == 'Q24905' then -- ক্রিয়া base_form = formWithSingleGrammaticalFeature( 'Q1350145' ) -- ক্রিয়া বিশেষ্য end end if base_form == nil then for i, form in pairs(forms) do base_form = form break end end return base_form end local function getCombines( current_lexeme, frame ) local combines = '' local index_mappings = {} for i, stmt in pairs(current_lexeme:getAllStatements('P5238')) do if stmt.qualifiers and stmt.qualifiers['P1545'] then -- ক্রম local current_index = tonumber(stmt.qualifiers['P1545'][1].datavalue.value) index_mappings[current_index] = stmt end end if #index_mappings ~= 0 then for i, stmt in ipairs(index_mappings) do if stmt.mainsnak.datavalue then local part_lexeme_id = stmt.mainsnak.datavalue.value.id local part_lexeme = getEntity(part_lexeme_id) local current_substring = getLinkedLemmata(part_lexeme, frame) local part_etymology = getEtymology(part_lexeme, frame, 'partial') if part_etymology ~= '' and part_etymology then current_substring = current_substring .. ' (← ' .. part_etymology .. ')' end if combines == '' then combines = current_substring else -- @TODO: This should use the 'affix' and 'compound' templates instead. combines = combines .. ' + ' .. current_substring end end end end return combines end function getRoots(lexeme, frame) local stmts = lexeme:getAllStatements('P5920') if #stmts == 0 then return '', '', '' end local root_lexeme = getEntity(stmts[1].mainsnak.datavalue.value.id) return getLexemeLanguageCode(root_lexeme), '√' .. getLinkedLemmata(root_lexeme, frame), root_lexeme:getLemma('ar') end function getEtymology( current_lexeme, frame, mode ) -- @TODO: Fix the etymology chains that are not possible to render local etymology = '' local current_combines = getCombines(current_lexeme, frame) local root_lang, current_roots, root_str = getRoots(current_lexeme, frame) if mode ~= 'partial' and root_str then --frame:expandTemplate{title=i18n['template_root'], args={lang_code, root_lang, root_str}} end local stmts = current_lexeme:getAllStatements('P5191') local new_etymology_string if #stmts == 0 then if current_roots ~= '' and current_combines ~= '' and current_roots then return current_roots .. '<br/>(' .. current_combines .. ')' elseif current_roots ~= '' then if lang_code == 'ar' and mode ~= 'partial' and root_str ~= matched_lemma then return frame:expandTemplate{title=i18n['template_ar-rootbox'], args={root_str}} else return current_roots end else return current_combines end end local origin_lexeme_string for i, stmt in pairs(stmts) do local origin_lexeme_dv = stmt.mainsnak.datavalue -- If this is nil, the origin lexeme is not known. if origin_lexeme_dv then local origin_lexeme = getEntity(origin_lexeme_dv.value.id) local origin_lexeme_lang = getLabel(origin_lexeme:getLanguage()) local sitelink = i18n.wplink(origin_lexeme:getLanguage(), origin_lexeme_lang, wb) if sitelink ~= '' then origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. sitelink .. ')' else origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. origin_lexeme_lang .. ')' end if stmt.qualifiers and stmt.qualifiers['P5886'] then local mode_of_derivation = stmt.qualifiers['P5886'][1].datavalue.value.id if mode_of_derivation == 'Q1345001' then -- @TODO: Add support for showing gender origin_lexeme_string = frame:expandTemplate{title=i18n['template_borrowed'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_borrowing'] elseif mode_of_derivation == 'Q845079' then origin_lexeme_string = ustring.gsub(i18n['etymology_learned_borrowing'], '$1', origin_lexeme_string) elseif mode_of_derivation == 'Q56611986' then origin_lexeme_string = frame:expandTemplate{title=i18n['template_inherited'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_inheritance'] elseif mode_of_derivation == 'Q189743' then origin_lexeme_string = frame:expandTemplate{title=i18n['template_ellipsis'], args={lang_code, getLemmata(origin_lexeme)}} .. ' ' .. i18n['etymology_ellipsis'] end end local origin_origin = getEtymology(origin_lexeme, frame) if origin_origin ~= '' and origin_origin then new_etymology_string = origin_lexeme_string .. ' ← ' .. origin_origin else new_etymology_string = origin_lexeme_string end end if etymology == '' then etymology = new_etymology_string elseif origin_lexeme_string and etymology then etymology = etymology .. ' ' .. origin_lexeme_string elseif origin_lexeme_string and etymology == nil then etymology = origin_lexeme_string end end if current_roots ~= '' and etymology and current_roots then etymology = etymology .. ' ' .. current_roots elseif current_roots ~= '' and etymology == nil then etymology = current_roots end if current_combines ~= '' and etymology then etymology = etymology .. '<br/>(' .. current_combines .. ')' end return etymology end local function pronunciationBlock(block, value) return '* ' .. i18n['text_' .. block] .. ' ' .. value end local function getPronunciation(frame, current_lexeme, lang_name) local pronunciations = {} local base_form = getPronunciationBaseForm() local iast, iso15919_transcription, itrans, xsampa if base_form then for i, stmt in pairs(base_form:getAllStatements('P443')) do -- উচ্চারণের অডিও local pronunciation_file = stmt.mainsnak.datavalue.value local specifier_text = '' local specifiers = {} if stmt.qualifiers then for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন local qual = stmt.qualifiers[property_id] if qual then for _, quali in pairs(qual) do local stmt_value = quali.datavalue.value.id table.insert(specifiers, getLabel(stmt_value)) end end end end if #specifiers > 0 then specifier_text = table.concat(specifiers, "'', ''") end local audio_text if specifier_text ~= '' then audio_text = i18n['text_audio'] .. ' (' .. specifier_text .. ')' else audio_text = i18n['text_audio'] end table.insert(pronunciations, '* ' .. frame:expandTemplate{ title= i18n['template_audio'], args = {lang_name, pronunciation_file, audio_text} }) end iso15919_transcription = getOneValueForProperty(base_form, 'P5825') -- আইএসও ১৫৯১৯ প্রতিলিপিকরণ itrans = getOneValueForProperty(base_form, 'P8881') -- ITRANS iast = getOneValueForProperty(base_form, 'P7581') -- আইএএসটি প্রতিলিপিকরণ xsampa = getOneValueForProperty(base_form, 'P2859') local ipa_transcription = base_form:getAllStatements('P898') -- আধ্বব প্রতিলিপিকরণ -- @TODO: অডিও ও প্রতিলিপিকরণ দুটোই থাকলে একটার ঠিক পরেই আরেকটা দেখানো উচিত if #ipa_transcription ~= 0 then for i, stmt in pairs(ipa_transcription) do local ipa_text = stmt.mainsnak.datavalue.value local specifier_text = '' local specifiers = {} if stmt.qualifiers then for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন for l, qual in ipairs(stmt.qualifiers[property_id]) do table.insert(specifiers, getLabel( qual.datavalue.value.id )) end end end if #specifiers > 0 then specifier_text = "(''" .. table.concat(specifiers, "'', ''") .. "'') " end local syllable_count if lang_code == 'tr' then syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z10029|' .. ipa_text, frame) else syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z30837|' .. ipa_text, frame) end table.insert(pronunciations, '* ' .. specifier_text .. frame:expandTemplate{ title= i18n['template_ipa'], args = {lang_name, ipa_text} } .. '\n** ' .. syllable_count) end -- The following checks are ordered based on which one is expected to be true in a higher number of cases. elseif lang_code == 'bn' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='bn-IPA', }) elseif lang_code == 'ar' then local lemma = current_lexeme:getLemma('ar') table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ar-IPA', args={lemma} }) elseif lang_code == 'en' then table.insert(pronunciations, '* ' .. i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z29940|' .. matched_lemma, frame)) elseif lang_code == 'pl' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='pl-IPA', }) elseif lang_code == 'ko' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ko-IPA', }) elseif lang_code == 'fi' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='fi-IPA', }) elseif lang_code == 'ta' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ta-IPA', }) elseif lang_code == 'fax' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='fax-pron', }) end end -- {{আধ্বব|en|/ˈɪntəvjuː/}} if iso15919_transcription then table.insert(pronunciations, pronunciationBlock('iso15919', iso15919_transcription)) end if itrans then table.insert(pronunciations, pronunciationBlock('itrans', itrans)) end if iast then table.insert(pronunciations, pronunciationBlock('iast', iast)) end if xsampa then table.insert(pronunciations, pronunciationBlock('xsampa', xsampa)) end return table.concat(pronunciations, '\n') end local function getAlternativeSpellings( current_lexeme, frame ) local alt_spellings = {} for i, stmt in pairs(current_lexeme:getAllStatements('P11577')) do -- বিকল্প বানান if stmt.mainsnak.datavalue then table.insert(alt_spellings, '* ' .. frame:expandTemplate{title=i18n['template_alter'], args={lang_code, getLemmata(getEntity(stmt.mainsnak.datavalue.value.id), frame)}}) end end return table.concat(alt_spellings, '\n') end local function get_any_notes(args, keys) local notes = {} for i, v in ipairs(keys) do if args[v] then table.insert(notes, args[v]) end end return notes end local function add_specific_notes(sections, notes) for i, v in ipairs(notes) do table.insert(sections, v) end end local function add_any_notes(sections, args, keys, heading) for i, v in ipairs(keys) do if args[v] then if heading then table.insert(sections, heading) end table.insert(sections, args[v]) end end end local function getMatchingLemmaForPageTitle(lexeme, title) local lemmas = lexeme:getLemmas() local match for _, lemma_entry in ipairs(lemmas) do local lemma = lemma_entry[1] if lemma == title then match = lemma break end end if match == nil then if lang_code == 'ar' then match = lexeme:getLemma('ar') elseif lang_code == 'rhg' then match = lexeme:getLemma('rhg-arab') elseif lang_id == 'Q11051ur' then match = lexeme:getLemma('ur') elseif lang_code == 'arz' then match = lexeme:getLemma('arz') end end return match end -- Returns the grammatical gender of a lexeme local function getGenderOfLexeme(lexeme) local gender = '' local stmts = lexeme:getAllStatements('P5185') -- ব্যাকরণগত লিঙ্গ if #stmts ~= 0 and stmts[1].mainsnak.datavalue then if #stmts == 1 then local gender_qid = stmts[1].mainsnak.datavalue.value.id if gender_qid == 'Q499327' then gender = 'm' elseif gender_qid == 'Q1775415' then gender = 'f' elseif gender_qid == 'Q1775461' then gender = 'n' elseif gender_qid == 'Q1305037' then gender = 'c' end end else for i, stmt in pairs(stmts) do local qid = stmts[i].mainsnak.datavalue if qid then qid = qid.value.id end if qid == 'Q499327' then gender = gender .. 'm' elseif qid == 'Q1775415' then gender = gender .. 'f' end end end if gender == '' then return nil end return gender end -- Returns the semantic gender for a sense -- @TODO: Complete this local function getGenderForSense(sense) local gender = '' local stmts = sense:getAllStatements('P10339') -- semantic gender if #stmts ~= 0 and stmts[1].mainsnak.datavalue then if #stmts == 1 then local gender_qid = stmts[1].mainsnak.datavalue.value.id if gender_qid == 'Q6581097' then gender = 'm' elseif gender_qid == 'Q1775415' then gender = 'f' elseif gender_qid == 'Q1775461' then gender = 'n' elseif gender_qid == 'Q1305037' then gender = 'c' elseif gender_qid == 'Q70853302' then gender = 'mfbysense' end end else for i, stmt in pairs(stmts) do local qid = stmts[i].mainsnak.datavalue if qid then qid = qid.value.id end if qid == 'Q499327' then gender = gender .. 'm' elseif qid == 'Q1775415' then gender = gender .. 'f' end end end return gender end local function buildLanguageAgnosticInflectionTable() local has_image = false local form_images = {} for i, form in ipairs(forms) do local form_image = form:getAllStatements('P7407') if next(form_image) then form_images[i] = form_image[1].mainsnak.datavalue.value has_image = true end end local table_class = "wikitable mw-collapsible sortable" if not has_image then table_class = table_class .. " mw-collapsed" end local text = "{| class='" .. table_class .. "' style='border:solid 1px rgb(80%,80%,100%); text-align:center;'\n" text = text .. "|+ " .. i18n['heading_inflection_table'] .. "\n" text = text .. "|- \n" text = text .. "! " .. i18n['heading_form'] .. " !! " .. i18n['heading_grammatical_features'] if has_image then text = text .. " !! " .. (i18n['heading_image']) end text = text .. " \n" for i, form in ipairs(forms) do local rep = form:getRepresentations() local feat = form:getGrammaticalFeatures() local rep_text = "" for j, r in pairs(rep) do if rep_text == "" then rep_text = r[1] else rep_text = rep_text .. " / " .. r[1] end end local feat_text = "" if feat then for j, f in ipairs(feat) do local label = getLabel(f) or f if feat_text == "" then feat_text = label else feat_text = feat_text .. ", " .. label end end end text = text .. "|-\n" text = text .. "| " .. (rep_text ~= "" and rep_text or "—") text = text .. " || " .. (feat_text ~= "" and feat_text or "—") if has_image then local image_cell = "—" if form_images[i] then image_cell = "[[চিত্র:" .. form_images[i] .. "|50px]]" end text = text .. " || " .. image_cell end text = text .. "\n" end text = text .. "|}" return text end function p.all(frame) local args = getArgs(frame) local lexeme_id = args[1] local current_lexeme = getEntity(lexeme_id) local language = current_lexeme:getLanguage() lang_id = language local senses = current_lexeme:getSenses() local add_heading = true forms = current_lexeme:getForms() if args[2] then local val = mw.text.trim(tostring(args[2])) if val == "false" or val == "0" or val == "না" then add_heading = false end end local references_seen = {} local sections = {} local title = mw.title.getCurrentTitle().text local lang_category = getLanguageForCategories(title, true) local lang_name = getLabel(lang_category) local conj_class = getLastValueForProperty(current_lexeme, 'P5186') if conj_class then conj_class = wb.getLabelByLang(getLastValueForProperty(current_lexeme, 'P5186').id, 'en'):gsub('Form ', '') end if add_heading == true then local lang_heading = heading_level(lang_name, 2) table.insert(sections, lang_heading) end lang_code = getLexemeLanguageCode(current_lexeme) matched_lemma = getMatchingLemmaForPageTitle(current_lexeme, title) lex_cat = current_lexeme:getLexicalCategory() local cat = i18n.lang_category(getLabel(lex_cat), lang_name) local lex_cat_template, ety_added, pron_added, alt_added if cat then table.insert(sections, heading_level(getLabel(lex_cat) .. cat .. frame:expandTemplate{ title = i18n['template_anchor'], args = { lexeme_id } }, 3)) table.insert(sections, frame:expandTemplate{ title= i18n['template_lexeme'], args = {lexeme_id} }) add_any_notes(sections, args, i18n['manual_category']) local etymology = getEtymology( current_lexeme, frame ) if etymology ~= '' and etymology then table.insert(sections, heading_level(i18n['heading_etymology'], 4)) table.insert(sections, tostring(etymology)) ety_added = true end if ety_added then add_any_notes(sections, args, i18n['manual_etymology']) else add_any_notes(sections, args, i18n['manual_etymology'], heading_level(i18n['heading_etymology'], 4)) end local pronunciation = getPronunciation( frame, current_lexeme, lang_name) if pronunciation ~= '' then table.insert(sections, heading_level(i18n['heading_pronunciation'], 4)) table.insert(sections, tostring(pronunciation)) pron_added = true end if pron_added then add_any_notes(sections, args, i18n['manual_pronunciation']) else add_any_notes(sections, args, i18n['manual_pronunciation'], heading_level(i18n['heading_pronunciation'], 4)) end local alternative_spellings = getAlternativeSpellings(current_lexeme, frame) if alternative_spellings ~= '' then table.insert(sections, heading_level(i18n['heading_alternative_spellings'], 4)) table.insert(sections, alternative_spellings) alt_added = true end if alt_added then add_any_notes(sections, args, i18n['manual_alternative_spellings']) else add_any_notes(sections, args, i18n['manual_alternative_spellings'], heading_level( i18n['heading_alternative_spellings'], 4)) end local gender = getGenderOfLexeme(current_lexeme) if lang_code and lang_code ~= 'ksy' and lang_code ~= 'rkt' then -- Skip for Kharia Thar, Rangpuri if lex_cat == 'Q34698' then -- বিশেষণ if lang_code == 'en' or lang_code == 'bn' then if #forms <= 1 then lex_cat_template = frame:expandTemplate{title= lang_code .. '-বিশেষণ'} end else if lang_code ~= 'fr' then lex_cat_template = safeExpand(frame, lang_code .. '-adj') if not lex_cat_template then lex_cat_template = safeExpand(frame, lang_code .. '-বিশেষণ') end end end elseif lex_cat == 'Q1084' then -- @TODO: Also check for plural forms -- The following checks are ordered based on which one is expected to be true in a higher number of cases. if language == 'Q13955' then if matched_lemma then lex_cat_template = safeExpand(frame, 'ar-noun', {matched_lemma,gender}) else lex_cat_template = frame:expandTemplate{title='ar-noun', args={nil,gender}} end elseif language == 'Q29919' then lex_cat_template = frame:expandTemplate{title='arz-noun', args={g=gender}} elseif language == 'Q397' then if matched_lemma then lex_cat_template = frame:expandTemplate{title='la-noun', args={matched_lemma,g=gender}} end elseif language == 'Q11059' then lex_cat_template = frame:expandTemplate{title='sa-noun', args={g=gender}} elseif language ~= 'Q1860' then -- These templates require the gender to be passed as the 1st argument. lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix'], {gender}) if not lex_cat_template then lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix_fallback'], {gender}) end end elseif lex_cat == 'Q24905' then -- ক্রিয়া if lang_code == 'ar' then if conj_class then lex_cat_template = frame:expandTemplate{title='ar-verb', args={conj_class}} end else lex_cat_template = safeExpand(frame, lang_code .. '-verb') end end end -- elseif lex_cat == 'Q147276' then -- lex_cat_template = safeExpand(frame, lang_code .. '-proper noun', {gender}) -- if not lex_cat_template then -- lex_cat_template = safeExpand(frame, lang_code .. '-নামবাচক বিশেষ্য', {gender}) -- end end if lex_cat_template then table.insert(sections, lex_cat_template) else if matched_lemma then table.insert(sections, heading_level(matched_lemma, 4)) else table.insert(sections, i18n.tocatlink(i18n['category_no_matching_lemma'])) end end local meanings, refs_seen, sense_extlinks = unpack(getMeanings( frame, args, current_lexeme, senses, references_seen, lang_name)) table.insert(sections, tostring(meanings)) add_any_notes(sections, args, i18n['manual_meaning']) local instance_of = current_lexeme:getAllStatements('P31') -- সত্ত্বার ধরন if #instance_of ~= 0 then local instance_of_entity = instance_of[1].mainsnak.datavalue.value.id if instance_of_entity == 'Q376431' then -- বর্ণের নাম table.insert(sections, i18n.tocatlink(lang_code .. ':রং')) else table.insert(sections, heading_level(i18n['heading_special_info'], 4) .. i18n['text_instance_of'] .. ' ' .. '[[d:' .. instance_of_entity .. '|' .. getLabel(instance_of_entity) .. ']]' .. i18n['text_sentence_terminator']) end end if lex_cat ~= 'Q9788' then local translations = getTranslations(frame, senses) if translations then table.insert(sections, translations) end end -- (!) বিশেষ ভাষার বিভক্তির সারণি যদি থাকে সেগুলো এখানে নতুন if বিবৃতি যোগ করা যায়। if next(forms) then if language == 'Q9610' then -- বাংলা if lex_cat == 'Q24905' then local conjTable = require('মডিউল:আভিধানিক উপাত্ত/Q9610').getConjTable(frame, forms) table.insert(sections, conjTable) elseif lex_cat == 'Q1084' or lex_cat == 'Q36224' or lex_cat == 'Q147276' or lex_cat == 'Q956030' then table.insert(sections, callWikifunctionsFunction('Z33243|' .. lexeme_id .. '|', frame)) else if #forms > 1 then table.insert(sections, buildLanguageAgnosticInflectionTable()) end end --elseif language == 'Q13955' then -- ar -- if lex_cat == 'Q1084' then -- table.insert(sections, frame:expandTemplate{title='ar-decl-noun', args={lemma}}) -- end --elseif lang_code == 'ar' and lex_cat == 'Q24905' then --table.insert(sections, frame:expandTemplate{title='ar-conj', args={conj_class}}) elseif language == 'Q11051' and lex_cat == 'Q1084' then -- de if lang_id == "Q11051hi" then table.insert(sections, callWikifunctionsFunction('Z37337|' .. lexeme_id .. '|', frame)) else table.insert(sections, callWikifunctionsFunction('Z37346|' .. lexeme_id .. '|', frame)) end elseif language == 'Q188' and lex_cat == 'Q1084' then -- de table.insert(sections, callWikifunctionsFunction('Z28602|' .. lexeme_id .. '|', frame)) elseif lang_code == 'as' and lex_cat == 'Q1084' then table.insert(sections, callWikifunctionsFunction('Z37219|' .. lexeme_id .. '|', frame)) elseif lang_code == 'ml' and lex_cat == 'Q1084' then table.insert(sections, callWikifunctionsFunction('Z37217|' .. lexeme_id .. '|', frame)) --elseif language == 'Q397' and lex_cat == 'Q1084' then -- la -- table.insert(sections, callWikifunctionsFunction('Z26333|' .. matched_lemma .. '|', frame)) elseif language == 'Q150' and lex_cat == 'Q34698' then -- fr table.insert(sections, callWikifunctionsFunction('Z36435|' .. lexeme_id .. '|', frame)) elseif language == 'Q652' and lex_cat == 'Q34698' then -- ইতালীয় table.insert(sections, callWikifunctionsFunction('Z36407|' .. lexeme_id .. '|', frame)) elseif language == 'Q809' or language == 'Q9058' or language == 'Q6654' or language == 'Q9056' then -- পোলীয়, স্লোভাক, ক্রোয়েশীয়, চেক table.insert(sections, callWikifunctionsFunction('Z36421|' .. lexeme_id .. '|', frame)) elseif #forms > 1 and language ~= 'Q150' then table.insert(sections, buildLanguageAgnosticInflectionTable()) end end if lex_cat == 'Q134830' then table.insert(sections, frame:expandTemplate{title='prefixsee', args={lang_code}}) elseif lex_cat == 'Q102047' then table.insert(sections, frame:expandTemplate{title='suffixsee', args={lang_code}}) -- elseif lex_cat == 'Q111029' then -- table.insert(sections, frame:expandTemplate{title='rootsee', args={'+', lang_code, matched_lemma}}) end local reference_notes = get_any_notes(args, i18n['manual_reference']) if #refs_seen > 0 or #reference_notes > 0 then table.insert(sections, heading_level(i18n['heading_references'], 4)) table.insert(sections, frame:extensionTag('references')) add_specific_notes(sections, reference_notes) end local external_link_table = getExternalLinks ( current_lexeme ) if #external_link_table > 0 then local external_links = '* ' .. table.concat(external_link_table, '\n* ') table.insert(sections, heading_level(i18n['heading_external_links'], 4)) table.insert(sections, external_links) end add_any_notes(sections, args, i18n['manual_external_link']) if #refs_seen == 0 and #reference_notes == 0 and sense_extlinks and #sense_extlinks == 0 and #external_link_table == 0 and #get_any_notes(args, i18n['manual_external_link']) == 0 then table.insert(sections, i18n.rfref_category(lang_name)) end return table.concat(sections,"\n\n") end return p eqjwh1fnujlkg2uvvohcjkx00b90yr8 514106 514046 2026-07-25T17:29:28Z Redmin 6857 514106 Scribunto text/plain local p = {} local i18n = require('মডিউল:আভিধানিক উপাত্ত/i18n') local references = require('মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ').format local getArgs = require('Module:Arguments').getArgs local wb = mw.wikibase local ustring = mw.ustring local html = mw.html local mw_lang = mw.language local entity_cache = {} local reference_cache = {} local forms local lang_code local lex_cat local matched_lemma local lang_id local function wrapStringInWikilinks(str) local exceptions = i18n.nolinks local result = str:gsub('(%S+)', function(token) local word, trailing_char = token:match('^(.-)([;,.:!’?]*)$') local wrapped = word:gsub('[^(-/]+', function(part) if exceptions[part] then return part else return '[[' .. mw.text.nowiki(part) .. '#' .. i18n['content_lang_name'] .. '|' .. mw.text.nowiki(part) .. ']]' end end) return wrapped .. trailing_char end) return result end local function serializeTable(val, name, skipnewlines, depth) -- https://stackoverflow.com/a/6081639 skipnewlines = skipnewlines or false depth = depth or 0 local tmp = string.rep(" ", depth) if name then tmp = tmp .. name .. " = " end if type(val) == "table" then tmp = tmp .. "{" .. (not skipnewlines and "\n" or "") for k, v in pairs(val) do tmp = tmp .. serializeTable(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and "\n" or "") end tmp = tmp .. string.rep(" ", depth) .. "}" elseif type(val) == "number" then tmp = tmp .. tostring(val) elseif type(val) == "string" then tmp = tmp .. string.format("%q", val) elseif type(val) == "boolean" then tmp = tmp .. (val and "true" or "false") else tmp = tmp .. "\"[inserializable datatype:" .. type(val) .. "]\"" end return tmp end -- Use this to safely expand templates when you are not sure that they exist. local function safeExpand(frame, title, args) local _, result = pcall(function() return frame:expandTemplate{ title = title, args = args } end) if result:find('does not exist') then -- expandTemplate{} doesn't seem to throw any error that can be handled with pcall() so string search is the only viable option. return nil end return result end local function checkTitleCodePointInRange(title, start_point, end_point) return ustring.find( title, '[' ..ustring.char(start_point) .. '-' .. ustring.char(end_point) .. ']' ) end local function getLanguageForCategories(title) -- বিশেষ ভাষার জন্য if lang_id == 'Q11051' then -- হিন্দি/উর্দু if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- উর্দু lang_id = 'Q11051ur' elseif checkTitleCodePointInRange(title, 0x0900, 0x097f) then -- হিন্দি lang_id = 'Q11051hi' end elseif lang_id == 'Q58635' then -- পাঞ্জাবি if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- শাহমুখী lang_id = 'Q58635pnb' elseif checkTitleCodePointInRange(title, 0x0a00, 0x0a7f) then -- গুরুমুখী lang_id = 'Q58635pa' end elseif lang_id == 'Q56356571' then -- নয়া ফার্সি ভাষা if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then -- ফার্সি (ইরান/আফগানিস্তান) lang_id = 'Q56356571fa' elseif checkTitleCodePointInRange(title, 0x0400, 0x04ff) then -- তাজিক lang_id = 'Q56356571tg' end elseif lang_id == 'Q256' then if checkTitleCodePointInRange(title, 0x0600, 0x06ff) then lang_id = 'Q56356571ota' else lang_id = 'Q56356571tr' end end return lang_id end local function getEntity(id) if entity_cache[id] == nil then entity_cache[id] = wb.getEntity(id) or error('Invalid ID provided: ' .. id) end return entity_cache[id] ~= false and entity_cache[id] or nil end -- Use this function to get the label of an item even if that item does not have any label in the wiki's content language or English. local function getLabel(id) if id == 'Q11051hi' then return 'হিন্দি' elseif id == 'Q11051ur' then return 'উর্দু' elseif id == 'Q56356571fa' then return 'ফার্সি' elseif id == 'Q56356571tg' then return 'তাজিক' elseif id == 'Q58635pa' or id == 'Q58635pnb' then return 'পাঞ্জাবি' elseif id == 'Q256tr' then return 'তুর্কি' elseif id == 'Q256ota' then return 'উসমানীয় তুর্কি' end local label = wb.getLabel(id) if label then return label end local labels = getEntity(id).labels if not labels then return id end for _, v in pairs(labels) do if v and v.value then return v.value end end end local function getReference(id, reference) local out_id = nil local url_value if reference_cache[id] == nil then local ref_text = references(reference, wb, mw_lang, i18n['content_lang_code'], i18n['wikipedia']) if reference.snaks then if reference.snaks['P248'] then for _, snak in pairs(reference.snaks['P248']) do if snak.datavalue and snak.datavalue.value.id == 'Q428' then -- কুরআন ref_text = ustring.gsub(ref_text, 'নামক অনুচ্ছেদ', 'নং আয়াত') break end end end if reference.snaks['P854'] then local snak = reference.snaks['P854'][1] if snak.datavalue then url_value = snak.datavalue.value end end end if url_value then ref_text = ref_text .. ', [' .. url_value .. ' সংযোগ]' end reference_cache[id] = ref_text else out_id = id end return {out_id, reference_cache[id]} end -- Returns the Wiktionary language code for a lexeme entity or nil, in the latter case, getLemmas() can be relied on to fetch the language code by stripping extraneous bits from the 'language' string as necessary local function getLexemeLanguageCode(lexeme) local lang_item_id = lexeme:getLanguage() local lang_entity = getEntity(lang_item_id) for i, statement_property in ipairs({'P305','P424', 'P220'}) do -- আইইটিএফ ভাষা ট্যাগ, উইকিমিডিয়া ভাষা কোড, আইএসও ৬৩৯-৩ local statements = lang_entity:getBestStatements(statement_property) if statements[1] then local code = statements[1].mainsnak.datavalue.value if code == 'hr' then return 'sh' elseif code == 'pan' then return 'pa' else return code end end end end local function getLexemeLanguageCodeForEtymology(lexeme) local lang_item_id = lexeme:getLanguage() if lang_item_id == 'Q56356571' then return 'fa' -- @TODO: Implement a proper solution end return getLexemeLanguageCode(lexeme) end -- Return the first form of the lexeme which has exactly the given grammatical feature. local function formWithSingleGrammaticalFeature( item_id ) for i = 1, #forms do local grammaticalFeatures = forms[i]:getGrammaticalFeatures() if #grammaticalFeatures == 1 and grammaticalFeatures[1] == item_id then return forms[i] end end return nil end local function getArticleLinkTemplate(frame, stmt_value) local template = '' local sitelink = getEntity(stmt_value):getSitelink(i18n['wikipedia']) if sitelink then template = frame:expandTemplate{ title=i18n['template_wikipedia'], args={sitelink} } end return template end local function getArticleLinks(frame, sense ) local article_links = '' for i, stmt in pairs(sense:getAllStatements('P5137')) do -- এই অর্থের জন্য আইটেম article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id) end for i, stmt in pairs(sense:getAllStatements('P9970')) do -- এই অর্থের জন্য বিধেয় article_links = article_links .. getArticleLinkTemplate(frame, stmt.mainsnak.datavalue.value.id) end return article_links end -- @TODO: Generalise local function expandTemplateForProperty(frame, object, property, template) local lemmas = {} local n = 0 for _, stmt in pairs(object:getAllStatements(property)) do local lex = wb.lexeme.splitLexemeId(stmt.mainsnak.datavalue.value.id) if lex then lex = getEntity(lex) n = n + 1 lemmas[n] = lex:getLemma(lang_code) end end if not lang_code or n == 0 then return '' end -- Build args: first lang_code, then lemmas local args = {lang_code} for i = 1, n do args[#args + 1] = lemmas[i] end return frame:expandTemplate{ title = template, args = args } end local function getExternalLinks( entity ) -- T418639 local external_links = {} if entity.claims == nil then return external_links end local formatter_urls = require('মডিউল:আভিধানিক উপাত্ত/urls').formatter_urls for property_id, statements in pairs(entity.claims) do local formatter_url = formatter_urls[property_id] if formatter_url then local property_source = wb.getBestStatements(property_id, 'P9073') local source_name if next(property_source) then source_name = getLabel(property_source[1].mainsnak.datavalue.value.id) or property_source[1].mainsnak.datavalue.value.id else source_name = getLabel(property_id) or property_id end for i = 1, #statements do local stmt = statements[i] if stmt.mainsnak.datavalue then local formatted_link = ustring.gsub( ustring.gsub(formatter_url, '$1', stmt.mainsnak.datavalue.value), ' ', '+' ) table.insert(external_links, '[' .. formatted_link .. ' ' .. source_name .. ']') end end end end return external_links end p.getExternalLinks = getExternalLinks -- রেখে দিন যাতে ডিবাগিং সম্ভব হয় local function heading_level(text, level) return '<h' .. level .. '>' .. ' ' .. text .. ' ' .. '</h' .. level .. '>' end local function termSpan( term ) local text = term[1] local lang = term[2] local dir = mw_lang.new( lang ):getDir() local span = html.create( 'span' ) span:attr( 'lang', lang ) :attr( 'dir', dir ) :wikitext( text ) return tostring( span ) end local function getLemmata( current_lexeme ) local lemma_string = '' for i, rep in pairs(current_lexeme:getLemmas()) do if lemma_string == '' then lemma_string = termSpan(rep) else lemma_string = lemma_string .. '/' .. termSpan(rep) end end return lemma_string end local function getLinkedLemmata(lexeme, frame) local lemma_string = '' local lang for i, rep in pairs(lexeme:getLemmas()) do lang = getLexemeLanguageCode(lexeme) if lang == nil then lang = string.gsub(rep[2], '-%S+', '') end if lemma_string == '' then lemma_string = frame:expandTemplate{title='link', args={lang, rep[1]}} else lemma_string = lemma_string .. '/' .. frame:expandTemplate{title='link', args={lang, rep[1]}} end end return lemma_string end local function getExamples( current_lexeme, sense_id, references_seen ) local examples = html.create('dl') local example_text, example_lang, example_form, example_str for i, stmt in pairs(current_lexeme:getAllStatements('P5831')) do -- ব্যবহারের উদাহরণ if stmt.qualifiers and stmt.qualifiers['P6072'] and stmt.qualifiers['P6072'][1].datavalue.value.id == sense_id then -- বিষয়ে লেক্সিমের অর্থ example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>') example_lang = stmt.mainsnak.datavalue.value.language local example_form_strs = {} if stmt.qualifiers['P1810'] then table.insert(example_form_strs, stmt.qualifiers['P1810'][1].datavalue.value) elseif stmt.qualifiers['P5830'] then example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- বিষয়ে লেক্সিমের রূপ for _, rep in pairs(example_form:getRepresentations()) do table.insert(example_form_strs, rep[1]) end end for _, example_form_str in pairs(example_form_strs) do local new_example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''") if new_example_text ~= example_text then example_str = termSpan({new_example_text, example_lang}) break end example_text = new_example_text end if example_str == nil then example_str = termSpan({example_text, example_lang}) end local reference_text = '' if stmt.references then for j, reference in pairs(stmt.references) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. got_reference[2] end end if example_str then examples:tag('dd'):wikitext("''" .. example_str .. "''") if reference_text ~= '' then examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text) end end end end for i, stmt in pairs(wb.getAllStatements(sense_id, 'P5831')) do -- ব্যবহারের উদাহরণ example_text = ustring.gsub(stmt.mainsnak.datavalue.value.text, ' / ','<br/>') example_lang = stmt.mainsnak.datavalue.value.language local example_form_str = nil if stmt.qualifiers then if stmt.qualifiers['P5830'] then example_form = getEntity(stmt.qualifiers['P5830'][1].datavalue.value.id) -- subject lexeme form end if stmt.qualifiers['P1810'] then example_form_str = stmt.qualifiers['P1810'][1].datavalue.value end end if example_form and example_form_str == nil then example_form_str = example_form:getRepresentation(i18n['content_lang_code']) end if example_form and example_form_str == nil then example_form_str = example_form:getRepresentations()[1][1] end if example_form_str then example_text = ustring.gsub(example_text, example_form_str, "'''" .. example_form_str .. "'''") end example_str = termSpan({example_text, example_lang}) local reference_text = '' if stmt.references then for j, reference in pairs(stmt.references) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. got_reference[2] end end if example_str then examples:tag('dd'):wikitext("''" .. example_str .. "''") if reference_text ~= '' then examples:done():tag('dd'):css('text-indent', '2em'):wikitext(reference_text) end end end return { tostring(examples) , references_seen } end -- This calls frame:preprocess() instead of :callParserFunction() because the latter does not work for Wikifunctions function calls yet (see https://www.wikifunctions.org/wiki/Wikifunctions:Embedded_function_calls). local function callWikifunctionsFunction(args, frame) return frame:preprocess('{{#function:' .. args .. '}}') .. i18n.tocatlink('উইকিফাংশন্স-এর ফাংশন ব্যবহার করা পাতা') end local function getOneValueForProperty(object, property) local val local stmts = object:getAllStatements(property) if #stmts ~= 0 then val = stmts[1].mainsnak.datavalue.value end return val end local function getLastValueForProperty(object, property) local val, count local stmts = object:getAllStatements(property) for i, j in ipairs(stmts) do count = i end if count then val = stmts[count].mainsnak.datavalue.value end return val end local function getTranslations(frame, senses) if #senses == 0 then return nil end local all_translations = {} local wmlang, item, label for _, sense in pairs(senses) do local translation_set = {} local gloss = sense:getGloss(i18n['content_lang_code']) if lex_cat ~= 'Q34698' then item = getOneValueForProperty(sense, 'P5137') if item then item = item.id label = getLabel(item) end end if item then wmlang = require("Module:wikimedia languages") end for _, stmt in pairs(sense:getAllStatements('P5972')) do local translation = stmt.mainsnak.datavalue.value.id local lexeme_id = wb.lexeme.splitLexemeId(translation) local trans_lexeme = getEntity(lexeme_id) local lang_name = getLabel(trans_lexeme:getLanguage()) local trans_code = getLexemeLanguageCode(trans_lexeme) if trans_code then table.insert(translation_set, lang_name .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={trans_code, getLinkedLemmata(trans_lexeme, frame) .. '<br/>'}}) else table.insert(translation_set, lang_name .. ': ' .. getLinkedLemmata(trans_lexeme, frame) .. '<br/>' .. i18n.trans_category(lang_name)) end end if item then for _, v in pairs(getEntity(item).labels) do if string.find(v.language, '-') == nil then -- @TODO: Implement deduplication of translation and get rid of this check local lang = wmlang.getByCode(v.language) local wikt = lang:getWiktionaryLanguage() if wikt:hasType('regular') then table.insert(translation_set, getLabel(wikt:getWikidataItem()) .. ': ' .. frame:expandTemplate{title=i18n['template_t'], args={wikt:getCode(), v.value .. '<br/>'}}) end end end end if #translation_set > 0 then local block = frame:expandTemplate{ title = i18n['template_trans-top'], args = { gloss or label } } block = block .. table.concat(translation_set, '\n') .. frame:expandTemplate{ title = i18n['template_trans-bottom'] } table.insert(all_translations, block) end end if #all_translations == 0 then return nil end return heading_level(i18n['heading_translation'], 4) .. ' \n' .. table.concat(all_translations, '\n') end local createicon = function(langcode, entityID, propertyID) langcode = langcode or "" propertyID = propertyID or "" local icon = "&nbsp;<span class='penicon autoconfirmed-show'>[[" -- "&nbsp;<span data-bridge-edit-flow='overwrite' class='penicon'>[[" -> enable Wikidata Bridge .. "File:OOjs UI icon edit-ltr-progressive.svg |frameless |text-top |10px |alt=" .. i18n['edit_wikidata'] .. "|link=https://www.wikidata.org/entity/" .. entityID if langcode ~= "" then icon = icon .. "?uselang=" .. langcode end if propertyID ~= "" then icon = icon .. "#" .. propertyID end icon = icon .. "|" .. i18n['edit_wikidata'] .. "]]</span>" return icon end local function getMeanings(frame, args, current_lexeme, senses, references_seen, language_name) if #senses == 0 then return {createicon(i18n['content_lang_code'], current_lexeme:getId()) .. "''" .. i18n['text_category_rfdef'] .. "''" .. i18n.tocatlink(i18n['category_rfdef']), references_seen} end local meanings = html.create( 'ol' ) local idlinkset = {} for i, sense in pairs(senses) do local item_label_gloss_parts = {} local gloss_text_parts = {} local main_gloss_text = frame:expandTemplate{ title=i18n['template_anchor'], args={sense:getId()} } local specifiers = {} for k, property_id in ipairs({'P6084', 'P6191', 'P9488', 'P2341', 'P1535'}) do -- অবস্থান যেখানে শব্দার্থ ব্যবহৃত, language style, field of usage, indigenous to, used by -- @TODO: Some of these can be used as qualifiers as well, render them for _, stmt in pairs(sense:getAllStatements(property_id)) do local stmt_value = stmt.mainsnak.datavalue.value.id local reference_text = '' local refs = stmt.references if refs then for j, reference in pairs(refs) do table.insert(references_seen, reference.hash) local got_reference = getReference(reference.hash, reference) reference_text = reference_text .. '\n\n' .. frame:extensionTag('ref', got_reference[2]) end end local val = getLabel(stmt_value) table.insert(specifiers, val .. reference_text) if property_id == 'P9488' and lang_code ~= nil then -- field of usage table.insert(item_label_gloss_parts, i18n.tocatlink(lang_code .. ':' .. val)) end end end if #specifiers > 0 then main_gloss_text = main_gloss_text .. "(''" .. table.concat(specifiers, "'', ''") .. "'') " end local gloss = sense:getGloss( i18n['content_lang_code'] ) if gloss then main_gloss_text = main_gloss_text .. wrapStringInWikilinks(gloss) if gloss:match('^প্রদত্ত%s*(%S-)%s*নাম$') then -- given names main_gloss_text = main_gloss_text .. i18n.tocatlink(language_name .. ' ' .. i18n['category_given_names']) end else local other_gloss_text, other_gloss_lang, item_label local stmt_value = getOneValueForProperty(sense, 'P5137') if stmt_value then stmt_value = stmt_value.id item_label = getLabel(stmt_value) end if item_label then table.insert(item_label_gloss_parts, '[[:d:' .. stmt_value .. '|' .. item_label .. ']]') end if #item_label_gloss_parts > 0 then other_gloss_text = table.concat(item_label_gloss_parts, '; ') end if other_gloss_text == nil then for _, fallback_lang in ipairs(mw_lang.getFallbacksFor( i18n['content_lang_code'] )) do if sense:getGloss( fallback_lang ) then other_gloss_text, other_gloss_lang = sense:getGloss( fallback_lang ) end end if other_gloss_lang == nil then local glosses = sense:getGlosses() for _, gloss in pairs(glosses) do other_gloss_text = gloss[1] other_gloss_lang = gloss[2] break end end main_gloss_text = main_gloss_text .. other_gloss_text .. "<sup><em>" .. mw_lang.fetchLanguageName(other_gloss_lang, i18n['content_lang_code']) .. "</em></sup>" else main_gloss_text = main_gloss_text .. "''" .. other_gloss_text .. "''" end main_gloss_text = main_gloss_text .. i18n.tocatlink(i18n['category_rfdef_equivalent']) end local synonym = expandTemplateForProperty(frame, sense, 'P5973', i18n['template_synonym']) if synonym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. synonym end local antonym = expandTemplateForProperty(frame, sense, 'P5974', i18n['template_antonym']) if antonym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. antonym end local hypernym = expandTemplateForProperty(frame, sense, 'P6593', i18n['template_hypernym']) if hypernym ~= '' then main_gloss_text = main_gloss_text .. ' <br/> ' .. hypernym end if lex_cat == 'Q1084' or lex_cat == 'Q147276' then -- noun or proper noun local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-noun']) main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym elseif lex_cat == 'Q34698' then local demonym = expandTemplateForProperty(frame, sense, 'P6271', i18n['template_demonym-adj']) main_gloss_text = main_gloss_text .. ' <br/> ' .. demonym end table.insert(gloss_text_parts, main_gloss_text .. createicon(i18n['content_lang_code'], sense:getId())) for _, stmt in pairs(sense:getAllStatements('P8394')) do -- টিপ্পনীর উদ্ধৃতি local gloss_quote = termSpan({stmt.mainsnak.datavalue.value.text, stmt.mainsnak.datavalue.value.language}) if stmt.references[1] then local got_reference = getReference ( stmt.references[1].hash, stmt.references[1] ) gloss_quote = '"' .. gloss_quote .. '" ' .. got_reference[2] end table.insert(references_seen, stmt.references[1].hash) table.insert(gloss_text_parts, frame:extensionTag('ref', gloss_quote)) end for _, stmt in pairs(sense:getAllStatements('P1343')) do -- বর্ণিত উৎস -- TODO: do away with making fake reference objects local fake_reference = { ['snaks'] = {} } fake_reference.snaks['P248'] = { [1] = stmt.mainsnak } local qualifiers_order = stmt['qualifiers-order'] if qualifiers_order then for _, k in ipairs(qualifiers_order) do fake_reference.snaks[k] = stmt.qualifiers[k] end end fake_reference.hash = mw.hash.hashValue('sha3-512', serializeTable(fake_reference)) table.insert(references_seen, fake_reference.hash) local got_reference = getReference(fake_reference.hash, fake_reference) if got_reference[1] == nil then table.insert(gloss_text_parts, frame:extensionTag('ref', got_reference[2], {name = fake_reference.hash})) else table.insert(gloss_text_parts, frame:extensionTag{name = 'ref', content='', args = {name = got_reference[1]}}) end end local first_sense_image = '' local sense_images = sense:getAllStatements('P18') if next(sense_images) then first_sense_image = sense_images[1].mainsnak.datavalue.value end if first_sense_image ~= '' then table.insert(gloss_text_parts, '[[File:' .. first_sense_image .. "|thumb|'''" .. getLemmata(current_lexeme) .. "'''—" .. main_gloss_text .. ']]') end local idlinks = getExternalLinks(sense) if #idlinks > 0 then local idlinktext = '<small>(' for _, idlink in pairs(idlinks) do idlinktext = idlinktext .. idlink .. '\n' end idlinktext = idlinktext .. ')</small>' table.insert(gloss_text_parts, idlinktext) table.insert(idlinkset, idlinks) end local externallinks = getArticleLinks(frame, sense) if externallinks ~= '' then table.insert(gloss_text_parts, externallinks) end local new_notes = {} local sense_keys = { sense:getId(), string.sub(sense:getId(), string.find(sense:getId(), '-')+1) } for _, v in ipairs(sense_keys) do if args[v] then table.insert(new_notes, args[v]) end end if #new_notes > 0 then for _, v in ipairs(new_notes) do if i == 1 then table.insert(gloss_text_parts, '<br/>' .. v) else table.insert(gloss_text_parts, v) end end end local examples examples, references_seen = unpack(getExamples( current_lexeme, sense:getId(), references_seen )) local gloss_text = table.concat(gloss_text_parts, '\n') meanings:tag('li'):wikitext(gloss_text):wikitext(examples) end return {meanings, references_seen, idlinkset} end local function getPronunciationBaseForm() local base_form = nil -- (!) অন্য ভাষার শব্দের যদি অন্য রকম মূল ফর্ম থাকে সেগুলো এখানে নতুন if বিবৃতি দিয়ে যোগ করা যায়। if lang_code == 'bn' then if lex_cat == 'Q1084' then -- বিশেষ্য base_form = formWithSingleGrammaticalFeature( 'Q131105' ) -- কর্তৃকারক elseif lex_cat == 'Q24905' then -- ক্রিয়া base_form = formWithSingleGrammaticalFeature( 'Q1350145' ) -- ক্রিয়া বিশেষ্য end end if base_form == nil then for i, form in pairs(forms) do base_form = form break end end return base_form end local function getCombines( current_lexeme, frame ) local combines = '' local index_mappings = {} for i, stmt in pairs(current_lexeme:getAllStatements('P5238')) do if stmt.qualifiers and stmt.qualifiers['P1545'] then -- ক্রম local current_index = tonumber(stmt.qualifiers['P1545'][1].datavalue.value) index_mappings[current_index] = stmt end end if #index_mappings ~= 0 then for i, stmt in ipairs(index_mappings) do if stmt.mainsnak.datavalue then local part_lexeme_id = stmt.mainsnak.datavalue.value.id local part_lexeme = getEntity(part_lexeme_id) local current_substring = getLinkedLemmata(part_lexeme, frame) local part_etymology = getEtymology(part_lexeme, frame, 'partial') if part_etymology ~= '' and part_etymology then current_substring = current_substring .. ' (← ' .. part_etymology .. ')' end if combines == '' then combines = current_substring else -- @TODO: This should use the 'affix' and 'compound' templates instead. combines = combines .. ' + ' .. current_substring end end end end return combines end function getRoots(lexeme, frame) local stmts = lexeme:getAllStatements('P5920') if #stmts == 0 then return '', '', '' end local root_lexeme = getEntity(stmts[1].mainsnak.datavalue.value.id) return getLexemeLanguageCode(root_lexeme), '√' .. getLinkedLemmata(root_lexeme, frame), root_lexeme:getLemma('ar') end function getEtymology( current_lexeme, frame, mode ) -- @TODO: Fix the etymology chains that are not possible to render local etymology = '' local current_combines = getCombines(current_lexeme, frame) local root_lang, current_roots, root_str = getRoots(current_lexeme, frame) if mode ~= 'partial' and root_str then --frame:expandTemplate{title=i18n['template_root'], args={lang_code, root_lang, root_str}} end local stmts = current_lexeme:getAllStatements('P5191') local new_etymology_string if #stmts == 0 then if current_roots ~= '' and current_combines ~= '' and current_roots then return current_roots .. '<br/>(' .. current_combines .. ')' elseif current_roots ~= '' then if lang_code == 'ar' and mode ~= 'partial' and root_str ~= matched_lemma then return frame:expandTemplate{title=i18n['template_ar-rootbox'], args={root_str}} else return current_roots end else return current_combines end end local origin_lexeme_string for i, stmt in pairs(stmts) do local origin_lexeme_dv = stmt.mainsnak.datavalue -- If this is nil, the origin lexeme is not known. if origin_lexeme_dv then local origin_lexeme = getEntity(origin_lexeme_dv.value.id) local origin_lexeme_lang = getLabel(origin_lexeme:getLanguage()) local sitelink = i18n.wplink(origin_lexeme:getLanguage(), origin_lexeme_lang, wb) if sitelink ~= '' then origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. sitelink .. ')' else origin_lexeme_string = getLinkedLemmata(origin_lexeme, frame) .. ' (' .. origin_lexeme_lang .. ')' end if stmt.qualifiers and stmt.qualifiers['P5886'] then local mode_of_derivation = stmt.qualifiers['P5886'][1].datavalue.value.id if mode_of_derivation == 'Q1345001' then -- @TODO: Add support for showing gender origin_lexeme_string = frame:expandTemplate{title=i18n['template_borrowed'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_borrowing'] elseif mode_of_derivation == 'Q845079' then origin_lexeme_string = ustring.gsub(i18n['etymology_learned_borrowing'], '$1', origin_lexeme_string) elseif mode_of_derivation == 'Q56611986' then origin_lexeme_string = frame:expandTemplate{title=i18n['template_inherited'], args={lang_code, getLexemeLanguageCodeForEtymology(origin_lexeme), getLemmata(origin_lexeme), pos=getLabel(lex_cat)}} .. ' ' .. i18n['etymology_inheritance'] elseif mode_of_derivation == 'Q189743' then origin_lexeme_string = frame:expandTemplate{title=i18n['template_ellipsis'], args={lang_code, getLemmata(origin_lexeme)}} .. ' ' .. i18n['etymology_ellipsis'] end end local origin_origin = getEtymology(origin_lexeme, frame) if origin_origin ~= '' and origin_origin then new_etymology_string = origin_lexeme_string .. ' ← ' .. origin_origin else new_etymology_string = origin_lexeme_string end end if etymology == '' then etymology = new_etymology_string elseif origin_lexeme_string and etymology then etymology = etymology .. ' ' .. origin_lexeme_string elseif origin_lexeme_string and etymology == nil then etymology = origin_lexeme_string end end if current_roots ~= '' and etymology and current_roots then etymology = etymology .. ' ' .. current_roots elseif current_roots ~= '' and etymology == nil then etymology = current_roots end if current_combines ~= '' and etymology then etymology = etymology .. '<br/>(' .. current_combines .. ')' end return etymology end local function pronunciationBlock(block, value) return '* ' .. i18n['text_' .. block] .. ' ' .. value end local function getPronunciation(frame, current_lexeme, lang_name) local pronunciations = {} local base_form = getPronunciationBaseForm() local iast, iso15919_transcription, itrans, xsampa if base_form then for i, stmt in pairs(base_form:getAllStatements('P443')) do -- উচ্চারণের অডিও local pronunciation_file = stmt.mainsnak.datavalue.value local specifier_text = '' local specifiers = {} if stmt.qualifiers then for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন local qual = stmt.qualifiers[property_id] if qual then for _, quali in pairs(qual) do local stmt_value = quali.datavalue.value.id table.insert(specifiers, getLabel(stmt_value)) end end end end if #specifiers > 0 then specifier_text = table.concat(specifiers, "'', ''") end local audio_text if specifier_text ~= '' then audio_text = i18n['text_audio'] .. ' (' .. specifier_text .. ')' else audio_text = i18n['text_audio'] end table.insert(pronunciations, '* ' .. frame:expandTemplate{ title= i18n['template_audio'], args = {lang_name, pronunciation_file, audio_text} }) end iso15919_transcription = getOneValueForProperty(base_form, 'P5825') -- আইএসও ১৫৯১৯ প্রতিলিপিকরণ itrans = getOneValueForProperty(base_form, 'P8881') -- ITRANS iast = getOneValueForProperty(base_form, 'P7581') -- আইএএসটি প্রতিলিপিকরণ xsampa = getOneValueForProperty(base_form, 'P2859') local ipa_transcription = base_form:getAllStatements('P898') -- আধ্বব প্রতিলিপিকরণ -- @TODO: অডিও ও প্রতিলিপিকরণ দুটোই থাকলে একটার ঠিক পরেই আরেকটা দেখানো উচিত if #ipa_transcription ~= 0 then for i, stmt in pairs(ipa_transcription) do local ipa_text = stmt.mainsnak.datavalue.value local specifier_text = '' local specifiers = {} if stmt.qualifiers then for k, property_id in ipairs({'P5237'}) do -- উচ্চারণের ধরন for l, qual in ipairs(stmt.qualifiers[property_id]) do table.insert(specifiers, getLabel( qual.datavalue.value.id )) end end end if #specifiers > 0 then specifier_text = "(''" .. table.concat(specifiers, "'', ''") .. "'') " end local syllable_count if lang_code == 'tr' then syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z10029|' .. ipa_text, frame) else syllable_count = i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z30837|' .. ipa_text, frame) end table.insert(pronunciations, '* ' .. specifier_text .. frame:expandTemplate{ title= i18n['template_ipa'], args = {lang_name, ipa_text} } .. '\n** ' .. syllable_count) end -- The following checks are ordered based on which one is expected to be true in a higher number of cases. elseif lang_code == 'bn' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='bn-IPA', }) elseif lang_code == 'ar' then local lemma = current_lexeme:getLemma('ar') table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ar-IPA', args={lemma} }) elseif lang_code == 'en' then table.insert(pronunciations, '* ' .. i18n['text_syllable_count'] .. ' ' .. callWikifunctionsFunction('Z29940|' .. matched_lemma, frame)) elseif lang_code == 'pl' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='pl-IPA', }) elseif lang_code == 'ko' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ko-IPA', }) elseif lang_code == 'fi' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='fi-IPA', }) elseif lang_code == 'ta' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='ta-IPA', }) elseif lang_code == 'fax' then table.insert(pronunciations, '* ' .. frame:expandTemplate{ title='fax-pron', }) end end -- {{আধ্বব|en|/ˈɪntəvjuː/}} if iso15919_transcription then table.insert(pronunciations, pronunciationBlock('iso15919', iso15919_transcription)) end if itrans then table.insert(pronunciations, pronunciationBlock('itrans', itrans)) end if iast then table.insert(pronunciations, pronunciationBlock('iast', iast)) end if xsampa then table.insert(pronunciations, pronunciationBlock('xsampa', xsampa)) end return table.concat(pronunciations, '\n') end local function getAlternativeSpellings( current_lexeme, frame ) local alt_spellings = {} for i, stmt in pairs(current_lexeme:getAllStatements('P11577')) do -- বিকল্প বানান if stmt.mainsnak.datavalue then table.insert(alt_spellings, '* ' .. frame:expandTemplate{title=i18n['template_alter'], args={lang_code, getLemmata(getEntity(stmt.mainsnak.datavalue.value.id), frame)}}) end end return table.concat(alt_spellings, '\n') end local function get_any_notes(args, keys) local notes = {} for i, v in ipairs(keys) do if args[v] then table.insert(notes, args[v]) end end return notes end local function add_specific_notes(sections, notes) for i, v in ipairs(notes) do table.insert(sections, v) end end local function add_any_notes(sections, args, keys, heading) for i, v in ipairs(keys) do if args[v] then if heading then table.insert(sections, heading) end table.insert(sections, args[v]) end end end local function getMatchingLemmaForPageTitle(lexeme, title) local lemmas = lexeme:getLemmas() local match for _, lemma_entry in ipairs(lemmas) do local lemma = lemma_entry[1] if lemma == title then match = lemma break end end if match == nil then if lang_code == 'ar' then match = lexeme:getLemma('ar') elseif lang_code == 'rhg' then match = lexeme:getLemma('rhg-arab') elseif lang_id == 'Q11051ur' then match = lexeme:getLemma('ur') elseif lang_code == 'arz' then match = lexeme:getLemma('arz') end end return match end -- Returns the grammatical gender of a lexeme local function getGenderOfLexeme(lexeme) local gender = '' local stmts = lexeme:getAllStatements('P5185') -- ব্যাকরণগত লিঙ্গ if #stmts ~= 0 and stmts[1].mainsnak.datavalue then if #stmts == 1 then local gender_qid = stmts[1].mainsnak.datavalue.value.id if gender_qid == 'Q499327' then gender = 'm' elseif gender_qid == 'Q1775415' then gender = 'f' elseif gender_qid == 'Q1775461' then gender = 'n' elseif gender_qid == 'Q1305037' then gender = 'c' end end else for i, stmt in pairs(stmts) do local qid = stmts[i].mainsnak.datavalue if qid then qid = qid.value.id end if qid == 'Q499327' then gender = gender .. 'm' elseif qid == 'Q1775415' then gender = gender .. 'f' end end end if gender == '' then return nil end return gender end -- Returns the semantic gender for a sense -- @TODO: Complete this local function getGenderForSense(sense) local gender = '' local stmts = sense:getAllStatements('P10339') -- semantic gender if #stmts ~= 0 and stmts[1].mainsnak.datavalue then if #stmts == 1 then local gender_qid = stmts[1].mainsnak.datavalue.value.id if gender_qid == 'Q6581097' then gender = 'm' elseif gender_qid == 'Q1775415' then gender = 'f' elseif gender_qid == 'Q1775461' then gender = 'n' elseif gender_qid == 'Q1305037' then gender = 'c' elseif gender_qid == 'Q70853302' then gender = 'mfbysense' end end else for i, stmt in pairs(stmts) do local qid = stmts[i].mainsnak.datavalue if qid then qid = qid.value.id end if qid == 'Q499327' then gender = gender .. 'm' elseif qid == 'Q1775415' then gender = gender .. 'f' end end end return gender end local function buildLanguageAgnosticInflectionTable() local has_image = false local form_images = {} for i, form in ipairs(forms) do local form_image = form:getAllStatements('P7407') if next(form_image) then form_images[i] = form_image[1].mainsnak.datavalue.value has_image = true end end local table_class = "wikitable mw-collapsible sortable" if not has_image then table_class = table_class .. " mw-collapsed" end local text = "{| class='" .. table_class .. "' style='border:solid 1px rgb(80%,80%,100%); text-align:center;'\n" text = text .. "|+ " .. i18n['heading_inflection_table'] .. "\n" text = text .. "|- \n" text = text .. "! " .. i18n['heading_form'] .. " !! " .. i18n['heading_grammatical_features'] if has_image then text = text .. " !! " .. (i18n['heading_image']) end text = text .. " \n" for i, form in ipairs(forms) do local rep = form:getRepresentations() local feat = form:getGrammaticalFeatures() local rep_text = "" for j, r in pairs(rep) do if rep_text == "" then rep_text = r[1] else rep_text = rep_text .. " / " .. r[1] end end local feat_text = "" if feat then for j, f in ipairs(feat) do local label = getLabel(f) or f if feat_text == "" then feat_text = label else feat_text = feat_text .. ", " .. label end end end text = text .. "|-\n" text = text .. "| " .. (rep_text ~= "" and rep_text or "—") text = text .. " || " .. (feat_text ~= "" and feat_text or "—") if has_image then local image_cell = "—" if form_images[i] then image_cell = "[[চিত্র:" .. form_images[i] .. "|50px]]" end text = text .. " || " .. image_cell end text = text .. "\n" end text = text .. "|}" return text end function p.all(frame) local args = getArgs(frame) local lexeme_id = args[1] local current_lexeme = getEntity(lexeme_id) local language = current_lexeme:getLanguage() lang_id = language local senses = current_lexeme:getSenses() local add_heading = true forms = current_lexeme:getForms() if args[2] then local val = mw.text.trim(tostring(args[2])) if val == "false" or val == "0" or val == "না" then add_heading = false end end local references_seen = {} local sections = {} local title = mw.title.getCurrentTitle().text local lang_category = getLanguageForCategories(title, true) local lang_name = getLabel(lang_category) local conj_class = getLastValueForProperty(current_lexeme, 'P5186') if conj_class then conj_class = wb.getLabelByLang(getLastValueForProperty(current_lexeme, 'P5186').id, 'en'):gsub('Form ', '') end if add_heading == true then local lang_heading = heading_level(lang_name, 2) table.insert(sections, lang_heading) end lang_code = getLexemeLanguageCode(current_lexeme) matched_lemma = getMatchingLemmaForPageTitle(current_lexeme, title) lex_cat = current_lexeme:getLexicalCategory() local cat = i18n.lang_category(getLabel(lex_cat), lang_name) local lex_cat_template, ety_added, pron_added, alt_added if cat then table.insert(sections, heading_level(getLabel(lex_cat) .. cat .. frame:expandTemplate{ title = i18n['template_anchor'], args = { lexeme_id } }, 3)) table.insert(sections, frame:expandTemplate{ title= i18n['template_lexeme'], args = {lexeme_id} }) add_any_notes(sections, args, i18n['manual_category']) local etymology = getEtymology( current_lexeme, frame ) if etymology ~= '' and etymology then table.insert(sections, heading_level(i18n['heading_etymology'], 4)) table.insert(sections, tostring(etymology)) ety_added = true end if ety_added then add_any_notes(sections, args, i18n['manual_etymology']) else add_any_notes(sections, args, i18n['manual_etymology'], heading_level(i18n['heading_etymology'], 4)) end local pronunciation = getPronunciation( frame, current_lexeme, lang_name) if pronunciation ~= '' then table.insert(sections, heading_level(i18n['heading_pronunciation'], 4)) table.insert(sections, tostring(pronunciation)) pron_added = true end if pron_added then add_any_notes(sections, args, i18n['manual_pronunciation']) else add_any_notes(sections, args, i18n['manual_pronunciation'], heading_level(i18n['heading_pronunciation'], 4)) end local alternative_spellings = getAlternativeSpellings(current_lexeme, frame) if alternative_spellings ~= '' then table.insert(sections, heading_level(i18n['heading_alternative_spellings'], 4)) table.insert(sections, alternative_spellings) alt_added = true end if alt_added then add_any_notes(sections, args, i18n['manual_alternative_spellings']) else add_any_notes(sections, args, i18n['manual_alternative_spellings'], heading_level( i18n['heading_alternative_spellings'], 4)) end local gender = getGenderOfLexeme(current_lexeme) if lang_code and lang_code ~= 'ksy' and lang_code ~= 'rkt' then -- Skip for Kharia Thar, Rangpuri if lex_cat == 'Q34698' then -- বিশেষণ if lang_code == 'en' or lang_code == 'bn' then if #forms <= 1 then lex_cat_template = frame:expandTemplate{title= lang_code .. '-বিশেষণ'} end else if lang_code ~= 'fr' then lex_cat_template = safeExpand(frame, lang_code .. '-adj') if not lex_cat_template then lex_cat_template = safeExpand(frame, lang_code .. '-বিশেষণ') end end end elseif lex_cat == 'Q1084' then -- @TODO: Also check for plural forms -- The following checks are ordered based on which one is expected to be true in a higher number of cases. if language == 'Q13955' then if matched_lemma then lex_cat_template = safeExpand(frame, 'ar-noun', {matched_lemma,gender}) else lex_cat_template = frame:expandTemplate{title='ar-noun', args={nil,gender}} end elseif language == 'Q29919' then lex_cat_template = frame:expandTemplate{title='arz-noun', args={g=gender}} elseif language == 'Q397' then if matched_lemma then lex_cat_template = frame:expandTemplate{title='la-noun', args={matched_lemma,g=gender}} end elseif language == 'Q11059' then lex_cat_template = frame:expandTemplate{title='sa-noun', args={g=gender}} elseif language ~= 'Q1860' then -- These templates require the gender to be passed as the 1st argument. lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix'], {gender}) if not lex_cat_template then lex_cat_template = safeExpand(frame, lang_code .. i18n['noun_template_suffix_fallback'], {gender}) end end elseif lex_cat == 'Q24905' then -- ক্রিয়া if lang_code == 'ar' then if conj_class then lex_cat_template = frame:expandTemplate{title='ar-verb', args={conj_class}} end else lex_cat_template = safeExpand(frame, lang_code .. '-verb') end end end -- elseif lex_cat == 'Q147276' then -- lex_cat_template = safeExpand(frame, lang_code .. '-proper noun', {gender}) -- if not lex_cat_template then -- lex_cat_template = safeExpand(frame, lang_code .. '-নামবাচক বিশেষ্য', {gender}) -- end end if lex_cat_template then table.insert(sections, lex_cat_template) else if matched_lemma then table.insert(sections, heading_level(matched_lemma, 4)) else table.insert(sections, i18n.tocatlink(i18n['category_no_matching_lemma'])) end end local meanings, refs_seen, sense_extlinks = unpack(getMeanings( frame, args, current_lexeme, senses, references_seen, lang_name)) table.insert(sections, tostring(meanings)) add_any_notes(sections, args, i18n['manual_meaning']) local instance_of = current_lexeme:getAllStatements('P31') -- সত্ত্বার ধরন if #instance_of ~= 0 then local instance_of_entity = instance_of[1].mainsnak.datavalue.value.id if instance_of_entity == 'Q376431' then -- বর্ণের নাম table.insert(sections, i18n.tocatlink(lang_code .. ':রং')) else table.insert(sections, heading_level(i18n['heading_special_info'], 4) .. i18n['text_instance_of'] .. ' ' .. '[[d:' .. instance_of_entity .. '|' .. getLabel(instance_of_entity) .. ']]' .. i18n['text_sentence_terminator']) end end if lex_cat ~= 'Q9788' then local translations = getTranslations(frame, senses) if translations then table.insert(sections, translations) end end -- (!) বিশেষ ভাষার বিভক্তির সারণি যদি থাকে সেগুলো এখানে নতুন if বিবৃতি যোগ করা যায়। if next(forms) then if language == 'Q9610' then -- বাংলা if lex_cat == 'Q24905' then local conjTable = require('মডিউল:আভিধানিক উপাত্ত/Q9610').getConjTable(frame, forms) table.insert(sections, conjTable) elseif lex_cat == 'Q1084' or lex_cat == 'Q36224' or lex_cat == 'Q147276' or lex_cat == 'Q956030' then table.insert(sections, callWikifunctionsFunction('Z33243|' .. lexeme_id .. '|', frame)) else if #forms > 1 then table.insert(sections, buildLanguageAgnosticInflectionTable()) end end --elseif language == 'Q13955' then -- ar -- if lex_cat == 'Q1084' then -- table.insert(sections, frame:expandTemplate{title='ar-decl-noun', args={lemma}}) -- end --elseif lang_code == 'ar' and lex_cat == 'Q24905' then --table.insert(sections, frame:expandTemplate{title='ar-conj', args={conj_class}}) elseif language == 'Q11051' and lex_cat == 'Q1084' then -- de if lang_id == "Q11051hi" then table.insert(sections, callWikifunctionsFunction('Z37337|' .. lexeme_id .. '|', frame)) else table.insert(sections, callWikifunctionsFunction('Z37346|' .. lexeme_id .. '|', frame)) end elseif language == 'Q188' and lex_cat == 'Q1084' then -- de table.insert(sections, callWikifunctionsFunction('Z28602|' .. lexeme_id .. '|', frame)) elseif lang_code == 'as' and lex_cat == 'Q1084' then table.insert(sections, callWikifunctionsFunction('Z37219|' .. lexeme_id .. '|', frame)) elseif lang_code == 'ml' and lex_cat == 'Q1084' then table.insert(sections, callWikifunctionsFunction('Z37217|' .. lexeme_id .. '|', frame)) --elseif language == 'Q397' and lex_cat == 'Q1084' then -- la -- table.insert(sections, callWikifunctionsFunction('Z26333|' .. matched_lemma .. '|', frame)) elseif language == 'Q150' and lex_cat == 'Q34698' then -- fr table.insert(sections, callWikifunctionsFunction('Z36435|' .. lexeme_id .. '|', frame)) elseif language == 'Q652' and lex_cat == 'Q34698' then -- ইতালীয় table.insert(sections, callWikifunctionsFunction('Z36407|' .. lexeme_id .. '|', frame)) elseif language == 'Q809' or language == 'Q9058' or language == 'Q6654' or language == 'Q9056' then -- পোলীয়, স্লোভাক, ক্রোয়েশীয়, চেক table.insert(sections, callWikifunctionsFunction('Z36421|' .. lexeme_id .. '|', frame)) elseif #forms > 1 and language ~= 'Q150' then table.insert(sections, buildLanguageAgnosticInflectionTable()) end end if lex_cat == 'Q134830' then table.insert(sections, frame:expandTemplate{title='prefixsee', args={lang_code}}) elseif lex_cat == 'Q102047' then table.insert(sections, frame:expandTemplate{title='suffixsee', args={lang_code}}) -- elseif lex_cat == 'Q111029' then -- table.insert(sections, frame:expandTemplate{title='rootsee', args={'+', lang_code, matched_lemma}}) end local reference_notes = get_any_notes(args, i18n['manual_reference']) if #refs_seen > 0 or #reference_notes > 0 then table.insert(sections, heading_level(i18n['heading_references'], 4)) table.insert(sections, frame:extensionTag('references')) add_specific_notes(sections, reference_notes) end local external_link_table = getExternalLinks ( current_lexeme ) if #external_link_table > 0 then local external_links = '* ' .. table.concat(external_link_table, '\n* ') table.insert(sections, heading_level(i18n['heading_external_links'], 4)) table.insert(sections, external_links) end add_any_notes(sections, args, i18n['manual_external_link']) if #refs_seen == 0 and #reference_notes == 0 and sense_extlinks and #sense_extlinks == 0 and #external_link_table == 0 and #get_any_notes(args, i18n['manual_external_link']) == 0 then table.insert(sections, i18n.rfref_category(lang_name)) end return table.concat(sections,"\n\n") end return p 8ssc0grxyca75e1p1t358ujyvc88zty হেস্তনেস্ত 0 54095 514092 345844 2026-07-25T16:56:52Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309015-এর সাথে সংযোগ তৈরি করছি 514092 wikitext text/x-wiki {{লে|L309015}} ===ভাবার্থ=== {{বাগধারা|bn}} # যা হবার হবে # চরম নিস্পত্তি, থাকা না থাকা, হয় কি না হয়, শেষ দেখা #: {{ux|bn|একটা হেস্তনেস্ত করে ছাড়বো}} #: {{সমার্থক বাগধারা|bn|এসপার-ওসপার}} gr03iskrqaeegwiygpprhdd0mvecpgp ষড়ভুজ 0 60662 514125 344408 2026-07-25T17:51:52Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309126-এর সাথে সংযোগ তৈরি করছি 514125 wikitext text/x-wiki {{লে|L309126}} lu3lig2tslm3wu0z7gorhihx4oq3x5i 514126 514125 2026-07-25T17:52:02Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309125-এর সাথে সংযোগ তৈরি করছি 514126 wikitext text/x-wiki {{লে|L309126}} {{লে|L309125|না}} 5fdxv48mo7ujjbq71xxbigje37u0ukc ঔষর 0 84599 514143 469665 2026-07-25T17:57:24Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309284-এর সাথে সংযোগ তৈরি করছি 514143 wikitext text/x-wiki {{লে|L309284}} 70ewmiucdoy3b6eey9ce2zb1anfefut ঔষস 0 84600 514144 469666 2026-07-25T17:57:38Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309283-এর সাথে সংযোগ তৈরি করছি 514144 wikitext text/x-wiki == {{langname|bn}} == === উচ্চারণ === * {{bn-IPA}} === বিশেষ্য === {{bn-বিশেষ্য}} # [[সান্ধ্য]] অবসর। {{লে|L309283|না}} nrdsc34sosiygvzbl1al0ilfvh7puo8 ঔষ্ট্র 0 84601 514138 469667 2026-07-25T17:56:22Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309280-এর সাথে সংযোগ তৈরি করছি 514138 wikitext text/x-wiki {{লে|L309280}} 5nz3zacs68w0rvddt7am8wh3k14r7ho 514139 514138 2026-07-25T17:56:28Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309282-এর সাথে সংযোগ তৈরি করছি 514139 wikitext text/x-wiki {{লে|L309280}} {{লে|L309282|না}} rewjiwrml4oo8yahxct6lsawzkdme9v ঔষ্ঠ্য 0 84604 514135 469670 2026-07-25T17:55:50Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309278-এর সাথে সংযোগ তৈরি করছি 514135 wikitext text/x-wiki == {{langname|bn}} == === উচ্চারণ === * {{bn-IPA}} === বিশেষ্য === {{bn-বিশেষ্য}} # ওষ্ঠদ্বারা [[উচ্চার্য]] [[বর্ণ]]। 3 4mdr03hjvst7uhptgsdpxylseexxjue 514136 514135 2026-07-25T17:56:00Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309278-এর সাথে সংযোগ তৈরি করছি 514136 wikitext text/x-wiki == {{langname|bn}} == === উচ্চারণ === * {{bn-IPA}} === বিশেষ্য === {{bn-বিশেষ্য}} # ওষ্ঠদ্বারা [[উচ্চার্য]] [[বর্ণ]]। {{লে|L309278|না}} 91ikxtieia6j4dzk0eohdo85vz0yti4 ঔষ্ণ 0 84605 514142 469671 2026-07-25T17:57:05Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309276-এর সাথে সংযোগ তৈরি করছি 514142 wikitext text/x-wiki {{লে|L309276}} lgvdc4xzaw29qk489ysulgb5drax43a ঔষ্ণ্য 0 84607 514141 469673 2026-07-25T17:56:52Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309277-এর সাথে সংযোগ তৈরি করছি 514141 wikitext text/x-wiki {{লে|L309277}} ifvfqakwz4njqe648ebh5yf34xu7p14 ঔষ্ম্য 0 84608 514140 469674 2026-07-25T17:56:42Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309274-এর সাথে সংযোগ তৈরি করছি 514140 wikitext text/x-wiki {{লে|L309274}} rjc9yuknlpmfoav30nvwfaz5bpknvnz পঞ্চগড় 0 99493 514070 483021 2026-07-25T16:29:16Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308731-এর সাথে সংযোগ তৈরি করছি 514070 wikitext text/x-wiki {{লে|L308731|L308731-S1=বাংলাদেশের উত্তরাঞ্চলে পাঁচটি গড় নিয়ে [[গঠিত]] জেলাবিশেষ।}} oq2ltikuwii92o58w2k2rjnldsjega4 ষট্‌ 0 113939 514132 496402 2026-07-25T17:54:08Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309264-এর সাথে সংযোগ তৈরি করছি 514132 wikitext text/x-wiki {{লে|L309264}} == {{langname|bn}} == === উচ্চারণ === * {{bn-IPA}} === বিশেষ্য === {{bn-বিশেষ্য}} # [[ছয়]] [[সংখ্যা]]। === বিশেষণ === {{bn-বিশেষণ}} # [[ছয়]] সংখ্যক। ooj4958sqwpq4n97eyakr6ivn1issue 514137 514132 2026-07-25T17:56:15Z Redmin 6857 514137 wikitext text/x-wiki {{লে|L309264}} === বিশেষণ === {{bn-বিশেষণ}} # [[ছয়]] সংখ্যক। 3q3kx3hpntltlrjvwwb12ucyfan231e ষট্‌পঞ্চাশ 0 113951 514129 496414 2026-07-25T17:53:25Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309233-এর সাথে সংযোগ তৈরি করছি 514129 wikitext text/x-wiki == {{langname|bn}} == === উচ্চারণ === * {{bn-IPA}} === বিশেষ্য === {{bn-বিশেষ্য}} # ৫৬ [[সংখ্যা]]। {{লে|L309233|না}} dic61tcnu715314hjqvo7wkib16ucxr ষট্‌পঞ্চাশৎ 0 113952 514128 496416 2026-07-25T17:53:08Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309235-এর সাথে সংযোগ তৈরি করছি 514128 wikitext text/x-wiki {{লে|L309235}} === বিশেষণ === {{bn-বিশেষণ}} # ৫৬ সংখ্যক। 43krhmk0stl74n8m71rygdlgjnkxoew ষড়্‌বিধ 0 113972 514127 496434 2026-07-25T17:52:23Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309128-এর সাথে সংযোগ তৈরি করছি 514127 wikitext text/x-wiki {{লে|L309128}} 01checm53cuq9az24nzdt9nxw4du5gc ষত্ববিধি 0 113981 514122 496443 2026-07-25T17:49:25Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309110-এর সাথে সংযোগ তৈরি করছি 514122 wikitext text/x-wiki {{লে|L309110|meaning= # স-স্থলে [[মূর্ধন্য]] ষ-র ব্যবহারবিষয়ক ব্যাকরণনির্দিষ্ট [[বিধান]]।}} gwjpyeywzs8rlxnbs0n7plzws4ctcxl হলদি 0 117939 514101 500123 2026-07-25T17:01:19Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309054-এর সাথে সংযোগ তৈরি করছি 514101 wikitext text/x-wiki == {{langname|bn}} == === উচ্চারণ === * {{bn-IPA}} === বিশেষ্য === {{bn-বিশেষ্য}} # এশিয়ার [[ক্রান্তীয়]] অঞ্চলে জাত এবং বর্ষাকালে ফোটে এমন [[সবুজাভ]] হলুদ ফুল ও [[লম্বাটে]] পাতাবিশিষ্ট [[বর্ষজীবী]] [[উদ্ভিদ]] বা তার ভেষজগুণসম্পন্ন তীব্রগন্ধ কটুস্বাদ [[কন্দ]] (যা শুকানোর পর হলুদ [[রং]] [[ধারণ]] করে এবং রান্নার মসলারূপে [[ব্যবহৃত]] হয়), হলুদ। {{লে|L309054|না}} oty7i0vj6lm32ldbdudib1am49om1ql হলদে 0 117940 514102 500124 2026-07-25T17:01:33Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309055-এর সাথে সংযোগ তৈরি করছি 514102 wikitext text/x-wiki == {{langname|bn}} == === উচ্চারণ === * {{bn-IPA}} === বিশেষণ === {{bn-বিশেষণ}} # হলুদবর্ণবিশিষ্ট, পীত। {{লে|L309055|না}} 5oardwz9le8j6kq08u79mx217jly8t8 হুট 0 118397 514084 404557 2026-07-25T16:48:37Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308868-এর সাথে সংযোগ তৈরি করছি 514084 wikitext text/x-wiki {{লে|L308868}} === অব্যয় === {{bn-অব্যয়|হুট}} # [[অবিবেচনা]] আকস্মিকতা [[প্রভৃতি]] [[ভাব]] [[প্রকাশক]] [[শব্দ]]। অবজ্ঞাসূচক [[শব্দ]]। [[মৃদু]] খট্‌[[শব্দ]]। 7igxg3k1x6du1yrd203vc6hko6l7l50 হুড়কো 0 118403 514085 500527 2026-07-25T16:48:54Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308869-এর সাথে সংযোগ তৈরি করছি 514085 wikitext text/x-wiki {{লে|L308869}} e9anebo1b5i5plk1rgfhz6p3v1v2qgd 514086 514085 2026-07-25T16:49:08Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308870-এর সাথে সংযোগ তৈরি করছি 514086 wikitext text/x-wiki {{লে|L308869}} {{লে|L308870|না}} 2pwtxf8nlyx8yty11en1z2fvsrj3ngg হ্যাজাক 0 118582 514097 500681 2026-07-25T16:59:02Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309021-এর সাথে সংযোগ তৈরি করছি 514097 wikitext text/x-wiki == {{langname|bn}} == === বিশেষ্য === {{bn-বিশেষ্য}} # [[কেরোসিন]] গ্যাসের বাতিবিশেষ যাতে [[সংযুক্ত]] বাল্ব-আকৃতির জালের [[মতো]] আবরণ (mantile) [[উত্তপ্ত]] হয়ে [[উজ্জ্বল]] আলো [[বিকিরণ]] করে। {{লে|L309021|না}} 8xlk052gkio2qgjes2d0q9otu9ih34t নওগাঁ 0 119295 514036 339563 2026-07-25T14:17:54Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308677-এর সাথে সংযোগ তৈরি করছি 514036 wikitext text/x-wiki {{লে|L308677}} |ব্যুৎপত্তি= ফারসি [[نو]] এবং বাংলা [[গাঁ]] থেকে। }} cy3z2r9s1jm3ng3ifb4v2oun4a0a67n 514037 514036 2026-07-25T14:18:14Z Redmin 6857 514037 wikitext text/x-wiki {{লে|L308677 |ব্যুৎপত্তি= ফারসি [[نو]] এবং বাংলা [[গাঁ]] থেকে। }} 5dvtttnppw8eysimlcd1bbw1wvgjw59 কাছাড় 0 125874 514061 352965 2026-07-25T15:35:06Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308712-এর সাথে সংযোগ তৈরি করছি 514061 wikitext text/x-wiki =={{langname|bn}}== === ব্যুৎপত্তি === *[[সংস্কৃত]] জাত === উচ্চারণ === *কাছা্র === বিশেষ্য === {{বিশেষ্য|bn}} # সমুদ্র বা নদীর তটভূমি {{লে|L308712|না}} 3qav9j0esmgi4pyclhr32odmcururc3 কুষ্টিয়া 0 134382 514034 438082 2026-07-25T14:14:53Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308673-এর সাথে সংযোগ তৈরি করছি 514034 wikitext text/x-wiki {{লে|L308673 |ব্যুৎপত্তি= {{com+|bn|কোষ্টা|-ইয়া|alt1=কুষ্টা|t1=jute|pos2=relational suffix}}, named such due to the historical jute production in the area.<ref>{{cite-journal|bn|url=https://www.banglatribune.com/journey/397383/%E0%A6%AA%E0%A6%BE%E0%A6%9F-%E0%A6%A5%E0%A7%87%E0%A6%95%E0%A7%87-%E0%A6%AF%E0%A7%87%E0%A6%AD%E0%A6%BE%E0%A6%AC%E0%A7%87-%E2%80%98%E0%A6%95%E0%A7%81%E0%A6%B7%E0%A7%8D%E0%A6%9F%E0%A6%BF%E0%A7%9F%E0%A6%BE%E2%80%99-%E0%A6%A8%E0%A6%BE%E0%A6%AE%E0%A7%87%E0%A6%B0-%E0%A6%89%E0%A7%8E%E0%A6%AA%E0%A6%A4%E0%A7%8D%E0%A6%A4%E0%A6%BF|title=পাট থেকে যেভাবে 'কুষ্টিয়া' নামের উৎপত্তি|work=[[w:Bangla Tribune|Bangla Tribune]]|accessdate=2023-04-25}}</ref> }} <references/> 85tseki6qc6bunjyypqhrm5nemfen83 নোয়াখালী 0 134611 514032 432460 2026-07-25T14:11:58Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308702-এর সাথে সংযোগ তৈরি করছি 514032 wikitext text/x-wiki {{লে|L308702|ব্যুৎপত্তি= A compound of {{compound|bn|নোয়া|খালী|pos1=a dialectal variant of {{m|bn|নয়া||new}}|pos2=a suffixed form of {{m|bn|খাল||canal}}|lit=new canal}}. }} ====সমার্থক শব্দ==== *{{l|bn|ভুলুয়া}} ====উদ্ভূত শব্দ==== *{{l|bn|নোয়াখাইল্লা}} *{{l|bn|নোয়াখালী জেলা|tr=nōakhali zela}} exlr0clg1lr1nf1udgis4fk8qlib043 মডিউল:আভিধানিক উপাত্ত/i18n 828 148710 514041 514011 2026-07-25T14:33:19Z Redmin 6857 514041 Scribunto text/plain local p = {} p['fallback_wikipedia'] = 'enwiki' p['content_lang_name'] = 'বাংলা' p['content_lang_code'] = 'bn' -- The proper way to do this would be to use mw.ustring.gsub(mw.site.wikiId, 'wiktionary', '') but that does mean wasting compute so instead, just use the 'cached' config which isn't really labour-intensive. p['wikipedia'] = 'bnwiki' -- p['content_lang_code'] .. 'wiki' p['heading_etymology'] = 'ব্যুৎপত্তি' p['heading_pronunciation'] = 'উচ্চারণ' p['heading_translation'] = 'অনুবাদ' p['heading_references'] = 'তথ্যসূত্র' p['heading_external_links'] = 'বহিঃসংযোগ' p['heading_alternative_spellings'] = 'বিকল্প বানান' p['heading_inflection_table'] = 'বিভক্তির সারণী' p['heading_form'] = 'রূপ' p['heading_grammatical_features'] = 'ব্যাকরণিক বৈশিষ্ট্য' p['heading_image'] = 'চিত্র' p['heading_alternative_script'] = 'বিকল্প রূপ' p['heading_special_info'] = 'বিশেষ তথ্য' p['text_instance_of'] = 'এটি একটি' p['text_sentence_terminator'] = '।' p['text_audio'] = 'অডিও' p['text_iso15919'] = '[[w:আইএসও ১৫৯১৯|আইএসও ১৫৯১৯]]:' p['text_iast'] = '[[w:সংস্কৃত লিপ্যন্তরের আন্তর্জাতিক বর্ণমালা|সলিআব]]:' p['text_itrans'] = '[[w:en:ITRANS|ITRANS]]:' p['text_xsampa'] = '[[w:এক্স-সাম্পা|এক্স-সাম্পা]]:' p['text_syllable_count'] = '[[w:অক্ষর (সিলেবল)|অক্ষর]] সংখ্যা:' p['template_lexeme'] = 'উইকিউপাত্ত লেক্সিম' -- Q81739987 p['template_wikipedia'] = 'উইকিপিডিয়া' -- Q6275256 p['template_audio'] = 'অডিও ভাষার নাম' -- Q138620346 p['template_anchor'] = 'anchor' -- Q5412976 p['template_rfdef'] = 'rfdef' -- Q30733154 p['template_ipa'] = 'আধ্বব ভাষার নাম' -- Q138608718 p['template_t'] = 't' -- Q30769953 p['template_trans-top'] = 'অনুবাদ-শীর্ষ' -- Q30528422 p['template_trans-bottom'] = 'অনুবাদ-নিচ' -- Q30528419 p['template_antonym'] = 'বিপরীতার্থক' -- Q35305357 p['template_synonym'] = 'synonyms' -- Q32751230 p['template_hypernym'] = 'hypernyms' -- Q35305454 p['template_demonym-noun'] = 'demonym-noun' -- Q130360250 p['template_demonym-adj'] = 'demonym-adj' -- Q135184225 p['template_homophones'] = 'সমোচ্চারিত' -- Q30557565 p['template_borrowed'] = 'ধারকৃত শব্দ' -- Q30872304 p['template_inherited'] = 'inherited' -- Q30864051 p['template_ar-rootbox'] = 'ar-rootbox' -- Q115627074 p['template_root'] = 'root' -- Q104521645 p['template_ellipsis'] = 'ellipsis' -- Q107037827 p['template_prefixsee'] = 'prefixsee' -- Q47517865 p['template_rootsee'] = 'rootsee' -- Q105987491 p['template_suffixsee'] = 'suffixsee' -- Q47517855 p['template_alter'] = 'alter' -- Q54909435 p['noun_template_suffix'] = '-noun' p['noun_template_suffix_fallback'] = '-বিশেষ্য' p['proper noun_template_suffix'] = '-proper noun' p['proper noun_template_suffix_fallback'] = '-নামবাচক বিশেষ্য' p['verb_template_suffix'] = '-verb' p['verb_template_suffix_fallback'] = '-ক্রিয়া' p['manual_category'] = {'বিষয়শ্রেণী', 'category'} p['manual_etymology'] = {'ব্যুৎপত্তি', 'etymology'} p['manual_pronunciation'] = {'উচ্চারণ', 'pronunciation'} p['manual_meaning'] = {'অর্থ', 'meaning'} p['manual_reference'] = {'তথ্যসূত্র', 'reference'} p['manual_external_link'] = {'বহিঃসংযোগ', 'external_link'} p['manual_alternative_spellings'] = {'বিকল্প বানান', 'বিকল্প', 'alternative spelling', 'alternative form'} p['etymology_borrowing'] = 'থেকে [[w:ঋণশব্দ|ঋণকৃত]]' p['etymology_learned_borrowing'] = '$1 থেকে [[d:Q845079|শিক্ষিতভাবে ঋণকৃত]]' p['etymology_inheritance'] = 'থেকে [[উত্তরলব্ধ]]' p['etymology_ellipsis'] = '[[w:en:Ellipsis (linguistics)|সংক্ষিপ্ত হয়ে]] উপলব্ধ' -- অংশচ্ছেদ (ভাষাবিজ্ঞান) p['edit_wikidata'] = 'উইকিউপাত্তে সম্পাদনা করুন' -- বিষয়শ্রেণী যেগুলো অন্য উইকিঅভিধানে আছে p['category_rfdef'] = 'ভাষা অনুযায়ী সংজ্ঞার জন্য অনুরোধ' -- Q33129136 p['category_rfdef_equivalent'] = 'শব্দার্থের বাংলা মানের অনুরোধ' -- [[:wikt:en:Category:Requests for English equivalent term by language]]-এর কাছাকাছি p['category_no_matching_lemma'] = 'যেসব ভুক্তিতে লেমার হেডিং দেখানো অসম্ভব' -- Entries will be put in this category whenever a lemma heading cannot be rendered because no lemma of the linked lexeme matched the page title. p['category_given_names'] = 'প্রদত্ত নাম' -- Q8492384 -- বিষয়শ্রেণী যেগুলো অন্য উইকিঅভিধানে নেই p['text_category_rfdef'] = 'এই শব্দের লেক্সিমে অর্থ প্রয়োজন। দয়া করে লেক্সিম পাতায় গিয়ে একটি অর্থ যোগ করুন, যাতে অন্য পাঠকরা জানতে পারবে এটা মানে কি।' function p.tocatlink(str) return '[[বিষয়শ্রেণী:' .. str .. ']]' end function p.lang_category(lex_cat, language) local cat_text = p.tocatlink(language .. ' লেমা') cat_text = cat_text .. p.tocatlink(language .. ' ' .. lex_cat) return cat_text end function p.trans_category(language) return p.tocatlink(language .. ' অনুবাদসহ পাতা') end function p.wplink(qid, display_text, wb) local link = wb.getSitelink(qid, p['wikipedia']) if link == nil then link = wb.getSitelink(qid, p['fallback_wikipedia']) if link ~= nil then return '[[w:en:' .. link .. '|' .. display_text .. ']]' end else return '[[w:' .. link .. '|' .. display_text .. ']]' end return '' end function p.rfref_category(language) local cat_text = p.tocatlink('তথ্যসূত্রহীন ' .. language .. ' শব্দ',language) return cat_text end p.nolinks = { -- These are words that are so commonly used that links to entries about them are unnecessary. ['করা'] = true, ['হওয়া'] = true, ['যাওয়া'] = true, ['যে'] = true, ['ও'] = true, ['তার'] = true, ['এবং'] = true, ['যার'] = true, ['যায়'] = true, ['সম্পর্কিত'] = true, ['একটি'] = true, ['যা'] = true, ['এমন'] = true, ['করে'] = true, } return p 6v9tul6uxota5rwvxx4208ftyi1ueik عفو 0 167805 514027 508660 2026-07-25T14:02:40Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L1574989-এর সাথে সংযোগ তৈরি করছি 514027 wikitext text/x-wiki {{লে|L1484234}} {{লে|L1574989|না}} 5l0ujlrejz7lz9sb2s5p37tscd27dxm হোক্কড় 0 170290 514093 513030 2026-07-25T16:57:16Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309016-এর সাথে সংযোগ তৈরি করছি 514093 wikitext text/x-wiki {{লে|L302241}} {{লে|L309016|না}} h6lu18agxif4u3oxz5lu9b6o3v4nhoa গাইবান্ধা 0 170591 514030 2026-07-25T14:10:39Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308674-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514030 wikitext text/x-wiki {{লে|L308674}} 4ssa4ixagy4dghuy7li8h2jnzky1jeo ফেনী 0 170592 514031 2026-07-25T14:11:00Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308704-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514031 wikitext text/x-wiki {{লে|L308704}} e0fefdy3lsc3m2dq6lsr6gyyngg2iir নরসিংদী 0 170593 514033 2026-07-25T14:12:36Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308700-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514033 wikitext text/x-wiki {{লে|L308700}} foyszdouim6yroj6jgismh6imtsryc1 চুয়াডাঙ্গা 0 170594 514035 2026-07-25T14:15:36Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308675-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514035 wikitext text/x-wiki {{লে|L308675}} sq3wy9n3rl8rau8sjmhenc8gftedeg2 নেত্রকোণা 0 170595 514039 2026-07-25T14:19:32Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308679-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514039 wikitext text/x-wiki {{লে|L308679}} lmvmt96yizu6lklxndu4p8mhmbok9dn নীলফামারী 0 170596 514043 2026-07-25T14:45:04Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308701-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514043 wikitext text/x-wiki {{লে|L308701}} fni75neqy6exohffbm7y9nv1718bfxq হিঁসকুড়ে 0 170597 514044 2026-07-25T14:46:06Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308862-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514044 wikitext text/x-wiki {{লে|L308862}} d3nxy96x1sm1trzynyx2psjqb1dm1zy হিসু 0 170598 514045 2026-07-25T14:46:56Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308865-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514045 wikitext text/x-wiki {{লে|L308865}} de6focji3mre0r471ngsipoccktf3oq হিসি 0 170599 514047 2026-07-25T14:49:14Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308864-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514047 wikitext text/x-wiki {{লে|L308864}} cd2hei8lq3ncg7ulliok4dh3va2pyry হিড়িক্কি 0 170600 514048 2026-07-25T14:49:47Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308811-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514048 wikitext text/x-wiki {{লে|L308811}} cv2z8w2vfpvfgm4aczv83wggxcl0inp হিনটামি 0 170601 514049 2026-07-25T14:50:26Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308814-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514049 wikitext text/x-wiki {{লে|L308814}} kq1ud47w68s5lfxi09a84buwz7rz4ht হিড়িক্ক 0 170602 514050 2026-07-25T14:50:44Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308812-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514050 wikitext text/x-wiki {{লে|L308812}} guoy7av4guaznalmsk0abcug52vy64v সুনামগঞ্জ 0 170603 514051 2026-07-25T14:50:50Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308755-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514051 wikitext text/x-wiki {{লে|L308755}} 2v2vpzt7f05ko6lpu4nu3qzkejgbffy হবিগঞ্জ 0 170604 514052 2026-07-25T14:51:02Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308756-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514052 wikitext text/x-wiki {{লে|L308756}} b10th3pf8k9j6uem1mpyfz7r6p67ixu খাগড়াছড়ি 0 170605 514054 2026-07-25T14:53:54Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308694-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514054 wikitext text/x-wiki {{লে|L308694}} 6szzh1rk5no3zdxbgu1dngufm845vf0 পটুয়াখালী 0 170606 514055 2026-07-25T14:54:10Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308703-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514055 wikitext text/x-wiki {{লে|L308703}} fg1nx0ift3dh1uruwpmvm72ijafptcp চাঁপাইনবাবগঞ্জ 0 170607 514056 2026-07-25T14:54:41Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308720-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514056 wikitext text/x-wiki {{লে|L308720}} j8w6zkvai53zpwa0mpev9bdpaxoi2mo জামালপুর 0 170608 514057 2026-07-25T14:54:49Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308721-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514057 wikitext text/x-wiki {{লে|L308721}} 21uctzpcpioewqh1hld2rnf4b47ofip জয়পুরহাট 0 170609 514058 2026-07-25T14:54:56Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308722-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514058 wikitext text/x-wiki {{লে|L308722}} 3yx3itzh4dtfms8ipa73qoe6i54g39o রাঙ্গামাটি 0 170610 514059 2026-07-25T14:55:19Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308705-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514059 wikitext text/x-wiki {{লে|L308705}} 5x4u8p1sha618nmld9nvkg5v7kleow8 রাজবাড়ী 0 170611 514060 2026-07-25T15:33:45Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308706-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514060 wikitext text/x-wiki {{লে|L308706}} g18g9b3lu4ohw8y9o973e9v4m5dw84a কিশোরগঞ্জ 0 170612 514062 2026-07-25T15:53:48Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308714-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514062 wikitext text/x-wiki {{লে|L308714}} ntjrjygrlxjvc91u0xz1hnr24jh6nmp গাজীপুর 0 170613 514064 2026-07-25T16:23:26Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308717-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514064 wikitext text/x-wiki {{লে|L308717}} 2bkgc8ef0kft4psykatat5k9p3wok21 গোপালগঞ্জ 0 170614 514065 2026-07-25T16:23:43Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308718-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514065 wikitext text/x-wiki {{লে|L308718}} gsvu2zy2gjevsnvgrjo31cmtcrqe4on চাঁদপুর 0 170615 514066 2026-07-25T16:24:41Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308719-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514066 wikitext text/x-wiki {{লে|L308719}} 2nqa64drzm0d4di2ahqdnnznywr62le টাঙ্গাইল 0 170616 514067 2026-07-25T16:25:33Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308725-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514067 wikitext text/x-wiki {{লে|L308725}} 8i8kta4g7pujjc9brty38vp9guu3nhb নাটোর 0 170617 514068 2026-07-25T16:26:56Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308728-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514068 wikitext text/x-wiki {{লে|L308728}} 3pm5oyji1rfa9wwn04qtxptnn821dec নড়াইল 0 170618 514069 2026-07-25T16:27:51Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308730-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514069 wikitext text/x-wiki {{লে|L308730}} n85jo9i0pl42s19efgivtdjyw38a46t পিরোজপুর 0 170619 514071 2026-07-25T16:29:24Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308732-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514071 wikitext text/x-wiki {{লে|L308732}} 96k8rb40kktlmimedlfiz5v4ixkyu1o ফরিদপুর 0 170620 514072 2026-07-25T16:32:00Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308733-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514072 wikitext text/x-wiki {{লে|L308733}} ekos78dw206iqoplo4i2pjxue41mbzt মাদারীপুর 0 170621 514073 2026-07-25T16:33:57Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308739-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514073 wikitext text/x-wiki {{লে|L308739}} 2az3qvf3d1as2zo1snji04zre05earn মানিকগঞ্জ 0 170622 514074 2026-07-25T16:36:05Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308740-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514074 wikitext text/x-wiki {{লে|L308740}} 8xyyur34wu25589nskcp54fbm80j1vv মুন্সিগঞ্জ 0 170623 514075 2026-07-25T16:37:06Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308741-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514075 wikitext text/x-wiki {{লে|L308741}} 8soutel8ubcxifc8kuy9jlp20qkhjyp মেহেরপুর 0 170624 514076 2026-07-25T16:37:24Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308744-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514076 wikitext text/x-wiki {{লে|L308744}} c3zzk4wgylsnlf2vbq7bdd8d3nj0f9i মৌলভীবাজার 0 170625 514077 2026-07-25T16:37:32Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308745-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514077 wikitext text/x-wiki {{লে|L308745}} ncgcsou9zlomwv3a6wusw2c4tu4mgpa শরীয়তপুর 0 170626 514078 2026-07-25T16:39:22Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308751-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514078 wikitext text/x-wiki {{লে|L308751}} 5pwo7q9jbdsnjxhg62cujee164dowdt শেরপুর 0 170627 514079 2026-07-25T16:39:32Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308752-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514079 wikitext text/x-wiki {{লে|L308752}} ptpc2qmhuu94znvbkt2lgltmq3mf2vo সিরাজগঞ্জ 0 170628 514080 2026-07-25T16:39:40Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308753-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514080 wikitext text/x-wiki {{লে|L308753}} 42jaju3s9byff9loez51sk4y7xdrhql হিনটামিগিরি 0 170629 514081 2026-07-25T16:39:59Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308815-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514081 wikitext text/x-wiki {{লে|L308815}} 30f2helcdt0oaxgc2ofvjtd4lcqhapb হিঁসকুটে 0 170630 514082 2026-07-25T16:40:13Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308863-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514082 wikitext text/x-wiki {{লে|L308863}} g5e6f16bmxruisv9ipmofwp4zhkgobu হুজ্জুতি 0 170631 514083 2026-07-25T16:41:20Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308867-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514083 wikitext text/x-wiki {{লে|L308867}} 82lhn1z6tns1apx8tibupak7i2fbdh4 হুমদো 0 170632 514087 2026-07-25T16:50:44Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308874-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514087 wikitext text/x-wiki {{লে|L308874}} 0ruscemyo3gbq95kkjonnj9z721cfq2 হুল্লোড়বাজ 0 170633 514088 2026-07-25T16:51:05Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L308876-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514088 wikitext text/x-wiki {{লে|L308876}} h2tur1x6gcusbxs983sy6dkxgyshc3h হেঁতেল 0 170634 514089 2026-07-25T16:51:46Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309012-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514089 wikitext text/x-wiki {{লে|L309012}} 61gjx29vwxslpzelyprl94vnl2yppi7 হেভি 0 170635 514090 2026-07-25T16:52:03Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309013-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514090 wikitext text/x-wiki {{লে|L309013}} g40afzbrb9j52854exba53xvqk2jb94 হেলোপাখি 0 170636 514091 2026-07-25T16:56:32Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309014-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514091 wikitext text/x-wiki {{লে|L309014}} fo20tvmny7gk98c8ue9b4teolfgz1gz হ্যাংলামো 0 170637 514095 2026-07-25T16:58:30Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309019-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514095 wikitext text/x-wiki {{লে|L309019}} 47ndtja4p3mtgauh4sgt2wxfxbr5liy হ্যাজানো 0 170638 514098 2026-07-25T16:59:11Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309022-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514098 wikitext text/x-wiki {{লে|L309022}} bapm17gqpo3wfnpim2f88e9foyya9so হ্যাজানে 0 170639 514099 2026-07-25T17:00:09Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309023-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514099 wikitext text/x-wiki {{লে|L309023}} bzkwqn79e9rvo4ociyebk0kz89h5shn হর্‌মা 0 170640 514100 2026-07-25T17:00:48Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309051-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514100 wikitext text/x-wiki {{লে|L309051}} 4m0ch9kxna10ishrgo55l0zewll21r2 হনুমানজি 0 170641 514103 2026-07-25T17:01:47Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309032-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514103 wikitext text/x-wiki {{লে|L309032}} imz4eafpakdz863dp0a70wwgxoxijhj হস্তিবাজ 0 170642 514104 2026-07-25T17:02:52Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309056-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514104 wikitext text/x-wiki {{লে|L309056}} qe6y53rmkbgqipxioo4vl7ms69r58vc হাটি 0 170643 514105 2026-07-25T17:08:16Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309059-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514105 wikitext text/x-wiki {{লে|L309059}} 5bgpz0s1wrhbuq0w51fp9kdrzpmovbe হাতাল 0 170644 514108 2026-07-25T17:30:36Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309070-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514108 wikitext text/x-wiki {{লে|L309070}} r6yb2sel8sv6thlx97yc418iurblvcs হাততাল 0 170645 514109 2026-07-25T17:30:53Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309071-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514109 wikitext text/x-wiki {{লে|L309071}} pvte4zvqug113doucc66l8l7semsvba হাতথাল 0 170646 514110 2026-07-25T17:31:11Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309072-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514110 wikitext text/x-wiki {{লে|L309072}} n3qwlmi4yqb8rqguifp0fopstd0v9nx হারমাত 0 170647 514111 2026-07-25T17:31:30Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309075-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514111 wikitext text/x-wiki {{লে|L309075}} dm4b6akqjhji3gqy7awhkwwvpl3hhkw ষ্ঠ্যূত 0 170648 514112 2026-07-25T17:32:01Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309076-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514112 wikitext text/x-wiki {{লে|L309076}} 6lzlkk2uvsc0vd6j1p3d0py6l8nwap0 ষ্ট্রীট 0 170649 514114 2026-07-25T17:32:47Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309078-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514114 wikitext text/x-wiki {{লে|L309078}} tsvjgskx5qjfvzb230g637ql3s9xtsz ষ্ট্যাম্প 0 170650 514116 2026-07-25T17:33:02Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309079-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514116 wikitext text/x-wiki {{লে|L309079}} cysktl8wog2yc7e0h3lfb3n6iee255t ষ্টেশন 0 170651 514117 2026-07-25T17:33:10Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309080-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514117 wikitext text/x-wiki {{লে|L309080}} 90g4tii1arba2zw5vhvkxchiiu6td5h ষ্টীমার 0 170652 514118 2026-07-25T17:33:18Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309081-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514118 wikitext text/x-wiki {{লে|L309081}} lvz6how4irlk5jdekfwt36pjkpirwnj ষ্টীম 0 170653 514119 2026-07-25T17:33:24Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309082-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514119 wikitext text/x-wiki {{লে|L309082}} 19suupwblmoho46ijc5e4l2rtgedqm8 ষাটি 0 170654 514120 2026-07-25T17:34:29Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309097-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514120 wikitext text/x-wiki {{লে|L309097}} 0tsw729b0qogliegrtatuozsgeapf07 ষড়রস 0 170655 514124 2026-07-25T17:50:53Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309121-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514124 wikitext text/x-wiki {{লে|L309121}} dfhas1nfc4oc5cmhejamzytj4pwtj5c ষট্‌পঞ্চাশত্তমী 0 170656 514130 2026-07-25T17:53:31Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309232-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514130 wikitext text/x-wiki {{লে|L309232}} c0acthynv08me0ut9ijfxt1l2ryd4d1 ষট্‌ক 0 170657 514131 2026-07-25T17:53:48Z Redmin 6857 লেক্সিম লিংকার এক্সটেনশনের সাহায্যে উইকিউপাত্ত লেক্সিম L309263-এর জন্য একটি নতুন ভুক্তি তৈরি করছি 514131 wikitext text/x-wiki {{লে|L309263}} t08pc8wjzs1psjhswxebtnown01f4io