I created simple widget to find out why you have such a problem. Everything is working fine. Below I give you my code as an example.
/**
* Register widget
*/
function wpse_287570_register_widget()
{
register_widget('WPSE_287570_Widget');
}
add_action('widgets_init', 'wpse_287570_register_widget');
/**
* Create widget
*/
class WPSE_287570_Widget extends WP_Widget {
public function __construct()
{
$op = array(
'name' => esc_html__( 'some title', 'wpse_287570' ),
'description' => esc_html__( 'some description goes here', 'wpse_287570' )
);
parent::__construct( 'wpse_287570_widget', '', $op );
}
}
/**
* Load the plugin translations
*/
function wpse_287570_load_textdomain() {
load_plugin_textdomain( 'wpse_287570', false, basename( dirname( __FILE__ ) ) . '/languages' );
}
add_action( 'plugins_loaded', 'wpse_287570_load_textdomain' );
I keep my translations in languages
directory in the main directory of my plugin. My translations files are named from textdomain and locale: wpse_287570-pl_PL.po
and wpse_287570-pl_PL.mo
.