ILIAS  release_5-3 Revision v5.3.23-19-g915713cf615
Gettext\Extractors\Po Class Reference

Class to get gettext strings from php files returning arrays. More...

+ Inheritance diagram for Gettext\Extractors\Po:
+ Collaboration diagram for Gettext\Extractors\Po:

Static Public Member Functions

static fromString ($string, Translations $translations=null, $file='')
 Parses a .po file and append the translations found in the Translations instance. More...
 
static convertString ($value)
 Convert a string from its PO representation. More...
 
- Static Public Member Functions inherited from Gettext\Extractors\Extractor
static fromFile ($file, Translations $translations=null)
 Extract the translations from a file. More...
 
- Static Public Member Functions inherited from Gettext\Extractors\ExtractorInterface
static fromFile ($file, Translations $translations=null)
 Extract the translations from a file. More...
 

Static Private Member Functions

static isHeaderDefinition ($line)
 Checks if it is a header definition line. More...
 
static parseHeaders ($headers, Translations $translations)
 Parse the po headers. More...
 
static fixMultiLines ($line, array $lines, &$i)
 Gets one string from multiline strings. More...
 

Additional Inherited Members

- Static Protected Member Functions inherited from Gettext\Extractors\Extractor
static getFiles ($file)
 Checks and returns all files. More...
 
static readFile ($file)
 Reads and returns the content of a file. More...
 

Detailed Description

Class to get gettext strings from php files returning arrays.

Definition at line 11 of file Po.php.

Member Function Documentation

◆ convertString()

static Gettext\Extractors\Po::convertString (   $value)
static

Convert a string from its PO representation.

Parameters
string$value
Returns
string

Definition at line 212 of file Po.php.

References array.

213  {
214  if (!$value) {
215  return '';
216  }
217 
218  if ($value[0] === '"') {
219  $value = substr($value, 1, -1);
220  }
221 
222  return strtr(
223  $value,
224  array(
225  '\\\\' => '\\',
226  '\\a' => "\x07",
227  '\\b' => "\x08",
228  '\\t' => "\t",
229  '\\n' => "\n",
230  '\\v' => "\x0b",
231  '\\f' => "\x0c",
232  '\\r' => "\r",
233  '\\"' => '"',
234  )
235  );
236  }
Create styles array
The data for the language used.

◆ fixMultiLines()

static Gettext\Extractors\Po::fixMultiLines (   $line,
array  $lines,
$i 
)
staticprivate

Gets one string from multiline strings.

Parameters
string$line
array$lines
int&$i
Returns
string

Definition at line 188 of file Po.php.

References $i, and $t.

189  {
190  for ($j = $i, $t = count($lines); $j < $t; ++$j) {
191  if (substr($line, -1, 1) == '"'
192  && isset($lines[$j + 1])
193  && substr(trim($lines[$j + 1]), 0, 1) == '"'
194  ) {
195  $line = substr($line, 0, -1).substr(trim($lines[$j + 1]), 1);
196  } else {
197  $i = $j;
198  break;
199  }
200  }
201 
202  return $line;
203  }
$i
Definition: disco.tpl.php:19

◆ fromString()

static Gettext\Extractors\Po::fromString (   $string,
Translations  $translations = null,
  $file = '' 
)
static

Parses a .po file and append the translations found in the Translations instance.

{Parses a string and append the translations found in the Translations instance.

Parameters
string$string
Translations | null$translations
string$fileThe file path to insert the reference
Returns
Translations
}

Implements Gettext\Extractors\ExtractorInterface.

Definition at line 18 of file Po.php.

References $data, $i, $key, and $n.

