Extract gettext calls from templates to a single PHP file that can then be used to create a
.pofile for translations.
A grunt task that parses gettext calls from twig (i18n Extension, Timber for Wordpress, or Drupal 8) files and creates a "dummy" PHP file with gettext calls.
The dummy file can then be parsed using grunt-pot to create a .pot or .po file.
Running the task in i18n mode on the following:
<!-- twig template with i18n extension -->
<span>{{ trans "my text" }}</span>
<div>
{% trans %}
other text with a {{ variable }}
{% endtrans %}
</div>
results in:
<?php
gettext('my text');
gettext('other text with a %variable%');Running the task in wordpress mode for the mydomain text domain on the following:
<!-- twig template for Timer -->
<span>{{ __('my text', 'mydomain') }}</span>
<span>{{ __('other text', 'otherdomain') }}</span>
results in:
<?php
gettext('my text');(Note that otherdomain translations are excluded.)
Running the task in drupal mode on the following:
<!-- Drupal 8 module twig template -->
<span>{{ 'my text'|t }}</span>
also results in:
<?php
gettext('my text');grunt-pot can subsequently be used to create a .pot file and update any existing .po files.
This plugin requires Grunt ~0.4.5
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-gettext-parser --save-devOnce the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-gettext-parser');In your project's Gruntfile, add a section named gettext_parser to the data object passed into grunt.initConfig().
grunt.initConfig({
gettext_parser: {
your_target: {
options: {
style: 'wordpress',
textdomain: 'mydomain',
// Changes the name of the rendered function. Defaults to `gettext`.
output_function: 'myFunction'
},
files: {
'path/to/output.php': ['views/**/*.twig']
}
},
},
});wordpress (default) i18n, or drupal.
Wordpress only: The textdomain to be parsed. gettext calls to other domains will be ignored. Set to null to parse all text domains.
gettext (default)
false (default)
Write the textdomain to the php file. Helpful for use with checktextdomain libraries.
In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using Grunt.