Extract gettext calls from templates to a single PHP file that can then be used to create a
.po
file 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-dev
Once 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.