19  {
20  if ($translations === null) {
21  $translations = new Translations();
22  }
23 
24  $lines = explode("\n", $string);
25  $i = 0;
26 
27  $translation = new Translation('', '');
28 
29  for ($n = count($lines); $i < $n; ++$i) {
30  $line = trim($lines[$i]);
31 
32  $line = self::fixMultiLines($line, $lines, $i);
33 
34  if ($line === '') {
35  if ($translation->is('', '')) {
36  self::parseHeaders($translation->getTranslation(), $translations);
37  } elseif ($translation->hasOriginal()) {
38  $translations[] = $translation;
39  }
40 
41  $translation = new Translation('', '');
42  continue;
43  }
44 
45  $splitLine = preg_split('/\s+/', $line, 2);
46  $key = $splitLine[0];
47  $data = isset($splitLine[1]) ? $splitLine[1] : '';
48 
49  switch ($key) {
50  case '#':
51  $translation->addComment($data);
52  $append = null;
53  break;
54 
55  case '#.':
56  $translation->addExtractedComment($data);
57  $append = null;
58  break;
59 
60  case '#,':
61  foreach (array_map('trim', explode(',', trim($data))) as $value) {
62  $translation->addFlag($value);
63  }
64  $append = null;
65  break;
66 
67  case '#:':
68  foreach (preg_split('/\s+/', trim($data)) as $value) {
69  if (preg_match('/^(.+)(:(\d*))?$/U', $value, $matches)) {
70  $translation->addReference($matches[1], isset($matches[3]) ? $matches[3] : null);
71  }
72  }
73  $append = null;
74  break;
75 
76  case 'msgctxt':
77  $translation = $translation->getClone(self::convertString($data));
78  $append = 'Context';
79  break;
80 
81  case 'msgid':
82  $translation = $translation->getClone(null, self::convertString($data));
83  $append = 'Original';
84  break;
85 
86  case 'msgid_plural':
87  $translation->setPlural(self::convertString($data));
88  $append = 'Plural';
89  break;
90 
91  case 'msgstr':
92  case 'msgstr[0]':
93  $translation->setTranslation(self::convertString($data));
94  $append = 'Translation';
95  break;
96 
97  case 'msgstr[1]':
98  $translation->setPluralTranslation(self::convertString($data), 0);
99  $append = 'PluralTranslation';
100  break;
101 
102  default:
103  if (strpos($key, 'msgstr[') === 0) {
104  $translation->setPluralTranslation(self::convertString($data), intval(substr($key, 7, -1)) - 1);
105  $append = 'PluralTranslation';
106  break;
107  }
108 
109  if (isset($append)) {
110  if ($append === 'Context') {
111  $translation = $translation->getClone($translation->getContext()."\n".self::convertString($data));
112  break;
113  }
114 
115  if ($append === 'Original') {
116  $translation = $translation->getClone(null, $translation->getOriginal()."\n".self::convertString($data));
117  break;
118  }
119 
120  if ($append === 'PluralTranslation') {
121  $key = count($translation->getPluralTranslation()) - 1;
122  $translation->setPluralTranslation($translation->getPluralTranslation($key)."\n".self::convertString($data), $key);
123  break;
124  }
125 
126  $getMethod = 'get'.$append;
127  $setMethod = 'set'.$append;
128  $translation->$setMethod($translation->$getMethod()."\n".self::convertString($data));
129  }
130  break;
131  }
132  }
133 
134  if ($translation->hasOriginal() && !in_array($translation, iterator_to_array($translations))) {
135  $translations[] = $translation;
136  }
137 
138  return $translations;
139  }
$n
Definition: RandomTest.php:85
$i
Definition: disco.tpl.php:19
$key
Definition: croninfo.php:18

◆ isHeaderDefinition()

static Gettext\Extractors\Po::isHeaderDefinition (   $line)
staticprivate

Checks if it is a header definition line.

Useful for distguishing between header definitions and possible continuations of a header entry.

Parameters
string$lineLine to parse
Returns
bool

Definition at line 149 of file Po.php.

150  {
151  return (bool) preg_match('/^[\w-]+:/', $line);
152  }

◆ parseHeaders()

static Gettext\Extractors\Po::parseHeaders (   $headers,
Translations  $translations 
)
staticprivate

Parse the po headers.

Parameters
string$headers
Translations$translations

Definition at line 160 of file Po.php.

References $header, Gettext\Translations\getHeader(), and Gettext\Translations\setHeader().

161  {
162  $headers = explode("\n", $headers);
163  $currentHeader = null;
164 
165  foreach ($headers as $line) {
166  $line = self::convertString($line);
167 
168  if (self::isHeaderDefinition($line)) {
169  $header = array_map('trim', explode(':', $line, 2));
170  $currentHeader = $header[0];
171  $translations->setHeader($currentHeader, $header[1]);
172  } else {
173  $entry = $translations->getHeader($currentHeader);
174  $translations->setHeader($currentHeader, $entry.$line);
175  }
176  }
177  }
+ Here is the call graph for this function:

The documentation for this class was generated from the following file: