This won't work because I think that you need the language object and not only the langcode.
The best way to do this I think it's to do it in a THEME_preprocess_node in your yourtheme.theme file :
SOLUTION 1 (get translation of the node and then get the proper link) :
function yourtheme_preprocess_node(&$vars) {
$node = &$vars['node'];
// TO HAVE NODE URL IN ANY OF YOUR NODE TEMPLATES FOR CURRENT LANGUAGE
$vars['node_url'] = $node->toUrl()->toString();
// SOLUTION 1
$node_de = $node->getTranslation('de');
if ($node_de && is_object($node_de)) {
$node_url = $node_de->toUrl()->toString();
$vars['node_url_de'] = $node_url;
}
}
SOLUTION 2 (get the url object of the node and then get translation of the url object) :
function yourtheme_preprocess_node(&$vars) {
$node = &$vars['node'];
// TO HAVE NODE URL IN ANY OF YOUR NODE TEMPLATES FOR CURRENT LANGUAGE
$vars['node_url'] = $node->toUrl()->toString();
// SOLUTION 2
$language_manager = \Drupal::service('language_manager');
$language_de = $language_manager->getLanguage('de');
$urlNodeObject = $node->toUrl();
$urlNodeObject->setOption('language', $language_de);
// IF YOU WANT AN ABSOLUTE URL
$urlNodeObject->setAbsolute();
$vars['node_url_de'] = $urlNodeObject->toString();
}
Although I put $vars['node_url'] = $node->toUrl()->toString();
to print {{ node_url }}
instead of {{ path('entity.node.edit_form', {'node': nid }) }}
because I think it's better.
Then in your TWIG template you just have to print {{ node_url_de }}
for your aliased german node link.