SharePoint 2013: Uso del servicio de traducciones desde el modelo de objetos en cliente (I)!

Una de las grandes novedades de SharePoint 2013 es el servicio de traducciones qué posibilita la traducción de documentos y contenidos de SharePoint de forma asíncrona o síncrona con una arquitectura similar al servicio Word Automation Services. Lo interesante de este servicio es qué por un lado dispone de funcionalidad nativa de uso de traducciones para sitios web multi-idioma por ejemplo, pero por otro nos permite crear soluciones de traducción personalizadas a través de las siguientes posibilidades:

  • Modelo de objetos de servidor.
  • Modelo de objetos de cliente.
  • API REST.

Capitulo17_Figura33

En este post vamos a ver la segunda de las opciones, y en concreto como realizar una traducción de tipo asíncrono en un proyecto de tipo aplicación de consola:

  • Lo primero qué necesitaréis es agregar las referencias necesarias: Microsoft.SharePoint.Client, Microsoft.SharePoint.Client.Runtime y Microsoft.Office.TranslationServices.Client. Todas las referencias se encuentran en la carpeta ISAPI bajo el directorio \15 de instalación de SharePoint 2013.
  • A continuación, añadir las directivas using necesarias…en mi caso:
   1:  using MO_Cliente = Microsoft.SharePoint.Client;
   2:  using MO_TRCliente = Microsoft.Office.Client.TranslationServices;

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

  • Para realizar una traducción de tipo asíncrono, el disponemos de la clase TranslationJob que cuenta con métodos AddFile(), AddFolder() y AddLibrary() para traducir archivos individuales, archivos en carpetas y archivos den Bibliotecas de Documentos. Por ejemplo, para traducir el contenido de una biblioteca de documentos al idioma inglés utilizaríamos un código como el que sigue:

 

   1:  static void TraduccionAsincronaClientOM()
   2:  {
   3:      try
   4:      {
   5:          using (MO_Cliente.ClientContext ctx=
   6:              new MO_Cliente.ClientContext(
   7:                  "http://[Servidor]/"))
   8:          {
   9:              MO_Cliente.List lEntrada =
  10:                  ctx.Web.Lists.GetByTitle("[BibliotecaOrigen]");
  11:              MO_Cliente.List lSalida =
  12:                  ctx.Web.Lists.GetByTitle("[BibliotecaDestino]");
  13:   
  14:              MO_TRCliente.TranslationJob tjJob = 
  15:                  new MO_TRCliente.TranslationJob(ctx, "en");
  16:   
  17:              tjJob.AddLibrary(lEntrada,lSalida);
  18:              tjJob.Name = "Job Traducción MO Cliente";
  19:              tjJob.Start();
  20:              ctx.Load(tjJob);
  21:              ctx.ExecuteQuery();
  22:                      
  23:              Console.WriteLine("JobId: " + tjJob.JobId);
  24:              Console.WriteLine("Nombre Job: " + tjJob.Name);
  25:              Console.WriteLine("Traducción en marcha....");       
  26:          }
  27:   
  28:      }
  29:      catch (Exception ex)
  30:      {
  31:          Console.WriteLine(
  32:              "Error: ", ex.Message);
  33:      }
  34:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

  • Fijaros como la mecánica de uso del servicio de traducciones es bastante sencilla, una vez que tenemos el correspondiente ClientContext creamos las correspondientes instancias de bibliotecas (origen y destino) mediante el método GetByTitle(). A continuación, creamos una instancia de TranslationJob, llamamos al método AddLibrary() para qué el contenido de la biblioteca origen sea traducido y volcado en la biblioteca destino, y llamamos al método Start() para que se encole el correspondiente Job de traducción.
  • Por supuesto, hasta que no realicemos un Load() en el contexto y un ExecuteQuery(), no se mandarán las operaciones al servidor.

Sólo tenemos que esperar unos minutos para comprobar que el archivo origen ha sido traducido al idioma inglés como esperábamos:

image image

Y hasta aquí llega este primer post sobre como usar el modelo de objetos en cliente para realizar traducciones de documentos (Nota: En el ejemplo he hecho uso del servicio de traducciones de Office 365).