How to safely return the HTML?

Ok, so this is why it’s important to post the actual code that’s giving you problems.

There is nothing wrong with this, which is all you had originally:

return '<button type="button" class="btn btn-success">Open Now</button>';

If that was the error, you could ignore it.

This, on the other hand, does need to be escaped:

$wppl_open = __('Open Now','arika');
return '<button type="button" class="btn btn-success">.'$wppl_open'.</button>';

The value of $wppl_open can’t be trusted, because it can be affected by something from the outside by the user. A poorly configured or written translation file could cause this HTML to break, or worse, a malicious translation file could make this code unsafe. Also, the quotes are in the wrong place.

So you need to escape $wppl_open (and fix the quotes):

$wppl_open = __('Open Now','arika');
return '<button type="button" class="btn btn-success">' . esc_html( $wppl_open ) . '</button>';

Alternatively, you can perform the escaping at the same time as the translation function by using esc_html__():

$wppl_open = esc_html__('Open Now','arika');
return '<button type="button" class="btn btn-success">' . $wppl_open . '</button>';

But I can’t guarantee that the theme check plugin you’re using will recognise that as safe, because it still looks like you’re echoing an unescaped variable if you just look at the last line.