Este módulo permite traducir fácilmente plantillas y módulos como parte del proyecto de plantillas y módulos multilingües. En lugar de almacenar texto en inglés en un módulo o una plantilla, el módulo TNT permite diseñar módulos neutrales en cuanto al idioma y almacenar texto multilingüe en las páginas de datos tabulares en Commons. De esta manera, su módulo o plantilla utilizará esas cadenas traducidas (mensajes) o, si el mensaje aún no se ha traducido, volverá al inglés. Cuando alguien actualice la tabla de traducción, su página se actualizará automáticamente (puede llevar algún tiempo o puede eliminarla), pero no es necesario realizar ningún cambio en la plantilla o el módulo en ninguno de los wikis. Este proceso es muy similar a la localización de MediaWiki y admite todas las convenciones de localización estándar, como {{PLURAL|...}} y otros parámetros.
Este módulo se puede utilizar desde plantillas que utilicen #invoke y desde otros módulos. Para ver un ejemplo sencillo, consulte Data:I18n/Template:Graphs.tab: una tabla con dos mensajes, cada uno de los cuales tiene un único parámetro. Por convención, todas las tablas de traducción deben tener el prefijo '''Data:I18n/...''' para separarlas de otros tipos de datos.
{{#invoke:TNT | doc | Gráfico:Líneas }}
Al igual que las plantillas, los módulos también deben usar este módulo para la localización:
TNT local = require ( 'Módulo:TNT' )-- formato <messageId> cadena con dos parámetros utilizando una tabla de traducción. local text = TNT . format ( 'I18n/My_module_messages' , 'messageId' , 'param1' , 'param2' , ...)-- Lo mismo, pero traducir a un idioma específico. local text = TNT . formatInLanguage ( 'fr' , 'I18n/My_module_messages' , 'messageId' , 'param1' , 'param2' , ...)
Módulo:TNTTools tiene:
-- -- INTRODUCCIÓN: (!!! NO CAMBIE EL NOMBRE DE ESTA PÁGINA !!!) -- Este módulo permite copiar y pegar cualquier plantilla o módulo entre wikis sin realizar cambios en la traducción. Todo el texto traducido se almacena en las páginas globales Data:*.tab de Commons y se usa en todas partes. -- -- VEA: https://www.mediawiki.org/wiki/Module:TNT/Multilingual_Templates_and_Modules -- -- ATENCIÓN: -- NO cambie el nombre de este módulo: debe ser idéntico en todos los wikis. -- Este código se mantiene en https://www.mediawiki.org/wiki/Module:TNT/Module:TNT -- No lo modifique en ningún otro lugar, ya que puede copiarse y anular sus cambios. -- Se pueden hacer sugerencias en https://www.mediawiki.org/wiki/Module:TNT/Module_talk:TNT -- -- DESCRIPCIÓN: -- La función "msg" usa un conjunto de datos de Commons para traducir un mensaje con una clave dada (por ejemplo, tabla-fuente), más argumentos opcionales al marcado wiki en el idioma del contenido actual. -- Use lang=xx para configurar el idioma. Ejemplo: -- -- {{#invoke:TNT | msg -- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Module:TNT/Data:I18n/Template:Graphs.tab --> -- | source-table <!-- usa un mensaje de traducción con id = "source-table" --> -- | param1 }} <!-- parámetro opcional --> -- -- -- La función "doc" generará la documentación del parámetro <templatedata> para las plantillas. -- De esta manera, todos los parámetros de plantilla se pueden almacenar y localizar en un único conjunto de datos de Commons. -- NOTA: "doc" supone que toda la documentación se encuentra en Data:Templatedata/* en Commons. -- -- {{#invoke:TNT | doc | Graph:Lines }} -- usa https://commons.wikimedia.org/wiki/Module:TNT/Data:Templadata/Graph:Lines.tab -- si la página actual es Template:Graph:Lines/doc -- local p = {} local i18nDataset = 'I18n/Module:TNT.tab' -- Declaración adelantada de las funciones locales local sanitizeDataset , loadData , link , formatMessage function p . msg ( frame ) local dataset , id local params = {} local lang = nil para k , v en pares ( frame . args ) hacer si k == 1 entonces dataset = mw . text . trim ( v ) de lo contrario si k == 2 entonces id = mw . text . trim ( v ) de lo contrario tipo ( k ) == 'número' entonces tabla. insert ( parámetros , mw . text . trim ( v )) de lo contrario k == 'lang' y v ~= '_' entonces lang = mw . text . trim ( v ) fin fin devolver formatMessage ( dataset , id , parámetros , lang ) fin -- Idéntico a p.msg() anterior, pero usado desde otros módulos lua -- Parámetros: nombre del conjunto de datos, clave del mensaje, argumentos opcionales -- Ejemplo con 2 parámetros: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') función p . format ( dataset , key , ...) local checkType = require ( 'libraryUtil' ). checkType checkType ( 'format' , 1 , dataset , 'string' ) checkType ( 'format' , 2 , key , 'string' ) return formatMessage ( dataset , key , {...}) end -- Idéntico a p.msg() anterior, pero usado desde otros módulos lua con el parámetro language -- Parámetros: código de idioma, nombre del dataset, clave del mensaje, argumentos opcionales -- Ejemplo con 2 parámetros: formatInLanguage ('es', I18n/Module:TNT', ' error_bad_msgkey ', 'my-key', 'my-dataset') function p.formatInLanguage ( lang , dataset , key , ...) tipo de comprobación local = require ( 'libraryUtil' ). checkType checkType ( 'formatInLanguage' , 1 , lang , 'string' ) checkType ( 'formatInLanguage' , 2 , dataset , 'string' ) checkType ( 'formatInLanguage' , 3 , key , 'string' ) return formatMessage ( dataset , key , {...}, lang ) fin -- Función obsoleta que agrega un prefijo 'c:' al primer parámetro. -- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab' función p . link ( frame ) retorno link ( frame . args [ 1 ]) fin de la función p . doc ( frame ) local dataset = 'Templatedata/' .. sanitizeDataset ( frame . args [ 1 ]) return frame : extensionTag ( 'templatedata' , p . getTemplateData ( dataset )) .. formatMessage ( i18nDataset , 'edit_doc' , { link ( dataset )}) fin de la función p . getTemplateData ( dataset ) -- TODO: agregar el parámetro '_' una vez que lua comience a reindexar correctamente para "todos" los idiomas datos locales = loadData ( dataset ) nombres locales = {} para _ , campo en pares ( datos . schema . fields ) hacer tabla. insert ( nombres , campo . name ) fin parámetros locales = {} paramOrder local = {} para _ ,remar en pares ( data . data ) hacer local newVal = {} nombre local = nil para pos , val en pares ( row ) hacer local columnName = names [ pos ] si columnName == 'name' entonces nombre = val de lo contrario newVal [ columnName ] = val end end si name entonces params [ name ] = newVal table.insert ( paramOrder , name ) end end -- Solución alternativa a la codificación json que trata {"1":{...}} como un [{...}] params [ 'zzz123' ] = '' local json = mw . text . jsonEncode ({ params = params , paramOrder = paramOrder , description = data . description }) json = string. gsub ( json , '"zzz123":",?' , "" ) return json end -- Funciones locales sanitizeDataset = function ( dataset ) si no dataset entonces devuelve nil end dataset = mw . texto . trim ( conjunto de datos ) si conjunto de datos == '' entonces devuelve nil de lo contrario si string.sub ( conjunto de datos , - 4 ) ~= '.tab' entonces devuelve conjunto de datos .. '.tab' de lo contrario devuelve conjunto de datos fin fin loadData = function ( conjunto de datos , idioma ) conjunto de datos = sanitizeDataset ( conjunto de datos ) si no dataset entonces error ( formatMessage ( i18nDataset , 'error_no_dataset' , {})) fin - Proporciona un error útil a terceros que intenten copiar este módulo. si no es mw . ext o no mw . ext . data o no mw . ext . data . get entonces error ( 'Falta la extensión JsonConfig; No se puede cargar https://commons.wikimedia.org/wiki/Module:TNT/Data:' .. dataset ) fin local data = mw . ext . data . get ( dataset , lang ) if data == false then if dataset == i18nDataset then -- Prevenir llamadas cíclicas error ( 'Falta el conjunto de datos de Commons ' .. i18nDataset ) else error ( formatMessage ( i18nDataset , 'error_bad_dataset' , { link ( dataset )})) end end return data end -- Dado un nombre de conjunto de datos, conviértalo en un título con el prefijo 'commons:data:' link = function ( dataset ) return 'c:Data:' .. mw . text . trim ( dataset o '' ) 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 , descomprimir ( params o {})) devolver resultado : plain () fin fin si dataset == i18nDataset entonces -- Evitar llamadas cíclicas error ( 'Clave de mensaje no válida "' .. key .. '"' ) de lo contrario error ( formatMessage ( i18nDataset , 'error_bad_msgkey' , { key , link ( dataset )})) fin fin devolver p