function _locale_import_one_string_db

Import one string into the database.

Parameters

$report: Report array summarizing the number of changes done in the form: array(additions, deletes, skips, updates).

$langcode: Language code to import string into.

$context: The context of this string.

$source: Source string.

$translation: Translation to language specified in $langcode.

$textgroup: Name of textgroup to store translation in.

$location: Location value to save with source string.

$mode: Import mode to use, LOCALE_IMPORT_KEEP or LOCALE_IMPORT_OVERWRITE.

$plid: Optional plural ID to use.

$plural: Optional plural value to use.

Return value

The string ID of the existing string modified or the new string added.

Related topics

1 call to _locale_import_one_string_db()
_locale_import_one_string in includes/locale.inc
Imports a string into the database

File

includes/locale.inc, line 1119

Code

function _locale_import_one_string_db(&$report, $langcode, $context, $source, $translation, $textgroup, $location, $mode, $plid = 0, $plural = 0) {
    $lid = db_query("SELECT lid FROM {locales_source} WHERE source = :source AND context = :context AND textgroup = :textgroup", array(
        ':source' => $source,
        ':context' => $context,
        ':textgroup' => $textgroup,
    ))->fetchField();
    if (!empty($translation)) {
        // Skip this string unless it passes a check for dangerous code.
        // Text groups other than default still can contain HTML tags
        // (i.e. translatable blocks).
        if ($textgroup == "default" && !locale_string_is_safe($translation)) {
            $report['skips']++;
            $lid = 0;
        }
        elseif ($lid) {
            // We have this source string saved already.
            db_update('locales_source')->fields(array(
                'location' => $location,
            ))
                ->condition('lid', $lid)
                ->execute();
            $exists = db_query("SELECT COUNT(lid) FROM {locales_target} WHERE lid = :lid AND language = :language", array(
                ':lid' => $lid,
                ':language' => $langcode,
            ))->fetchField();
            if (!$exists) {
                // No translation in this language.
                db_insert('locales_target')->fields(array(
                    'lid' => $lid,
                    'language' => $langcode,
                    'translation' => $translation,
                    'plid' => $plid,
                    'plural' => $plural,
                ))
                    ->execute();
                $report['additions']++;
            }
            elseif ($mode == LOCALE_IMPORT_OVERWRITE) {
                // Translation exists, only overwrite if instructed.
                db_update('locales_target')->fields(array(
                    'translation' => $translation,
                    'plid' => $plid,
                    'plural' => $plural,
                ))
                    ->condition('language', $langcode)
                    ->condition('lid', $lid)
                    ->execute();
                $report['updates']++;
            }
        }
        else {
            // No such source string in the database yet.
            $lid = db_insert('locales_source')->fields(array(
                'location' => $location,
                'source' => $source,
                'context' => (string) $context,
                'textgroup' => $textgroup,
            ))
                ->execute();
            db_insert('locales_target')->fields(array(
                'lid' => $lid,
                'language' => $langcode,
                'translation' => $translation,
                'plid' => $plid,
                'plural' => $plural,
            ))
                ->execute();
            $report['additions']++;
        }
    }
    elseif ($mode == LOCALE_IMPORT_OVERWRITE) {
        // Empty translation, remove existing if instructed.
        db_delete('locales_target')->condition('language', $langcode)
            ->condition('lid', $lid)
            ->condition('plid', $plid)
            ->condition('plural', $plural)
            ->execute();
        $report['deletes']++;
    }
    return $lid;
}

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