Global templates/Proposed specification/ru

  Татары, узбеки и ненцы И весь украинский народ, И даже приволжские немцы К себе переводчиков ждут. И может быть в эту минуту Меня на турецкий язык Японец какой переводит И в самую душу проник. —Осип Мандельштам

Это — предложение функциональных требований для глобальных шаблонов и модулей.

Есть также краткое описание этого предложения (длиной в одну страницу).

'''Это не проект, который сейчас выполняется, или планируется к выполнению в определенное время, по крайней мере, на настоящий момент. Это только идея, хотя и довольно подробно описанная.'''

Окончательная цель — достичь межкомандного и межпроектного соглашения об осуществлении этой идеи, с соответствующей архитектурой, менеджментом проекта и продукта, работой с сообществом, и т.д.

Этот документ не пытается углубиться в подробности технической имплементации в смысле хранения, кеширования, доставки, дизайн кода на PHP, и т.д. Он пытается только определить требования того, как эта возможность будет работать с точки зрения пользователей:


 * 1) Люди, создающие и поддерживающие шаблоны и модули.
 * 2) Люди, создающие и правящие страницы, которые содержат шаблоны и модули. Это включает всех редакторов и все виды страниц:
 * 3) * Все уровни опыта: от полных новичков до тех, кто сделал тысячи правок
 * 4) * Все виды инструментов редактирования: редактирование вики-текста, Визуальный редактор, Перевод содержания и другие (даже ботоводы)
 * 5) * Все вики: Википедия, Викисловарь, Викигид, Викиданные, Инкубатор и т. д., и любые новые будущие проекты
 * 6) * Все языки: английский, французский, русский, испанский, армянский, персидский, зулу, манипури и др.
 * 7) * Все виды страниц: статьи Википедии, страницы обсуждения статей, страницы обсуждения пользователей, страницы обсуждения сообщества, страницы Вики-проектов, категории, страницы документации шаблонов и т. д.

«Речь для лифта»
Значительная часть функций сайтов Викимедиа реализована в шаблонах и модулях Lua. В их нынешней форме они не могут быть общими для разных вики-сайтов и языков. Из-за этого их трудно интегрировать с современными способами создания и редактирования статей — Visual Editor, Wikidata и Content Translation — и адаптировать к мобильным устройствам. Это приводит к пустой трате усилий авторов и трудностям для новых редакторов и небольших проектов. Возможность делиться ими между вики-сайтами сделает разработку программного обеспечения более быстрой и надежной и позволит редакторам лучше сосредоточиться на написании текста.

Проблема
Общее замечание: если не сказано иначе, все упоминания «шаблонов» относятся также к модулям Scribunto на языке Lua.

Шаблоны реализуют функции сайтов Викимедиа. Некоторые из этих функций очень заметны, особенно карточки, сноски, «источник?» и многие другие. Все читатели видят их, и все участники сталкиваются с ними почти в каждой правке. Кроме того, они реализуют многие из функций внутреннего управления сообществами сайтов: запросы на удаление, запросы на разблокировку, выражение согласия в обсуждениях, сортировку статей для вики-проектов, и т. д.

Шаблоны предоставляют эффективный механизм для быстрого проектирования, развертывания и использования повторяющихся фрагментов текста и разметки на многих страницах. Тем не менее, шаблоны также имеют несколько острых проблем с удобством использования для всех видов участников.

Редактирующие вики-текстом
Шаблоны часто трудно понять участникам, редактирующим вики-текстом. Люди, имеющие опыт использования определённого шаблона вероятно узнают его и смогут отредактировать включающую его страницу. Однако не знакомые с шаблоном редакторы должны будут искать его документацию когда они столкнутся с ним, даже если у них есть опыт с другими шаблонами. А неопытные редакторы будут озадачены загадочным текстом с фигурными скобками, вертикальными чертами, знаками равенства и т. д.

Для использования функции, реализованной в качестве шаблона, необходимо знать имя шаблона и вводить его в фигурных скобках ( – ) или копировать его с другой страницы. Это неочевидно для новых пользователей, и опытные пользователи также должны изучать каждый новый шаблон отдельно.

В некоторых вики-сайтах есть гаджеты, добавляющие на панель инструментов редактирования кнопки, которые вставляют часто используемые на этом сайте шаблоны. Они различны на каждом сайте, хотя многие шаблоны имеют схожую функциональность в разных проектах и языках.

Редактирующие визуальным редактором
У пользователей Визуального редактора есть некоторые преимущества в использовании шаблонов, однако и там с ними связано много сложностей. В частности, существует аналогичная проблема с возможностью обнаружения («discoverability»): в Визуальном редакторе все функции шаблонов скрыты за пунктом меню «Вставить → Шаблон», и пользователь должен знать название шаблона перед его использованием.

В меню «Вставить» визуального редактора есть элементы для математических формул, египетских иероглифов, музыкальных нот и некоторых других функций, реализованных в расширениях, но в нём нет таких элементов, как «Карточка», «Источник?», «Конвертирование единиц», «Цитата» и т. д. Все шаблоны — один и тот же обобщённый предмет.

Есть одно заметное исключение: в некоторых вики-сайтах есть кнопка «Источник», вставляющая сноски со шаблонами источников. Тем не менее, это исключение, которое подтверждает правило. Оно требует ручной настройки даже для основных функций, эта настройка является отдельной в каждом вики-сайте, и, как следствие, многие вики вообще не имеют этой кнопки. Другое сопоставимое исключение, добавленное в конце 2019 года, — это специальная поддержка шаблонов «Источник?» (Citation needed), но и этой функции требуются некоторые настройки в каждом вики-сайте, для того чтобы она действительно работала.

