Bug 953734 - RFE: Implement review feature
Summary: RFE: Implement review feature
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Zanata
Classification: Retired
Component: Usability
Version: 3.0
Hardware: Unspecified
OS: Unspecified
high
high
Target Milestone: ---
: 3.0
Assignee: Patrick Huang
QA Contact: Zanata-QA Mailling List
URL:
Whiteboard:
Depends On: 982916
Blocks:
TreeView+ depends on / blocked
 
Reported: 2013-04-19 04:52 UTC by Isaac Rooskov
Modified: 2015-08-06 05:55 UTC (History)
8 users (show)

Fixed In Version: 3.1-SNAPSHOT (20130819-1505)
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Environment:
Last Closed: 2013-11-27 03:25:51 UTC


Attachments (Terms of Use)


Links
System ID Priority Status Summary Last Updated
Red Hat Bugzilla 967431 None None None Never
Red Hat Bugzilla 996388 None None None Never
Red Hat Bugzilla 996398 None None None Never
Red Hat Bugzilla 996414 None None None Never
Red Hat Bugzilla 996432 None None None Never
Red Hat Bugzilla 996446 None None None Never


Description Isaac Rooskov 2013-04-19 04:52:31 UTC
Feature request for review workflow and functionality in Zanata

Comment 1 Alex Eng 2013-04-23 00:29:17 UTC
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)

Comment 2 Luke Brooker 2013-04-23 05:05:22 UTC
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.

Comment 5 Ding-Yi Chen 2013-05-22 05:19:58 UTC
IMHO,
The "Need review" should be changed to "Fuzzy" to avoid confusion.

Comment 6 Ding-Yi Chen 2013-05-23 06:37:30 UTC
= 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)
|======================================================================

Comment 7 Ding-Yi Chen 2013-05-23 07:02:09 UTC
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)
|======================================================================

Comment 8 Ding-Yi Chen 2013-05-23 08:16:09 UTC
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

Comment 15 Ding-Yi Chen 2013-06-07 08:13:15 UTC
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.

Comment 16 Ding-Yi Chen 2013-06-12 03:08:18 UTC
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.

Comment 17 Ding-Yi Chen 2013-08-13 06:36:28 UTC
The test basis (spec) is now in https://github.com/zanata/zanata-server/wiki/Messages-Review

Comment 18 Ding-Yi Chen 2013-08-22 05:04:28 UTC
VERIFIED with Zanata version 3.1-SNAPSHOT (20130819-1505)

Comment 19 Sean Flanigan 2013-11-27 03:16:27 UTC
Closing VERIFIED bugs for Zanata versions <= 3.1.

Comment 20 Sean Flanigan 2013-11-27 03:17:23 UTC
Closing VERIFIED bugs for Zanata versions <= 3.1.

Comment 21 Sean Flanigan 2013-11-27 03:19:50 UTC
Closing VERIFIED bugs for Zanata versions <= 3.1.

Comment 22 Sean Flanigan 2013-11-27 03:25:51 UTC
Closing VERIFIED bugs for Zanata versions <= 3.1.

Comment 23 Sean Flanigan 2013-11-27 03:34:39 UTC
Closing VERIFIED bugs for Zanata versions <= 3.1.

Comment 24 Sean Flanigan 2013-11-27 03:36:47 UTC
Closing VERIFIED bugs for Zanata versions <= 3.1.


Note You need to log in before you can comment on or make changes to this bug.