A table in a database. Column names are languages. Primary key is the majority language of your staff. Write reports using your main language, but fetch translations from the table on the fly.
The maintenance issue shifts from phrases and words scattered throughout the reports library, with lots of duplicates, to having them all in a single table with no duplicates.
There is the challenge as it gets bigger of avoiding "almost duplicates," e.g., "Total charged" vs. "Total billed" or "Payment" vs. "Amount Paid" There̓s also the problem that some languages have noun declensions, verb conjugations, different ways of doing plurals, etc. Without each instance being done by a human who is fluent in the output language, there will always be weird sounding things. In fact, some native speakers can translate into things they would never say themselves.
But there are tricks to reduce these problems. For example, you could create a stored procedure to do printf style substitutions. This allows for word order variations. One language might put a variable at the end of a sentence while another puts it in the middle.
Two similar approaches are the GNU gettext utilities or the way Mac OS does internationalization.