Shortcode returning localized HTML part

Using your comments, I found what I was missing. I initialized my textdomain with :

add_action('admin_init', 'related_post_shortcode_init');

function related_post_shortcode_init() {
  load_plugin_textdomain('related-post-shortcode', false, basename( dirname( __FILE__ ) ) . '/i18n' );
}

So, the textdomain was ok and ready for back-office translations (admin_init), but not for front, as @Mark Kaplun suggested.

I simply added another hook :

add_action('after_setup_theme', 'related_post_shortcode_init');