Your problem is probably coming from the fact that you are loading your options before the language is defined. When you set the language from the content, Polylang has to wait for WP to load the content before setting the language. Thus the language is defined only in the ‘wp’ hook. If you load your strings before that, then they are not translated.
There are at least 2 workarounds.
1. The easiest is to set the language from the url (directory name, subdomain or domain name). In that case, Polylang reads the language from the url as soon as it loads and thus the language is defined before the theme is loaded.
2. You generally don’t need the strings before the ‘wp’ hook has been fired (but you may need other theme options before that time). Reloading the options after the ‘wp’ hook is fired should allow the strings to be correctly translated even when the language is set from the content. Polylang provides a convenient action (‘pll_language_defined’) to inform you when the language is defined.