Save translations as user object instead of email. On import, do not save translation user. Use migrations to convert existing data (email) to new schema (user object). Update entity UI only on successful change on server.
Remove typo
Add reviewed attribute to the Translation module. Set to true for every translation, imported from repository.
Properly set reviewed flag on translation import, without order_by() and reverse() games.
Distinguish between suggestions and translations based on the reviewed attribute instead of using the latest suggestion as translation. Users can submit as many translations as they want.
On import from repository, only update existing translations if different from repository
Notifications are now centered anyways
Every authenticated user can translate
Show all translations in history
If reviewed translation doesn't exist, take latest unreviewed translation
When displaying translations from other locales, if reviewed translation doesn't exist, take latest unreviewed translation
Less noticeable
Set reviewed attribute to translations depending on 'user's can_localize' permission. Disabled deleting translations by submitting empty strings as translations.
When downloading ZIP or commiting to repository, if reviewed translation doesn't exist, take latest unreviewed translation
Only privileged users can commit to SVN
Return string instead of object
Open history by default, also to avoid to many external API calls.
Only call openEditor once for editable entities
Rename suggestions to machinery to distinguish between user suggestions (history) and machine suggestions (machine translation and translation memory)
Just change order of function to make it more logical