Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 Using from Templates  





2 Translating Template Parameters  





3 Using from Modules  





4 Using TNTTools  





5 See also  














Module:TNT






Acèh
Адыгабзэ
Afrikaans
ak:Module:TNT
Alemannisch

Anarâškielâ
Аԥсшәа
العربية
Aragonés
Արեւմտահայերէն
Arpetan

Asturianu
Avañe'
Авар
Aymar aru
Azərbaycanca
تۆرکجه
Basa Bali

Banjar
 / Bân-lâm-gú
Basa Banyumasan
Башҡортса
Беларуская
Беларуская (тарашкевіца)

Bikol Central
Bislama
Български
Boarisch

Bosanski
Brezhoneg
Català
Чӑвашла
Cebuano
Čeština
Chamoru
Chavacano de Zamboanga
ChiShona
Corsu
Cymraeg
Dansk
الدارجة
Davvisámegiella
Deutsch
ދިވެހިބަސް

Eesti
Ελληνικά
Emiliàn e rumagnòl
Español
Esperanto
Estremeñu
Euskara
Eʋegbe
فارسی
Fiji Hindi
Føroyskt
Français
Frysk
Fulfulde
Gaeilge
Gàidhlig
Galego

  / Gõychi Konknni
/Hak-kâ-ngî
Хальмг

Հայերեն
ि
Hrvatski
Bahasa Hulontalo
Ido
Ilokano
িি ি
Bahasa Indonesia
Interlingua
Íslenska
Italiano
עברית
Jawa
Kabɩyɛ

Kapampangan

 / کٲشُر
Қазақша
Kernowek
Ikirundi
Kiswahili
Kongo
Kurdî
Кыргызча
Ladino

Latgaļu
Latviešu
Lëtzebuergesch
Lietuvių
Ligure
Lingála
Lombard
Magyar
ि
Македонски
Malagasy

Māori


مصرى
مازِرونی
Bahasa Melayu
Minangkabau
 / Mìng-dĕ̤ng-nḡ
Mirandés
Мокшень
Монгол

Nāhuatl
Nederlands
Nedersaksies

 

Napulitano
Нохчийн
Nordfriisk
Norfuk / Pitkern
Norsk bokmål
Norsk nynorsk
Novial
Occitan
Олык марий
ି
Oʻzbekcha / ўзбекча

ि
Pälzisch
Pangasinan
پنجابی
Papiamentu
پښتو

Plattdüütsch
Polski
Português
Qaraqalpaqsha
Română
Русский
Саха тыла
Sakizaya
Gagana Samoa

سرائیکی
Sardu
Scots
Shqip
Sicilianu

Simple English
سنڌي
SiSwati
Slovenčina
Slovenščina
کوردی
Српски / srpski
Srpskohrvatski / српскохрватски
Sunda
Suomi
Svenska
Tagalog
ி
Tarandíne
Татарча / tatarça
 

Tetun

Thuɔŋjäŋ

Тоҷикӣ

Türkçe
Tyap
Basa Ugi
Українська
اردو
Vahcuengh
Vèneto
Tiếng Vit
Volapük
Walon

Winaray

Yorùbá

Zazaki
Žemaitėška

Betawi
 

Edit links
 









Module
Talk
 

















Read
View source
View history
 








Tools
   


Actions  



Read
View source
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




In other projects  



Wikimedia Commons
Wikimedia Foundation
MediaWiki
Meta-Wiki
Wikimedia Outreach
Multilingual Wikisource
Wikispecies
Wikibooks
Wikidata
Wikifunctions
Wikimania
Wikiquote
Wikisource
Wikiversity
Wikivoyage
Wiktionary
 
















Appearance
   

 





Permanently protected module

From Wikipedia, the free encyclopedia
 


This module allows templates and modules to be easily translated as part of the multilingual templates and modules project. Instead of storing English text in a module or a template, TNT module allows modules to be designed language-neutral, and store multilingual text in the tabular data pages on Commons. This way your module or template will use those translated strings (messages), or if the message has not yet been translated, will fallback to English. When someone updates the translation table, your page will automatically update (might take some time, or you can purge it), but no change in the template or module is needed on any of the wikis. This process is very similar to MediaWiki's localisation, and supports all standard localization conventions such as {{PLURAL|...}} and other parameters.

