function locale_translate_file_attach_properties
Generates file properties from filename and options.
An attempt is made to determine the translation language, project name and project version from the file name. Supported file name patterns are: {project}-{version}.{langcode}.po, {prefix}.{langcode}.po or {langcode}.po. Alternatively the translation language can be set using the $options.
Parameters
object $file: A file object of the gettext file to be imported.
array $options: An array with options:
- 'langcode': The language code. Overrides the file language.
Return value
object Modified file object.
2 calls to locale_translate_file_attach_properties()
- ImportForm::submitForm in core/
modules/ locale/ src/ Form/ ImportForm.php - Form submission handler.
- locale_translate_get_interface_translation_files in core/
modules/ locale/ locale.bulk.inc - Get interface translation files present in the translations directory.
File
-
core/
modules/ locale/ locale.bulk.inc, line 460
Code
function locale_translate_file_attach_properties($file, array $options = []) {
// If $file is a file entity, convert it to a stdClass.
if ($file instanceof FileInterface) {
$file = (object) [
'filename' => $file->getFilename(),
'uri' => $file->getFileUri(),
];
}
// Extract project, version and language code from the file name. Supported:
// {project}-{version}.{langcode}.po, {prefix}.{langcode}.po or {langcode}.po
preg_match('!
( # project OR project and version OR empty (group 1)
([a-z_]+) # project name (group 2)
\\. # .
| # OR
([a-z_]+) # project name (group 3)
\\- # -
([0-9a-z\\.\\-\\+]+) # version (group 4)
\\. # .
| # OR
) # (empty)
([^\\./]+) # language code (group 5)
\\. # .
po # po extension
$!x', $file->filename, $matches);
if (isset($matches[5])) {
$file->project = $matches[2] . $matches[3];
$file->version = $matches[4];
$file->langcode = $options['langcode'] ?? $matches[5];
}
else {
$file->langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED;
}
return $file;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.