We have a need to manage a large number (approx 20+) languages for our application. For previous projects that required fewer languages (3 - 4) we used a simple excel spreadsheet that we sent to various translators and they filled in the translations for the strings. With this many languages and the need to involve multiple translators is there a better solution for managing this data?
Not really.
Save it as a CSV and automate the creation of the translated text resource files.
Yes. If you're getting to that scope of internationalization, I would suggest tracking your strings and languages in a database and making a small web application for editing them. Then you can send translators to an edit interface specific to their language, handle concurrency (not have to worry about "who has the file", which is going to become a huge problem for you in your current methodology), and otherwise make life easier.
IF we're talking about a .NET application here... THEN, Since static strings will be in resource files you should use some sort of resource file generators. There are quite a few around. I'm only dealing with 3 languages at the moment and have found Globalizer.NET a pretty good one but there's many more out there with slighly different interfaces.
They are generally licensed in two forms, one for the developer (to generate localization assemblies or resx source code) and one for the translator (to store translation strings to/from an internal database).