ماڊيول:I18n
ڏيک
| هي سانچو ۾ آهي ۽ وسيع استعمال لاءِ تيار آهي۔ |
| هي ماڊيول هيٺين ٻين ماڊيولن تي دارومدار رکي ٿو: |
| وضاحت | لُوا ڊيٽا اسٽورن ۾ پيغامن جي ذخيري لاءِ آئي 18 اين لائبريري. |
|---|---|
| ليکڪ |
|
| ڪوڊ جو ذريعو | I18n |
| حالت | بيٽا |
| انحصار | |
| ڪوڊ استعمال ڪندڙ | Cqm |
لُوا ڊيٽا اسٽورن ۾ پيغامن جي ذخيري لاءِ آئي 18 اين لائبريري. هي ماڊيول پيغامن کي ماڊيولن ۽ سانچن کان الڳ رکڻ لاءِ ٺاهيو ويو آهي. ان ۾ ٻولين جي fallback سنڀالڻ جي سهولت پڻ موجود آهي. هي ماڊيول wikia:dev:I18n-js جو لُوا پورٽ آهي، ۽ جيڪي i18n ماڊيول ان ذريعي لوڊ ٿي سگهن ٿا، اهي wikia:dev:I18nEdit وسيلي به سنواريا وڃي سگهن ٿا.
وڪيميڊيا منصوبن تي i18n پيغام Data:i18n/ جي ذيلي صفحن ذريعي وڪيميڊيا ڪامنز تي سنواريا ويندا آهن.
Documentation
Package items
i18n.getMsg( frame )(function)- ڪنجي ذريعي مقامي پيغام حاصل ڪرڻ وارو فنڪشن.
uselangپيرا ميٽر ذريعي مخصوص ٻولي ڪوڊ ۾ پيغام حاصل ڪرڻ لاءِ استعمال ٿي سگهي ٿو. اضافي انگ وارا پيرا ميٽر ڊيٽا اسٽور پيغام ۾ substitution لاءِ ڏنا وڃي سگهن ٿا. - Parameters:
- Error: 'missing arguments in i18n.getMsg' (string; line 271)
- Returns: مقامي ٿيل ٻولي ۾ i18n پيغام. (string)
i18n.loadMessages( ... )(function)- i18n پيغامن جو ڊيٽا اسٽور لوڊ ڪندڙ.
- Parameter:
...حدف i18n ذيلي ماڊيولن جا ROOTPAGENAME/path. (string) - Error: 'no source supplied to i18n.loadMessages' (string; line 322)
- Returns: i18n ڊيٽا اسٽور جو instance. (table)
- Usage:
require('Module:I18n').loadMessages('1', '2') i18n.getLang( )(function)- ٻولي جو ڪوڊ حاصل ڪرڻ وارو فنڪشن.
uselangپيرا ميٽر ذريعي template جي ٻولي ڪوڊ جي تصديق ڪري سگهي ٿو. - Returns: ٻولي جو ڪوڊ. (string)
i18n.loadI18n( name, i18n_arg )(function)- ڏنل i18n ٽيبل موجب value instantiate ڪري ٿو (deprecated)
- Parameters:
i18n.loadI18nFrame( name, i18n_arg )(function)- مخصوص frame لاءِ i18n لوڊ ڪري ٿو (deprecated)
- Parameters:
i18n.main( frame )(function)- ماڊيول لاءِ wrapper.
- Parameter:
frameinvocation جو frame object. (table) - Returns: template context ۾ ماڊيول جي اوٽ. (string)
- Usage: {{i18n}}
_i18n.isWikitext( msg )(function)- جاچي ٿو ته پيغام ۾ اڻ-پروسيس ٿيل وڪي متن موجود آهي يا نه. خالص متن کي preprocess نه ڪرڻ لاءِ هن سان message getter کي بهتر ڪيو وڃي ٿو.
- Parameter:
msgجاچڻ لاءِ پيغام. (string) - Returns: ڇا پيغام ۾ وڪي متن شامل آهي. (boolean)
Data
آئي 18 اين ڊيٽا اسٽور ڪلاس. هي ٻولي جي ترجمي ۽ الڳ پيغامن تائين رسائي کي سنڀالڻ لاءِ استعمال ٿيندو آهي. ڊيٽا اسٽور جو instance ٻولي ۽ پيغام لاءِ getter-setter طريقا فراهم ڪري ٿو، جيڪي لُوا ماڊيولن کي بين الاقوامي بڻائڻ لاءِ استعمال ڪري سگهجن ٿا. ٻولي وارا طريقا (اهي سڀ جيڪي Lang تي ختم ٿين ٿا) chainable آهن.
Data:msg( opts, ... )(function)- ڊيٽا اسٽور مان پيغام حاصل ڪرڻ وارو utility طريقو. هي طريقو
keyمطابق ڊيٽا اسٽور مان مقامي پيغام واپس ڪري ٿو. انهن پيغامن ۾$nپيرا ميٽر ٿي سگهن ٿا، جيڪيmsgسڏ دوران ڏنل اختياري argument strings سان بدلايا وڃن ٿا. - هي فنڪشن named arguments پڻ سپورٽ ڪري ٿو. named argument نحو وڌيڪ لچڪدار آهي، جيتوڻيڪ وڌيڪ ڊگهو آهي؛ ان سان پيغام جي ٻولي ۽ ماخذ چونڊي سگهجن ٿا.
- Parameters:
optsپيغام جي ترتيب يا ڪنجي. (string|table)opts.keyاها ڪنجي جنهن جو پيغام واپس ڪرڻو آهي. (string; optional)opts.argsاهي argument جيڪي پيغام ($n) ۾ رکڻا آهن. (table; optional)opts.sourcesاهي ماخذ نالا جن تائين پاڻ کي محدود رکڻو آهي (ڏسوData:fromSources). (table; optional)opts.langعارضي طور استعمال ٿيڻ واري ٻولي (ڏسوData:inLang). (table; optional)
...اهي argument جيڪي پيغام ($n) ۾ رکڻا آهن. (string; optional)
- Error: 'missing arguments in Data:msg' (string; line 115)
- Returns: مقامي ٿيل ڊيٽا اسٽور پيغام يا
'<key>'. (string) - Usage:
ds:msg{ key = 'message-name', lang = '', args = {...}, sources = {} }
ds:msg('message-name', ...)
Data:parameter( parameter, args )(function)- ڊيٽا اسٽور مان template parameter حاصل ڪرڻ وارو utility طريقو. هي طريقو argument جي ٽيبل مان، parameter جو مقامي نالو ڊيٽا اسٽور ۾ ڳولي، ان جي value واپس ڪري ٿو؛ نه ملي ته nil ڏئي ٿو. هي طريقو هميشه وڪي جي content language استعمال ڪري ٿو.
- Parameters:
- Error: 'missing arguments in Data:parameter' (string; line 176)
- Returns: parameter جي value يا nil جيڪڏهن موجود نه هجي (string|nil)
Data:fromSource( ... )(function)- ڊيٽا اسٽور کي مخصوص ماخذن جي ذيلي مجموعي تائين عارضي طور محدود ڪرڻ وارو setter. عام حالت ۾ پيغام ساڳئي ترجيحي ترتيب سان حاصل ڪيا ويندا آهن، جنهن ترتيب سان
i18n.loadMessagesماخذ لوڊ ڪندو آهي. - Parameter:
...استعمال ٿيڻ وارا ماخذ نالا. (string) - Returns: ڊيٽا اسٽور جو instance. (Data)
Data:getLang( )(function)- ڊيٽا اسٽور جي default language حاصل ڪرڻ وارو getter.
- Returns: اها default ٻولي جنهن ۾ ڊيٽا اسٽور پيغام ڏنا ويندا. (string)
Data:useUserLang( )(function)- ڊيٽا اسٽور جي ٻولي کي
wgUserLanguageتي سيٽ ڪرڻ وارو setter. - Returns: ڊيٽا اسٽور جو instance. (Data)
- Note: Scribunto صرف تڏهن
wgUserLanguageرجسٽر ڪندو آهي، جڏهن invocation call stack جي سڀ کان مٿانهين سطح تي هجي. Data:useContentLang( )(function)- ڊيٽا اسٽور جي ٻولي کي
wgContentLanguageتي سيٽ ڪرڻ وارو setter. - Returns: ڊيٽا اسٽور جو instance. (Data)
Data:useLang( code )(function)- ڊيٽا اسٽور جي ٻولي کي مخصوص ٻولي تي سيٽ ڪرڻ وارو setter.
- Parameter:
codeاستعمال ٿيڻ واري ٻولي جو ڪوڊ. (string) - Returns: ڊيٽا اسٽور جو instance. (Data)
Data:inUserLang( )(function)- ڊيٽا اسٽور جي ٻولي کي عارضي طور
wgUserLanguageتي سيٽ ڪرڻ وارو setter. ايندڙData:msgسڏ کان پوءِ ڊيٽا اسٽور جي ٻولي وري default ٻولي تي موٽي ايندي. - Returns: ڊيٽا اسٽور جو instance. (Data)
Data:inContentLang( )(function)- ڊيٽا اسٽور جي ٻولي کي عارضي طور
wgContentLanguageتي سيٽ ڪرڻ وارو setter. هي صرف ايندڙData:msgسڏ تي اثرانداز ٿيندو. - Returns: ڊيٽا اسٽور جو instance. (Data)
Data:inLang( code )(function)- ڊيٽا اسٽور جي ٻولي کي عارضي طور مخصوص ٻولي تي سيٽ ڪرڻ وارو setter. هي صرف ايندڙ
Data:msgسڏ تي اثرانداز ٿيندو. - Parameter:
codeاستعمال ٿيڻ واري ٻولي جو ڪوڊ. (string) - Returns: ڊيٽا اسٽور جو instance. (Data)
See also
--- لُوا ڊيٽا اسٽورن ۾ پيغامن جي ذخيري لاءِ آئي 18 اين لائبريري.
-- هي ماڊيول پيغامن کي ماڊيولن ۽ سانچن کان الڳ رکڻ لاءِ ٺاهيو ويو آهي.
-- ان ۾ ٻولين جي fallback سنڀالڻ جي سهولت پڻ موجود آهي. هي ماڊيول
-- [[wikia:dev:I18n-js]] جو لُوا پورٽ آهي، ۽ جيڪي i18n ماڊيول ان ذريعي
-- لوڊ ٿي سگهن ٿا، اهي [[wikia:dev:I18nEdit]] وسيلي به سنواريا وڃي سگهن ٿا.
--
-- وڪيميڊيا منصوبن تي i18n پيغام
-- [[c:Special:PrefixIndex/Data:i18n/|Data:i18n/]] جي ذيلي صفحن ذريعي
-- وڪيميڊيا ڪامنز تي سنواريا ويندا آهن.
--
-- @module i18n
-- @version 1.4.0
-- @require Module:Entrypoint
-- @require Module:Fallbacklist
-- @author [[wikia:dev:User:KockaAdmiralac|KockaAdmiralac]] (اصل Fandom نفاذ)
-- @author [[wikia:dev:User:Speedit|Speedit]] (اصل Fandom نفاذ)
-- @author [[User:Awesome Aasim|Awesome Aasim]] (Wikimedia پورٽ)
-- @attribution [[wikia:dev:User:Cqm|Cqm]]
-- @release beta
-- @see [[wikia:dev:I18n|I18n رهنمائي]]
-- @see [[wikia:dev:I18n-js]]
-- @see [[wikia:dev:I18nEdit]]
-- <nowiki>
local i18n, _i18n = {}, {}
-- ماڊيول جا متغير ۽ انحصار.
local title = mw.title.getCurrentTitle()
local fallbacks = require('Module:Fallbacklist')
local entrypoint = require('Module:Entrypoint')
local uselang
--- $n جي صورت ۾ argument substitution، جتي n > 0 هجي.
-- @function _i18n.handleArgs
-- @param {string} msg اهو پيغام جنهن ۾ argument رکڻا آهن.
-- @param {table} args اهي arguments جيڪي متبادل طور وجهڻا آهن.
-- @return {string} نتيجي وارو پيغام.
-- @local
function _i18n.handleArgs(msg, args)
for i, a in ipairs(args) do
msg = (string.gsub(msg, '%$' .. tostring(i), tostring(a)))
end
return msg
end
--- جاچي ٿو ته ٻولي جو ڪوڊ درست آهي يا نه.
-- @function _i18n.isValidCode
-- @param {string} code جاچڻ لاءِ ٻولي جو ڪوڊ.
-- @return {boolean} ڇا ٻولي جو ڪوڊ درست آهي.
-- @local
function _i18n.isValidCode(code)
return type(code) == 'string' and #mw.language.fetchLanguageName(code) ~= 0
end
--- جاچي ٿو ته پيغام ۾ اڻ-پروسيس ٿيل وڪي متن موجود آهي يا نه.
-- خالص متن کي preprocess نه ڪرڻ لاءِ هن سان message getter کي بهتر ڪيو وڃي ٿو.
-- @function _i18n.isWikitext
-- @param {string} msg جاچڻ لاءِ پيغام.
-- @return {boolean} ڇا پيغام ۾ وڪي متن شامل آهي.
function _i18n.isWikitext(msg)
return
type(msg) == 'string' and
(
msg:find('%-%-%-%-') or
msg:find('%f[^\n%z][;:*#] ') or
msg:find('%f[^\n%z]==* *[^\n|]+ =*=%f[\n]') or
msg:find('%b<>') or msg:find('\'\'') or
msg:find('%[%b[]%]') or msg:find('{%b{}}')
)
end
--- آئي 18 اين ڊيٽا اسٽور ڪلاس.
-- هي ٻولي جي ترجمي ۽ الڳ پيغامن تائين رسائي کي سنڀالڻ لاءِ استعمال ٿيندو آهي.
-- ڊيٽا اسٽور جو instance ٻولي ۽ پيغام لاءِ getter-setter طريقا فراهم ڪري ٿو،
-- جيڪي لُوا ماڊيولن کي بين الاقوامي بڻائڻ لاءِ استعمال ڪري سگهجن ٿا.
-- ٻولي وارا طريقا (اهي سڀ جيڪي `Lang` تي ختم ٿين ٿا) **chainable** آهن.
-- @type Data
local Data = {}
Data.__index = Data
--- ڊيٽا اسٽور مان پيغام حاصل ڪرڻ وارو utility طريقو.
-- هي طريقو `key` مطابق ڊيٽا اسٽور مان مقامي پيغام واپس ڪري ٿو.
-- انهن پيغامن ۾ `$n` پيرا ميٽر ٿي سگهن ٿا، جيڪي `msg` سڏ دوران
-- ڏنل اختياري argument strings سان بدلايا وڃن ٿا.
--
-- هي فنڪشن [[mw:Extension:Scribunto/Lua reference manual#named_arguments|named
-- arguments]] پڻ سپورٽ ڪري ٿو. named argument نحو وڌيڪ لچڪدار آهي،
-- جيتوڻيڪ وڌيڪ ڊگهو آهي؛ ان سان پيغام جي ٻولي ۽ ماخذ چونڊي سگهجن ٿا.
-- @function Data:msg
-- @usage
--
-- ds:msg{
-- key = 'message-name',
-- lang = '',
-- args = {...},
-- sources = {}
-- }
--
-- @usage
--
-- ds:msg('message-name', ...)
--
-- @param {string|table} opts پيغام جي ترتيب يا ڪنجي.
-- @param[opt] {string} opts.key اها ڪنجي جنهن جو پيغام واپس ڪرڻو آهي.
-- @param[opt] {table} opts.args اهي argument جيڪي پيغام (`$n`) ۾ رکڻا آهن.
-- @param[opt] {table} opts.sources اهي ماخذ نالا جن تائين پاڻ کي محدود رکڻو آهي (ڏسو `Data:fromSources`).
-- @param[opt] {table} opts.lang عارضي طور استعمال ٿيڻ واري ٻولي (ڏسو `Data:inLang`).
-- @param[opt] {string} ... اهي argument جيڪي پيغام (`$n`) ۾ رکڻا آهن.
-- @error[115] {string} 'missing arguments in Data:msg'
-- @return {string} مقامي ٿيل ڊيٽا اسٽور پيغام يا `'<key>'`.
function Data:msg(opts, ...)
local frame = mw.getCurrentFrame()
-- Argument normalization.
if not self or not opts then
error('missing arguments in Data:msg')
end
local key = type(opts) == 'table' and opts.key or opts
local args = opts.args or {...}
-- Configuration parameters.
if opts.sources then
self:fromSources(unpack(opts.sources))
end
if opts.lang then
self:inLang(opts.lang)
end
-- Source handling.
local source_n = self.tempSources or self._sources
local source_i = {}
for n, i in pairs(source_n) do
source_i[i] = n
end
self.tempSources = nil
-- Language handling.
local lang = self.tempLang or self.defaultLang
self.tempLang = nil
-- Message fetching.
local msg
for i, messages in ipairs(self._messages) do
-- Message data.
local msg = (messages[lang] or {})[key]
-- Fallback support (experimental).
for _, l in ipairs((fallbacks[lang] or {})) do
if msg == nil then
msg = (messages[l] or {})[key]
end
end
-- Internal fallback to 'en'.
msg = msg ~= nil and msg or messages.en[key]
-- Handling argument substitution from Lua.
if msg and source_i[i] and #args > 0 then
msg = _i18n.handleArgs(msg, args)
end
if msg and source_i[i] and lang ~= 'qqx' then
return frame and _i18n.isWikitext(msg)
and frame:preprocess(mw.text.trim(msg))
or mw.text.trim(msg)
end
end
return '⧼' .. mw.text.nowiki(key) .. '⧽'
end
--- ڊيٽا اسٽور مان template parameter حاصل ڪرڻ وارو utility طريقو.
-- هي طريقو argument جي ٽيبل مان، parameter جو مقامي نالو ڊيٽا اسٽور ۾ ڳولي،
-- ان جي value واپس ڪري ٿو؛ نه ملي ته nil ڏئي ٿو.
--
-- هي طريقو هميشه وڪي جي content language استعمال ڪري ٿو.
-- @function Data:parameter
-- @param {string} parameter ڊيٽا اسٽور ۾ parameter جي ڪنجي
-- @param {table} args argument جي ٽيبل جنهن مان parameter ڳولڻو آهي
-- @error[176] {string} 'missing arguments in Data:parameter'
-- @return {string|nil} parameter جي value يا nil جيڪڏهن موجود نه هجي
function Data:parameter(key, args)
-- Argument normalization.
if not self or not key or not args then
error('missing arguments in Data:parameter')
end
local contentLang = mw.language.getContentLanguage():getCode()
-- Message fetching.
for i, messages in ipairs(self._messages) do
local msg = (messages[contentLang] or {})[key]
if msg ~= nil and args[msg] ~= nil then
return args[msg]
end
for _, l in ipairs((fallbacks[contentLang] or {})) do
if msg == nil or args[msg] == nil then
msg = (messages[l] or {})[key]
else
return args[msg]
end
end
msg = messages.en[key]
if msg ~= nil and args[msg] ~= nil then
return args[msg]
end
end
end
--- ڊيٽا اسٽور کي مخصوص ماخذن جي ذيلي مجموعي تائين عارضي طور محدود ڪرڻ وارو setter.
-- عام حالت ۾ پيغام ساڳئي ترجيحي ترتيب سان حاصل ڪيا ويندا آهن،
-- جنهن ترتيب سان `i18n.loadMessages` ماخذ لوڊ ڪندو آهي.
-- @function Data:fromSource
-- @param {string} ... استعمال ٿيڻ وارا ماخذ نالا.
-- @return {Data} ڊيٽا اسٽور جو instance.
function Data:fromSource(...)
local c = select('#', ...)
if c ~= 0 then
self.tempSources = {}
for i = 1, c do
local n = select(i, ...)
if type(n) == 'string' and type(self._sources[n]) == 'number' then
self.tempSources[n] = self._sources[n]
end
end
end
return self
end
--- ڊيٽا اسٽور جي default language حاصل ڪرڻ وارو getter.
-- @function Data:getLang
-- @return {string} اها default ٻولي جنهن ۾ ڊيٽا اسٽور پيغام ڏنا ويندا.
function Data:getLang()
return self.defaultLang
end
--- ڊيٽا اسٽور جي ٻولي کي `wgUserLanguage` تي سيٽ ڪرڻ وارو setter.
-- @function Data:useUserLang
-- @return {Data} ڊيٽا اسٽور جو instance.
-- @note Scribunto صرف تڏهن `wgUserLanguage` رجسٽر ڪندو آهي،
-- جڏهن invocation call stack جي سڀ کان مٿانهين سطح تي هجي.
function Data:useUserLang()
self.defaultLang = i18n.getLang() or self.defaultLang
return self
end
--- ڊيٽا اسٽور جي ٻولي کي `wgContentLanguage` تي سيٽ ڪرڻ وارو setter.
-- @function Data:useContentLang
-- @return {Data} ڊيٽا اسٽور جو instance.
function Data:useContentLang()
self.defaultLang = mw.language.getContentLanguage():getCode()
return self
end
--- ڊيٽا اسٽور جي ٻولي کي مخصوص ٻولي تي سيٽ ڪرڻ وارو setter.
-- @function Data:useLang
-- @param {string} code استعمال ٿيڻ واري ٻولي جو ڪوڊ.
-- @return {Data} ڊيٽا اسٽور جو instance.
function Data:useLang(code)
self.defaultLang = _i18n.isValidCode(code)
and code
or self.defaultLang
return self
end
--- ڊيٽا اسٽور جي ٻولي کي عارضي طور `wgUserLanguage` تي سيٽ ڪرڻ وارو setter.
-- ايندڙ @{Data:msg} سڏ کان پوءِ ڊيٽا اسٽور جي ٻولي وري default ٻولي تي موٽي ايندي.
-- @function Data:inUserLang
-- @return {Data} ڊيٽا اسٽور جو instance.
function Data:inUserLang()
self.tempLang = i18n.getLang() or self.tempLang
return self
end
--- ڊيٽا اسٽور جي ٻولي کي عارضي طور `wgContentLanguage` تي سيٽ ڪرڻ وارو setter.
-- هي صرف ايندڙ @{Data:msg} سڏ تي اثرانداز ٿيندو.
-- @function Data:inContentLang
-- @return {Data} ڊيٽا اسٽور جو instance.
function Data:inContentLang()
self.tempLang = mw.language.getContentLanguage():getCode()
return self
end
--- ڊيٽا اسٽور جي ٻولي کي عارضي طور مخصوص ٻولي تي سيٽ ڪرڻ وارو setter.
-- هي صرف ايندڙ @{Data:msg} سڏ تي اثرانداز ٿيندو.
-- @function Data:inLang
-- @param {string} code استعمال ٿيڻ واري ٻولي جو ڪوڊ.
-- @return {Data} ڊيٽا اسٽور جو instance.
function Data:inLang(code)
self.tempLang = _i18n.isValidCode(code)
and code
or self.tempLang
return self
end
-- Package functions.
--- ڪنجي ذريعي مقامي پيغام حاصل ڪرڻ وارو فنڪشن.
-- `uselang` پيرا ميٽر ذريعي مخصوص ٻولي ڪوڊ ۾ پيغام حاصل ڪرڻ لاءِ استعمال ٿي سگهي ٿو.
-- اضافي انگ وارا پيرا ميٽر ڊيٽا اسٽور پيغام ۾ substitution لاءِ ڏنا وڃي سگهن ٿا.
-- @function i18n.getMsg
-- @param {table} frame invocation مان آيل frame table.
-- @param {table} frame.args argument تي ٻڌل metatable.
-- @param {string} frame.args[1] i18n ذيلي ماڊيول جو ROOTPAGENAME.
-- @param {string} frame.args[2] i18n پيغام جي ڪنجي.
-- @param[opt] {string} frame.args.lang پيغام جي default ٻولي.
-- @error[271] {string} 'missing arguments in i18n.getMsg'
-- @return {string} مقامي ٿيل ٻولي ۾ i18n پيغام.
function i18n.getMsg(frame)
if
not frame or
not frame.args or
not frame.args[1] or
not frame.args[2]
then
error('missing arguments in i18n.getMsg')
end
local source = frame.args[1]
local key = frame.args[2]
local repl = {}
for i, a in ipairs(frame.args) do
if i >= 3 then
repl[i-2] = a
end
end
local ds = i18n.loadMessages(source)
ds:inLang(frame.args.uselang)
return ds:msg { key = key, args = repl }
end
--- i18n پيغامن جو ڊيٽا اسٽور لوڊ ڪندڙ.
-- @function i18n.loadMessages
-- @param {string} ... حدف i18n ذيلي ماڊيولن جا ROOTPAGENAME/path.
-- @error[322] {string} 'no source supplied to i18n.loadMessages'
-- @return {table} i18n ڊيٽا اسٽور جو instance.
-- @usage require('Module:I18n').loadMessages('1', '2')
function i18n.loadMessages(...)
local ds
local i = 0
local s = {}
for j = 1, select('#', ...) do
local source = select(j, ...)
if type(source) == 'string' and source ~= '' then
i = i + 1
s[source] = i
if not ds then
ds = {}
ds._messages = {}
setmetatable(ds, Data)
ds:useUserLang()
end
source = string.gsub(source, '^.', mw.ustring.upper)
local success, messages = pcall(mw.loadData, mw.ustring.find(source, ':')
and source
or 'Module:' .. source .. '/i18n')
if success then
local msgCopy = {}
local langSecond = nil
for lang_id, msgtbl in pairs(messages) do
if langSecond == nil then
if lang_id == "qqq" or fallbacks[lang_id] ~= nil then
langSecond = false
else
langSecond = true
end
end
for id_lang, msg in pairs(msgtbl) do
if langSecond then
msgCopy[id_lang] = msgCopy[id_lang] or {}
msgCopy[id_lang][lang_id] = msg
else
msgCopy[lang_id] = msgCopy[lang_id] or {}
msgCopy[lang_id][id_lang] = msg
end
end
end
ds._messages[i] = msgCopy
end
local tab = mw.ext.data.get('I18n/' .. source .. '.tab', '_')
local T = {}
if not success and not tab then error("i18n for " .. source .. " is missing") end
for _, row in pairs(tab.data) do
local id, t = unpack(row)
for lang, msg in pairs(t) do
if not T[lang] then T[lang] = {} end
T[lang][id] = msg
end
end
if not success then
ds._messages[i] = T
else
for lang, msgTbl in pairs(T) do
ds._messages[i][lang] = ds._messages[i][lang] or msgTbl
end
end
end
end
if not ds then
error('no source supplied to i18n.loadMessages')
else
ds._sources = s
return ds
end
end
--- ٻولي جو ڪوڊ حاصل ڪرڻ وارو فنڪشن.
-- `uselang` پيرا ميٽر ذريعي template جي ٻولي ڪوڊ جي تصديق ڪري سگهي ٿو.
-- @function i18n.getLang
-- @return {string} ٻولي جو ڪوڊ.
function i18n.getLang()
local frame = mw.getCurrentFrame() or {}
local parentFrame = frame.getParent and frame:getParent() or {}
local code = mw.language.getContentLanguage():getCode()
local subPage = title.subpageText
local langOverride =
(frame.args or {}).uselang or
(parentFrame.args or {}).uselang
if _i18n.isValidCode(langOverride) then
code = langOverride
elseif title.isSubpage and _i18n.isValidCode(subPage) then
code = _i18n.isValidCode(subPage) and subPage or code
elseif parentFrame.preprocess or frame.preprocess then
uselang = uselang
or parentFrame.preprocess
and parentFrame:preprocess('{{int:lang}}')
or frame:preprocess('{{int:lang}}')
local decodedLang = mw.text.decode(uselang)
if decodedLang ~= '<lang>' and decodedLang ~= '⧼lang⧽' then
code = decodedLang == '(lang)'
and 'qqx'
or uselang
end
end
return code
end
-- Credit to http://stackoverflow.com/a/1283608/2644759
-- cc-by-sa 3.0
local function tableMerge(t1, t2, overwrite)
for k,v in pairs(t2) do
if type(v) == "table" and type(t1[k]) == "table" then
tableMerge(t1[k], v, overwrite)
else
if overwrite or t1[k] == nil then t1[k] = v end
end
end
return t1
end
--- ڏنل i18n ٽيبل موجب value instantiate ڪري ٿو (deprecated)
-- @function i18n.loadI18n
-- @param {string} name i18n رکندڙ ماڊيول جو نالو
-- @param {table} i18n_arg موجود i18n
function i18n.loadI18n(name, i18n_arg)
local exist, res = pcall(require, name)
if exist and next(res) ~= nil then
if i18n_arg then
tableMerge(i18n_arg, res.i18n, true)
end
end
end
--- مخصوص frame لاءِ i18n لوڊ ڪري ٿو (deprecated)
-- @function i18n.loadI18nFrame
-- @param {string} name i18n رکندڙ ماڊيول جو نالو
-- @param {table} i18n_arg موجود i18n
function i18n.loadI18nFrame(frame, i18n_arg)
return i18n.loadI18n(frame:getTitle().."/i18n", i18n_arg)
end
--- ماڊيول لاءِ wrapper.
-- @function i18n.main
-- @param {table} frame invocation جو frame object.
-- @return {string} template context ۾ ماڊيول جي اوٽ.
-- @usage {{#invoke:i18n|main}}
i18n.main = entrypoint(i18n)
return require("Module:Deprecated")(i18n,
{
["loadI18n"] = {
deprecated = true,
replacement = "use <code>i18n.loadMessages</code>"
},
["loadI18nFrame"] = {
deprecated = true,
replacement = "use <code>i18n.loadMessages</code>"
}
}
)