Your best option is to use a taxonomy.
If EN, DE and FR are terms then you then loop through them and get the pages on a per term basis.
You can do this in conjunction with a plugin that enables you to manually re-order terms such as this one.
https://wordpress.org/plugins/i-order-terms/
You can then do something like this with your code:
// Get all of the terms in the taxonomy
$countries = get_terms( 'countries' );
// Check to ensure there are results returned
if ( !empty( $countries ) && !is_wp_error( $countries ) ) {
// Loop through the countries
foreach($countries as $country) {
$args = array(
'post_status' => 'publish',
'post_type' => 'page',
'countries' => $country->slug,
)
// Get all of the pages that have this term
$country_pages = new WP_Query($args);
// If there are results then print out the country's title and then a list of pages for that country.
if($country_pages->have_posts()) : ?>
<h2><?php echo $country->name; ?></h2>
<ul>
<?php
while($country_pages->have_posts()) : $country_pages->the_post(); ?>
<li><?php the_title() ?></li>
<?php endwhile;
// Ensure that the main query is reset
wp_reset_postdata(); ?>
</ul>
<?php
endif;
}
}