This module can be used from templates using #invoke, and from other modules. For a simple example, see Data:I18n/Template:Graphs.tab - a table with two messages, each message having a single parameter. By convention, all translation tables should have '''Data:I18n/...''' prefix to separate them from other types of data.

Using from Templates

Description Wiki Markup
In a template, this command translates source_table message using Commons' Data:I18n/Template:Graphs.tab translation table.
{{#invoke:TNT | msg
| I18n/Template:Graphs.tab
| source_table
}}
If your message contains parameters, you can specify them after the message ID.
{{#invoke:TNT | msg
| I18n/Template:My Template.tab
| message-with-two-params
| param1
| param2
}}

Translating Template Parameters

Template parameters are usually stored as a JSON templatedata block inside the template's /doc subpage. This makes it convenient to translate, but when a new parameter is added to a global template, all /doc pages need to be updated in every language. TNT helps with this by automatically generating the templatedata block from a table stored on Commons. Placing this line into every /doc sub-page will use Data:Templatedata/Graph:Lines.tab table to generate all the needed templatedata information in every language. Even if the local community has not translated the full template documentation, they will be able to see all template parameters, centrally updated.
{{#invoke:TNT | doc | Graph:Lines }}

Using from Modules

Just like templates, modules should also use this module for localization:

local TNT = require('Module:TNT')

-- format <messageId> string with two parameters using a translation table.
local text = TNT.format('I18n/My_module_messages', 'messageId', 'param1', 'param2', ...)

-- Same, but translate to a specific language.
local text = TNT.formatInLanguage('fr', 'I18n/My_module_messages', 'messageId', 'param1', 'param2', ...)

Using TNTTools

Module:TNTTools has:

See also

--
-- INTRO:   (!!! DO NOT RENAME THIS PAGE !!!)
--    This module allows any template or module to be copy/pasted between
--    wikis without any translation changes. All translation text is stored
--    in the global  Data:*.tab  pages on Commons, and used everywhere.
--
-- SEE:   https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules
--
-- ATTENTION:
--    Please do NOT rename this module - it has to be identical on all wikis.
--    This code is maintained at https://www.mediawiki.org/wiki/Module:TNT
--    Please do not modify it anywhere else, as it may get copied and override your changes.
--    Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT
--
-- DESCRIPTION:
--    The "msg" function uses a Commons dataset to translate a message
--    with a given key (e.g. source-table), plus optional arguments
--    to the wiki markup in the current content language.
--    Use lang=xx to set language.  Example:
--
--    {{#invoke:TNT | msg
--     | I18n/Template:Graphs.tab  <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab -->
--     | source-table              <!-- uses a translation message with id = "source-table" -->
--     | param1 }}                 <!-- optional parameter -->
--
--
--    The "doc" function will generate the <templatedata> parameter documentation for templates.
--    This way all template parameters can be stored and localized in a single Commons dataset.
--    NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons.
--
--    {{#invoke:TNT | doc | Graph:Lines }}
--        uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab
--        if the current page is Template:Graph:Lines/doc
--

local p = {}
local i18nDataset = 'I18n/Module:TNT.tab'

-- Forward declaration of the local functions
local sanitizeDataset, loadData, link, formatMessage

function p.msg(frame)
 local dataset, id
 local params = {}
 local lang = nil
 for k, v in pairs(frame.args) do
  if k == 1 then
   dataset = mw.text.trim(v)
  elseif k == 2 then
   id = mw.text.trim(v)
  elseif type(k) == 'number' then
   table.insert(params, mw.text.trim(v))
  elseif k == 'lang' and v ~= '_' then
   lang = mw.text.trim(v)
  end
 end
 return formatMessage(dataset, id, params, lang)
end

-- Identical to p.msg() above, but used from other lua modules
-- Parameters:  name of dataset, message key, optional arguments
-- Example with 2 params:  format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.format(dataset, key, ...)
 local checkType = require('libraryUtil').checkType
 checkType('format', 1, dataset, 'string')
 checkType('format', 2, key, 'string')
 return formatMessage(dataset, key, {...})
end


-- Identical to p.msg() above, but used from other lua modules with the language param
-- Parameters:  language code, name of dataset, message key, optional arguments
-- Example with 2 params:  formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset')
function p.formatInLanguage(lang, dataset, key, ...)
 local checkType = require('libraryUtil').checkType
 checkType('formatInLanguage', 1, lang, 'string')
 checkType('formatInLanguage', 2, dataset, 'string')
 checkType('formatInLanguage', 3, key, 'string')
 return formatMessage(dataset, key, {...}, lang)
end

-- Obsolete function that adds a 'c:' prefix to the first param.
-- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab'
function p.link(frame)
 return link(frame.args[1])
end

function p.doc(frame)
 local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1])
 return frame:extensionTag('templatedata', p.getTemplateData(dataset)) ..
     formatMessage(i18nDataset, 'edit_doc', {link(dataset)})
end

function p.getTemplateData(dataset)
 -- TODO: add '_' parameter once lua starts reindexing properly for "all" languages
 local data = loadData(dataset)
 local names = {}
 for _, field in pairs(data.schema.fields) do
  table.insert(names, field.name)
 end

 local params = {}
 local paramOrder = {}
 for _, row in pairs(data.data) do
  local newVal = {}
  local name = nil
  for pos, val in pairs(row) do
   local columnName = names[pos]
   if columnName == 'name' then
    name = val
   else
    newVal[columnName] = val
   end
  end
  if name then
   params[name] = newVal
   table.insert(paramOrder, name)
  end
 end

 -- Work around json encoding treating {"1":{...}} as an [{...}]
 params['zzz123']=''

 local json = mw.text.jsonEncode({
  params=params,
  paramOrder=paramOrder,
  description=data.description
 })

 json = string.gsub(json,'"zzz123":"",?', "")

 return json
end

-- Local functions

sanitizeDataset = function(dataset)
 if not dataset then
  return nil
 end
 dataset = mw.text.trim(dataset)
 if dataset == '' then
  return nil
 elseif string.sub(dataset,-4) ~= '.tab' then
  return dataset .. '.tab'
 else
  return dataset
 end
end

loadData = function(dataset, lang)
 dataset = sanitizeDataset(dataset)
 if not dataset then
  error(formatMessage(i18nDataset, 'error_no_dataset', {}))
 end

 -- Give helpful error to thirdparties who try and copy this module.
 if not mw.ext or not mw.ext.data or not mw.ext.data.get then
  error('Missing JsonConfig extension; Cannot load https://commons.wikimedia.org/wiki/Data:' .. dataset)
 end

 local data = mw.ext.data.get(dataset, lang)

 if data == false then
  if dataset == i18nDataset then
   -- Prevent cyclical calls
   error('Missing Commons dataset ' .. i18nDataset)
  else
   error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)}))
  end
 end
 return data
end

-- Given a dataset name, convert it to a title with the 'commons:data:' prefix
link = function(dataset)
 return 'c:Data:' .. mw.text.trim(dataset or '')
end

formatMessage = function(dataset, key, params, lang)
 for _, row in pairs(loadData(dataset, lang).data) do
  local id, msg = unpack(row)
  if id == key then
   local result = mw.message.newRawMessage(msg, unpack(params or {}))
   return result:plain()
  end
 end
 if dataset == i18nDataset then
  -- Prevent cyclical calls
  error('Invalid message key "' .. key .. '"')
 else
  error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)}))
 end
end

return p

Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:TNT&oldid=975758048"

Category: 
Modules using tabular data
Hidden category: 
Wikipedia template-protected modules
 



This page was last edited on 30 August 2020, at 07:28 (UTC).

Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



Privacy policy

About Wikipedia

Disclaimers

Contact Wikipedia

Code of Conduct

Developers

Statistics

Cookie statement

Mobile view



Wikimedia Foundation
Powered by MediaWiki