Restrict translation and editing of node to one language Edit
I found this in Workbench Access issue queue:
https://www.drupal.org/project/workbench_access/issues/2982941#comment-12670744
It seems as if I need to deactivate the translate *bundle* *node* permissions, because if those are set, the permission will be short circuited and no other access restrictions may apply, and create a hole bunch of new *translate *bundle* *node* *language* permissions on my own. In my case we have 15 node types and 6 languages. That would result in 90 new permissions. That is overwhelming.
Original Question
I'm trying to restrict the access to creating and editing of nodes in the Drupal admin section to only one language for a user. I didn't find a module which provides for this feature. Is there any module that does this?
I then tried to create my own module. I came up with this solution
File: custom_i18n_access.module
&lt;?php

use Drupal\node\NodeInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Access\AccessResult;


/**
 * Implements hook_node_access().
 *
 * Prevent editor role to edit and/or delete fr/en nodes. Quick and dirty.
 */
function custom_i18n_access_node_access(NodeInterface $node, $op, AccountInterface $account)
{

    $roles = $account-&gt;getRoles();

    if (in_array('administrator', $roles)) {
        return AccessResult::neutral();
    }

    if ($op !== 'update' &amp;&amp; $op !== 'delete') {
        return AccessResult::neutral();
    }

    // Access should be restricted only if this permission is set
    if (!$account-&gt;hasPermission('custom_i18n_access_restrict')) {
        return AccessResult::neutral();
    }
    
    $current_language = \Drupal::languageManager()-&gt;getCurrentLanguage();
    $lang             = $current_language-&gt;getId();

    if ($account-&gt;hasPermission(&quot;custom_i18n_access_{$lang}_allow&quot;)) {
        return AccessResult::neutral();
    }
    return AccessResult::forbidden();
}


File: custom_i18n_access.permissions.yml
permission_callbacks:
  - Drupal\custom_i18n_access\Permissions::permissions

File: src/Permissions.php
&lt;?php

namespace Drupal\custom_i18n_access;

class Permissions {
    public function permissions() {
        $languages = \Drupal::languageManager()-&gt;getLanguages();

        $permissions[&quot;custom_i18n_access_restrict&quot;] = [
            'title' =&gt; t(&quot;Restrict language access&quot;),
            'description' =&gt; 'Restrict the edit access of nodes',
        ];

        foreach($languages as $lang) {
            $permissions[&quot;custom_i18n_access_{$lang-&gt;getId()}_allow&quot;] = [
                'title' =&gt; t(&quot;Allow to edit @lang content&quot;, ['@lang' =&gt; $lang-&gt;getName()]),
            ];
        }

        return $permissions;
    }
}  

This custom module successfully restricts the editing and deleting of existing content to only the language I specified in the permissions. But it does not prevent new translations of the content into  other languages.
As I see it, the HOOK_node_access hook is not called for every language when on the translations subtask page. How can I achieve this? Is there a different hook for that? I didn't find any help online.
I would suggest here checking NodeTranslationHandler class, in entityFormAlter you could find a way how to restrict a user from creating a new translation.