Interface language translation

This is one of the three pillars of the Drupal 8 Multilingual Initiative and focuses on the core functionality of locale.module from Drupal 7 relating to interface language translation. Think the backend behind t(), format_plural() and friends.

Although there is some support to establish an entirely new system for storing and referencing translatable strings (see http://groups.drupal.org/node/154394), there are much bigger problems in the other two pillars of the initiative to solve, so to set a reasonable target, we plan to keep t() and format_plural() as-is and instead focus this pillar on user problems like making it easier to pull in translations and developer problems like easier to grok APIs and decoupling of intertwined subcomponents.

In short this pillar of the initiative works off of English source strings at all times, which come from module/theme/distribution source code files. The strings are stored in the database and are made available for translation on the user interface. For community contributed projects, the strings are pre-parsed and made translatable on localize.drupal.org. The pre-translated text should be possible to be fed to Drupal 8 sites with just core automatically from localize.drupal.org like Drupal 7 with the added l10n_update module.

The main focus of planned changes are:

  • Fix bugs for the API and improve performance (speed up lookups, fix plural storage and lookup, etc)
  • Provide an API for the interface translations
  • Consolidate the .po file source directories that can be all around Drupal to one central directory
  • Automate the discovery and download of files to that central directory (integrate l10n_update module
    in core)
  • Decouple this system from configuration translation (remove support for textgroups), with upgrade path in the contributed i18n module where the feature was actually used
  • Improve the built-in editing interface for interface translations
  • Make this available under a new and more logical name like interface_translation.module or somesuch