Hide Forgot
Feature request for review workflow and functionality in Zanata
Outcome from UX design meeting : Review feature - open up joining language team - make existing translators reviewer - new translator will need to request to become reviewer - suggest translation from new translator, reviewer can save as approved - comments in target - noobs (suggest), translators (can save as approved), reviewer (be able to review suggested translation) - filter translations by user (for reviewer)
Just to add to this: - I think the save options should be something like - Save as: - (Suggestion) - (Draft) - Fuzzy/Uncertain/Vague - Translated - Reviewed - Needs work/Needs Revision - Revised - Suggestions and drafts aren't saved in the edit area but under a drafts and suggestions tab. - These options should never all be shown, they are only shown contextually when one is possible. e.g. If the text field hasn't changed, no options are available. Anyway, just getting my thoughts down. I will talk to some translators about this too.
IMHO, The "Need review" should be changed to "Fuzzy" to avoid confusion.
= Specs == Roles A non-maintainer user account can have zero to multiple of following "roles": * Translator: The person that can input and change translation messages. * Reviewer: The person that can approve or reject translation messages. A project maintainer has both of the roles. == States A translation should be in either of following states: 1. Untranslated: No translation 2. Fuzzy: Translator thinks the translation is incomplete. 3. Translated: Translator thinks the translation is completed. 4. Approved: Reviewer accepts the translation as-is. 5. Rejected: Reviewer thinks the translation need to be changed. == State transition === Translator Mode: * Untranslated-> Fuzzy (Save as Fuzzy) * Untranslated-> Translated (Save as Translated) * Fuzzy -> Untranslated (Clear the translation) * Fuzzy -> Translated (Save as Translated) * Translated -> Untranslated (Clear the translation) * Translated -> Translated (Save as Translated) (Following are introduced by new review feature) * Approved -> Untranslated (Clear the translation) * Approved -> Fuzzy (Save as Fuzzy) * Approved -> Translated (Save as Translated, Translation is changed) * Approved -> Approved (Save as Translated, Translation is unchanged) * Rejected -> Untranslated (Clear the translation) * Rejected -> Fuzzy (Save as Fuzzy) * Rejected -> Translated (Save as Translated) === Reviewer Mode: * Translated -> Approved (Approve the translation) * Translated -> Rejected (Reject the translation) * Approved -> Translated (Undo review) * Approved -> Rejected (Reject the translation) * Rejected -> Translated (Undo review) * Rejected -> Approved (Approve the translation) == Client Every registered user can pull translation. But only user translator role can push translation. (Project maintainer can also push the translation in the same way as translator). === pull ==== pull file format that supports fuzzy * Untranslated -> Untranslated * Fuzzy -> Fuzzy * Translated -> Translated * Approved -> Translated * Reject -> Fuzzy ==== pull file format that does not support fuzzy * Untranslated -> Untranslated * Fuzzy -> Untranslated * Translated -> Translated * Approved -> Translated * Reject -> Untranslated === push Most translation file formats do not support message states other than untranslated, fuzzy and translated. ==== push file format that supports fuzzy Columns: * Local State: State of the message string in a translation file * Server State: State of the message string in server. * In History: Whether the local message string appears in the history list in the server. * Final State: The final state in server after push, and whether local or server message string is used. |====================================================================== | Local State | Server State | In History| Final State | Untranslated | Untranslated | - | Untranslated | Untranslated | Fuzzy | - | Fuzzy (Use Server) | Untranslated | Translated | - | Translated (Use Server) | Untranslated | Approved | - | Approved (Use Server) | Untranslated | Rejected | - | Rejected (Use Server) | Fuzzy | Untranslated | - | Fuzzy (Use Local) | Fuzzy | Fuzzy | Yes | Fuzzy (Use Server) | Fuzzy | Fuzzy | No | Fuzzy (Use Local) | Fuzzy | Translated | - | Translated (Use Server) | Fuzzy | Approved | - | Approved (Use Server) | Fuzzy | Rejected | Yes | Rejected (Use Server) | Fuzzy | Rejected | No | Fuzzy (Use Local) | Translated | Untranslated | - | Translated (Use Local) | Translated | Fuzzy | - | Translated (Use Local) | Translated | Translated | Yes | Translated (Use Server) | Translated | Translated | No | Translated (Use Local) | Translated | Approved | Yes | Approved (Use Server) | Translated | Approved | No | Translated (Use Local) | Translated | Rejected | Yes | Rejected (Use Server) | Translated | Rejected | No | Rejected (Use Local) |======================================================================
In the last line, final state should be Translated (Use Local) The update push file format table should be: ==== push file format that supports fuzzy |====================================================================== | Local State | Server State | In History| Final State | Untranslated | Untranslated | - | Untranslated | Untranslated | Fuzzy | - | Fuzzy (Use Server) | Untranslated | Translated | - | Translated (Use Server) | Untranslated | Approved | - | Approved (Use Server) | Untranslated | Rejected | - | Rejected (Use Server) | Fuzzy | Untranslated | - | Fuzzy (Use Local) | Fuzzy | Fuzzy | Yes | Fuzzy (Use Server) | Fuzzy | Fuzzy | No | Fuzzy (Use Local) | Fuzzy | Translated | - | Translated (Use Server) | Fuzzy | Approved | - | Approved (Use Server) | Fuzzy | Rejected | Yes | Rejected (Use Server) | Fuzzy | Rejected | No | Fuzzy (Use Local) | Translated | Untranslated | - | Translated (Use Local) | Translated | Fuzzy | - | Translated (Use Local) | Translated | Translated | Yes | Translated (Use Server) | Translated | Translated | No | Translated (Use Local) | Translated | Approved | Yes | Approved (Use Server) | Translated | Approved | No | Translated (Use Local) | Translated | Rejected | Yes | Rejected (Use Server) | Translated | Rejected | No | Translated (Use Local) |======================================================================
For push file format that does not support fuzzy, just omit the Fuzzy local state. And for pull and download translation, given that most file format does not support approved and rejected directly, I assume that the output file format can accommodate either: 1. Untranslated, Fuzzy, and Translated (such as po) or 2. Untranslated, and Translated (such as java properties) I also assume that in terms of pull, Reject and Fuzzy are semantically identical, because they both mean the message string is incomplete. ==== pull Untranslated -> Pull as Untranslated Fuzzy/Reject:: * If Fuzzy state is supported in file format -> Pull as Fuzzy * ElseIf option "fuzzyAsTranslated" or "includeFuzzy" is set -> Pull as Translated * Else -> Pull as Untranslated Translated:: * If Fuzzy state is supported in file format * If option "onlyApproved" is set -> Pull as Fuzzy * Else -> Pull as Translated * Else * If option "onlyApproved" is set -> Pull as Untranslated * Else -> Pull as Translated Approved -> Pull as Translated ***************************** Scenarios: 1. Translator wants to see the preview: a. To confirm the preview is good before mark everything as translated: fuzzyAsTranslated=on and onlyApproved=off b. To confirm that everything are fully translated: fuzzyAsTranslated=off and onlyApproved=off 2. Review wants to see the preview: a. Before review is done: fuzzyAsTranslated=off and onlyApproved=off b. After review is done: fuzzyAsTranslated=off and onlyApproved=on 2. Project maintainer want to build the project: a. SNAPSHOT, or the project does not require review fuzzyAsTranslated=off and onlyApproved=off b. Formal release fuzzyAsTranslated=off and onlyApproved=on
Test with Zanata version 3.0.0-SNAPSHOT (20130607-1221) We nolonger copy approved as approved in copy trans and TM merge, the approved translation should be copied as translated.
Well, after consult with Sean, after all, it seems that Approved state should be copied if no mismatch are found. Thus I will set the state back to ON_OA.
The test basis (spec) is now in https://github.com/zanata/zanata-server/wiki/Messages-Review
VERIFIED with Zanata version 3.1-SNAPSHOT (20130819-1505)
Closing VERIFIED bugs for Zanata versions <= 3.1.