You are here

function google_plusone_button_negotiate_language in Google Plus One Button | Google+ Badge 7

Same name and namespace in other branches
  1. 6 google_plusone.module \google_plusone_button_negotiate_language()

Returns an appropriated language code. If there is only one language codes in the admin settings, it will return that. If there are multiple ones, the language code returned is based on the current global $language variable.

There are some edge cases where Drupal language codes doesn't match with the ones used by Google +1 API. See:

*_locale_get_predefined_list() function in 'includes/locale.inc'

Parameters

$glanguages A string of lower-case language codes separated by commas.: Example: es,fr,pt-br,he

Return value

A Google +1 compatible language Code (string) or empty string. In this last case, Google will use 'en-US' language by default.

1 call to google_plusone_button_negotiate_language()
google_plusone_page_alter in ./google_plusone.module
Implements hook_page_alter(). Adds JavaScript to the appropriate scope/region of the page.

File

./google_plusone.module, line 311

Code

function google_plusone_button_negotiate_language($glanguages = array()) {
  global $language;
  $current_code = $language->language;
  $glanguages = explode(",", $glanguages);
  if (count($glanguages) === 1) {
    return $glanguages[0];
  }

  /* Note that Drupal uses lower-case language codes and in_array is case sensitive.
   * That's why in the submit hook of the admin settings form
   * the language codes contained in $glanguages are lower-case'd.
   */
  if (in_array($current_code, $glanguages, TRUE)) {
    return $current_code;
  }

  // Any other edge-case
  switch (drupal_substr($current_code, 0, 2)) {
    case 'en':
      return $current_code === 'en' ? 'en-US' : 'en-GB';
    case 'zh':
      return $current_code === 'zh-hans' ? 'zh-CN' : 'zh-TW';
    case 'he':
      return 'iw';
    case 'es':
      return 'es-419';

    // if didn't match before with 'es', then only other option is 'es-419'
    case 'nn':
      return 'no';
    case 'pt':
      return 'pt-PT';
    default:
      return '';
  }
}