__init__.py |
|
129 |
_context.py |
Internal context for merging translation resources.
For the public interface, see `context.MigrationContext`.
|
12890 |
blame.py |
|
2493 |
changesets.py |
Order two changesets by their first commit date. |
1777 |
context.py |
Stateful context for merging translation resources.
`MigrationContext` must be configured with the target locale and the
directory locations of the input data.
The transformation takes four types of input data:
- The en-US FTL reference files which will be used as templates for
message order, comments and sections. If the reference_dir is None,
the migration will create Messages and Terms in the order given by
the transforms.
- The current FTL files for the given locale.
- A list of `FTL.Message` or `FTL.Term` objects some of whose nodes
are special helper or transform nodes:
helpers: VARIABLE_REFERENCE, MESSAGE_REFERENCE, TERM_REFERENCE
transforms: COPY, REPLACE_IN_TEXT, REPLACE, PLURALS, CONCAT
fluent value helper: COPY_PATTERN
The legacy (DTD, properties) translation files are deduced by the
dependencies in the transforms. The translations from these files will be
read from the localization_dir and transformed into FTL and merged
into the existing FTL files for the given language.
|
6307 |
errors.py |
|
313 |
evaluator.py |
An AST transformer for evaluating migration Transforms.
An AST transformer (i.e. a visitor capable of modifying the AST) which
walks an AST hierarchy and evaluates nodes which are migration Transforms.
|
859 |
helpers.py |
Fluent AST helpers.
The functions defined in this module offer a shorthand for defining common AST
nodes.
They take a string argument and immediately return a corresponding AST node.
(As opposed to Transforms which are AST nodes on their own and only return the
migrated AST nodes when they are evaluated by a MigrationContext.) |
5150 |
merge.py |
Transform legacy translations into FTL.
Use the `reference` FTL AST as a template. For each en-US string in the
reference, first check for an existing translation in the current FTL
`localization` and use it if it's present; then if the string has
a transform defined in the migration specification and if it's in the
currently processed changeset, evaluate the transform.
|
1808 |
repo_client.py |
Wrapper for calling command-line git in the `root` directory.
Raises an exception on any error, including a non-0 return code.
Returns the command's stdout as a string.
|
3541 |
tool.py |
Run the migration for the changeset, with the set of
this and all prior legacy translations.
|
5759 |
transforms.py |
Migration Transforms.
Transforms are AST nodes which describe how legacy translations should be
migrated. They are created inert and only return the migrated AST nodes when
they are evaluated by a MigrationContext.
All Transforms evaluate to Fluent Patterns. This makes them suitable for
defining migrations of values of message, attributes and variants. The special
CONCAT Transform is capable of joining multiple Patterns returned by evaluating
other Transforms into a single Pattern. It can also concatenate Pattern
elements: TextElements and Placeables.
The COPY, REPLACE and PLURALS Transforms inherit from Source which is a special
AST Node defining the location (the file path and the id) of the legacy
translation. During the migration, the current MigrationContext scans the
migration spec for Source nodes and extracts the information about all legacy
translations being migrated. For instance,
COPY('file.dtd', 'hello')
is equivalent to:
FTL.Pattern([
Source('file.dtd', 'hello')
])
Sometimes it's useful to work with text rather than (path, key) source
definitions. This is the case when the migrated translation requires some
hardcoded text, e.g. <a> and </a> when multiple translations become a single
one with a DOM overlay. In such cases it's best to use FTL.TextElements:
FTL.Message(
id=FTL.Identifier('update-failed'),
value=CONCAT(
COPY('aboutDialog.dtd', 'update.failed.start'),
FTL.TextElement('<a>'),
COPY('aboutDialog.dtd', 'update.failed.linkText'),
FTL.TextElement('</a>'),
COPY('aboutDialog.dtd', 'update.failed.end'),
)
)
The REPLACE_IN_TEXT Transform also takes TextElements as input, making it
possible to pass it as the foreach function of the PLURALS Transform. In the
example below, each slice of the plural string is converted into a
TextElement by PLURALS and then run through the REPLACE_IN_TEXT transform.
FTL.Message(
FTL.Identifier('delete-all'),
value=PLURALS(
'aboutDownloads.dtd',
'deleteAll',
VARIABLE_REFERENCE('num'),
lambda text: REPLACE_IN_TEXT(
text,
{
'#1': VARIABLE_REFERENCE('num')
}
)
)
)
|
20689 |
util.py |
Get message called `ident` from the `body` iterable. |
2853 |
validator.py |
Validate a migration recipe
Extract information from the migration recipe about which files to
migrate from, and which files to migrate to.
Also check for errors in the recipe, or bad API usage.
|
11043 |