Implemented saving of messages
Messages should be now saved to backend and propagated to other projects.
This commit is contained in:
parent
19d25982c6
commit
8c8f3c6ae4
@ -6,6 +6,7 @@ import os
|
|||||||
import os.path
|
import os.path
|
||||||
import logging
|
import logging
|
||||||
import git
|
import git
|
||||||
|
import traceback
|
||||||
from translate.storage import factory
|
from translate.storage import factory
|
||||||
|
|
||||||
from trans.managers import TranslationManager, UnitManager
|
from trans.managers import TranslationManager, UnitManager
|
||||||
@ -185,6 +186,9 @@ class Translation(models.Model):
|
|||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return '%s %s' % (self.language.name, self.subproject.__unicode__())
|
return '%s %s' % (self.language.name, self.subproject.__unicode__())
|
||||||
|
|
||||||
|
def get_store(self):
|
||||||
|
return factory.getobject(os.path.join(self.subproject.get_path(), self.filename))
|
||||||
|
|
||||||
def update_from_blob(self, blob):
|
def update_from_blob(self, blob):
|
||||||
'''
|
'''
|
||||||
Updates translation data from blob.
|
Updates translation data from blob.
|
||||||
@ -196,7 +200,7 @@ class Translation(models.Model):
|
|||||||
oldunits = set(self.unit_set.all().values_list('id', flat = True))
|
oldunits = set(self.unit_set.all().values_list('id', flat = True))
|
||||||
|
|
||||||
# Load po file
|
# Load po file
|
||||||
store = factory.getobject(os.path.join(self.subproject.get_path(), self.filename))
|
store = self.get_store()
|
||||||
for unit in store.units:
|
for unit in store.units:
|
||||||
if unit.istranslatable():
|
if unit.istranslatable():
|
||||||
continue
|
continue
|
||||||
@ -218,6 +222,33 @@ class Translation(models.Model):
|
|||||||
self.revision = blob.hexsha
|
self.revision = blob.hexsha
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
def git_commit(self, request):
|
||||||
|
'''
|
||||||
|
Commits translation to git.
|
||||||
|
'''
|
||||||
|
repo = self.subproject.get_repo()
|
||||||
|
repo.git.commit(
|
||||||
|
author = '%s <%s>' % (request.user.get_full_name(), request.user.email),
|
||||||
|
m = 'Translated using Weblate',
|
||||||
|
self.filename)
|
||||||
|
|
||||||
|
def update_unit(self, request, unit):
|
||||||
|
'''
|
||||||
|
Updates backend file and unit.
|
||||||
|
'''
|
||||||
|
store = self.get_store()
|
||||||
|
src = unit.get_source_plurals()[0]
|
||||||
|
pounits = store.findunits(src)
|
||||||
|
for pounit in pounits:
|
||||||
|
if pounit.getcontext() == unit.context:
|
||||||
|
if unit.target != join_plural(unit.target.strings):
|
||||||
|
pounit.settarget(unit.get_target_plurals())
|
||||||
|
need_save = True
|
||||||
|
# We should have only one match
|
||||||
|
break
|
||||||
|
if need_save:
|
||||||
|
store.save()
|
||||||
|
self.git_commit()
|
||||||
|
|
||||||
class Unit(models.Model):
|
class Unit(models.Model):
|
||||||
translation = models.ForeignKey(Translation)
|
translation = models.ForeignKey(Translation)
|
||||||
@ -269,3 +300,22 @@ class Unit(models.Model):
|
|||||||
del(ret[-1])
|
del(ret[-1])
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
def save_backend(self, request, propagate = True):
|
||||||
|
# Store to backend
|
||||||
|
self.translation.update_unit(self, request)
|
||||||
|
self.save(request)
|
||||||
|
# Propagate to other projects
|
||||||
|
if propagate:
|
||||||
|
allunits = Unit.objects.filter(
|
||||||
|
checksum = unit.checksum,
|
||||||
|
translation__subproject__project = self.translation.subproject.project,
|
||||||
|
).exclude(id == self.id)
|
||||||
|
for unit in allunits:
|
||||||
|
unit.target = self.target
|
||||||
|
unit.save_backend(request, False)
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
if not 'request' in kwargs:
|
||||||
|
logger.error('Unit.save called without request object: %s', traceback.format_exc(e))
|
||||||
|
super(Unit, self).save(*args, **kwargs)
|
||||||
|
Loading…
Reference in New Issue
Block a user