diff --git a/modules/workflow_access/workflow_access.module b/modules/workflow_access/workflow_access.module
index 2111d79..8fb5335 100644
--- a/modules/workflow_access/workflow_access.module
+++ b/modules/workflow_access/workflow_access.module
@@ -144,86 +144,92 @@ function workflow_access_get_role_gid($rid) {
  */
 function workflow_access_node_access_records(\Drupal\node\NodeInterface $node) {
   $grants = [];
-  $workflow_transitions_added = FALSE;
-
-  //if (!$node->isPublished()) {
-  //  // @todo: return;
-  //}
-
-  $entity_type = $node->getEntityTypeId();
-
-
-  // Only relevant for content with Workflow.
-  if (!isset($node->workflow_transitions)) {
-    $node->workflow_transitions = [];
-    // Sometimes, a node is saved without going through workflow_transition_form.
-    // E.g.,
-    // - when saving a node with workflow_node programmatically with node_save();
-    // - when changing a state on a node view page/history tab;
-    // - when rebuilding permissions via batch for Workflow Fields.
-    // In that case, we need to create the workflow_transitions ourselves to
-    // calculate the grants.
-    foreach (_workflow_info_fields($node, $entity_type) as $field) {
-      $field_name = $field->getName(); // Do not use id().
-      $old_sid = $new_sid = $node->$field_name->value;
-
-      // Create a dummy transition, just to set $node->workflow_transitions.
-      if ($old_sid) {
-        /* @var $transition WorkflowTransitionInterface */
-        $transition = WorkflowTransition::create([$old_sid, 'field_name' => $field_name]);
-        $transition->setTargetEntity($node);
-        $transition->setValues($new_sid, $node->getOwnerId(), \Drupal::time()->getRequestTime(), '');
-
-        // Store the transition, so it can be easily fetched later on.
-        // Store in an array, to prepare for multiple workflow_fields per entity.
-        // This is a.o. used in hook_entity_update to trigger 'transition post'.
-        $node->workflow_transitions[$field_name] = $transition;
-        $workflow_transitions_added = TRUE;
+
+  // Create grants for each translation of the node.
+  foreach ($node->getTranslationLanguages() as $langcode => $language) {
+    $translation = $node->getTranslation($langcode);
+
+    $workflow_transitions_added = FALSE;
+
+    //if (!$translation->isPublished()) {
+    //  // @todo: return;
+    //}
+
+    $entity_type = $translation->getEntityTypeId();
+
+    // Only relevant for content with Workflow.
+    if (!isset($translation->workflow_transitions)) {
+      $translation->workflow_transitions = [];
+      // Sometimes, a node is saved without going through workflow_transition_form.
+      // E.g.,
+      // - when saving a node with workflow_node programmatically with node_save();
+      // - when changing a state on a node view page/history tab;
+      // - when rebuilding permissions via batch for Workflow Fields.
+      // In that case, we need to create the workflow_transitions ourselves to
+      // calculate the grants.
+      foreach (_workflow_info_fields($translation, $entity_type) as $field) {
+        $field_name = $field->getName(); // Do not use id().
+        $old_sid = $new_sid = $translation->$field_name->value;
+
+        // Create a dummy transition, just to set $translation->workflow_transitions.
+        if ($old_sid) {
+          /* @var $transition WorkflowTransitionInterface */
+          $transition = WorkflowTransition::create([$old_sid, 'field_name' => $field_name]);
+          $transition->setTargetEntity($translation);
+          $transition->setValues($new_sid, $translation->getOwnerId(), \Drupal::time()->getRequestTime(), '');
+
+          // Store the transition, so it can be easily fetched later on.
+          // Store in an array, to prepare for multiple workflow_fields per entity.
+          // This is a.o. used in hook_entity_update to trigger 'transition post'.
+          $translation->workflow_transitions[$field_name] = $transition;
+          $workflow_transitions_added = TRUE;
+        }
       }
     }
-  }
 
-  // Get 'author' of this entity.
-  // - Some entities (e.g., taxonomy_term) do not have a uid.
-  // But then again: node_access is only for nodes...
-  $uid = ($node->getOwnerId()) ? (int) $node->getOwnerId() : 0;
-  $priority = workflow_access_get_setting('workflow_access_priority');
-
-  $count = 0;
-  foreach ($node->workflow_transitions as $transition) {
-    // @todo: add support for +1 workflows per entity.
-    if ($count++ == 1) {
-      continue;
-    }
+    // Get 'author' of this entity.
+    // - Some entities (e.g., taxonomy_term) do not have a uid.
+    // But then again: node_access is only for nodes...
+    $uid = ($translation->getOwnerId()) ? (int) $translation->getOwnerId() : 0;
+    $priority = workflow_access_get_setting('workflow_access_priority');
+
+    $count = 0;
+    foreach ($translation->workflow_transitions as $transition) {
+      // @todo: add support for +1 workflows per entity.
+      if ($count++ == 1) {
+        continue;
+      }
 
-    $field_name = $transition->getFieldName();
-    if ($current_sid = workflow_node_current_state($node, $field_name)) {
-      foreach (workflow_access_get_workflow_access_by_sid($current_sid) as $rid => $grant) {
-        $realm = ($uid > 0 && $rid == WORKFLOW_ROLE_AUTHOR_RID) ? 'workflow_access_owner' : 'workflow_access';
-        $gid = ($uid > 0 && $rid == WORKFLOW_ROLE_AUTHOR_RID) ? $uid : workflow_access_get_role_gid($rid);
-
-        // Anonymous ($uid == 0) author is not allowed for role 'author' (== -1).
-        // Both logically (Anonymous having more rights then authenticated)
-        // and technically: $gid must be a positive int.
-        if ($uid == 0 && $rid == WORKFLOW_ROLE_AUTHOR_RID) {
-          continue;
+      $field_name = $transition->getFieldName();
+      if ($current_sid = workflow_node_current_state($translation, $field_name)) {
+        foreach (workflow_access_get_workflow_access_by_sid($current_sid) as $rid => $grant) {
+          $realm = ($uid > 0 && $rid == WORKFLOW_ROLE_AUTHOR_RID) ? 'workflow_access_owner' : 'workflow_access';
+          $gid = ($uid > 0 && $rid == WORKFLOW_ROLE_AUTHOR_RID) ? $uid : workflow_access_get_role_gid($rid);
+
+          // Anonymous ($uid == 0) author is not allowed for role 'author' (== -1).
+          // Both logically (Anonymous having more rights then authenticated)
+          // and technically: $gid must be a positive int.
+          if ($uid == 0 && $rid == WORKFLOW_ROLE_AUTHOR_RID) {
+            continue;
+          }
+
+          $grants[] = [
+            'realm' => $realm,
+            'gid' => $gid,
+            'grant_view' => (int) $grant['grant_view'],
+            'grant_update' => (int) $grant['grant_update'],
+            'grant_delete' => (int) $grant['grant_delete'],
+            'priority' => $priority,
+            'langcode' => $langcode,
+            'field_name' => $field_name, // Just for analysis and info.
+          ];
         }
-
-        $grants[] = [
-          'realm' => $realm,
-          'gid' => $gid,
-          'grant_view' => (int) $grant['grant_view'],
-          'grant_update' => (int) $grant['grant_update'],
-          'grant_delete' => (int) $grant['grant_delete'],
-          'priority' => $priority,
-          // 'langcode' => $node->language(),
-          'field_name' => $field_name, // Just for analysis and info.
-        ];
       }
     }
-  }
-  if ($workflow_transitions_added == TRUE) {
-    unset($node->workflow_transitions);
+
+    if ($workflow_transitions_added == TRUE) {
+      unset($translation->workflow_transitions);
+    }
   }
 
   return $grants;
