Translatable modules

 How can we make the translation of Lua modules as convenient as the translation of MediaWiki and extensions on translatewiki.net?

This is an initial consultation about implementing Translatable modules. The goal of this document is to understand the needs of the developers and users of on-wiki Lua modules in a way that will inform the software engineers who will develop the improved solution.

Introduction
Translatable modules is a project to define, implement, document, and deploy a framework, to improve the ability to translate and share modules. The goal is for user interface strings (messages) in Scribunto modules on multilingual wiki sites, such as Wikidata and Commons, to be easily localized, similarly to core MediaWiki, extensions, and translatable pages.

The questions we have for the community members:
 * 1) Several options to organize the code and the messages are suggested here. What would be the best way to organize the module code?
 * 2) Once this framework is developed and deployed, will it be convenient to develop new modules using this framework and perhaps to convert existing modules to using it?
 * 3) Which existing modules would you prioritize translating?

If you mostly edit articles and other wiki pages, your user experience won’t be affected significantly, but your feedback is nevertheless welcome.

If you are involved in maintaining templates or Scribunto modules or in administering translatable pages, your user experience may change significantly in doing these tasks, so your feedback is very important.

Background
All Wikimedia projects have key features implemented as either or both wikitext templates and Lua modules: hatnotes, infoboxes, welcome messages, formatted links and references, image descriptions and license information, coordinates, and many others.

These templates and modules are a form of code. This code is developed by skilled, experienced members of the editing communities, and implements features that the communities want, need, and now regularly use. Though most are individually simple, collectively they are comparable in their complexity, criticality, and ubiquity to the code of MediaWiki extensions. Unlike extensions, however, templates and modules don’t have a robust, stable, and consistent framework for internationalization and localization, even though many of them are used in multiple languages.

All MediaWiki extensions and MediaWiki core are localized on translatewiki.net, where volunteer translators can conveniently see what messages (strings) in which components need translation into their language, and can translate them, without dealing with any code beyond simple wikitext. To use translatewiki.net they only ever need to know basic wiki syntax. The translatewiki.net software also checks the translation for technical validity and provides tools for updating outdated translations, translation statistics, searching, filtering, etc.

Conversely, templates or modules don’t have anything like this. If they are translatable at all, this is done by editing wiki pages with complex wiki syntax or Lua code. This process is error-prone, less discoverable, and considerably more difficult. Some templates are translatable as pages using the Translate extensions, which makes their localization experience similar for translators to the experience of localizing extensions, but the framework for doing this is not consistent for the template and module developers.

It is therefore desirable to make it possible to translate the human-readable user interface messages of modules and templates using a process that is comparable to the process of translating MediaWiki core and extensions.

Scope
The scope of this project only includes the translation of user interface messages used in modules, and only within a single wiki. This particularly pertains to Wikimedia sites that are already multilingual: Commons, Wikidata, Meta, mediawiki.org, Wikispecies, and others.

This current proposal does not deal with the following things:
 * Localization of templates. As mentioned above, this is closely related and probably desirable as well, but it is left for a later stage. The modules’ technology (Scribunto) is more autonomous, unlike templates, which are tightly integrated with core MediaWiki, and they have somewhat different localization requirements. However, the work on translatable modules should try to be forward compatible, so that whatever is done here will also be reusable for templates.
 * Localization of module titles and function identifiers. Templates and their parameters usually have names in the content language of the wiki. Unlike templates, modules are usually invoked from templates and only rarely directly from content pages or discussion pages. It is therefore not necessary to allow their translation. This project only deals with the internationalization and localization of the messages that the modules show to the readers.
 * Localization of gadgets. Similarly to templates, gadgets should be conveniently localizable, but their technology is significantly different. It may be good to make it reusable, but it’s not the highest priority for this project.
 * Using templates and modules across wikis (“Global templates”). This is desirable as well, and making modules robustly translatable will make the implementation of Global templates and modules much easier. This is not in the scope of the project described in this document, however. It makes sense to make modules translatable as one of the first steps towards global modules and templates, and the project should certainly try to be forward-compatible with global templates and modules, but it nevertheless stands on its own.
 * Data conversion. The conversion of digits (123 / ١٢٣ / १२३ / ၁၂၃), units (km / miles), script variants (Latin / Cyrillic Serbian, Simplified / Traditional Chinese, etc.), and so on are not a part of this project. These things are already handled by MediaWiki internationalization functions or by the code of modules and templates. This project is only about the user interface messages.