Le traduzioni di LinguaPlone non sono attualmente gestite da ContentMirror (è ancora nella Maybe list..). Aimè, ne ho bisogno urgentemente e decido di patchare il prodotto..
Ecco come:
1. Nel modulo schema.py va aggiunta la struttura per la tabella translations:
translations = rdb.Table(
"translations",
metadata,
rdb.Column( "source_id", rdb.Integer,
rdb.ForeignKey('content.content_id', ondelete='CASCADE'),
primary_key=True ),
rdb.Column( "target_id", rdb.Integer,
rdb.ForeignKey('content.content_id', ondelete='CASCADE'),
primary_key=True),
rdb.Column( "target_language", rdb.String(8), primary_key=True ),
rdb.Column( "target_state", rdb.String(64), primary_key=False )
)
class Translation( object ):
def __init__( self, source=None, target=None, target_language=None, target_state=None):
self.source = source
self.target = target
self.target_language = target_language
self.target_state = target_state
orm.mapper( Translation, translations,
properties = {
'source': orm.relation(Content, uselist=False, backref='translations',
primaryjoin=content.c.content_id==translations.c.source_id ),
'target': orm.relation(Content, uselist=False,
primaryjoin=content.c.content_id==translations.c.target_id ),
})
NB: ricordate di rilanciare il comando DDL per ottenere la struttura della tabella da creare nel DB..
2. Nel modulo transform.py va aggiunta la gestione delle info delle traduzioni (che non sono agganciate a campi Archetypes, per questo non si riesce a lavorare in modo più *pulito*..). Ho fatto questo modificando il metodo copy della classe SchemaTransformer come segue:
def copy( self, instance, peer ):
for field in self.context.Schema().fields():
transformer = component.queryMultiAdapter( ( field, self ))
transformer.copy( instance, peer )
# gestione LinguaPlone
value = instance.getTranslations( )
if not value:
return
for lang, (ob, review_state) in value.items():
# no language specified
if not lang:
continue
# not recording the context itself
if ob.UID() == instance.UID():
continue
t_oid = ob.UID()
# fetch the remote side's peer
peer_ob = schema.fromUID( ob.UID() )
if peer_ob is None:
serializer = interfaces.ISerializer( ob, None )
if serializer is None: continue
peer_ob = serializer.add()
# create the translation
translation = schema.Translation( peer, peer_ob, lang, review_state)
Lanciate il bulk e vedrete comparire le info delle vostre traduzioni nella tabella appena creata :)