diff --git a/fb.module b/fb.module
index a68d7fc..3904512 100644
--- a/fb.module
+++ b/fb.module
@@ -1367,6 +1367,24 @@ function fb_permission() {
   );
 }
 
+/**
+ * Implements hook_language_negotiation_info().
+ */
+function fb_language_negotiation_info() {
+  return array(
+    'fb' => array(
+      'types' => array(LANGUAGE_TYPE_INTERFACE),
+      'callbacks' => array(
+        'language' => 'fb_get_lang'
+      ),
+      'weight' => 0,
+      'name' => t('Facebook locale'),
+      'description' => t('Facebook locale set by the user in canvas applications.'),
+      'cache' => 0,
+      'file' => drupal_get_path('module', 'fb') . '/fb.module'
+    )
+  );
+}
 
 /**
  * Implements hook_exit().
@@ -1419,6 +1437,21 @@ function fb_invoke($op, $data = NULL, $return = NULL, $hook = FB_HOOK) {
 }
 
 /**
+ * Helper function that gets the language currently used by the user in Facebook.
+ *
+ * @param mixed $languages List of valid and enable languages
+ * @return string Language code or boolean FALSE
+ */
+function fb_get_lang($langs) {
+  if ($lang = fb_settings(FB_SETTINGS_USER_LANG)) {
+    return $lang;
+  }
+  else {
+    return FALSE;
+  }
+}
+
+/**
  * This method will clean up URLs. When serving canvas pages, extra
  * information is included in URLs. This will remove the extra
  * information. Useful when linking back to the website from a canvas page or
@@ -1770,4 +1803,3 @@ function fb_access_denied() {
   drupal_access_denied();
   exit();
 }
-
diff --git a/fb_settings.inc b/fb_settings.inc
index e175267..cca3cce 100644
--- a/fb_settings.inc
+++ b/fb_settings.inc
@@ -27,6 +27,8 @@ define('FB_SETTINGS_FBU', 'fbu');
 define('FB_SETTINGS_TOKEN', 'token');
 define('FB_SETTINGS_TYPE', 'type'); // page type not same as cb type
 define('FB_SETTINGS_COOKIE_DOMAIN', 'cookie_domain');
+define('FB_SETTINGS_USER_LOCALE', 'user_locale');
+define('FB_SETTINGS_USER_LANG', 'user_language');
 
 // Possible values for page type.
 define('FB_SETTINGS_TYPE_CANVAS', 'canvas');
@@ -109,6 +111,12 @@ function _fb_settings_honor_signed_request($sr) {
     fb_settings(FB_SETTINGS_FBU, $sr['user_id']);
   }
 
+  if (!empty($sr['user']) && !empty($sr['user']['locale'])) {
+    fb_settings(FB_SETTINGS_USER_LOCALE, $sr['user']['locale']); // Full locale.
+    $lang = preg_replace('/_[A-Z]{2}/', '', $sr['user']['locale']);
+    fb_settings(FB_SETTINGS_USER_LANG, $lang); // Just the language, for Drupal API.
+  }
+
   if (isset($sr['oauth_token'])) {
     fb_settings(FB_SETTINGS_TOKEN, $sr['oauth_token']);
     if (!fb_settings(FB_SETTINGS_ID)) {
