Commit 3205a267 authored by webchick's avatar webchick
Browse files

#282191 follow-up by plach: Remove ambitious parts of translatable fields UI...

#282191 follow-up by plach: Remove ambitious parts of translatable fields UI from core that are no longer relevant, given what made it into Drupal 7.
parent a2232c40
...@@ -189,12 +189,12 @@ ...@@ -189,12 +189,12 @@
/** /**
* The type of language used to define the content language. * The type of language used to define the content language.
*/ */
define('LANGUAGE_TYPE_CONTENT', 'language'); define('LANGUAGE_TYPE_CONTENT', 'language_content');
/** /**
* The type of language used to select the user interface. * The type of language used to select the user interface.
*/ */
define('LANGUAGE_TYPE_INTERFACE', 'language_interface'); define('LANGUAGE_TYPE_INTERFACE', 'language');
/** /**
* The type of language used for URLs. * The type of language used for URLs.
...@@ -1379,12 +1379,12 @@ function drupal_unpack($obj, $field = 'data') { ...@@ -1379,12 +1379,12 @@ function drupal_unpack($obj, $field = 'data') {
* The translated string. * The translated string.
*/ */
function t($string, array $args = array(), array $options = array()) { function t($string, array $args = array(), array $options = array()) {
global $language_interface; global $language;
static $custom_strings; static $custom_strings;
// Merge in default. // Merge in default.
if (empty($options['langcode'])) { if (empty($options['langcode'])) {
$options['langcode'] = isset($language_interface->language) ? $language_interface->language : 'en'; $options['langcode'] = isset($language->language) ? $language->language : 'en';
} }
if (empty($options['context'])) { if (empty($options['context'])) {
$options['context'] = ''; $options['context'] = '';
...@@ -2081,8 +2081,8 @@ function drupal_language_initialize() { ...@@ -2081,8 +2081,8 @@ function drupal_language_initialize() {
*/ */
function drupal_language_types() { function drupal_language_types() {
return array( return array(
LANGUAGE_TYPE_CONTENT => TRUE,
LANGUAGE_TYPE_INTERFACE => TRUE, LANGUAGE_TYPE_INTERFACE => TRUE,
LANGUAGE_TYPE_CONTENT => FALSE,
LANGUAGE_TYPE_URL => FALSE, LANGUAGE_TYPE_URL => FALSE,
); );
} }
......
...@@ -37,17 +37,34 @@ function language_types_info() { ...@@ -37,17 +37,34 @@ function language_types_info() {
* whose negotiation values are unchangeable and defined while defining the * whose negotiation values are unchangeable and defined while defining the
* language type itself. * language type itself.
* *
* @param $stored
* Optional. By default retrieves values from the 'language_types' variable to
* avoid unnecessary hook invocations.
* If set to FALSE retrieves values from the actual language type definitions.
* This allows to react to alterations performed on the definitions by modules
* installed after the 'language_types' variable is set.
*
* @return * @return
* An array of language type names. * An array of language type names.
*/ */
function language_types_configurable() { function language_types_configurable($stored = TRUE) {
$configurable = &drupal_static(__FUNCTION__); $configurable = &drupal_static(__FUNCTION__);
if (!isset($configurable)) { if ($stored && !isset($configurable)) {
$types = variable_get('language_types', drupal_language_types()); $types = variable_get('language_types', drupal_language_types());
$configurable = array_keys(array_filter($types)); $configurable = array_keys(array_filter($types));
} }
if (!$stored) {
$result = array();
foreach (language_types_info() as $type => $info) {
if (!isset($info['fixed'])) {
$result[] = $type;
}
}
return $result;
}
return $configurable; return $configurable;
} }
......
...@@ -41,12 +41,12 @@ ...@@ -41,12 +41,12 @@
*/ */
/** /**
* Identify the language from the current content language. * Identifies the language from the current interface language.
* *
* @return * @return
* The current content language code. * The current interface language code.
*/ */
function locale_language_from_content() { function locale_language_from_interface() {
global $language; global $language;
return isset($language->language) ? $language->language : FALSE; return isset($language->language) ? $language->language : FALSE;
} }
......
...@@ -969,7 +969,7 @@ function menu_tree_all_data($menu_name, $link = NULL, $max_depth = NULL) { ...@@ -969,7 +969,7 @@ function menu_tree_all_data($menu_name, $link = NULL, $max_depth = NULL) {
// Use $mlid as a flag for whether the data being loaded is for the whole tree. // Use $mlid as a flag for whether the data being loaded is for the whole tree.
$mlid = isset($link['mlid']) ? $link['mlid'] : 0; $mlid = isset($link['mlid']) ? $link['mlid'] : 0;
// Generate a cache ID (cid) specific for this $menu_name, $link, $language, and depth. // Generate a cache ID (cid) specific for this $menu_name, $link, $language, and depth.
$cid = 'links:' . $menu_name . ':all-cid:' . $mlid . ':' . $GLOBALS['language_interface']->language . ':' . (int)$max_depth; $cid = 'links:' . $menu_name . ':all-cid:' . $mlid . ':' . $GLOBALS['language']->language . ':' . (int)$max_depth;
if (!isset($tree[$cid])) { if (!isset($tree[$cid])) {
// If the static variable doesn't have the data, check {cache_menu}. // If the static variable doesn't have the data, check {cache_menu}.
...@@ -1081,7 +1081,7 @@ function menu_tree_page_data($menu_name, $max_depth = NULL) { ...@@ -1081,7 +1081,7 @@ function menu_tree_page_data($menu_name, $max_depth = NULL) {
$max_depth = min($max_depth, MENU_MAX_DEPTH); $max_depth = min($max_depth, MENU_MAX_DEPTH);
} }
// Generate a cache ID (cid) specific for this page. // Generate a cache ID (cid) specific for this page.
$cid = 'links:' . $menu_name . ':page-cid:' . $item['href'] . ':' . $GLOBALS['language_interface']->language . ':' . (int)$item['access'] . ':' . (int)$max_depth; $cid = 'links:' . $menu_name . ':page-cid:' . $item['href'] . ':' . $GLOBALS['language']->language . ':' . (int)$item['access'] . ':' . (int)$max_depth;
if (!isset($tree[$cid])) { if (!isset($tree[$cid])) {
// If the static variable doesn't have the data, check {cache_menu}. // If the static variable doesn't have the data, check {cache_menu}.
...@@ -1229,7 +1229,7 @@ function menu_tree_page_data($menu_name, $max_depth = NULL) { ...@@ -1229,7 +1229,7 @@ function menu_tree_page_data($menu_name, $max_depth = NULL) {
* Helper function - compute the real cache ID for menu tree data. * Helper function - compute the real cache ID for menu tree data.
*/ */
function _menu_tree_cid($menu_name, $data) { function _menu_tree_cid($menu_name, $data) {
return 'links:' . $menu_name . ':tree-data:' . $GLOBALS['language_interface']->language . ':' . md5(serialize($data)); return 'links:' . $menu_name . ':tree-data:' . $GLOBALS['language']->language . ':' . md5(serialize($data));
} }
/** /**
......
...@@ -44,7 +44,7 @@ function drupal_path_initialize() { ...@@ -44,7 +44,7 @@ function drupal_path_initialize() {
* found. * found.
*/ */
function drupal_lookup_path($action, $path = '', $path_language = NULL) { function drupal_lookup_path($action, $path = '', $path_language = NULL) {
global $language; global $language_content;
// Use the advanced drupal_static() pattern, since this is called very often. // Use the advanced drupal_static() pattern, since this is called very often.
static $drupal_static_fast; static $drupal_static_fast;
if (!isset($drupal_static_fast)) { if (!isset($drupal_static_fast)) {
...@@ -71,7 +71,7 @@ function drupal_lookup_path($action, $path = '', $path_language = NULL) { ...@@ -71,7 +71,7 @@ function drupal_lookup_path($action, $path = '', $path_language = NULL) {
} }
} }
$path_language = $path_language ? $path_language : $language->language; $path_language = $path_language ? $path_language : $language_content->language;
if ($action == 'wipe') { if ($action == 'wipe') {
$cache = array(); $cache = array();
......
...@@ -132,8 +132,8 @@ function field_multilingual_valid_language($langcode, $default = TRUE) { ...@@ -132,8 +132,8 @@ function field_multilingual_valid_language($langcode, $default = TRUE) {
if (in_array($langcode, $enabled_languages)) { if (in_array($langcode, $enabled_languages)) {
return $langcode; return $langcode;
} }
global $language; global $language_content;
$langcode = $default ? language_default('language') : $language->language; $langcode = $default ? language_default('language') : $language_content->language;
if (in_array($langcode, $enabled_languages)) { if (in_array($langcode, $enabled_languages)) {
return $langcode; return $langcode;
} }
......
...@@ -479,7 +479,7 @@ function locale_languages_configure_form() { ...@@ -479,7 +479,7 @@ function locale_languages_configure_form() {
$form = array( $form = array(
'#submit' => array('locale_languages_configure_form_submit'), '#submit' => array('locale_languages_configure_form_submit'),
'#theme' => 'locale_languages_configure_form', '#theme' => 'locale_languages_configure_form',
'#language_types' => language_types_configurable(), '#language_types' => language_types_configurable(FALSE),
'#language_types_info' => language_types_info(), '#language_types_info' => language_types_info(),
'#language_providers' => language_negotiation_info(), '#language_providers' => language_negotiation_info(),
); );
...@@ -504,7 +504,7 @@ function _locale_languages_configure_form_language_table(&$form, $type) { ...@@ -504,7 +504,7 @@ function _locale_languages_configure_form_language_table(&$form, $type) {
$info = $form['#language_types_info'][$type]; $info = $form['#language_types_info'][$type];
$table_form = array( $table_form = array(
'#title' => t('@type', array('@type' => $info['name'])), '#title' => t('@type language detection', array('@type' => $info['name'])),
'#tree' => TRUE, '#tree' => TRUE,
'#description' => $info['description'], '#description' => $info['description'],
'#language_providers' => array(), '#language_providers' => array(),
...@@ -667,9 +667,10 @@ function locale_languages_configure_form_submit($form, &$form_state) { ...@@ -667,9 +667,10 @@ function locale_languages_configure_form_submit($form, &$form_state) {
if (isset($info['fixed'])) { if (isset($info['fixed'])) {
$language_types[$type] = FALSE; $language_types[$type] = FALSE;
$negotiation = array(); $negotiation = array();
foreach ($info['fixed'] as $id) { foreach ($info['fixed'] as $weight => $id) {
if (isset($defined_providers[$id])) { if (isset($defined_providers[$id])) {
$negotiation[$id] = $defined_providers[$id]; $negotiation[$id] = $defined_providers[$id];
$negotiation[$id]['weight'] = $weight;
} }
} }
language_negotiation_set($type, $negotiation); language_negotiation_set($type, $negotiation);
......
...@@ -57,6 +57,8 @@ function hook_language_switch_links_alter(array &$links, $type, $path) { ...@@ -57,6 +57,8 @@ function hook_language_switch_links_alter(array &$links, $type, $path) {
* the following key-value pairs: * the following key-value pairs:
* - "name": The human-readable language type identifier. * - "name": The human-readable language type identifier.
* - "description": A description of the language type. * - "description": A description of the language type.
* - "fixed": An array of language provider identifiers. Defining this key
* makes the language type non-configurable.
*/ */
function hook_language_types_info() { function hook_language_types_info() {
return array( return array(
...@@ -64,6 +66,9 @@ function hook_language_types_info() { ...@@ -64,6 +66,9 @@ function hook_language_types_info() {
'name' => t('Custom language'), 'name' => t('Custom language'),
'description' => t('A custom language type.'), 'description' => t('A custom language type.'),
), ),
'fixed_custom_language_type' => array(
'fixed' => array('custom_language_provider'),
),
); );
} }
......
...@@ -70,10 +70,9 @@ function locale_update_7001() { ...@@ -70,10 +70,9 @@ function locale_update_7001() {
break; break;
} }
// Save new language negotiation options: UI language is tied to content // Save new language negotiation options.
// language as this was Drupal 6 behavior. language_negotiation_set(LANGUAGE_TYPE_INTERFACE, array_flip($negotiation));
language_negotiation_set(LANGUAGE_TYPE_CONTENT, array_flip($negotiation)); language_negotiation_set(LANGUAGE_TYPE_CONTENT, array(LOCALE_LANGUAGE_NEGOTIATION_INTERFACE => 0));
language_negotiation_set(LANGUAGE_TYPE_INTERFACE, array(LOCALE_LANGUAGE_NEGOTIATION_CONTENT => 0));
language_negotiation_set(LANGUAGE_TYPE_URL, array(LOCALE_LANGUAGE_NEGOTIATION_URL => 0)); language_negotiation_set(LANGUAGE_TYPE_URL, array(LOCALE_LANGUAGE_NEGOTIATION_URL => 0));
// Unset the old language negotiation system variable. // Unset the old language negotiation system variable.
......
...@@ -24,9 +24,9 @@ ...@@ -24,9 +24,9 @@
define('LOCALE_LANGUAGE_NEGOTIATION_BROWSER', 'locale-browser'); define('LOCALE_LANGUAGE_NEGOTIATION_BROWSER', 'locale-browser');
/** /**
* The language is determined using the current content language. * The language is determined using the current interface language.
*/ */
define('LOCALE_LANGUAGE_NEGOTIATION_CONTENT', 'locale-content'); define('LOCALE_LANGUAGE_NEGOTIATION_INTERFACE', 'locale-interface');
/** /**
* The language is set based on the user language settings. * The language is set based on the user language settings.
...@@ -69,7 +69,7 @@ function locale_help($path, $arg) { ...@@ -69,7 +69,7 @@ function locale_help($path, $arg) {
case 'admin/config/regional/language/add': case 'admin/config/regional/language/add':
return '<p>' . t('Add a language to be supported by your site. If your desired language is not available in the <em>Language name</em> drop-down, click <em>Custom language</em> and provide a language code and other details manually. When providing a language code manually, be sure to enter a standardized language code, since this code may be used by browsers to determine an appropriate display language.') . '</p>'; return '<p>' . t('Add a language to be supported by your site. If your desired language is not available in the <em>Language name</em> drop-down, click <em>Custom language</em> and provide a language code and other details manually. When providing a language code manually, be sure to enter a standardized language code, since this code may be used by browsers to determine an appropriate display language.') . '</p>';
case 'admin/config/regional/language/configure': case 'admin/config/regional/language/configure':
$output = '<p>' . t("Define how to decide which language is used to display content (text that you create and edit) and user interface text (text provided by Drupal and modules, such as field labels and help text). This decision is made by evaluating a series of detection methods for languages; the first detection method that gets a result will determine which language is used for that type of text. Define the order of evaluation of language detection methods on this page.") . '</p>'; $output = '<p>' . t("Define how to decide which language is used to display page elements (primarily text provided by Drupal and modules, such as field labels and help text). This decision is made by evaluating a series of detection methods for languages; the first detection method that gets a result will determine which language is used for that type of text. Define the order of evaluation of language detection methods on this page.") . '</p>';
return $output; return $output;
case 'admin/config/regional/language/configure/session': case 'admin/config/regional/language/configure/session':
$output = '<p>' . t('Determine the language from a request/session parameter. Example: "http://example.com?language=de" sets language to German based on the use of "de" within the "language" parameter.') . '</p>'; $output = '<p>' . t('Determine the language from a request/session parameter. Example: "http://example.com?language=de" sets language to German based on the use of "de" within the "language" parameter.') . '</p>';
...@@ -466,17 +466,26 @@ function locale_entity_info_alter(&$entity_info) { ...@@ -466,17 +466,26 @@ function locale_entity_info_alter(&$entity_info) {
/** /**
* Implements hook_language_types_info(). * Implements hook_language_types_info().
*
* Defines the three core language types:
* - Interface language is the only configurable language type in core. It is
* used by t() as the default language if none is specified.
* - Content language is by default non-configurable and inherits the interface
* language negotiated value. It is used by the Field API to determine the
* display language for fields if no explicit value is specified.
* - URL language is by default non-configurable and is determined through the
* URL language provider. It is used by l() as the default language if none is
* specified.
*/ */
function locale_language_types_info() { function locale_language_types_info() {
return array( return array(
LANGUAGE_TYPE_CONTENT => array(
'name' => t('Content language detection'),
'description' => t('Order of language detection methods for content. If a version of content is available in the detected language, it will be displayed.'),
),
LANGUAGE_TYPE_INTERFACE => array( LANGUAGE_TYPE_INTERFACE => array(
'name' => t('User interface text language detection'), 'name' => t('User interface text'),
'description' => t('Order of language detection methods for user interface text. If a translation of user interface text is available in the detected language, it will be displayed.'), 'description' => t('Order of language detection methods for user interface text. If a translation of user interface text is available in the detected language, it will be displayed.'),
), ),
LANGUAGE_TYPE_CONTENT => array(
'fixed' => array(LOCALE_LANGUAGE_NEGOTIATION_INTERFACE),
),
LANGUAGE_TYPE_URL => array( LANGUAGE_TYPE_URL => array(
'fixed' => array(LOCALE_LANGUAGE_NEGOTIATION_URL), 'fixed' => array(LOCALE_LANGUAGE_NEGOTIATION_URL),
), ),
...@@ -534,13 +543,13 @@ function locale_language_negotiation_info() { ...@@ -534,13 +543,13 @@ function locale_language_negotiation_info() {
'description' => t("Determine the language from the browser's language settings."), 'description' => t("Determine the language from the browser's language settings."),
); );
$providers[LOCALE_LANGUAGE_NEGOTIATION_CONTENT] = array( $providers[LOCALE_LANGUAGE_NEGOTIATION_INTERFACE] = array(
'types' => array(LANGUAGE_TYPE_INTERFACE), 'types' => array(LANGUAGE_TYPE_CONTENT),
'callbacks' => array('language' => 'locale_language_from_content'), 'callbacks' => array('language' => 'locale_language_from_interface'),
'file' => $file, 'file' => $file,
'weight' => 8, 'weight' => 8,
'name' => t('Content'), 'name' => t('Interface'),
'description' => t('Use the detected content language.'), 'description' => t('Use the detected interface language.'),
); );
return $providers; return $providers;
......
...@@ -965,11 +965,11 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase { ...@@ -965,11 +965,11 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
/** /**
* The default language set for the UI before uninstall. * The default language set for the UI before uninstall.
*/ */
protected $language_interface; protected $language;
function setUp() { function setUp() {
parent::setUp('locale'); parent::setUp('locale');
$this->language_interface = 'en'; $this->language = 'en';
} }
/** /**
...@@ -980,12 +980,12 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase { ...@@ -980,12 +980,12 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
// Add a new language and optionally set it as default. // Add a new language and optionally set it as default.
require_once DRUPAL_ROOT . '/includes/locale.inc'; require_once DRUPAL_ROOT . '/includes/locale.inc';
locale_add_language('fr', 'French', 'Français', LANGUAGE_LTR, '', '', TRUE, $this->language_interface == 'fr'); locale_add_language('fr', 'French', 'Français', LANGUAGE_LTR, '', '', TRUE, $this->language == 'fr');
// Check the UI language. // Check the UI language.
drupal_language_initialize(); drupal_language_initialize();
global $language_interface; global $language;
$this->assertEqual($language_interface->language, $this->language_interface, t('Current language: %lang', array('%lang' => $language_interface->language))); $this->assertEqual($language->language, $this->language, t('Current language: %lang', array('%lang' => $language->language)));
// Enable multilingual workflow option for articles. // Enable multilingual workflow option for articles.
variable_set('language_content_type_article', 1); variable_set('language_content_type_article', 1);
...@@ -1031,7 +1031,7 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase { ...@@ -1031,7 +1031,7 @@ class LocaleUninstallFunctionalTest extends DrupalWebTestCase {
// Check the init language logic. // Check the init language logic.
drupal_language_initialize(); drupal_language_initialize();
$this->assertEqual($language_interface->language, 'en', t('Language after uninstall: %lang', array('%lang' => $language_interface->language))); $this->assertEqual($language->language, 'en', t('Language after uninstall: %lang', array('%lang' => $language->language)));
// Check JavaScript files deletion. // Check JavaScript files deletion.
$this->assertTrue($result = !file_exists($js_file), t('JavaScript file deleted: %file', array('%file' => $result ? $js_file : t('found')))); $this->assertTrue($result = !file_exists($js_file), t('JavaScript file deleted: %file', array('%file' => $result ? $js_file : t('found'))));
...@@ -1091,7 +1091,7 @@ class LocaleUninstallFrenchFunctionalTest extends LocaleUninstallFunctionalTest ...@@ -1091,7 +1091,7 @@ class LocaleUninstallFrenchFunctionalTest extends LocaleUninstallFunctionalTest
function setUp() { function setUp() {
parent::setUp(); parent::setUp();
$this->language_interface = 'fr'; $this->language = 'fr';
} }
} }
...@@ -1122,8 +1122,9 @@ class LanguageSwitchingFunctionalTest extends DrupalWebTestCase { ...@@ -1122,8 +1122,9 @@ class LanguageSwitchingFunctionalTest extends DrupalWebTestCase {
*/ */
function testLanguageBlock() { function testLanguageBlock() {
// Enable the language switching block. // Enable the language switching block.
$language_type = LANGUAGE_TYPE_INTERFACE;
$edit = array( $edit = array(
'locale_language[region]' => 'sidebar_first', "locale_{$language_type}[region]" => 'sidebar_first',
); );
$this->drupalPost('admin/structure/block', $edit, t('Save blocks')); $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
...@@ -1136,14 +1137,14 @@ class LanguageSwitchingFunctionalTest extends DrupalWebTestCase { ...@@ -1136,14 +1137,14 @@ class LanguageSwitchingFunctionalTest extends DrupalWebTestCase {
// Set language negotiation. // Set language negotiation.
drupal_load('module', 'locale'); drupal_load('module', 'locale');
include_once DRUPAL_ROOT . '/includes/language.inc'; include_once DRUPAL_ROOT . '/includes/language.inc';
language_negotiation_set(LANGUAGE_TYPE_CONTENT, locale_language_negotiation_info()); language_negotiation_set($language_type, locale_language_negotiation_info());
// Assert that the language switching block is displayed on the frontpage. // Assert that the language switching block is displayed on the frontpage.
$this->drupalGet(''); $this->drupalGet('');
$this->assertText(t('Languages'), t('Language switcher block found.')); $this->assertText(t('Languages'), t('Language switcher block found.'));
// Assert that only the current language is marked as active. // Assert that only the current language is marked as active.
list($language_switcher) = $this->xpath('//div[@id="block-locale-language"]/div[@class="content"]'); list($language_switcher) = $this->xpath("//div[@id=\"block-locale-{$language_type}\"]/div[@class=\"content\"]");
$links = array( $links = array(
'active' => array(), 'active' => array(),
'inactive' => array(), 'inactive' => array(),
...@@ -1815,9 +1816,9 @@ class LocalizeDateFormatsFunctionalTest extends DrupalWebTestCase { ...@@ -1815,9 +1816,9 @@ class LocalizeDateFormatsFunctionalTest extends DrupalWebTestCase {
$this->drupalPost('admin/config/regional/language/add', $edit, t('Add language')); $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
// Set language negotiation. // Set language negotiation.
$language_type = LANGUAGE_TYPE_INTERFACE;
$edit = array( $edit = array(
'language[enabled][locale-url]' => TRUE, "{$language_type}[enabled][locale-url]" => TRUE,
'language_interface[enabled][locale-url]' => TRUE,
); );
$this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings')); $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
......
...@@ -1290,52 +1290,6 @@ function node_build_content($node, $view_mode = 'full') { ...@@ -1290,52 +1290,6 @@ function node_build_content($node, $view_mode = 'full') {
module_invoke_all('node_view', $node, $view_mode); module_invoke_all('node_view', $node, $view_mode);
} }
/**
* Implements hook_language_negotiation_info().
*/
function node_language_negotiation_info() {
$providers = array();
$providers['node-language'] = array(
'types' => array(LANGUAGE_TYPE_CONTENT),
'callbacks' => array('language' => 'node_language_provider'),
'file' => drupal_get_path('module', 'node') . '/node.module',
'name' => t('Content'),
'description' => t('Use the language of the displayed content.'),
);
return $providers;
}
/**
* Return the language of the current node.
*
* @param $languages
* An array of valid language objects.
*
* @return
* A valid language code on success, FALSE otherwise.
*/
function node_language_provider($languages) {
require_once DRUPAL_ROOT . '/' . variable_get('path_inc', 'includes/path.inc');
$path = isset($_GET['q']) ? $_GET['q'] : '';
list($language, $path) = language_url_split_prefix($path, $languages);
$language = $language ? $language : language_default();
$path = drupal_get_normal_path($path, $language->language);
// We cannot use args now.
$path = explode('/', $path);
// Act only if we are in a node page.
if (isset($path[0]) && isset($path[1]) && $path[0] == 'node' && $nid = intval($path[1])) {
// We cannot perform a node load here.
$result = db_query('SELECT n.language FROM {node} n WHERE n.nid = :nid', array(':nid' => $nid))->fetchAssoc();
return $result['language'];
}
return FALSE;
}
/** /**
* Generate an array which displays a node detail page. * Generate an array which displays a node detail page.
* *
......
...@@ -182,7 +182,7 @@ function translation_form_alter(&$form, &$form_state, $form_id) { ...@@ -182,7 +182,7 @@ function translation_form_alter(&$form, &$form_state, $form_id) {
function translation_node_view($node, $view_mode) { function translation_node_view($node, $view_mode) {
if (isset($node->tnid) && $translations = translation_node_get_translations($node->tnid)) { if (isset($node->tnid) && $translations = translation_node_get_translations($node->tnid)) {
$path = 'node/' . $node->nid; $path = 'node/' . $node->nid;
$links = language_negotiation_get_switch_links(LANGUAGE_TYPE_CONTENT, $path); $links = language_negotiation_get_switch_links(LANGUAGE_TYPE_INTERFACE, $path);
if (is_object($links)) { if (is_object($links)) {
$links = $links->links; $links = $links->links;
// Do not show link to the same node. // Do not show link to the same node.
...@@ -440,7 +440,7 @@ function translation_path_get_translations($path) { ...@@ -440,7 +440,7 @@ function translation_path_get_translations($path) {