diff --git a/file_entity.file.inc b/file_entity.file.inc
index 5e0b18f..8476262 100644
--- a/file_entity.file.inc
+++ b/file_entity.file.inc
@@ -203,16 +203,24 @@ function file_entitycache_file_load($files) {
 /**
  * Set the title / alt properties of file objects.
  *
- * @param array $files List of file entities.
+ * @param array $files
+ *   List of file entities.
+ * @param stdClass $language
+ *   (optional) A language object to use for translating the title and alt
+ *   properties. Defaults to the language of the current request.
  */
-function file_entity_set_title_alt_properties($files) {
+function file_entity_set_title_alt_properties($files, $language = NULL) {
+  if (!isset($language)) {
+    $language = $GLOBALS['language'];
+  }
+
   $alt = variable_get('file_entity_alt', '[file:field_file_image_alt_text]');
   $title = variable_get('file_entity_title', '[file:field_file_image_title_text]');
 
   $replace_options = array(
     'clear' => TRUE,
     'sanitize' => FALSE,
-    'language' => $GLOBALS['language'],
+    'language' => $language,
   );
 
   foreach ($files as $file) {
diff --git a/file_entity.file_api.inc b/file_entity.file_api.inc
index 39d643c..fd57054 100644
--- a/file_entity.file_api.inc
+++ b/file_entity.file_api.inc
@@ -241,6 +241,19 @@ function file_view_file($file, $displays = 'full', $langcode = NULL) {
   drupal_alter('file_displays', $displays, $file, $view_mode);
   _file_sort_array_by_weight($displays);
 
+  // Since $file->alt and $file->title were set in file_entity_file_load()
+  // (which is a language-agnostic hook) they will not be in the correct
+  // language if the file is being displayed in a language other than the
+  // default one. Set them again here, using the correct language. This must
+  // run after hook_file_displays_alter() since the Media module sets
+  // $file->alt and $file->title again during that hook.
+  if ($langcode != $GLOBALS['language_content']->language) {
+    $languages = language_list();
+    if (isset($languages[$langcode])) {
+      file_entity_set_title_alt_properties(array($file), $languages[$langcode]);
+    }
+  }
+
   // Attempt to display the file with each of the possible displays. Stop after
   // the first successful one. See file_displays() for details.
   $element = NULL;
