This is a major UX flaw that needs to be addressed.
The user will upload their source file, download the offline.po to hand out or translate themselves, then attempt to upload the translated .po files via the clearly labelled menu option "Upload translations".
The problem is that this option expects a file type that is the same as the source. That is, if the user uploads a .txt, the upload expects a translated txt. This is sub-optimal, simply because there is absolutely no way the system can tell if the paragraph being translated is the same as the one uploaded, other than order. Sure, this is great for structured multilingual files (e.g. Qt .ts), but for little else.
Fix: if the user uploads a .po, treat it as though it is a translation set for the document that it was initiated from.
1. Upload a source file (not POT) to a project version
2. Select a language, click the V (chevron) on the file
3. Select Download translated (Offline po)
4. Alter the downloaded file msgstr
5. Select the same language and press V (chevron) on the same file
6. Select Upload translations
7. Select the altered file, press Upload
error (eg.): Could not find TextFlow for TextFlowTarget ba0ffbe99a9961fe98f89bad8d264ffa with contents: [retest file]
Fedora 22, Firefox, Zanata 3.9.0 on branch origin/ZNTA-1060-fix-npe (fetch merged) at 22c1800c8aaddf57b913b9603b5fda879d20b2df