Трудности для участников, пишущих в нескольких вики-сайтах
Многие шаблоны существуют в одном проекте, но не в других, и часто шаблон доступен, но в другой форме. Из-за этого трудно или невозможно повторно использовать навыки, приобретённые в одном проекте: функциональность, предоставляемая шаблоном, иногда недоступна, а иногда работает по-другому. Это относится не только к вики-сайтам на разных языках, но и к разным сайтам на одном языке, например, к Русской Википедии и Русской Викитеке.

Для людей, редактирующих на разных языках, шаблоны усложняют перевод. При переводе страницы шаблоны гораздо сложнее обрабатывать, чем текст статьи («прозу»), независимо от того, выполняется ли перевод вручную или с помощью Перевода содержания (Content Translation). Пользователи часто должны пропускать шаблон или исправлять его после публикации статьи. Это также приводит к отказу от уже начатого перевода, потому что перевод шаблона буквально отпугивает многих участников.

Наиболее часто сообщаемые проблемы в Переводе содержания связаны с шаблонами.

Перевод содержания имеет функцию адаптации шаблонов, которая автоматизирует некоторые части этого процесса, но работает только в том случае, если соответствующий шаблон существует на обоих языках, и если все параметры были тщательно сопоставлены людьми, содержащими этот шаблон. Это должно быть сделано для каждого шаблона на каждом языке отдельно и вручную и постоянно поддерживаться при изменении исходного шаблона. Это происходит даже при том, что функции шаблонов на разных языках в большинстве случаев одинаковы.

В идеале, шаблоны и их параметры должны быть перенесены на переведённую страницу почти полностью автоматически, чтобы переводчики могли сосредоточиться на написании прозы, так как написание прозы — это та область, где человеческая работа наиболее необходима.

Шаблон можно экспортировать из одного вики-сайта в другой, но после этого шаблон становится раздвоенной копией (forked). Он либо остается в том состоянии, в котором он был экспортирован, либо продолжает разрабатываться отдельно, что приводит к несовместимости. Иногда люди продолжают поддерживать разные копии, но это ненадёжно и не может масштабироваться для сотен вики-сайтов, которые у нас есть.

Параметры шаблона могут иметь одинаковую функциональность, но разные названия в разных вики-сайтах. Их можно адаптировать, используя псевдонимы (aliases) TemplateData, но это неоптимальный «хак»: это не то, для чего изначально было создано расширение TemplateData, и это нужно делать вручную для каждой пары языков.

Шаблоны объединяют алгоритмическую логику, текстовые строки, понятные человеку, и форматирование. Из-за этого нет надёжного способа переводить строки пользовательского интерфейса шаблонов так, как это делается с ядром MediaWiki и расширениями.

Трудности для участников меньших вики-сайтов
Новый вики-сайт создаётся путём установки ядра MediaWiki и включения набора расширений по умолчанию. На практике это не создаёт «ровного игрового поля», потому что в шаблонах реализовано множество ключевых функций больших вики: карточки, сноски, служебные пометки (таких, как ) и т. д.

Трудности для разработчиков программного обеспечения
Разработчикам ядра, расширений, ботов и других инструментов MediaWiki, которые анализируют, генерируют или изменяют содержимое вики-страниц, сложно разрабатывать функции, которые зависят от наличия в вики определённых шаблонов. Разработчики расширений, таких как GrowthExperiments, PageTriage, ContentTranslation, некоторые компоненты Wikibase и многих других, должны либо тестировать их в рабочей среде, что не очень хорошо, либо импортировать шаблоны в свои локальные вики для разработки или тестовые онлайн-вики.

Исследователи, получающие данные о содержании вики на основе шаблонов, должны писать свой код для анализа каждого вики-сайта отдельно, и иногда они работают только над одним вики-сайтом. Ярким примером является использование шаблонов вики-проектов Английской Википедии для анализа тем страниц и оценки качества статей.

Расширения и шаблоны: сходства и различия
Одно из основных предположений этого предложения заключается в том, что шаблоны и модули очень похожи на ядро и расширения MediaWiki: они являются программными средствами и реализуют функции, необходимые сообществу редакторов. В частности, поскольку шаблоны обычно разрабатываются самими редакторами, очевидно, что сообщество действительно нуждается в них. Основные различия между ними заключаются в том, как они разрабатываются, локализуются и разворачиваются.

Шаблоны и модули должны стать похожими на расширения в некоторых ключевых свойствах, которых им не хватает в настоящее время, и сохранить некоторые хорошие свойства, которых нет в расширениях.

