Google ofrece un servicio de traducción de idiomas con el que podemos traducir automáticamente cualquier texto desde uno de los idiomas disponibles a cualquier otro de ellos. Agregaremos esta funcionalidad a cualquier tipo de contenido que tenga un campo de texto específico.
Para agilizar el acceso al servicio de traducción, utilizaremos una librería de Python que envuelve el API de Google. Necesitamos agregar lo siguiente en la sección de eggs del buildout:
eggs =
...
simplejson
goopytrans
...
Además, requeriremos que el tipo de contenido utilizado tenga un campo de texto llamado text.
La vista es muy simple. Únicamente agregamos un método para traducir el texto utilizando goopytrans.
import goopytrans
from Products.Five import BrowserView
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
class Traducir(BrowserView):
template = ViewPageTemplateFile('traducir.pt')
def __init__(self, context, request):
self.context = context
self.request = request
def __call__(self):
return self.template()
def translate(self, src, dest):
text = getattr(self.context,'getText',None)
if text is None:
return ''
return goopytrans.translate(text(), source=src, target=dest)
Por supuesto, el template es igual de sencillo, pues para este ejemplo solo nos interesa mostrar el texto traducido.
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
lang="en"
metal:use-macro="here/main_template/macros/master"
i18n:domain="plonetheme.cursoplone">
<body>
<div metal:fill-slot="main">
<h1 tal:content="here/title"></h1>
<p tal:define="src request/src|string:es;
dest request/dest|string:en"
tal:content="structure python:view.translate(src, dest)">
Texto
</p>
</div>
</body>
</html>
La configuración de la vista es la siguiente:
<browser:page
for="*"
name="traducir"
class=".traducir.Traducir"
permission="zope2.View"
/>
El código fuente de este archivo esta hospedado en GitHub. Todos pueden actualizar y corregir errores en este documento con unos clic - sin necesidad de descargar.
Para mas información básica acerca de como actualizar este manual y referencia a sintaxis Sphinx, por favor consulte la guía Escribiendo y actualizando el manual.