کاربر ناشناس
پودمان:Protection banner: تفاوت میان نسخهها
جز
ویرایش Huji (بحث) به آخرین تغییری که Dalba انجام داده بود واگردانده شد
جز (1 revision imported) |
|||
خط ۱: | خط ۱: | ||
-- This module implements {{pp-meta}} and its daughter templates such as | -- This module implements {{pp-meta}} and its daughter templates such as | ||
-- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}. | -- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}. | ||
-- بخشهایی از این پودمان برای فارسیسازی بهتر تغییریافته است. لطفاً هنگام بهروزرسانی دقت کنید. | |||
-- Initialise necessary modules. | -- Initialise necessary modules. | ||
require('Module:No globals') | require('Module:No globals') | ||
local converter = require("Module:Numeral converter").convert | |||
local makeFileLink = require('Module:File link')._main | local makeFileLink = require('Module:File link')._main | ||
local effectiveProtectionLevel = require('Module:Effective protection level')._main | local effectiveProtectionLevel = require('Module:Effective protection level')._main | ||
خط ۱۸: | خط ۲۰: | ||
-- Helper functions | -- Helper functions | ||
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
-- چون ممکنه نام ماه میلادی رو به فارسی کاربران بنویسند من این تابع رو تعریف کردم که به انگلیسی برگرداند تا خطای تاریخ نامعتبر ندهد. | |||
local function replacePersianGreMonthName(frame) | |||
getArgs = require('Module:Arguments').getArgs | |||
local args = getArgs(frame) | |||
local greMonth = {'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'} | |||
local perGreMonth = {'ژانویه', 'فوریه', 'مارس', 'آوریل', 'مه', 'ژوئن', 'ژوئیه', 'اوت', 'سپتامبر', 'اکتبر', 'نوامبر', 'دسامبر'} | |||
for k, v in ipairs(perGreMonth) do | |||
args[1] = mw.ustring.gsub(args[1], v, greMonth[k]) | |||
end | |||
return converter("en", args[1]) | |||
end | |||
-- از آنجا که تاریخها به صورت انگلیسی به پودمان داده میشوند، از mw.getLanguage('en') استفاده شدهاست | |||
-- و خروجی formatDate() از آبجکت زبان مربوطه با فرمت xi انگلیسی است. | |||
-- برای تبدیل نام انگلیسی ماههای فارسی به نوشتهٔ فارسی از این تابع استفاده میشود. | |||
local function replacePersianMonthName(str) | |||
local engMonth = {'Farvardin', 'Ordibehesht', 'Khordad', 'Tir', 'Mordad', 'Shahrivar', 'Mehr', 'Aban', 'Azar', 'Dey', 'Bahman', 'Esfand'} | |||
local faMonth = {'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'} | |||
for k, v in ipairs(engMonth) do | |||
str = mw.ustring.gsub(str, v, faMonth[k]) | |||
end | |||
return str | |||
end | |||
local function makeCategoryLink(cat, sort) | local function makeCategoryLink(cat, sort) | ||
خط ۳۳: | خط ۵۹: | ||
local function validateDate(dateString, dateType) | local function validateDate(dateString, dateType) | ||
if not lang then | if not lang then | ||
-- در خط زیر جای mw.language.getContentLanguage() از mw.getLanguage('en') استفاده کردم. | |||
lang = mw.getLanguage('en') | |||
end | end | ||
local success, result = pcall(lang.formatDate, lang, 'U', dateString) | local success, result = pcall(lang.formatDate, lang, 'U', converter('en', dateString)) | ||
if success then | if success then | ||
result = tonumber(result) | result = tonumber(result) | ||
خط ۴۳: | خط ۷۰: | ||
end | end | ||
error(string.format( | error(string.format( | ||
' | '%s نامعتبر: %s', | ||
dateType, | dateType, | ||
tostring(dateString) | tostring(dateString) | ||
خط ۱۱۳: | خط ۱۴۰: | ||
else | else | ||
error(string.format( | error(string.format( | ||
' | 'اقدام نامعتبر: %s', | ||
tostring(args.action) | tostring(args.action) | ||
), 3) | ), 3) | ||
خط ۱۳۱: | خط ۱۵۸: | ||
obj.expiry = 'indef' | obj.expiry = 'indef' | ||
elseif effectiveExpiry ~= 'unknown' then | elseif effectiveExpiry ~= 'unknown' then | ||
obj.expiry = validateDate(effectiveExpiry, ' | obj.expiry = validateDate(effectiveExpiry, 'تاریخ انقضا') | ||
end | end | ||
خط ۱۳۸: | خط ۱۶۵: | ||
obj.reason = mw.ustring.lower(args[1]) | obj.reason = mw.ustring.lower(args[1]) | ||
if obj.reason:find('|') then | if obj.reason:find('|') then | ||
error(' | error('دلایل نمیتواند شامل نویسه خط عمودی («|») باشد', 3) | ||
end | end | ||
end | end | ||
خط ۱۴۴: | خط ۱۷۱: | ||
-- Set protection date | -- Set protection date | ||
if args.date then | if args.date then | ||
obj.protectionDate = validateDate(args.date, ' | obj.protectionDate = validateDate(args.date, 'تاریخ حفاظت') | ||
end | end | ||
خط ۳۶۷: | خط ۳۹۴: | ||
function Blurb:_formatDate(num) | function Blurb:_formatDate(num) | ||
-- Formats a Unix timestamp into dd Month, YYYY format. | -- Formats a Unix timestamp into dd Month, YYYY format. | ||
lang = lang or mw. | -- در خط زیر جای mw.language.getContentLanguage() از mw.getLanguage('en') استفاده کردم. | ||
lang = lang or mw.getLanguage('en') | |||
local success, date = pcall( | local success, date = pcall( | ||
lang.formatDate, | lang.formatDate, | ||
lang, | lang, | ||
self._cfg.msg['expiry-date-format'] or ' | self._cfg.msg['expiry-date-format'] or 'xij xiF xiY', -- The 'xi' prefix is the prefix for displaying Iranian time | ||
'@' .. tostring(num) | '@' .. replacePersianGreMonthName{converter('en', tostring(num))} | ||
) | ) | ||
if success then | if success then | ||
خط ۴۲۸: | خط ۴۵۶: | ||
-- We need the move log link. | -- We need the move log link. | ||
return makeFullUrl( | return makeFullUrl( | ||
' | 'ویژه:سیاههها', | ||
{type = 'move', page = pagename}, | {type = 'move', page = pagename}, | ||
self:_getExpandedMessage('current-version-move-display') | self:_getExpandedMessage('current-version-move-display') | ||
خط ۵۰۱: | خط ۵۲۹: | ||
else | else | ||
error(string.format( | error(string.format( | ||
' | 'نمیتوان explanation blurb را برای عمل «%s»، سطح «%s» و کلید بحث «%s» پیدا کرد', | ||
action, | action, | ||
level, | level, | ||
خط ۵۲۷: | خط ۵۵۵: | ||
function Blurb:_makeIntroBlurbParameter() | function Blurb:_makeIntroBlurbParameter() | ||
if self._protectionObj:isTemporary() then | if self._protectionObj:isTemporary() then | ||
return self:_getExpandedMessage('intro-blurb-expiry') | return converter('fa', replacePersianMonthName(self:_getExpandedMessage('intro-blurb-expiry'))) | ||
else | else | ||
return self:_getExpandedMessage('intro-blurb-noexpiry') | return self:_getExpandedMessage('intro-blurb-noexpiry') | ||
خط ۵۳۵: | خط ۵۶۳: | ||
function Blurb:_makeIntroFragmentParameter() | function Blurb:_makeIntroFragmentParameter() | ||
if self._protectionObj:isTemporary() then | if self._protectionObj:isTemporary() then | ||
return self:_getExpandedMessage('intro-fragment-expiry') | return converter('fa', replacePersianMonthName(self:_getExpandedMessage('intro-fragment-expiry'))) | ||
else | else | ||
return self:_getExpandedMessage('intro-fragment-noexpiry') | return self:_getExpandedMessage('intro-fragment-noexpiry') | ||
خط ۵۴۵: | خط ۵۷۳: | ||
return pagetypes[self._protectionObj.title.namespace] | return pagetypes[self._protectionObj.title.namespace] | ||
or pagetypes.default | or pagetypes.default | ||
or error(' | or error('هیچ نوع صفحه پیشفرضی تعریف نشدهاست', 8) | ||
end | end | ||
خط ۵۶۰: | خط ۵۸۸: | ||
msg = protectionBlurbs.edit.default | msg = protectionBlurbs.edit.default | ||
else | else | ||
error(' | error('هیچ blurb حفاظتی برای protectionBlurbs.edit.default تعریف نشدهاست', 8) | ||
end | end | ||
return self:_substituteParameters(msg) | return self:_substituteParameters(msg) | ||
خط ۵۸۶: | خط ۶۱۴: | ||
msg = protectionLevels.edit.default | msg = protectionLevels.edit.default | ||
else | else | ||
error(' | error('هیچ سطح حفاظتی برای protectionLevels.edit.default تعریف نشدهاست', 8) | ||
end | end | ||
return self:_substituteParameters(msg) | return self:_substituteParameters(msg) | ||
خط ۵۹۶: | خط ۶۲۴: | ||
-- We need the pending changes log. | -- We need the pending changes log. | ||
return makeFullUrl( | return makeFullUrl( | ||
' | 'ویژه:سیاههها', | ||
{type = 'stable', page = pagename}, | {type = 'stable', page = pagename}, | ||
self:_getExpandedMessage('pc-log-display') | self:_getExpandedMessage('pc-log-display') | ||
خط ۶۰۳: | خط ۶۳۱: | ||
-- We need the protection log. | -- We need the protection log. | ||
return makeFullUrl( | return makeFullUrl( | ||
' | 'ویژه:سیاههها', | ||
{type = 'protect', page = pagename}, | {type = 'protect', page = pagename}, | ||
self:_getExpandedMessage('protection-log-display') | self:_getExpandedMessage('protection-log-display') | ||
خط ۶۲۲: | خط ۶۵۰: | ||
function Blurb:_makeTooltipBlurbParameter() | function Blurb:_makeTooltipBlurbParameter() | ||
if self._protectionObj:isTemporary() then | if self._protectionObj:isTemporary() then | ||
return self:_getExpandedMessage('tooltip-blurb-expiry') | return converter('fa', replacePersianMonthName(self:_getExpandedMessage('tooltip-blurb-expiry'))) | ||
else | else | ||
return self:_getExpandedMessage('tooltip-blurb-noexpiry') | return self:_getExpandedMessage('tooltip-blurb-noexpiry') | ||
خط ۶۳۰: | خط ۶۵۸: | ||
function Blurb:_makeTooltipFragmentParameter() | function Blurb:_makeTooltipFragmentParameter() | ||
if self._protectionObj:isTemporary() then | if self._protectionObj:isTemporary() then | ||
return self:_getExpandedMessage('tooltip-fragment-expiry') | return converter('fa', replacePersianMonthName(self:_getExpandedMessage('tooltip-fragment-expiry'))) | ||
else | else | ||
return self:_getExpandedMessage('tooltip-fragment-noexpiry') | return self:_getExpandedMessage('tooltip-fragment-noexpiry') | ||
خط ۶۴۸: | خط ۶۷۶: | ||
if not key or not Blurb.bannerTextFields[key] then | if not key or not Blurb.bannerTextFields[key] then | ||
error(string.format( | error(string.format( | ||
' | '«%s» زمینه پیکربندی بنر معتبری نیست', | ||
tostring(key) | tostring(key) | ||
), 2) | ), 2) | ||
خط ۶۶۱: | خط ۶۸۹: | ||
if type(msg) ~= 'string' then | if type(msg) ~= 'string' then | ||
error(string.format( | error(string.format( | ||
' | 'خروجی نامناسب از تابع پیکربندی بنر همراه کلید "%s"' | ||
.. ' ( | .. ' (رشته انتظار میرود، %s داده شدهاست)', | ||
tostring(key), | tostring(key), | ||
type(msg) | type(msg) | ||
خط ۷۵۵: | خط ۷۸۳: | ||
-- Renders the banner. | -- Renders the banner. | ||
makeMessageBox = makeMessageBox or require('Module:Message box').main | makeMessageBox = makeMessageBox or require('Module:Message box').main | ||
local reasonText = self._reasonText or error(' | local reasonText = self._reasonText or error('هیچ متن دلیلی تعیین نشدهاست', 2) | ||
local explanationText = self._explanationText | local explanationText = self._explanationText | ||
local mbargs = { | local mbargs = { | ||
خط ۸۵۹: | خط ۸۸۷: | ||
-- Find default args, if any. | -- Find default args, if any. | ||
local parent = frame.getParent and frame:getParent() | local parent = frame.getParent and frame:getParent() | ||
local defaultArgs = parent and cfg.wrappers[parent:getTitle() | local defaultArgs = parent and cfg.wrappers[mw.ustring.gsub(parent:getTitle(), '/تمرین$', '')] | ||
-- Find user args, and use the parent frame if we are being called from a | -- Find user args, and use the parent frame if we are being called from a |