Навыки разработки шаблонов и модулей
Есть и ещё один важный набор предположений, на которых основано это предложение:
 * Навыки разработки шаблонов и модулей нетривиальны. И шаблоны, и модули имеют много неясных функций.
 * Хотя многие из наиболее заметных функций сайтов реализованы в виде шаблонов и модулей, люди часто не замечают и недооценивают эти навыки и принимают их как должное.
 * Есть десятки людей, которые имеют эти навыки, и они редактируют много вики-сайтов. Они обычно сосредатачиваются на своём домашнем вики-сайте и относительно редко общаются с участниками из других вики или других языков. Несмотря на то, что базовая технология везде одинакова, не существует настоящего глобального сообщества разработчиков шаблонов, которое было бы сопоставимо с глобальным сообществом разработчиков ядра и расширений MediaWiki. Существуют случаи совместной работы в нескольких вики-сайтах на определенных шаблонах, но это непостоянно и нестандартизованно.
 * Есть также много вики, в которых вообще нет редакторов, обладающих этими навыками. Они либо копируют шаблоны и модули из других вики, не полностью понимая, как они работают, и не имея возможности эффективно их локализовывать и поддерживать, либо не используют шаблоны вообще.

Эта ситуация далека от оптимальной. Навыки разработчиков шаблонов и модулей требуют более высокой оценки. Они разрабатывают по-настоящему необходимые функции и являются неотъемлемой сообщества редакторов. В вики-сайтах на многих языках разработчики шаблонов создают инновационные функции для структурированного контента, представления данных и модульности. Эти нововведения могут быть полезны во многих вики, но в настоящее время нет удобного механизма для достижения этого.

И, конечно же, любое решение этих проблем не должно предлагать совершенно новые технологии, которые заставят отказаться от многолетнего практического опыта, приобретённого разработчиками шаблонов. Следовательно, должно быть как можно меньше изменений в синтаксисе для разработки шаблонов и модулей. Вещи, которые необходимо изменить, — это способ их развертывания и распространения в вики-сайтах, а также способ локализации (перевода) понятных для человека строк в них.

Предлагаемое решение: Вкратце
Уже сейчас есть много функций MediaWiki, которые являются глобальными для всех вики: изображения (с помощью Commons), блокировка, учётные записи пользователей (CentralAuth), настройки, пользовательские страницы, пользовательские страницы JS и CSS и некоторые другие.

Должно быть также возможно хранить шаблоны и модули в глобальном хранилище и локализовать их так же просто и надёжно, как это делается с расширениями.

Глобальные шаблоны и модули дадут бо́льшие возможности разработчикам шаблонов во всех вики, позволяя им легче сотрудничать при разработке кода шаблонов.

Глобальные шаблоны и модули дадут бо́льшие возможности переводчикам и локализаторам и позволят им сосредоточиться на переводе строк пользовательского интерфейса («сообщений»), без необходимости искать строки в коде и позволят им использовать одинаковые навыки и инструменты для перевода шаблонов и для расширений MediaWiki.

Глобальные шаблоны и модули дадут бо́льшие возможности редакторам содержания во всех вики создавать и переводить контент, использующий эти шаблоны, без необходимости углубляться в различия между ними и заново изучать различные правила и навыки на каждой сайте.

Синтаксис для разработки шаблонов и модулей, а также общий цикл обслуживания и развёртывания шаблонов не изменится, поэтому все навыки, приобретённые специалистами по обслуживанию шаблонов за эти годы, останутся актуальными.

Все вики смогут использовать глобальные шаблоны, но не будут обязаны это делать. Сообщества сохранят возможность переопределять и менять любые глобальные функции, дизайн, рабочие процессы и данные.

Локализация шаблонов будет так же удобна, как и локализация расширений MediaWiki.

У шаблонов должна быть возможность быть семантическими и глобальными
Семантические означает, что другие программные компоненты, особенно Визуальный редактор и Перевод содержания, должны иметь обобщённый способ понять, что шаблон существует и что он обеспечивает определённые возможности, чтобы можно было вставить его в страницу как карточку, цитату, сообщение в начале статьи и т. д., и не только в качестве просто шаблона. В настоящее время самое близкое что существует к семантическому описанию шаблонов — TemplateData, но это описывает только параметры шаблона. Например, это не помогает визуальному редактору добавить кнопку «Вставить карточку» на панель инструментов.

Глобальные означает, что код шаблона должен храниться в одном месте и быть используемым во всех вики.

Как сделать шаблоны семантическими
Шаблоны никогда не были как следует семантическими, в том смысле, что с ними легко обращаться программам, которые обрабатывают страницы.

Есть лишь несколько примеров шаблонов, которые были сделаны семантическими:


 * Различные шаблоны для сносок, которые можно использовать из кнопки «Источник» на панели инструментов Визуального редактора. Они требуют написания большого количества отдельного кода для настройки Citoid на каждом желающем использовать их вики-сайте.
 * Шаблон «Источник?» («citation needed»), которые был адаптирован для Visual Editor в конце 2019 года. Также требует настройки в каждом вики-сайте. Например: английский, иврит, словенский. На момент написания этой страницы, французский, испанский и большинство других языков не настроены для этого, хотя у них есть такие шаблоны.
 * Шаблоны для упоминания пользователей в расширении Flow, также требующие локальной конфигурации.
 * Некоторые инструменты для обработки дампов и исследований могут анализировать шаблоны оценки страниц вики-проектов Английской Википедии, которые обычно добавляются на страницы обсуждения.
 * Расширение GrowthExperiments предлагает редакторам выполнять определённые задания в статьях на основе включённых в них шаблонов. Названия шаблонов должны быть написаны вручную в JSON-файлах отдельно в каждом вики-сайте. Например: чешский, вьетнамский, корейский, арабский.
 * Расширение PageTriage настроено для работы с шаблонами предупреждений, в верхней части Английской Википедии (также известными как «tags» и «hatnotes»).

