<?php
function field_multilingual_settings_changed() {
field_info_cache_clear();
}
function field_available_languages($entity_type, $field) {
static $drupal_static_fast;
if (!isset($drupal_static_fast)) {
$drupal_static_fast['field_languages'] =& drupal_static(__FUNCTION__);
}
$field_languages =& $drupal_static_fast['field_languages'];
$field_name = $field['field_name'];
if (!isset($field_languages[$entity_type][$field_name])) {
if (field_is_translatable($entity_type, $field)) {
$languages = field_content_languages();
$context = array(
'entity_type' => $entity_type,
'field' => $field,
);
drupal_alter('field_available_languages', $languages, $context);
$field_languages[$entity_type][$field_name] = $languages;
}
else {
$field_languages[$entity_type][$field_name] = array(
LANGUAGE_NONE,
);
}
}
return $field_languages[$entity_type][$field_name];
}
function _field_language_suggestion($available_languages, $language_suggestion, $field_name) {
if (!empty($language_suggestion)) {
if (is_array($language_suggestion) && isset($language_suggestion[$field_name])) {
$language_suggestion = $language_suggestion[$field_name];
}
if (in_array($language_suggestion, $available_languages)) {
$available_languages = array(
$language_suggestion,
);
}
}
return $available_languages;
}
function field_content_languages() {
return array_keys(language_list() + array(
LANGUAGE_NONE => NULL,
));
}
function field_is_translatable($entity_type, $field) {
return $field['translatable'] && field_has_translation_handler($entity_type);
}
function field_has_translation_handler($entity_type, $handler = NULL) {
$entity_info = entity_get_info($entity_type);
if (isset($handler)) {
return !empty($entity_info['translation'][$handler]);
}
elseif (isset($entity_info['translation'])) {
foreach ($entity_info['translation'] as $handler_info) {
if (!empty($handler_info)) {
return TRUE;
}
}
}
return FALSE;
}
function field_valid_language($langcode, $default = TRUE) {
$enabled_languages = field_content_languages();
if (in_array($langcode, $enabled_languages)) {
return $langcode;
}
global $language_content;
return $default ? language_default('language') : $language_content->language;
}
function field_language($entity_type, $entity, $field_name = NULL, $langcode = NULL) {
$display_languages =& drupal_static(__FUNCTION__, array());
list($id, , $bundle) = entity_extract_ids($entity_type, $entity);
$langcode = field_valid_language($langcode, FALSE);
if (!isset($display_languages[$entity_type][$id][$langcode])) {
$display_language = array();
foreach (field_info_instances($entity_type, $bundle) as $instance) {
$display_language[$instance['field_name']] = isset($entity->{$instance['field_name']}[$langcode]) ? $langcode : LANGUAGE_NONE;
}
if (field_has_translation_handler($entity_type)) {
$context = array(
'entity_type' => $entity_type,
'entity' => $entity,
'language' => $langcode,
);
drupal_alter('field_language', $display_language, $context);
}
$display_languages[$entity_type][$id][$langcode] = $display_language;
}
$display_language = $display_languages[$entity_type][$id][$langcode];
if (isset($field_name)) {
return isset($display_language[$field_name]) ? $display_language[$field_name] : FALSE;
}
return $display_language;
}