class PoStreamWriter

Same name in other branches
  1. 8.9.x core/lib/Drupal/Component/Gettext/PoStreamWriter.php \Drupal\Component\Gettext\PoStreamWriter
  2. 10 core/lib/Drupal/Component/Gettext/PoStreamWriter.php \Drupal\Component\Gettext\PoStreamWriter
  3. 11.x core/lib/Drupal/Component/Gettext/PoStreamWriter.php \Drupal\Component\Gettext\PoStreamWriter

Defines a Gettext PO stream writer.

Hierarchy

Expanded class hierarchy of PoStreamWriter

2 files declare their use of PoStreamWriter
ExportForm.php in core/modules/locale/src/Form/ExportForm.php
PoStreamWriterTest.php in core/tests/Drupal/Tests/Component/Gettext/PoStreamWriterTest.php

File

core/lib/Drupal/Component/Gettext/PoStreamWriter.php, line 8

Namespace

Drupal\Component\Gettext
View source
class PoStreamWriter implements PoWriterInterface, PoStreamInterface {
    
    /**
     * URI of the PO stream that is being written.
     *
     * @var string
     */
    protected $uri;
    
    /**
     * The Gettext PO header.
     *
     * @var \Drupal\Component\Gettext\PoHeader
     */
    protected $header;
    
    /**
     * File handle of the current PO stream.
     *
     * @var resource
     */
    protected $fd;
    
    /**
     * The language code of this writer.
     *
     * @var string
     */
    protected $langcode;
    
    /**
     * Gets the PO header of the current stream.
     *
     * @return \Drupal\Component\Gettext\PoHeader
     *   The Gettext PO header.
     */
    public function getHeader() {
        return $this->header;
    }
    
    /**
     * Set the PO header for the current stream.
     *
     * @param \Drupal\Component\Gettext\PoHeader $header
     *   The Gettext PO header to set.
     */
    public function setHeader(PoHeader $header) {
        $this->header = $header;
    }
    
    /**
     * Gets the current language code used.
     *
     * @return string
     *   The language code.
     */
    public function getLangcode() {
        return $this->langcode;
    }
    
    /**
     * Set the language code.
     *
     * @param string $langcode
     *   The language code.
     */
    public function setLangcode($langcode) {
        $this->langcode = $langcode;
    }
    
    /**
     * {@inheritdoc}
     */
    public function open() {
        // Open in write mode. Will overwrite the stream if it already exists.
        $this->fd = fopen($this->getURI(), 'w');
        // Write the header at the start.
        $this->writeHeader();
    }
    
    /**
     * Implements Drupal\Component\Gettext\PoStreamInterface::close().
     *
     * @throws \Exception
     *   If the stream is not open.
     */
    public function close() {
        if ($this->fd) {
            fclose($this->fd);
        }
        else {
            throw new \Exception('Cannot close stream that is not open.');
        }
    }
    
    /**
     * Write data to the stream.
     *
     * @param string $data
     *   Piece of string to write to the stream. If the value is not directly a
     *   string, casting will happen in writing.
     *
     * @throws \Exception
     *   If writing the data is not possible.
     */
    private function write($data) {
        $result = fwrite($this->fd, $data);
        if ($result === FALSE || $result != strlen($data)) {
            throw new \Exception('Unable to write data: ' . substr($data, 0, 20));
        }
    }
    
    /**
     * Write the PO header to the stream.
     */
    private function writeHeader() {
        $this->write($this->header);
    }
    
    /**
     * {@inheritdoc}
     */
    public function writeItem(PoItem $item) {
        $this->write($item);
    }
    
    /**
     * {@inheritdoc}
     */
    public function writeItems(PoReaderInterface $reader, $count = -1) {
        $forever = $count == -1;
        while (($count-- > 0 || $forever) && ($item = $reader->readItem())) {
            $this->writeItem($item);
        }
    }
    
    /**
     * Implements Drupal\Component\Gettext\PoStreamInterface::getURI().
     *
     * @throws \Exception
     *   If the URI is not set.
     */
    public function getURI() {
        if (empty($this->uri)) {
            throw new \Exception('No URI set.');
        }
        return $this->uri;
    }
    
    /**
     * {@inheritdoc}
     */
    public function setURI($uri) {
        $this->uri = $uri;
    }

}

Members

Title Sort descending Modifiers Object type Summary Overriden Title
PoStreamWriter::$fd protected property File handle of the current PO stream.
PoStreamWriter::$header protected property The Gettext PO header.
PoStreamWriter::$langcode protected property The language code of this writer.
PoStreamWriter::$uri protected property URI of the PO stream that is being written.
PoStreamWriter::close public function Implements Drupal\Component\Gettext\PoStreamInterface::close(). Overrides PoStreamInterface::close
PoStreamWriter::getHeader public function Gets the PO header of the current stream. Overrides PoMetadataInterface::getHeader
PoStreamWriter::getLangcode public function Gets the current language code used. Overrides PoMetadataInterface::getLangcode
PoStreamWriter::getURI public function Implements Drupal\Component\Gettext\PoStreamInterface::getURI(). Overrides PoStreamInterface::getURI
PoStreamWriter::open public function Open the stream. Set the URI for the stream earlier with setURI(). Overrides PoStreamInterface::open
PoStreamWriter::setHeader public function Set the PO header for the current stream. Overrides PoMetadataInterface::setHeader
PoStreamWriter::setLangcode public function Set the language code. Overrides PoMetadataInterface::setLangcode
PoStreamWriter::setURI public function Set the URI of the PO stream that is going to be read or written. Overrides PoStreamInterface::setURI
PoStreamWriter::write private function Write data to the stream.
PoStreamWriter::writeHeader private function Write the PO header to the stream.
PoStreamWriter::writeItem public function Writes the given item. Overrides PoWriterInterface::writeItem
PoStreamWriter::writeItems public function Writes all or the given amount of items. Overrides PoWriterInterface::writeItems

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