miércoles, 12 de mayo de 2010

Tipos de contenido multi-idioma en Sharepoint


Objetivo

El objetivo de este documento es explicar el procedimiento a seguir para generar tipos de contenido con soporte para varios idioma.
Al final del documento conseguiremos un Tipo de contenido cuyas columnas se mostrarán en el idioma del sitio en el que estemos.
Captura del resultado en un sitio en inglés:


Captura del resultado en un sitio en español:


Consideraciones previas

Entorno:
Visual Studio 2008
Visual Studio 2008 extensions for Windows SharePoint Services 3.0 (version 1.3) Sharepoint Server 2007
Procedimiento
Creación del proyecto
En Visual Studio 2008, creamos un Nuevo proyecto vacío, de tipo Sharepoint:


Y elegimos el nivel máximo de seguridad (Full Trust)


Creación del tipo de contenido

Hacemos clic con el botón derecho del ratón sobre el nombre del proyecto que hemos creado, y elegimos “Add / New Item…”
Seleccionamos la plantilla de “Content Type” y hacemos clic en “Add”


Seleccionamos el tipo de contenido ‘Base’ del que deseamos partir y hacemos clic en “OK”.


En este documento trabajaremos
con un tipo de contenido básico al que no se le añadirá ningún manejador de
eventos, ya que el procedimiento elegido funcionará de la misma manera si
añadimos los manejadores de eventos. Se ha querido mantener el documento lo más
liviano posible.

Como observamos en la siguiente captura, en la ventana del visor de WSP (WSP View) ha aparecido la entrada correspondiente a la característica que acabamos de añadir:


Haciendo doble clic en el archivo “feature.xml” accedemos a la definición de la característica, que indica cómo se muestra la misma en la pantalla “Características de la colección de sitios”. En este archivo realizaremos los primeros cambios para disponer de nuestro tipo de contenido
multi-idioma.
Definición de la característica por defecto:


Definición de la característica modificada:


Como podemos observar en el código definitivo, hemos modificado la siguiente información:
* Title à Utilizamos el ‘token’ $Resources: para indicar que el valor lo obtendremos de un archivo de recursos.
* Description à Idéntico al anterior.
* DefaultResourceFile à Sustituimos el valor original “core” por el personalizado “_Res”. Al establecer este valor, el sistema buscará los recursos necesarios en una carpeta dentro de
la estructura física de carpetas en la que se instala la característica.

Creación de las columnas del tipo de contenido

En la ventana de “WSP View” hacemos doble clic sobre el archivo “Multi1.xml” para acceder a la definición del tipo de contenido.
Definición del tipo de contenido por defecto:


Definición del tipo de contenido modificada:


Las modificaciones realizadas son:
* ContentType.Name à añadimos el ‘token’ para el archivo de recursos.
* ContentType.Description à añadimos el ‘token’
* Field.DisplayName à añadimos el ‘token’
* Field.DisplaceOnUpgrade à añadiendo este atributo indicamos al sistema que si ya existe una definición para el campo, fuerce actualizaciones de propiedades del campo con los valores que se especifican en esta definición de campos. Con este atributo conseguimos que el tipo de contenido ‘raíz’ que estamos creando pueda actualizar los valores de sus columnas en posteriores instalaciones.
Esta actualización ‘forzada’ sólo se realiza en el tipo de contenido ‘raíz’, todos los tipos de contenido que hereden del raíz (al haberse incluido en una biblioteca, por ejemplo) NO se actualizan.

Añadir un archivo de recursos

Hasta el momento hemos utilizado el ‘token’ “$Resources:” para indicar al sistema que el valor del atributo reside en un archivo de recursos; pero, ¿cómo incluimos estos archivos al sistema?
El objetivo de esta parte del documento es conseguir la siguiente estructura en la carpeta de instalación de la característica:


Cada vez que el sistema encuentre el ‘token’ “$Resources:” en los archivos de definición de la característica y/o del tipo de contenido, irá a buscar los recursos a la carpeta “Resources” que aparece en la captura anterior.
Accedemos en Visual Studio al explorador de soluciones, y generamos la siguiente estructura de carpetas en el proyecto:


Como vemos en la captura anterior, tenemos que ‘recrear’ la estructura física que tendrá la característica una vez instalada en el servidor Sharepoint.
En la carpeta “Resources” hacemos clic con el botón derecho del ratón y elegimos Add, New Item… y elegimos la plantilla de archivo de recursos:


Haciendo doble clic en el archivo “Resources.resx” accedemos al archivo de recursos y generamos tantas entradas como ‘tokens’ hayamos utilizado:


Este primer archivo de recursos será el utilizado cuando el idioma del sitio no tenga ningún archivo de recursos asociado. Dicho de otra forma, determina los literales por defecto del tipo de contenido y su característica asociada.

Generar el paquete de la solución

En el explorador de soluciones, hacemos clic con el botón derecho del ratón sobre el proyecto y elegimos ‘Package’
Esta operación nos genera el archivo WSP que instalaremos en el servidor Sharepoint.
La instalación o despliegue de soluciones WSP se escapa al alcance de este documento, por lo que se asume que el procedimiento de instalación es conocido por todos.

Resultado

Una vez instalada la característica y desplegada en los portales necesarios, aparecerá en la página de “Características de la colección de sitios”


Antes de activar la característica, vamos a fijarnos en los literales que aparecen en la captura… son los literales definidos en el archivo de recursos, sí; pero, un momento, ¡según el botón “Activar”, el sitio de Sharepoint está en castellano! ¿Qué ha pasado aquí?
Como hemos comentado antes, el sistema intenta localizar un archivo de recursos que se ajuste al idioma del sitio en el que estamos. Si no lo encuentra utiliza el archivo por defecto (en este caso el único que hemos añadido)

Añadiendo más archivos de recursos

Para añadir más archivos de recursos (teóricamente uno para cada idioma que tengamos disponible) vamos en el proyecto a la carpeta Resources y añadimos un nuevo archivo de recursos, que se llamará exactamente igual que el primero que hemos añadido, pero con el sufijo id-ID que indicará el idioma y la localización de los recursos. La estructura de esta carpeta Resources quedará:


El contenido del archivo tiene que ser exactamente igual que el archivo de recursos por defecto, obviamente traducido al idioma del archivo (en este caso es-ES, español de España)


Volvemos a generar el paquete WSP, lo reinstalamos en el servidor Sharepoint, y observamos el resultado:


¡¡¡Ya tenemos la característica traducida!!!
Ahora sólo hace falta activar la característica y ya tenemos el tipo de contenido generado tal y como se veía al principio, con distintos literales para cada idioma.
Detalle del tipo de contenido:


Añadir este tipo de soporte multi-idioma es relativamente sencillo, pero hay que tener en cuenta las limitaciones especificadas anteriormente. Una vez que un tipo de contenido se utiliza en una lista de Sharepoint, las modificaciones realizadas al tipo de contenido raíz mediante este procedimiento NO se trasladan a dichos tipos de contenido ‘hijos’.

No hay comentarios: