Ficheros de recursos en Silverlight

Pues como lo prometido es deuda, en esta ocasión toca hablar sobre localización de aplicaciones Silverlight y más concretamente de cómo en el código XAML se puede indicar que use una cadena que se encuentra en un fichero de recursos.

Para este ejemplo he creado un proyecto de tipo “Silverlight Application” usando Visual Studio 2008 SP1 y Silverlight 3.

Una vez hecho, esto, he añadido al proyecto que contiene los ficheros xaml dos ficheros de recursos, dos ficheros resx; uno para la cultura por defecto y otro para la cultura ingles americano (en-US).

Les he llamado FicheroRecursos.resx y FicheroRecursos.en-US.resx

image image

Una vez hecho esto, en cada uno de los ficheros he añadido una nueva entrada llamada “Cadena”. En el archivo por defecto he puesto el valor por defecto y en el otro el valor en ingles.

El siguiente paso es indicar en la aplicación Silverlight las culturas que ésta va a soportar; en nuestro caso bastaría con indicar la cultura “en-US”, porque en el resto de los casos sacaría los valores del fichero de recursos por defecto.

Para hacer esto, lo primero que tenemos que hacer es descargar el proyecto que contiene los ficheros xaml de la solución (Unload Project) y editar el fichero .csproj…con el editor de VStudio, con el notepad o con lo que queramos.

En el tag supportedCultures tenemos que añadir todas las culturas que queremos que soporte. Si hay varias, debemos separarlas por punto y coma.

<SupportedCultures>es-ES;en-US</SupportedCultures>

 

Una vez hecho esto, tenemos que volver a cargar el proyecto(Reload Project).

image

El siguiente paso es hacer los cambios necesarios para que desde el código XAML podamos tener acceso a las cadenas que hay dentro del fichero de recursos.

Cuando hemos creamos el fichero de recursos habréis visto que se ha creado un fichero llamado FicheroRecursos.Designer.cs que contiene una clase llamada “FicheroRecursos” que posibilita el acceso a las cadenas definidas dentro del fichero.

El “problema” es que por defecto tanto la clase como el constructor están declarados como internal y por tanto, no podremos acceder desde el código XAML directamente.

