tnt

Цей модуль дозволяє легко перекладати шаблони та модулі в рамках проєкту багатомовних шаблонів та модулів.

{{i}} Документація модуля]

Замість того, щоб зберігати англійський текст у модулі або шаблоні, модуль TNT дозволяє модулям бути мовно-нейтральними та зберігати багатомовний текст у сторінках табличних даних на Commons. Таким чином, ваш модуль або шаблон буде використовувати перекладені рядки (повідомлення), або якщо повідомлення ще не перекладено, повернеться до англійської мови. Коли хтось оновить таблицю перекладів, ваша сторінка автоматично оновиться (це може зайняти деякий час, або ви можете її очистити), але в жодній з вікісистем не потрібно змінювати шаблон або модуль. Цей процес дуже схожий на локалізацію MediaWiki і підтримує всі стандартні угоди локалізації, такі як {{PLURAL|...}} та інші параметри.

Цей модуль можна використовувати із шаблонів, які використовують #invoke, та інших модулів. Для простого прикладу дивіться Data:I18n/Template:Graphs.tab - таблиця із двома повідомленнями, кожне повідомлення має один параметр. За угодою всі таблиці перекладу повинні мати префікс Data:I18n/..., щоб відокремити їх від інших типів даних.

Цей модуль можна використовувати із шаблонів, які використовують #invoke, та інших модулів. Для простого прикладу дивіться Data:I18n/Template:Graphs.tab — таблиця із двома повідомленнями, кожне повідомлення має один параметр. За угодою всі таблиці перекладу повинні мати префікс '''Data:I18n/...''', щоб відокремити їх від інших типів даних.

Використання з шаблонів

