public static function language_hierarchy_i18n_string_textgroup_default::load_translation in Language Hierarchy 7
Load translation from db
@todo Optimize when we've already got the source string
Overrides i18n_string_textgroup_default::load_translation
File
- includes/
language_hierarchy_i18n_string_textgroup_default.class.inc, line 16
Class
- language_hierarchy_i18n_string_textgroup_default
- Extends the default i18n string textgroup class providing language fallback.
Code
public static function load_translation($i18nstring, $langcode) {
$chain = language_hierarchy_get_ancestors($langcode);
if (empty($chain)) {
return parent::load_translation($i18nstring, $langcode);
}
$langcodes = array_values(array_merge(array(
$langcode,
), array_keys($chain)));
if (!empty($i18nstring->lid)) {
$query = db_select('locales_target', 't');
$query
->condition('t.lid', $i18nstring->lid);
}
else {
$query = db_select('i18n_string', 's')
->fields('s');
$query
->leftJoin('locales_target', 't', 's.lid = t.lid');
$query
->condition('s.textgroup', $i18nstring->textgroup);
$query
->condition('s.context', $i18nstring->context);
}
$query
->fields('t', array(
'translation',
'i18n_status',
));
if (drupal_static('language_hierarchy_i18n_show_language')) {
$query
->addField('t', 'language');
}
// The i18n module can save empty strings as translations. In this case, it
// behaves as there is no translation and uses the original strings.
// Handle this case by simple excluding of empty translations.
$query
->condition('t.translation', '', '<>');
// Pass all language chain instead of one given language.
$query
->condition('t.language', $langcodes, 'IN');
// Sort results according to the language chain order.
$order = '(CASE ';
foreach ($langcodes as $index => $lang) {
$order .= "WHEN t.language = '{$lang}' THEN {$index} ";
}
$order .= 'END)';
$query
->orderBy($order);
$query
->range(0, 1);
return $query
->execute()
->fetchObject();
}