Ahora bien como podemos hacer uso de esta opción, pues tenemos dos opciones bien activamos el servicio desde la Administración Central o bien lo activamos usando PowerShell a través de estos comandos:
$tj = get-sptimerjob "Sharepoint Translation Services" $tj.Runnow()
Ahora bien Microsoft no se ha conformado solo con solucionar esta problemática sino que al igual que en casi todas las opciones, nos ha proporcionado una serie de modelo de Objetos para poder acceder tanto desde el modelo de objetos en el servidor como en el cliente e incluso cuenta con una API Rest para realizar estas operaciones. A continuación explicaremos los tres casos.
Modelo de Objetos en Servidor
Para hacer uso de este modelo en nuestros desarrollos tendremos que añadir la siguientes referencia: Microsoft.Office.TranslationServices.dll
Una vez esto con poner el siguiente código iniciaríamos la traducción asíncrona:
SPServiceContext sc = SPServiceContext.GetContext(new SPSite(site)); TranslationJob job = new TranslationJob(sc, CultureInfo.GetCultureInfo(culture)); using (SPSite siteIn = new SPSite(inputList)) { using (SPWeb webIn = siteIn.OpenWeb()) { using (SPSite siteOut = new SPSite(outputList)) { using (SPWeb webOut = siteOut.OpenWeb()) { SPDocumentLibrary listIn = (SPDocumentLibrary)webIn.GetList(inputList); SPDocumentLibrary listOut = (SPDocumentLibrary)webOut.GetList(outputList); job.AddLibrary(listIn, listOut); job.Start(); } } } }
Como hemos observado hemos realizado una llamada asíncrona, y en caso de que deseemos podemos monitorizar el proceso de traducción para saber si la traducción se ha realizado con éxito o no para ello tenemos que hacer uso de la clase Translation.JobStatus y jugar con las funciones que viene de serie.
En caso de que queramos realizar llamadas sincronas (por el tema de las requerimientos tendremos que realizarlo de la siguiente forma:
SPServiceContext sc = SPServiceContext.GetContext(new SPSite(site)); SyncTranslator job = new SyncTranslator(sc, CultureInfo.GetCultureInfo(jobCulture)); TranslationItemInfo itemInfo = job.Translate(input, output);
Modelo de Objetos en Cliente
SharePoint dispone de una implementación del modelo de objetos en cliente en 4 variantes: .Net, JavaScript, Silverligth y WindowsPhone. En estas APIs están implementadas la mayoría de la funcionalidad de traducción disponible en la API del servidor. La única pega es que en las llamadas sincronas solo se soportan traducción de archivos.
Para hacerlo en .NET tenemos que añadir las librerías clientes tanto de SharePoint como del servicio de traducción: Microsoft.SharePoint.Client.dll y Microsoft.Office.TranslationServices.Client.
Para traducir un fichero de forma asincrona bastaría con poner el siguiente código:
ClientContext clientContext = new ClientContext("http://serverName/sites/siteCollectionPath"); string culture = "cultureID"; string name = "translationJobName"; string inputFile = "http://serverName/path/inputFileName"; string outputFile = "http://serverName/path/outputFileName"; TranslationJob job = new TranslationJob(clientContext , culture); job.AddFile(inputFile , outputFile); job.Name = name; job.Start(); clientContext.Load(job); clientContext.ExecuteQuery(); //To retrieve the translation job ID. string jobID = job.JobId;
Para realizar una llamada sincrona tenemos que llamar a la clase SyncTranslator (de la misma forma que sucede en el modelo de objetos en Servidor):
ClientContext clientContext = new ClientContext("http://serverName/sites/siteCollectionPath"); string culture = "cultureID" string inputFile = "http://serverName/path/inputFileName"; string outputFile = "http://serverName/path/outputFileName"; SyncTranslator job = new SyncTranslator(clientContext , culture); job.OutputSaveBehavior = SaveBehavior.AlwaysOverwrite; ClientResult cr = job.Translate(inputFile, outputFile ); clientContext.ExecuteQuery(); //To retrieve additional information about the translation job. string errorCode = clientContext.Value.ErrorCode; string errorMessage = clientContext.Value.ErrorMessage; string translateID = clientContext.Value.TranslationId; string succeedResult = clientContext.Value.Succeeded; string failResult = clientContext.Value.Failed; string cancelStatus = clientContext.Value.Canceled; string inProgressStatus = clientContext.Value.InProgress; string notStartedStatus = clientContext.Value.NotStarted;
Para realizarlo haciendo uso de JavaScript la sintaxis es muy semejante y para un fichero asíncrono tenemos que realizar lo siguiente:
var asyncJob; var clientContext = new SP.ClientContext("serverRelativeUrl"); var contextSite = clientContext.get_site(); asyncJob = SP.Translation.TranslationJob.newObject(clientContext, "cultureID"); asyncJob.set_outputSaveBehavior(SP.Translation.SaveBehavior.alwaysOverwrite); asyncJob.addFile("inputFilePath", "outputFilePath"); asyncJob.set_name("translationJobName"); asyncJob.start(); clientContext.load(asyncJob); clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededASync),Function.createDelegate(this, this.onQueryFailed));
Para realizarlo una llamada síncrona lo podemos realizar de la siguiente forma:
var result; var clientContext = new SP.ClientContext("serverRelativeUrl"); var contextSite = clientContext.get_site(); var job = SP.Translation.SyncTranslator.newObject(clientContext, "cultureID"); job.set_outputSaveBehavior(SP.Translation.SaveBehavior.alwaysOverwrite); result = job.translate("inputFilePath", "outputFilePath"); clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceededSync), Function.createDelegate(this, this.onQueryFailed));
API Rest
Naturalmente la API Rest no podía faltar y casi el 99% de los objetos de SharePoint tienen su correspondiente punto de entrada, con la API Rest se puede realizar las mismas acciones que con los modelos de objetos en servidor y cliente.
Traducción asincrona
Para realizar la traducción de asíncrono:
http://serverName/_api/TranslationJob(‘language’)
Traducir un fichero Asincronamente:
http://serverName/_api/TranslationJob(‘language’)/TranslateFile(inputFile=’/path/intput file’, outputFile=’/path/output file’)
Traducir una carpeta Asíncronamente
http://serverName/_api/TranslationJob(‘language’)/TranslateFolder(inputFolder=’/path/in’, outputFolder=’/path/out’)
Traduri una Lista asíncronamente
http://serverName/_api/TranslationJob(‘language’)/TranslateLibrary(inputLibrary=’/LibraryName’, outputLibrary=’/LibraryName»)
Para realizar la traducción de síncrono:
http://serverName/_api/SyncTranslator(‘language’)/Translate(outputFile=’/path/output file’, inputFile=’/path/input file’)
Como hemos visto este servicio de traducción es una gran mejora y que viene a solucionar un problema que se arrastraba desde versiones anteriores donde todo esto se transformaba en una problemática y que muchos clientes no valoraban en su justa medida (si Google lo tiene y gratuito como que un producto como SharePoint no tiene?, y no te quedaba decir que no se puede ser un 10 en todo 🙂 )
Además otro punto bastante interesante es su uso dentro de la Suite de Office y en la que tendremos nuestro documento Word que lo tenemos que traducir a varios idiomas y con dos clics lo tendremos traducido. Abajo pongo varios ejemplos y uno de ellos es una APP de Word para traducir el texto.
Ahora bien no pensemos que este traductor es 100 % seguro como todo traductor contiene sus fallos y conviene revisarlo pero si que ahorra muchísimo trabajo.
Si queréis jugar con el servicio de traducción podeis descargaros estos ejemplos:
http://code.msdn.microsoft.com/office/SharePoint-2013-Access-cdaff6b2/view/SourceCode#content
http://code.msdn.microsoft.com/office/SharePoint-2013-Accessing-647f6dd9
http://code.msdn.microsoft.com/office/SharePoint-2013-Implement-7b48ae36
http://code.msdn.microsoft.com/office/SharePoint-2013-Perform-a-8e53b06a
Si queréis mas información
http://msdn.microsoft.com/en-us/library/jj163145(v=office.15).aspx#TranslationSvc_UsingCSOM
Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)