Опис Вікірозмітка
У шаблоні ця команда перекладає повідомлення source_table за допомогою таблиці перекладу Commons Data:I18n/Template:Graphs.tab.
{{#invoke:TNT | msg | I18n/Template:Graphs.tab | source_table }} 
Якщо повідомлення містить параметри, ви можете вказати їх після ID повідомлення.
{{#invoke:TNT | msg | I18n/Template:My Template.tab | message-with-two-params | param1 | param2 }} 

Переклад параметрів шаблону

Параметри шаблону зазвичай зберігаються у вигляді блоку JSON templatedata всередині підсторінки /doc шаблону. Це робить його зручним для перекладу, але коли до глобального шаблону додається новий параметр, всі сторінки /doc повинні бути оновлені кожною мовою. TNT допомагає в цьому, автоматично генеруючи блок templatedata з таблиці, що зберігається на Commons. Якщо помістити цей рядок у кожну підсторінку /doc, то таблиця Data:Templatedata/Graph:Lines.tab буде використовуватися для генерації всієї необхідної інформації templatedata кожною мовою. Навіть якщо місцева спільнота не переклала повну документацію шаблону, вона зможе побачити всі параметри шаблону, які оновлюються централізовано.
{{#invoke:TNT | doc | Graph:Lines }} 

Використання з модулів

Як і шаблони, модулі повинні використовувати цей модуль для локалізації:

local TNT = require('Модуль:TNT')  -- форматування рядка  з двома параметрами за допомогою таблиці перекладу. local text = TNT.format('I18n/My_module_messages', 'messageId', 'param1', 'param2', ...)  -- Те ж саме, але перекласти певною мовою. local text = TNT.formatInLanguage('uk', 'I18n/My_module_messages', 'messageId', 'param1', 'param2', ...) 

Використання TNTTools

Модуль:TNTTools містить:

  • Функції питання: з булевим чи числовим індексованим поверненням. Викликаються з інших модулів або шаблонів. З допомогою:
    • опції з урахуванням регістру.
    • можливості мати більше одного перекладеного значення тексту (де кожне значення розділене знаком "|").
  • Щоб не писати, додайте "I18n/" як префікс і розширення ".tab" як суфікс для імен таблиць.
  • Декілька прикладів.
-- -- ВСТУП:   (!!! НЕ ПЕРЕЙМЕНОВУЙТЕ ЦЮ СТОРІНКУ!!!) --    Цей модуль дозволяє копіювати/вставляти будь-який шаблон чи модуль --    між вікіпроєктами без зміни перекладу. Весь текст перекладу зберігається --    в глобальних Data:*.tab на сторінках Commons і використовується всюди. -- -- ДИВІТЬСЯ:   https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules -- -- УВАГА: --    Будь ласка, НЕ перейменовуйте цей модуль — він має бути однаковим у всіх вікіпроєктах. --    Цей код підтримується на https://www.mediawiki.org/wiki/Module:TNT --    Будь ласка, не змінюйте його в інших місцях, оскільки він може бути скопійований і скасувати зміни. --    Пропозиції можна надсилати на адресу https://www.mediawiki.org/wiki/Module_talk:TNT -- -- ОПИС: --    Функція «msg» використовує набір даних Commons для перекладу повідомлення --    із заданим ключем (наприклад, source-table) також необов'язкові параметри --    у вікірозмітку поточною мовою вмісту. Використовуйте lang=xx для встановлення мови. Приклад: -- --    {{#invoke:TNT | msg --     | I18n/Template:Graphs.tab   --     | source-table               --     | param1 }}                  -- -- --    Функція «doc» генеруватиме документацію параметрів  для шаблонів. --    Таким чином, усі параметри шаблонів можуть бути збережені та локалізовані в одному наборі даних Commons. --    ПРИМІТКА: «doc» передбачає, що вся документація знаходиться в Data:Templatedata/* на Commons. -- --    {{#invoke:TNT | doc | Graph:Lines }} --        використовує https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab --        якщо поточною сторінкою є Template:Graph:Lines/doc --  local p = {} local i18nDataset = 'I18n/Module:TNT.tab'  -- Форвардна декларація місцевих функцій 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  -- Застаріла функція, яка додає префікс 'c:' до першого параметра. -- «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) -- ЗРОБИТИ: додати параметр '_', коли lua почне правильно переіндексувати для «всіх» мов 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  -- Робота навколо кодування json, що розглядає {"1":{...}} як [{...}] params['zzz123']=''  local json = mw.text.jsonEncode({ params=params, paramOrder=paramOrder, description=data.description })  json = string.gsub(json,'"zzz123":"",?', "")  return json end  -- Локальні функції  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  -- Видавати корисну помилку іншим користувачам, які намагаються скопіювати цей модуль. if not mw.ext or not mw.ext.data or not mw.ext.data.get then error('Відсутній додаток JsonConfig; Неможливо завантажити https://commons.wikimedia.org/wiki/Data:' .. dataset) end  local data = mw.ext.data.get(dataset, lang)  if data == false then if dataset == i18nDataset then -- Запобігання циклічним викликам error('Відсутня база даних Commons ' .. i18nDataset) else error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)})) end end return data end  -- Враховуючи ім'я набору даних, перетворіть його на назву з префіксом 'commons:data:' 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 -- Запобігання циклічним викликам error('Неприпустимий ключ повідомлення "' .. key .. '"') else error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)})) end end  return p 

Tags:

mw:Help:Tabular Datamw:Localisationmw:Multilingual Templates and Modules

🔥 Trending searches on Wiki Українська:

Пенсійний фонд УкраїниI'm the One (пісня DJ Khaled)КрасноградУкраїнська асоціація футболуКіт свійськийМайкл Кларк ДунканСухопутна військова техніка УкраїниЧервоноградВійськова організаціяДруга світова війнаПрапор УкраїниГострі картузиЧернівціГагарін Юрій ОлексійовичPurpose (альбом Джастіна Бібера)ІрландіяРосійське вторгнення в Україну (з 2022)Коноплянка Євген ОлеговичWhat Do You Mean?Магнітна буряСвітан Роман ГригоровичВелике князівство ЛитовськеСуми20 днів у МаріуполіЮгославські війниБущан Георгій МиколайовичXnxx.comКосовська війнаЧемпіонат Європи з футболу 2028КліторДонецькКозакиDeutsche Welle71-ша окрема єгерська бригада (Україна)Ой у лузі червона калинаСписок українських жіночих іменЧемпіонат світу з футболу 2026 (кваліфікаційний раунд)Кіновсесвіт Marvel2023Карти GoogleДніпровська ГЕСОрганізація Об'єднаних НаційСписок країн Європейського СоюзуБезугла Мар'яна ВолодимирівнаПроблема трьох тіл (телесеріал)БорщШахтар (Донецьк)ЗодіакГіперзвукова зброяНеоподатковуваний мінімумСлов'яниСпіймати КайдашаМаріупольНікітюк Леся ІванівнаМіГ-29Емма СтоунЮхновський Ігор РафаїловичБлохін Олег ВолодимировичРуїнаВолинська областьПерелік громад, що змінили церковну юрисдикцію з УПЦ (МП) на ПЦУ (2024)Збройні сили УкраїниКомандування Сил логістики Збройних Сил УкраїниЧемпіонат Європи з футболу 2012Ребров Сергій СтаніславовичУкраїнська Народна РеспублікаСписок країн світуРосіяЯрмоленко Андрій МиколайовичКріштіану РоналдуБойчук Михайло ЛьвовичКонфліктСтупені вищої освіти в УкраїніПерелік центральних органів виконавчої влади УкраїниБМ-21 «Град»КосовоБідолашні створіння🡆 More