internal class FicheroRecursos {

private static global::System.Resources.ResourceManager resourceMan;

private static global::System.Globalization.CultureInfo resourceCulture;

[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal FicheroRecursos() {
}

……..

 
Primero haremos que la clase sea pública. Para ello, seleccionamos el fichero de recursos y lo podemos como “public”. De esta manera ponemos la clase como pública, pero el constructor sigue siendo “internal”.
image
Ya que el constructor sigue siendo “internal”, nos vemos obligados a crear una clase pública con un constructor público que nos haga de intermediario para poder acceder a la clase del fichero de recursos.
 
La clase intermediaria sería algo así: (esta es la clase que usaremos desde el XAML)
 
public class ClaseAccesoRecursos
{
public static FicheroRecursos ficheroRecursos = new FicheroRecursos();

public FicheroRecursos FicheroRecursos { get { return ficheroRecursos; } }
}

Una vez hecho, esto, tenemos que editar el fichero App.xaml y añadir la siguiente declaración: (SilverlightAppSample es el namespace de ClaseAccesoRecursos)

<Application.Resources>
<local:ClaseAccesoRecursos xmlns:local ="clr-namespace:SilverlightAppSample"
x:Key="ClaseAccesoRecursos" />
</Application.Resources>

Y ya por fin, podremos usar las cadenas dentro del código XAML. Si nuestra aplicación tiene un Label, la sintaxis para indicarle que use una cadena que está en un fichero de recursos sería así:

<dataInput:Label Content="{Binding FicheroRecursos.Cadena, Source={StaticResource ClaseAccesoRecursos}}"></dataInput:Label>

Ya para terminar, tenemos que configurar la aplicación web para que se adapte a la cultura del navegador y que la aplicación Silverlight haga lo mismo.
 
Como vimos en el WebCast, en el fichero de configuración de la aplicación web podemos añadir lo siguiente:
 
<globalization uiCulture="Auto" culture="Auto"/>

Una vez hecho, editaremos el fichero aspx que sirve para probar la aplicación (SilverlightAppSampleTestPage.aspx) para que le pase como parámetro la cultura que tiene que utilizar.
 
Dentro del control object añadiremos lo siguiente:
 
<param name="uiculture" value="<%=System.Threading.Thread.CurrentThread.CurrentUICulture%>" />  
<param name="culture" value="<%=System.Threading.Thread.CurrentThread.CurrentCulture%>" />

Y con esto ya está, ya hemos llegado al final. ¿Un poco lioso? Pues sí, pero de momento es lo que hay para Silverlight 🙁

Método Response.RedirectPermanent()

Hace unos días os hablaba de SEO Toolkit, una utilidad que permite analizar un website para optimizar el volumen y la calidad del tráfico que recibe desde los motores de búsqueda, como Bing o Google.

Jugando un poco con la utilidad, una cosa que vi es que uno de las situaciones de las que avisa la herramienta es de un exceso de redirecciones.

La razón es que el método Response.Redirect genera una respuesta HTTP 302 (redirección temporal). Los motores de búsqueda no siguen estos saltos, por lo que usar este tipo de redirecciones afecta negativamente al ranking de la página.

Al entender que es una redirección temporal, sólo indexa la primera, la URL desde la que se hace el redirect.

Con ASP.NET 4.0 tendremos un nuevo método llamado Response.RedirectPermanent(url) que puede usarse para realizar una redirección, pero generando una respuesta HTTP 301 (movido permanentemente).

Usar este método ayudará a los motores de búsqueda para entender que la redirección es permanente y usar la nueva URL, a la que se redirige, para que indexe sus contenidos.

Por ejemplo, si tuviéramos URLs antiguas que ya no son válidas y que lo único que hacen es redirigir a una URL nueva, usar este nuevo método sería mucho más adecuado.

Habrá que tenerlo en cuenta cuando empecemos con ASP.NET 4.0..

[Artalde.NET] Extensibilidad con MEF y paralelismo con TPL y PLINQ.

El próximo 3 de febrero, miércoles, tendrá lugar la siguiente charla del grupo de usuarios Artalde, esta vez hablando de algunas de las novedades de .NET Framework 4.0 para desarrolladores; una introducción a extensibilidad con MEF y paralelismo con TPL y PLINQ.

El lugar y hora, el de siempre; en la Universidad de Deusto, de 19:00 a 21:00 horas. El registro aquí.

En esta ocasión, será Luis Guerrero el que haga los honores y nos muestre las maravillas que nos trae la versión 4.0 del Framework…cremita de la buena!

Aquí os dejo la descripción completa de la charla:

En esta charlas veremos las novedades de las nos nuevas librerías que Microsoft incluye en .NET Framework para el desarrollo de extensibilidad de las aplicaciones, usado internamente por Microsoft para la extensibilidad de plug-ins en Visual Studio 2010, y cómo afrontar los problemas de concurrencia con Task Parallel Library.

MEF (Managed Extensibility Framework): El Framework de Extensibilidad para componentes administrados es una nueva librería incluida en el .NET Framework 4.0 que permite reutilizar aplicaciones y  componentes. Usando MEF, las aplicaciones .NET pueden avanzar de ser estáticamente compiladas a ser dinámicamente compuestas en runtime. Una aplicación MEF está compuesta de Parts que se exportan, se importan y se componen. http://www.codeplex.com/mef/

Parallel Programming in the .NET Framework: Son una serie de nuevas APIs que permiten al desarrollador trabajar con el software y paralelizar los componentes para sacar el máximo partido a toda la potencia que los procesadores de varios cores ofrecen. Veremos TPL (Task Parallel Library) que es la librería para trabajar con Task, que son las nuevas unidades mínimas de paralización (nunca más threads), también veremos PLINQ que nos ofrece que la posibilidad de ejecutar nuestras consultas de LINQ tradicionales en varios cores y con mínimo impacto en la modificación de nuestra query y para finalizar veremos las nuestras estructuras de datos para la programación paralela, como pilas, colas y listas.

Lugar:
Universidad de Deusto
Edificio ESIDE, Aula de videoconferencia (2º piso)
Avda Universidades, 24
48007, BILBAO

Traductor de recursos gratuito

Ayer mismo tuve el placer de participar en una charla organizada por SecondNug hablando sobre localización de aplicaciones.

Uno de los temas que salió, fue el tema de la traducción de recursos. Comenté que había una herramienta gratuita para la traducción de recursos que hace uso del sistema de traducción de Bing.

Aunque alguno ya lo comentó en la charla, la aplicación se llama “Scientia Resource Translator”.

Permite seleccionar un fichero de recursos y generar los ficheros de recursos en los idiomas seleccionadas. Soporta 20 idiomas.

image srt-lang

Por cierto, para aquellos que estéis interesados recordad que podéis ver o descargaros el WebCast.

PD:En breve espero poder publicar alguna otra cosa más que quedo pendiente…

Search Engine Optimization Toolkit

Hoy os hablo de una utilidad que aunque no es nueva, yo he descubierto recientemente y me parece bastante interesante; SEO Toolkit.

Esta utilidad permite analizar un website para optimizar el volumen y la calidad del tráfico que recibe desde los motores de búsqueda, como Bing o Google; para que los motores de búsqueda nos encuentren más fácil…

Una vez que lo instaléis, se añade como una opción más en la administración del Internet Information Server.

Una vez instalado, ya veréis que es muy sencillo utilizarlo.Sólo es necesario indicar la URL sobre la que hacer el análisis y ya está, a analizar los resultados y a optimizar tu site!

Por cierto, el WebSite que se analiza puede estar colgado en cualquier tipo de servidor, no tiene por qué ser IIS.

SearchOp

 SearchOp2

 SearchOp3

 SearchOp4

Espero que os sea de utilidad!

InstallShield Limited Edition para Visual Studio 2010

Hace poco que leía un  post sobre cómo hacer un instalador haciendo uso de los proyectos de Setup de Visual Studio.

Es importante conocer que una cosa interesante que nos llegará con Visual Studio 2010 será la posibilidad de contar con una versión limitada del InstallShield, una de las herramientas más completas para la generación de instaladores.

Para mí una gran noticia, ya que es una solución que he usado en más de una ocasión y me parece bastante interesante, sobre todo si hay una versión gratuita.

Para descargarse la versión limitada de InstallShield se debe hacer desde el siguiente menú: File>New>Project>Other Project Types> Setup and Deployment>InstallShield 2010

Será necesario registrarse para poder descargarse la versión.

  EnableInstallShield

 GoToInstallShieldSmall

NewProject

En el blog de Somasegar podéis encontrar el Post original dónde leí la noticia.

[Evento-SecondNUG] ¿Tus programas saben idiomas?

No sé qué extraña locura les ha movido, pero los chicos de Second Nug han vuelto a confiar en mí para realizar un WebCast, esta vez, hablando sobre localización de aplicaciones.

El próximo 19 de Enero, martes, tendré la oportunidad de hablaros sobre los aspectos principales a tener en cuenta para localizar nuestras aplicaciones.

El proceso de localización comprende todas las tareas asociadas al hecho de adaptar nuestro producto a una región o país específico; traducción de textos, formatos de fechas, monedas, unidades, etc.

Preparar tu aplicación para que pueda ser localizada no es una cuestión trivial y es importante conocer las implicaciones que este proceso supone y las diferentes alternativas con las que contamos.

En éste evento veremos de forma práctica las principales alternativas de las que disponemos para asegurarnos que nuestra aplicación esté preparada para ser localizada: Culturas, ficheros de recursos, cadenas en base de datos, trabajo con idiomas con caracteres extendidos, etc. ¿Estás preparado?

banner_localizacion

Para aquellos que estéis interesados en el evento os pongo unos enlaces que os resultarán útiles: