I feel like my attempts at searching for text on other screens were a bit slow, but it can probably be improved by caching somewhere (and maybe that was in Lua - not really sure).
What do you mean "searching for text"? Anyway, how I see it:
There's static text (basically, the UI), semi-static (with a known set of options, like the embark location properties) and fully dynamic (announcements, text screens, mission reports, merchant responses, etc.). The first two can be done with a simple string replacement, I think there should be a file specifying original string, original string screen position (OR an approximate rectangle), and a new string. A plugin then would check that text in the specified location matches the given string and replace it.
Dynamic text requires on-the-fly translation and special handling in each case, but there's too many of such screens.
Other things to consider is what can be translated in raws, what to do with the names, and what can be left untranslated.