As for the part of the question “with minimal impact on the application code”, I would suggest encapsulating the functions associated with the resource in your own class, exposing the methods to string selection (by passing the culture specifier argument).
Then, the main part of the job is to convert your code from possibly hard-coded strings into method calls to extract the corresponding strings. Implementing a variant of this answer: Implementing String.Format () in VB6 can greatly simplify your life if you also encapsulate the concept of 'culture' and enter some cultureInfo argument for this signature StringFormat (maybe call it StringFormatLocal ).
The fact is that if the current application is not localized, it probably does not concern localization; localization of it means introducing a new problem, therefore, in order to influence the obsolete code as little as possible, you need to search and destroy “magic lines” and “magic formats” throughout the code base (and if your user interface has hardcoded capital letters, etc. etc.), replacing them with calls to your localization API, while preserving the localization problem.
I would like to get another answer here with more details on storing, loading and especially using string resources other than ANSI ...
source share