В случае PageTriage расширение по существу жёстко кодирует шаблоны одного вики-сайта, что делает его непригодным для использования в других сайтах без существенного переписывания. Даже если требуется лишь небольшой шаг конфигурации на вики, как в примере с Flow, это всё же необходимо сделать. Это не очень хорошо для 900 вики-сайтов, которые есть у Викимедиа, и тысяч, которые будут в будущем.

Эти вещи должны быть глобальными по умолчанию, чтобы их можно было сразу использовать по крайней мере в базовой конфигурации по умолчанию на всех вики одновременно расширениями, ботами, анализаторами дампов и т. д.

Хранение и доставка
Глобальные шаблоны и модули могут храниться в центральном вики-сайте (Мета, Викисклад или целый новый сайт), и это может быть даже Gerrit или другой репозиторий.

Наилучшим решением, вероятно, является создание нового вики-сайта, в котором они будут храниться, не путаясь с изображениями, общими обсуждениями сообщества и т. д.

Использование Gerrit в качестве хранилища для шаблонов и модулей кода технически возможно, но это может привести к потере важного элемента доступности для разработчиков шаблонов: редактирование шаблона на вики-странице гораздо проще и знакомо подавляющему большинству разработчиков шаблонов, чем выполнение коммитов в Git и ожидания пересмотра кода. Следовательно, Gerrit, вероятно, не должен стать способом хранения шаблона и кода модуля, по крайней мере, не основным.

Глобальные шаблоны и модули должны храниться в общем хранилище, которое может будет редактироваться большинством вики-редакторов. Правила о блокировках и специальных разрешениях изначально должны быть аналогичны правилам в других вики: всё должно быть открыто по умолчанию, и должна быть возможность защитить очень распространённые, чувствительные или часто вандализируемые шаблоны. Более подробные правила об уровнях защиты могут быть разработаны сообществом редакторов позже.

Каким образом шаблоны доставляются в целевые вики — вопрос внутренней инженерии и архитектуры, если учтены другие требования. Эти вопросы обсуждались в прошлом некоторыми разработчиками платформы, например, в рамках проекта Shadow namespaces. Этот документ пытается ответить на связанные вопросы о том, как это работает с точки зрения пользователя, который редактирует страницу, использующую шаблон, или разработчика самого шаблона — как написать его так, чтобы его можно было эффективно локализировать; как он переводится; как это подгоняется под нужды каждого сообщества; и т. д. Эти вопросы не были в достаточной степени рассмотрены в предыдущих архитектурных дискуссиях на эту тему.

Шаблоны должны оставаться легко модифицируемыми
Важной особенностью работы шаблонов в настоящее время является то, что они редактируются так же, как вики-страницы, и сразу становятся функциональными после публикации, без проверки другими участниками и без развёртывания. Это несколько опасно, потому что плохая правка может испортить много страниц, но на практике это работает в основном хорошо.

Эта лёгкость должна быть сохранена. Члены сообщества, которые разрабатывают шаблоны, скорее всего, откажутся от перехода на новую систему, требующую от них обучения совершенно новым навыкам и протаскивания каждого изменения через утомительные этапы проверки и развёртывания. Это, вероятно, значит, что хранение шаблонов в Gerrit не сможет хорошо работать, если процесс проверки и развёртывания не будет намного проще, чем для расширений.

Должно быть возможно сделать некоторые шаблоны неглобальными
Не все шаблоны надо делать глобальными.

Фактически, некоторые шаблоны должны быть локальными, потому что они реализуют функциональность, которая уникальна для определённого языка. По своей природе такие шаблоны не нужно переводить, и должен быть способ дать подсказку как редакторам-людям, так и инструментам перевода (таким как Перевод содержания), что они не нуждаются в адаптации и могут быть пропущены или подстановлены («subst»). Это часть усилий сделать шаблоны более семантическими.

Должна быть возможность переопределить некоторые функции или внешний вид глобального шаблона
Ни одно сообщество не должно чувствовать, что некий сильный внешний игрок, например сообщество Английской Википедии, сообщество Викиданных, Фонд Викимедиа, или кто-либо ещё навязывает ему какую-либо функциональность. Глобальные шаблоны должны разрабатываться и использоваться совместно для общего блага. Большую часть времени это должно работать для всех.

Иногда некоторые сообщества имеют твёрдое мнение о желании иметь определённую функциональность или дизайн, которые будут отличаться в их языках или проектах, или показывать карточку с информацией, отличной от той, что показывается в других проектах, или не показывать её вообще. Возможность локального переопределения должна быть разрешена с самого начала. (Точнее, её нельзя забирать.)

Глобальный шаблон должно быть возможно сразу использовать во всех вики
Подобно тому, как глобальная пользовательская страница сразу доступна во всех вики, в которых нет локальной пользовательской страницы, каждый шаблон или модуль, созданный в глобальной инфраструктуре, должно быть возможно немедленно использовать во всех вики.

Это не должно требовать никаких дополнительных шагов, например копирования вики-страниц, создания шаблонов-оболочек с локальным именем, вмешательства администратора, ожидания в течение нескольких часов для обновления кэшей и т. д.

После обновления центральной версии обновлённая версия будет немедленно показана везде. Чтобы предотвратить вандализм, сообщество редакторов разработает правила по разрешениям и уровням защиты.

Если строки (также известные, как «сообщения») пользовательского интерфейса не были переведены, шаблон всё равно будет пригоден для использования, и строки будут отображаться на резервном языке. Смотрите разделы по локализации для более подробной информации.

