Pass a preprocess variable to a template? In subtik.theme, I have:

/**
 * Implements template_preprocess_field().
 */
function subtik_preprocess_field(&amp;$variables) {
  if ($variables['field_name'] == 'field_language') {
    $variables['language'] = $variables['element']['#object']-&gt;get('field_language')-&gt;getString();
    ksm($variables['language']);
  }
}


All good. It dumps 'php' to my page, which is correct.

I also have, in field--node--field-body.html.twig, I have:

...
{{ kint(language) }}
...


Not so good. It dumps 'null' to my page. Why not 'php'?
At a glance it looks like you have a condition checking for:

if ($variables['field_name'] == 'field_language') {

but the template you are using is field--node--field-body.html.twig instead of field--node--field-language.html.twig.

To get it to pass to field body twig, you would need:

  if ($variables['field_name'] == 'field_body') {
    $variables['language'] = $variables['element']['#object']-&gt;get('field_language')-&gt;getString();
  }