129 lines
3.7 KiB
ReStructuredText
129 lines
3.7 KiB
ReStructuredText
=====================
|
|
Cross-channel Content
|
|
=====================
|
|
|
|
When creating the actual content, there's a number of questions to answer.
|
|
|
|
#. Where to take content from?
|
|
#. Which content to take?
|
|
#. Where to put the content?
|
|
#. What to put into each file?
|
|
|
|
Content Sources
|
|
---------------
|
|
|
|
The content of each revision in ``gecko-strings`` corresponds to a given
|
|
revision in each original repository. For example, we could have
|
|
|
|
+------------------+--------------+
|
|
| Repository | Revision |
|
|
+==================+==============+
|
|
| mozilla-central | 4c92802939c1 |
|
|
+------------------+--------------+
|
|
| mozilla-beta | ace4081e8200 |
|
|
+------------------+--------------+
|
|
| mozilla-release | 2cf08fbb92b2 |
|
|
+------------------+--------------+
|
|
| mozilla-esr68 | 2cf9e0c91d51 |
|
|
+------------------+--------------+
|
|
| comm-central | 3f3fc2c0d804 |
|
|
+------------------+--------------+
|
|
| comm-beta | f95a6f4408a3 |
|
|
+------------------+--------------+
|
|
| comm-release | dc2694f035fa |
|
|
+------------------+--------------+
|
|
| comm-esr68 | d05d4d87d25c |
|
|
+------------------+--------------+
|
|
|
|
The assumption is that there's no content that's shared between ``mozilla-*`` and
|
|
``comm-*``, so we can just convert one repository and its branches at a time.
|
|
|
|
Covered Content
|
|
---------------
|
|
|
|
Which content is included in ``gecko-strings`` is
|
|
controlled by the project configurations of each product, on each branch.
|
|
Currently, those are :file:`browser/locales/l10n.toml` and
|
|
:file:`mobile/android/locales/l10n.toml` in ``mozilla-central``.
|
|
|
|
Created Content Structure
|
|
-------------------------
|
|
|
|
The created content is laid out in the directory in the same structure as
|
|
the files in ``l10n-central``. The localizable files end up like this:
|
|
|
|
.. code-block:: text
|
|
|
|
browser/
|
|
browser/
|
|
browser.ftl
|
|
chrome/
|
|
browser.properties
|
|
toolkit/
|
|
toolkit/
|
|
about/aboutAbout.ftl
|
|
|
|
This matches the file locations in ``mozilla-central`` with the
|
|
:file:`locales/en-US` part dropped.
|
|
|
|
The project configuration files are also converted and added to the
|
|
created file structure. As they're commonly in the :file:`locales` folder
|
|
which we strip, they're added to the dedicated :file:`_configs` folder.
|
|
|
|
.. code-block:: bash
|
|
|
|
$ ls _configs
|
|
browser.toml devtools-client.toml devtools-shared.toml
|
|
mobile-android.toml toolkit.toml
|
|
|
|
|
|
L10n File Contents
|
|
------------------
|
|
|
|
Let's assume we have a file to localize in several revisions with different
|
|
content.
|
|
|
|
== ======= ==== =======
|
|
ID central beta release
|
|
== ======= ==== =======
|
|
a one one one
|
|
b two two
|
|
c three
|
|
d four old old
|
|
== ======= ==== =======
|
|
|
|
The algorithm then creates content, taking localizable values from the left-most
|
|
branch, where *central* overrides *beta*, and *beta* overrides *release*. This
|
|
creates content as follows:
|
|
|
|
== =======
|
|
ID content
|
|
== =======
|
|
a one
|
|
b two
|
|
c three
|
|
d four
|
|
== =======
|
|
|
|
If a file doesn't exist in one of the revisions, that revision is dropped
|
|
from the content generation for this particular file.
|
|
|
|
.. note::
|
|
|
|
The example of the forth string here highlights the impact that changing
|
|
an existing string has. We ship one translation of *four* to central,
|
|
beta, and release. That's only a good idea if it doesn't matter which of the
|
|
two versions of the English copy got translated.
|
|
|
|
Project configurations
|
|
----------------------
|
|
|
|
The TOML files for project configuration are processed, but not unified
|
|
across branches at this point.
|
|
|
|
.. note::
|
|
|
|
The content of the ``-central`` branch determines what's localized
|
|
from ``gecko-strings``. Thus that TOML file needs to include all
|
|
directories across all branches for now. Removing entries requires
|
|
that the content is obsolete on all branches in cross-channel.
|