Должна быть возможность перевести все строки, обращённые к пользователю
Строки пользовательского интерфейса (сообщения) ядра MediaWiki, расширений и некоторых внешних инструментов, таких как Pageviews, удобно и надёжно переводятся на translatewiki.net. Этот процесс локализации знаком по крайней мере некоторым редакторам на всех языках.

В настоящее время невозможно делать то же самое с шаблонами. На многоязычных сайтах, таких как Commons и mediawiki.org, есть система « TNT» для перевода некоторых шаблонов, но она очень сложна и не может быть использована для Википедии, Викитеки и т. д.

В идеале, должна быть возможность переводить шаблоны так же, как ядро и расширения, используя вики с расширением Translate.

Переведённая строка должна стать пригодной для использования сразу после отправки перевода с использованием интерфейса Translate.

Можно позволить редактирование строк пользовательского интерфейса на текстовых вики-страницах, но в идеале они должны редактироваться главным образом через сделанный для этого интерфейс перевода.

Переводчики должны быть в состоянии сосредоточиться на переводе текста. Видя какой-либо код вокруг него, людям, не имеющим опыта с программированием и JSON-файлами, будет трудно вносить свой вклад. Кроме того, редактирование переводов на языки, написанные справа налево в текстовых файлах, крайне неудобно. Расширение Translate уже решает все эти проблемы.

Страницы документации шаблона тоже надо позволить переводить. В большинстве случаев достаточно делать это, используя функцию перевода страниц расширения Translate, но для этого могут потребоваться и некоторые изменения.

Язык, на котором строки показываются пользователю
Шаблоны в основном используются как часть содержания страниц, поэтому по умолчанию переведенные сообщения должны отображаться на языке вики.

Несмотря на это, некоторые шаблоны используются в качестве элементов интерфейса. Поэтому, возможно, имеет смысл также сделать возможным показ переведённых строк на языке пользователя, если он отличается от языка содержания вики. Это может быть особенно актуально для многоязычных сайтов, таких как Викисклад, Викиданные, Мета и mediawiki.org.

Обычные цепочки резервных языков MediaWiki должны использоваться, когда перевод недоступен. Например, если сообщение не переведено на кечуа или гуарани, оно будет отображаться по-испански, если оно не переведено на башкирский или чувашский языки, оно будет отображаться по-русски и т. д. Конечный резервный язык — английский, поэтому, если это сообщение не переведено на испанский или русский, оно будет отображаться на английском языке.

Ключи сообщений
Сообщения должны быть представлены в виде ключей, аналогично тому, как это делается в ядре MediaWiki, расширениях и инструментах.

Написание переводимых строк, вероятно, станет самым большим изменением в процессе разработки шаблонов, к которому должны будут привыкнуть разработчики шаблонов. Жёстко кодированные строки должны быть разделены и перемещены в сообщения, организованные по ключам. Этот процесс должен стать как можно более простым не только для переводчиков, но и для разработчиков шаблонов. В противном случае они не будут на самом деле заниматься этим, и эта функция будет фактически отклонена.

Чтобы легко сделать ключи глобально уникальными, возможно автоматически включить название глобального шаблона в ключ сообщения.

Инструменты для переноса
Можно разработать инструмент, который поможет переносить шаблон или модуль в центральное хранилище. Он сможет сделать следующие шаги:
 * 1) Экспортировать шаблон из локального вики-сайта и импортировать его в глобальный вики-сайт.
 * 2) Экспортировать все шаблоны, которые используются этим шаблоном (каскадно).
 * 3) Определить строки на человеческом языке, преобразовать их в список с ключами и замените их ключами в исходном коде шаблона.
 * 4) Импортировать страницу документации шаблона и TemplateData.

В большинстве случаев этот автоматический процесс, вероятно, не сможет создать полностью работоспособный и надёжный шаблон или модуль, но он может помочь начать процесс перехода.

Организация сообщений
Расширение Translate организует сообщения по группам, также известным как проекты, которые могут быть далее объединены по агрегатным группам. Например, Article Placeholder, Score и Poem — все группы, которые представляют соответствующие расширения MediaWiki, и все они включены в агрегатную группу «Extensions used by Wikimedia - Advanced», наряду со многими другими расширениями.

Проекты, которые представляют расширения MediaWiki, настраиваются в файлах YAML в репозитории translatewiki и отображаются в пользовательском интерфейсе Translate в селекторе проектов, также известном как селектор группы сообщений.

Поскольку шаблонов гораздо больше, чем расширений, могут потребоваться некоторые изменения в том, как расширение Translate обрабатывает группы сообщений, чтобы приспособить его к переводу шаблонов.

Каждый шаблон должен быть группой сообщений. Тесно связанные шаблоны должны быть сгруппированы в агрегатную группу сообщений. Они могут быть похожи на категории, в которых они хранятся, и фактически категории могут даже использоваться для этого. Редактирование файлов в репозитории Git для организации этих групп сообщений, вероятно, нежелательно, потому что это будет слишком сложно и медленно.

Было бы неплохо показывать имена групп и шаблонов как локализованные в селекторе, но достаточно и отображать их на английском языке. Если этого достаточно для локализаторов расширений, это достаточно и для локализаторов шаблонов.

