Extracts translations from PHP files, Twig templates and JavaScripts files.
This Drupal translation extractor stands on the shoulders of giants:
- https://www.drupal.org/project/potx
- https://www.drupal.org/project/translation_extractor
- https://symfony.com/doc/current/translation.html#extracting-translation-contents-and-updating-catalogs-automatically
composer require --dev itk-dev/drupal_translation_extractor:^1.0
drush pm:install drupal_translation_extractorThe main entrypoint is the drupal_translation_extractor:translation:extract Drush command. This command is basically
Symfony's translation:extract console
command
with a few changes and additions outlined below.
Changes from the Symfony command
The bundle argument doesn't make sense and has been removed.
The --clean option is a NOP since it doesn't make sense for our use. We
always write only existing translations.
A new argument has been added:
source The source path to extract translations from. For convenience, module:«name» and theme:«name» can be used
in the value and will be expanded to the full path to the module and/or theme respectively, i.e.
module:my_custom_module will be expanded to web/modules/custom/my_custom_module, say.
A couple of new option have been added:
--output The output path. The value can use these placeholders:
| Name | Value |
|---|---|
%locale |
The locale being extracted |
%module |
The module name if specified using module:… in source |
%source_dir |
The directory of %source |
%source |
The expanded value of source |
%theme |
The theme name if specified using theme:… in source |
%language1 |
Alias for %locale |
%project 1 |
Alias for either %module or %theme (whichever is set) |
--require-context[=context] If set, all translations must define a context. If a value is provided, e.g.
--require-context=my_module, then all translation must use my_module as context.
Tip
Use --debug along with --require-context to list any messages not using a valid context.
--finder-do-not-ignore-vcs-ignored If set, all finders will not ignore VCS ignored files.
Note
This option is (probably) mostly useful when developing Drupal modules using DDEV Drupal Contrib where the DDEV docroot is ignored. See https://www.drupal.org/project/views_data_export/issues/3508243 and ddev/ddev-drupal-contrib#25 (and ddev/ddev-drupal-contrib#177) for some details.
Running
drush drupal_translation_extractor:translation:extract da --dump-messages --force --output=%source/translation/%module.%locale.po module:my_modulewill find translations in all PHP, Twig and JavaScript files in the web/modules/custom/my_module directory and write
the result to web/modules/custom/my_module/translation/my_module.da.po.
Run
drush drupal_translation_extractor:translation:extract --helpto see all options and arguments.
Note
Much of the code in this module is stolen frombased on Symfony components and therefore we do not use Drupal coding
standards.
Footnotes
-
Matching placeholders used by the Locale module (cf. locale.api.php). ↩ ↩2