class LocaleFile

Defines the locale file value object.

Hierarchy

Expanded class hierarchy of LocaleFile

5 files declare their use of LocaleFile
ImportForm.php in core/modules/locale/src/Form/ImportForm.php
locale.batch.inc in core/modules/locale/locale.batch.inc
locale.bulk.inc in core/modules/locale/locale.bulk.inc
LocaleSource.php in core/modules/locale/src/LocaleSource.php
LocaleTranslationDownloadTest.php in core/modules/locale/tests/src/Functional/LocaleTranslationDownloadTest.php

File

core/modules/locale/src/File/LocaleFile.php, line 11

Namespace

Drupal\locale\File
View source
final class LocaleFile {
  
  /**
   * The type of file, local, remote or current.
   *
   * @var string
   */
  public string $type;
  
  /**
   * The directory the file is in.
   *
   * @var string
   */
  public string $directory;
  
  /**
   * When the translation was last checked.
   *
   * @var string|null
   */
  // phpcs:ignore Drupal.NamingConventions.ValidVariableName.LowerCamelName
  public int $last_checked;
  
  /**
   * Creates a LocaleFile object for tracking translation information.
   *
   * @param string $filename
   *   The filename.
   * @param string $uri
   *   The uri of the file.
   * @param string $hash
   *   The hash using the LocaleSource::LOCAL_FILE_HASH_ALGO.
   * @param int|null $timestamp
   *   The filemtime of the uri.
   * @param string|null $langcode
   *   The langcode the translation is for.
   * @param string|null $project
   *   The project the translation is for.
   * @param string|null $version
   *   The project version the translation is for.
   */
  public function __construct(public string $filename, public string $uri, public string $hash, public ?int $timestamp = NULL, public ?string $langcode = NULL, public ?string $project = NULL, public ?string $version = NULL) {
  }
  
  /**
   * Creates a LocaleFile from the filepath.
   *
   * @param string $filename
   *   The filename of a file to import.
   * @param string $filepath
   *   The filepath of a file to import.
   * @param string|null $langcodeOverride
   *   The language code. Overrides the file language.
   *
   * @return self
   *   A LocaleFile.
   */
  public static function createFromPath(string $filename, string $filepath, ?string $langcodeOverride = NULL) : self {
    $project = NULL;
    $version = NULL;
    $hash = hash_file(LocaleSource::LOCAL_FILE_HASH_ALGO, $filepath);
    // 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 $langcodeOverride.
    // 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', $filename, $matches);
    if (isset($matches[5])) {
      $project = $matches[2] . $matches[3];
      $version = $matches[4];
      $langcode = $langcodeOverride ?? $matches[5];
    }
    else {
      $langcode = $langcodeOverride ?? LanguageInterface::LANGCODE_NOT_SPECIFIED;
    }
    return new self($filename, $filepath, $hash, filemtime($filepath), $langcode, $project, $version);
  }

}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.