Шаблоны должны отображаться в виде групп сообщений на специальной странице языковой статистики расширения Translate (Special:LanguageStats). Это поможет локализаторам найти, какие шаблоны нуждаются в переводе. Это должно быть в целом аналогично всем группам сообщений, но есть некоторые особые соображения для шаблонов:
 * Будет несколько тысяч шаблонов, поэтому было бы хорошо, если бы дизайн таблицы как-то соответствовал этому.
 * В таблице должно быть показано, на скольких страницах каждый шаблон используется, и должно быть возможно упорядочить строки по этому числу, чтобы помочь локализаторам выбрать, что важнее перевести.

Как найти, где переводится шаблон
На каждой странице описания шаблона должна быть прямая ссылка на перевод на язык пользователя.

Некоторые шаблоны используют названия (label) из Викиданных как часть своего интерфейса вместо жёстко кодируемых строк. В настоящее время это делается в Infobox Wikidata на Викискладе, Persona Infotaula (универсальная биографическая карточка) в Каталанской Википедии и в нескольких других шаблонах. Эти названия и значения могут быть локализованы в самих Викиданных. Такое использование не может покрыть все потребности локализации шаблонов, но оно является разумным и полезным, и соответствует для определённых целей. Если это внятно описано в документации шаблона, это можно продолжать использовать, и, вероятно, не требует специальной адаптации инфраструктуры. (Возможно, перевод соответствующих меток и значений может быть каким-то образом интегрирован в интерфейс Translate для локализации шаблона, но это необязательно.)

Параметры сообщений и волшебные слова
В ядре MediaWiki и расширениях многие сообщения имеют параметры, иногда также известные как «placeholders». Они называются $1, $2 и т. д., и они заполняются во время выполнения программы. Параметры особенно важны для того, чтобы было возможно правильно переводить сообщения, учитывая то, что в разных языках разный порядок слов.

Нечто подобное необходимо и в шаблонах, хотя, возможно, они будут выглядеть не как $1, $2, а как шаблоноподобные параметры с тройными фигурными скобками ( { – } ). Это должно быть решено в соответствии с соображениями удобства разбора (синтаксического анализа, «парсинга») и локализации.

Волшебные слова PLURAL, GENDER и GRAMMAR должны поддерживаться в сообщениях шаблонов, как в сообщениях MediaWiki.

Документация сообщений
В ядре MediaWiki и расширениях каждое переводимое сообщение документируется для удобства разработчиков и переводчиков. Документация может включать информацию о том, где сообщение показывается, что содержат параметры $1, $2 и т. д., является ли слово глаголом или прилагательным и т. д. Эта документация хранится как псевдо-язык с кодом qqq.

Такая документация будет полезна и для перевода шаблонов. Как она будет храниться — вопрос технической архитектуры: возможно, её можно комбинировать с TemplateData, возможно, она может храниться как язык qqq, и, возможно, это может делаться как-нибудь ещё.

Исходный язык
Шаблоны будут импортироваться в глобальное хранилище не только из англоязычных проектов, а из вики на многих языках. Инструменты локализации, как никогда ранее, должны будут поддерживать перевод с любого языка, а не только с английского.

Отметка устаревших сообщений (Fuzzying)
In core MediaWiki and extensions and in translatable pages, if the source message in English changes, the message is automatically marked as outdated or “fuzzy”. The existing translations continue to work, but are shown to translators as needing an update. (The translation manager can also mark a message as not needing fuzzying.)

A similar mechanism will be needed for template localization. However, since it would be nice not to force English as the source language, there should be more ways to mark messages as fuzzy.

