function _locale_import_one_string
Imports a string into the database
Parameters
$op: Operation to perform: 'db-store', 'db-report', 'mem-store' or 'mem-report'.
$value: Details of the string stored.
$mode: Should existing translations be replaced LOCALE_IMPORT_KEEP or LOCALE_IMPORT_OVERWRITE.
$lang: Language to store the string in.
$file: Object representation of file being imported, only required when op is 'db-store'.
$group: Text group to import PO file into (eg. 'default' for interface translations).
Related topics
3 calls to _locale_import_one_string()
- st in includes/
install.inc - Translates a string when some systems are not available.
- _locale_import_po in includes/
locale.inc - Parses Gettext Portable Object file information and inserts into database
- _locale_import_read_po in includes/
locale.inc - Parses Gettext Portable Object file into an array
File
-
includes/
locale.inc, line 1015
Code
function _locale_import_one_string($op, $value = NULL, $mode = NULL, $lang = NULL, $file = NULL, $group = 'default') {
$report =& drupal_static(__FUNCTION__, array(
'additions' => 0,
'updates' => 0,
'deletes' => 0,
'skips' => 0,
));
$header_done =& drupal_static(__FUNCTION__ . ':header_done', FALSE);
$strings =& drupal_static(__FUNCTION__ . ':strings', array());
switch ($op) {
// Return stored strings
case 'mem-report':
return $strings;
// Store string in memory (only supports single strings)
case 'mem-store':
$strings[isset($value['msgctxt']) ? $value['msgctxt'] : ''][$value['msgid']] = $value['msgstr'];
return;
// Called at end of import to inform the user
case 'db-report':
return array(
$header_done,
$report['additions'],
$report['updates'],
$report['deletes'],
$report['skips'],
);
// Store the string we got in the database.
case 'db-store':
// We got header information.
if ($value['msgid'] == '') {
$languages = language_list();
if ($mode != LOCALE_IMPORT_KEEP || empty($languages[$lang]->plurals)) {
// Since we only need to parse the header if we ought to update the
// plural formula, only run this if we don't need to keep existing
// data untouched or if we don't have an existing plural formula.
$header = _locale_import_parse_header($value['msgstr']);
// Get and store the plural formula if available.
if (isset($header["Plural-Forms"]) && ($p = _locale_import_parse_plural_forms($header["Plural-Forms"], $file->uri))) {
list($nplurals, $plural) = $p;
db_update('languages')->fields(array(
'plurals' => $nplurals,
'formula' => $plural,
))
->condition('language', $lang)
->execute();
}
}
$header_done = TRUE;
}
else {
// Some real string to import.
$comments = _locale_import_shorten_comments(empty($value['#']) ? array() : $value['#']);
if (strpos($value['msgid'], "\x00")) {
// This string has plural versions.
$english = explode("\x00", $value['msgid'], 2);
$entries = array_keys($value['msgstr']);
for ($i = 3; $i <= count($entries); $i++) {
$english[] = $english[1];
}
$translation = array_map('_locale_import_append_plural', $value['msgstr'], $entries);
$english = array_map('_locale_import_append_plural', $english, $entries);
foreach ($translation as $key => $trans) {
if ($key == 0) {
$plid = 0;
}
$plid = _locale_import_one_string_db($report, $lang, isset($value['msgctxt']) ? $value['msgctxt'] : '', $english[$key], $trans, $group, $comments, $mode, $plid, $key);
}
}
else {
// A simple string to import.
$english = $value['msgid'];
$translation = $value['msgstr'];
_locale_import_one_string_db($report, $lang, isset($value['msgctxt']) ? $value['msgctxt'] : '', $english, $translation, $group, $comments, $mode);
}
}
}
// end of db-store operation
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.