function locale_url_outbound_alter

7.x locale.module locale_url_outbound_alter(&$path, &$options, $original_path)

Implements hook_url_outbound_alter().

Rewrite outbound URLs with language based prefixes.

3 string references to 'locale_url_outbound_alter'
LocaleUrlRewritingTest::setUp in drupal-7.x/modules/locale/locale.test
Sets up a Drupal site for running functional and integration tests.
PathLanguageTestCase::testAliasTranslation in drupal-7.x/modules/path/path.test
Test alias functionality through the admin interfaces.
TranslationTestCase::resetCaches in drupal-7.x/modules/translation/translation.test
Resets static caches to make the test code match the client-side behavior.

File

drupal-7.x/modules/locale/locale.module, line 1058
Add language handling functionality and enables the translation of the user interface to languages other than English.

Code

function locale_url_outbound_alter(&$path, &$options, $original_path) {
  // Only modify internal URLs.
  if (!$options['external'] && drupal_multilingual()) {
    static $drupal_static_fast;
    if (!isset($drupal_static_fast)) {
      $drupal_static_fast['callbacks'] = &drupal_static(__FUNCTION__);
    }
    $callbacks = &$drupal_static_fast['callbacks'];

    if (!isset($callbacks)) {
      $callbacks = array();
      include_once DRUPAL_ROOT . '/includes/language.inc';

      foreach (language_types_configurable() as $type) {
        // Get URL rewriter callbacks only from enabled language providers.
        $negotiation = variable_get("language_negotiation_$type", array());

        foreach ($negotiation as $id => $provider) {
          if (isset($provider['callbacks']['url_rewrite'])) {
            if (isset($provider['file'])) {
              require_once DRUPAL_ROOT . '/' . $provider['file'];
            }
            // Avoid duplicate callback entries.
            $callbacks[$provider['callbacks']['url_rewrite']] = TRUE;
          }
        }
      }

      $callbacks = array_keys($callbacks);
    }

    foreach ($callbacks as $callback) {
      $callback($path, $options);
    }

    // No language dependent path allowed in this mode.
    if (empty($callbacks)) {
      unset($options['language']);
    }
  }
}