Особенности локализации модулей
Lua modules can load and parse translatable MediaWiki strings, but there is no defined way for storing these strings for Lua modules that are maintained as wiki pages. It is possible to package Lua modules as parts of extensions, and then they are able to load messages from the extensions’ i18/*.json files, but this is done in very few extensions at the moment. Rewriting templates in Lua may be a more robust solution from the engineering point of view, but Lua will not necessarily be embraced by all existing template maintainers, and their cooperation will be crucial to the project’s success, so this cannot be done to all templates.

Some very internal, technical modules that are commonly used, rarely changed, and don’t require internationalization can probably be painlessly moved into the Scribunto extension itself. Some examples are No globals and Arguments.

Локализация названия шаблона
The template may have a different name in every language, but it must be directly connected to the central storage.

Global templates and modules are supposed to be immediately usable in all wikis without any extra steps, so it must be possible to transclude a global template in a local wiki page using its global name. The cross-wiki editors community shall decide what will be the policy for these global names.

Similarly to parameter names, templates may have different names in different languages, and this must be preserved. There must be a structured way to translate template names. Perhaps Wikidata sitelinks can play a role, but not necessarily.

If this is not done, editors will either avoid global templates, or wrap the global template in a local template with a translated name, and this will probably cause the template to lose the connection to the global entity. This is not desirable and misses the whole point of the project.

Template names must only be translated to languages that can be content languages of wikis. Translation to Formal German or British English are probably unnecessary. There may be a way to have aliases or redirects. Language variants, for example for Serbian and Chinese, must be supported according to these languages’ needs.

If a local template exists in a wiki and it has the same name as a localized name of a global template, the local template will be used. This is similar to how local files with identical names override global files on Commons, and how local messages in the MediaWiki space override the localization coming from the code.

Lua module names are often localized, too. Their names can be localized for direct invoking from wiki pages, but since code usually uses English-like identifiers, the internal global names should probably be preferred for use in the code itself, for example in  statements.

Локализация названий параметров
Parameter names are different in every language. They are usually based on words in each language, so it’s important for editing the transclusion in wiki syntax conveniently.

Ideally, the global template should have generic internal parameter names that have translations to different languages. This is somewhat similar to Wikidata property name labels, but it can be simpler: since English is a lingua franca for software developers and templates are a kind of software, it’s probably OK to have English as the default source language rather than generic numbers as it is in Wikidata.

These translations of parameter names must be validated:


 * they must not include invalid characters
 * they must not be repeated within one template in one language
 * Anything else?

The actual process of translating the parameter names may be different from translating user interface strings. These names have technical constraints, and they must remain stable because changing a name of parameter will break existing transclusions, so there should be some safeguards against this.

Автоматический перевод параметров
If the localized template names and all the localized parameter names are stored centrally, it will possible to have a simple service that gets a valid template with parameters, a source language name, and a target language name, and outputs a localized template. For example:

Ввод:

Вывод:

In visual editing and in 2017-style wiki syntax editing, simply copying and pasting a template from wiki in another language will do the parameter translation automatically.

For plain wiki syntax editing, there should be a simple way to operate this service, for example a special page or a dialog box where an editor can paste the template and the source language, and get the template with translated parameters.

In both cases only the names of the template and the parameters will be translated. Translating the parameter values is discussed separately.

Безымянные параметры
Nameless numbered parameters must continue working, of course.

A decision is needed about how will their names be localized.

Перевод значений параметров
In addition to making the templates’ functionality and design shared, some thought must be given to making the template parameter values shared, as well as not shared.

Some parameter values are the same in all languages by their nature. For example an IPA pronunciation of a place’s native name (e.g. [dɛn ˈɦaːx] for The Hague), the year of foundation of a city, the chemical formula of a compound, etc. At least some of these should probably be stored in Wikidata and easily loadable in a template.

Some parameter values have to be translated or transliterated, for example people’s names, translations of country mottos, etc.

Global templates must make this possible, but in practice, these things are still often copied across wikis, and this must be taken into account as well.

Some parameter values can be reliably and predictably converted automatically, and the global templates infrastructure must support this. For example, number formats and digit characters are often different in Burmese, in languages of India, and in some other languages, but they can be reliably converted using simple software.

Valid and functional parameter values must be usable in multiple languages and not language-specific. For example, using “yes” and “no” as boolean values is too English-centric. This probably doesn’t require changes in the infrastructure, but mostly an agreement in the cross-wiki template development community on good practices for adaptation to multiple languages.

Направление текста
Templates must adapt themselves to the text direction (ltr / rtl) of the wiki in which they are displayed.

It must be convenient to write a template in a direction-neutral way, with as little explicit right and left alignment as possible.

Боты
Many templates in many wikis are regularly edited by bots. This capability must be preserved.

This is not supposed to require any changes in the software infrastructure, but it is mentioned here for completeness because it’s an important use case.

Перенос шаблонов из крупных вики-сайтов в центральное хранилище
 וּמֵעֵבֶר לְשׁוּרַת הַבְּרוֹשִׁים עָבְרָה הָרַכֶּבֶת אֲבָל אֲנַחְנוּ רַק שָׁמַעְנוּ אוֹתָהּ, וְלֹא רָאִינוּ. וְכָל הַדְּבָרִים שֶׁדִּבָּרְנוּ בֵּינֵינוּ הִתְחִילוּ בַּמִּלִּים, „אֲבָל אֲנַחְנוּ”. —יהודה עמיחי The most popular source language for translation in Content Translation is English, by far. After it come Spanish, Russian, French, German, Catalan, Ukrainian, Italian, Chinese, and Portuguese. Because of this, it makes sense that the common templates in the editions of Wikipedia in these most common languages, especially those in English, are the ones that are the most important to make global for the benefit of all other languages.

Somewhat paradoxically, however, the editors in these largest languages are also the least interested in making them global:


 * The templates already work well for them and most people there don’t directly care about the convenience of translation to other languages.
 * Rewriting the templates so that the strings will be translatable may be time-consuming and may force them to learn some new template maintenance skills.
 * Making the templates suddenly used by many more projects may make it harder to achieve consensus about making future changes in how the templates work.
 * Editors from different major wikis will have to work on reaching consensus about merging some templates.

This is more of a consideration of practicality and community relations than a consideration of engineering, but it must be taken into account when making technical architectural decisions. Without doing proper preparation in this area, the whole project will fail.

As long as there are important common templates that are not global, Content Translation will have to keep supporting them. If the infrastructure for global templates is created, and migration of existing templates proceeds in a good pace, then Content Translation developers may consider stopping developing and some day deprecating the code for non-global template adaptation.

The pace of migrating templates from large wikis to the central repository can be one of the success metrics for the project.

Должно быть возможным полное использование шаблонов как в вики-тексте, так и в визуальном редактировании
It’s obvious, but should be mentioned anyway: Wiki syntax editing is not going away soon, and it must be possible to keep editing template transclusions in pages as it is done now. This must not become more complicated.

However, Visual Editor is increasingly embraced by both experienced and new editors, so every feature of how templates work must work well in both Visual Editor and wiki syntax editing.

Другие функции, связанные с шаблонами
There are some features that deal with templates in core MediaWiki and its extensions. All of them must continue working, and may need updating for the global templates age.

Ядро MediaWiki
There should be on-wiki tools for showing at least basic analysis of templates’ and modules’ usage on pages: the number of transclusions and invocations grouped by wiki, and lists of pages that use the templates and the modules. The feature that shows which templates does a page transclude while it’s being edited must continue working with global templates.

The What links here page must keep working, and remain useful for global transclusions.

TemplateData

 * It is possible to translate template and parameter descriptions in TemplateData, and the translations are displayed in the user interface language in Visual Editor’s template insertion dialog. This is good and must be preserved. The translation interface could possibly be improved, but the beginning is good. Adding support for TemplateData in the Translate extension can be a solution for this, but there can also be other solutions.
 * Wikitext format parameter (inline, block, custom) must keep working. It must also be possible to customize them per wiki—some wikis may prefer to see a certain template written in wiki syntax as one line, and some may prefer multiple lines.

TemplateStyles

 * There must be a possibility to write Template Styles pages in the same central repository as templates. The central style must be loaded by default, and it must be possible to override it locally.

TemplateSandbox

 * Special:TemplateSandbox must keep working.
 * It must be possible to edit a template in the central repository and preview it in a page in the target wiki.

TemplateWizard

 * The current system uses a wiki’s standard search to find templates. The results are presented in a list that might need to be changed to make the global or local status visible.
 * TemplateWizard gets its information for templates from the TemplateData API, so as long as that keeps returning the same structure there shouldn’t be any issues, and i18n is already working.

Wikibase

 * Wikidata can be used to bring in some parameter values from a central repository to the wiki. This is used productively in Wikipedia in several languages, among them French, Hebrew, Basque, Catalan, Estonian, and some others, as well as in Commons, although the actual implementation may differ. This must continue working, of course. Unifying the way in which it is done across different wikis may become one of this project’s most significant impact areas.
 * It may also make it much easier to implement Wikidata Bridge, the project to allow editing template values from within wikis. The modifications to the templates themselves will have to be done only once in the global templates, and not in each wiki.

VisualEditor (Визуальный редактор)

 * VisualEditor obviously needs to be able to insert both global and local templates.
 * VisualEditor shows a link to the template description page in the template editing dialog. This link should point directly to the global template when it is used.

Может быть желательно сделать шаблоны используемыми и на сайтах, не связанных с Викимедиа
Even though it doesn’t directly benefit Wikimedia projects, it may make sense to consider making templates easily reusable not only across Wikimedia projects, but also on other MediaWiki sites. Doing this will probably require some more work, but it may contribute to better modularization, and this may eventually benefit Wikimedia projects, too.

This is comparable to the capability of direct embedding of images from Commons on non-Wikimedia websites.

Представьте себе мир
Представьте себе мир, в котором каждый человек может свободно делиться всей суммой накопленных человечеством знаний, и это оказывается очень простоя задачей благодаря тому, что шаблоны стали глобальными:

(Note: The “With global templates” column assumes that the infrastructure is deployed in all Wikimedia wikis, and that the most often used templates are moved to the central infrastructure.)

Состояние
 А мы всё молчим, Мы всё считаем и ждём; Мы всё поём о себе, О чём же нам петь ещё? —Борис Гребенщиков As noted above, as of October 2019, this page is only an idea, and not a commitment to implement a project.

The Platform Evolution project (2018) indicated some intentions to have support for global templates in the future. The page Platform Evolution/Recommendations discusses ideas for updating content modularity, and says:
 * ... “boxes” are an ideal focus area for creating modularity. They represent self contained features and also an opportunity to enable equitable sharing of user features across projects and languages be establishing a cross-project service to share templates. This project will also force us to consider how to handle content layout and structure separately from composable pieces content.

The closely related page Platform Evolution/Goals lists this as one of the goals:
 * Increase equity and power of contribution tools. We want to support the contribution of more content types of content, including media, in more interactive ways and across all projects. This means making some existing tools - like templates - available for consistent reuse across all projects and languages. It also means improving translation tools to remove silos of content. Finally, we also want to make it easy for contributors to create new cross-project, localizable content tools.

Other than these goals, however, there is no detailed plan for how such a feature will work. This page is an attempt to propose such a plan and listen to feedback from editors.

Полезные ссылки
Некоторые относящиеся к этой теме страницы:
 * Platform Evolution/Goals
 * Platform Evolution/Recommendations
 * Multilingual Templates and Modules — Попытка реализовать подобную функцию с помощью ботов
 * meta:Community Wishlist Survey 2015/Results - Central Global Repository for Templates, Lua modules, and Gadgets Это желание заняло третье место в списке желаний сообщества. Внесено в список «В разработке - команда Parsing», но не выполнено.
 * meta:Which templates should be global? — неофициальный список, составленный различными редакторами
 * Requests for comment/Shadow namespaces — бездействующий RFC об одном из предложений по технической реализации такой инфраструктуры
 * Manual:$wgEnableScaryTranscluding — существующий элементарный механизм для переноса контента между проектами. Считается неэффективным и небезопасным, и отключен на проектах Викимедиа.
 * meta:Global-Wiki — аналогичное предложение, с более широким охватом. Было открыто для обсуждения в течение нескольких лет и закрыто с пометкой «есть консенсус». Некоторые вещи из него были реализованы, такие как глобальные пользовательские страницы и настройки, но там есть также глобальные шаблоны, которые ещё не сделаны.