Prácticas recomendadas para desarrollar aplicaciones de uso internacional
Actualización: noviembre 2007
En esta sección se describen las procedimientos recomendados que hay que seguir al desarrollar aplicaciones de uso internacional.
Prácticas recomendadas de globalización
Haga que la aplicación sea Unicode internamente.
Utilice las clases que tienen en cuenta la referencia cultural proporcionadas por el espacio de nombres System.Globalization para manipular y aplicar formato a los datos.
Para ordenar, utilice las clases SortKey y CompareInfo.
Para las comparaciones de cadenas, utilice la clase CompareInfo.
Para el formato de fecha y hora, utilice la clase DateTimeFormatInfo.
Para aplicar formato numérico, utilice la claseNumberFormatInfo.
Para los calendarios gregorianos y los no gregorianos, utilice la clase Calendar o alguna de las implementaciones específicas de Calendar.
Utilice las configuraciones de propiedades de las referencias culturales proporcionadas por la clase System.Globalization.CultureInfo en las situaciones apropiadas. Utilice la propiedad CultureInfo.CurrentCulture para tareas de aplicación de formato, como aplicar formato de fecha y hora, o formato numérico. Para recuperar recursos, utilice la propiedad CultureInfo.CurrentUICulture. Tenga presente que las propiedades CurrentCulture y CurrentUICulture pueden establecerse para cada subproceso.
Habilite la aplicación para que lea y escriba datos a y desde diversas codificaciones mediante las clases de codificación del espacio de nombres System.Text. No suponga que los datos son ASCII. Dé por supuesto que se proporcionarán caracteres internacionales en cualquier parte donde el usuario pueda especificar texto. Por ejemplo, acepte caracteres internacionales en nombres de servidores, directorios, nombres de archivo, nombres de usuario y direcciones URL.
Cuando utilice la clase UTF8Encoding, por razones de seguridad se recomienda que utilice la característica de detección de errores que ofrece esta clase. Para activar la función de detección de errores, cree una instancia de la clase utilizando el constructor que toma el parámetro throwOnInvalidBytes y establezca su valor como true.
Cuando sea posible, trate las cadenas como cadenas enteras en lugar de como una serie de caracteres individuales. Esto es especialmente importante al ordenar o buscar subcadenas. De esta forma evitará problemas asociados con el análisis de caracteres combinados.
Muestre texto utilizando las clases proporcionadas por el espacio de nombres System.Drawing.
Por coherencia entre los sistemas operativos, no permita que la configuración de usuario invalide CultureInfo. Utilice el constructor CultureInfo que acepta un parámetro useUserOverride y establece su valor a false.
Pruebe la funcionalidad de la aplicación en versiones internacionales del sistema operativo utilizando datos internacionales.
Si una decisión de seguridad se basa en el resultado de una comparación de cadenas o una operación de cambio de mayúsculas y minúsculas, realice una operación que no tenga en cuenta las referencias culturales especificando explícitamente la propiedad CultureInfo.InvariantCulture. Esta práctica garantiza que el valor de CultureInfo.CurrentCulture no afecta al resultado. Vea Asignaciones personalizadas de mayúsculas y minúsculas, y reglas de ordenación para obtener un ejemplo que muestra cómo las comparaciones de cadenas que tienen en cuenta las referencias culturales pueden generar resultados incoherentes.
Prácticas recomendadas de localización
Traslade todos los recursos localizables a archivos DLL independientes que sean sólo de recursos. Entre los recursos localizables se incluyen los elementos de la interfaz de usuario como las cadenas, mensajes de error, cuadros de diálogo, menús y recursos de objetos incrustados.
No incluya en el código no modificable las cadenas o recursos de la interfaz de usuario.
No incluya recursos no localizables en archivos DLL que sean sólo de recursos. Esto produce confusión en los traductores.
No utilice cadenas compuestas que se generan en tiempo de ejecución a partir de frases concatenadas. La localización de las cadenas compuestas resulta difícil porque a menudo se da por supuesto un orden gramatical inglés que no se aplica a todos los idiomas.
Evite construcciones ambiguas, como "Empty Folder", donde las cadenas se pueden traducir de forma diferente según las funciones gramaticales de los componentes de las cadenas. Por ejemplo, "empty" puede ser tanto un verbo como un adjetivo y esto puede conducir a traducciones diferentes en idiomas como el italiano o el francés.
Evite utilizar en la aplicación imágenes e iconos que contengan texto. Su localización es costosa.
Prevea mucho espacio para expandir la longitud de las cadenas en la interfaz de usuario. En algunos idiomas, las frases pueden requerir entre el 50 y el 75 por ciento más de espacio.
Utilice la clase System.Resources.ResourceManager para recuperar recursos en función de la referencia cultural.
Utilice Microsoft Visual Studio 2005 para crear cuadros de diálogo de formularios Windows Forms, de manera que se puedan localizar mediante la herramienta Editor de recursos de Windows Forms (Winres.exe). No codifique los cuadros de diálogo de Windows Forms manualmente.
Organice una localización profesional (traducción).
Para obtener una descripción completa de cómo crear y adaptar los recursos, vea Recursos en aplicaciones.
Prácticas recomendadas de globalización para aplicaciones de ASP.NET
Establezca explícitamente las propiedades CurrentUICulture y CurrentCulture en su aplicación. No se base en valores predeterminados.
Tenga en cuenta que las aplicaciones de ASP.NET son administradas y, por lo tanto, pueden utilizar las mismas clases que otras aplicaciones administradas para recuperar, mostrar y tratar información basada en la referencia cultural.
Tenga presente que puede especificar los tres tipos siguientes de codificación en ASP.NET:
requestEncoding especifica la codificación que se recibe desde el explorador del cliente.
responseEncoding especifica la codificación que se envía al explorador del cliente. En la mayor parte de situaciones, debe ser igual que requestEncoding.
fileEncoding especifica la codificación predeterminada para el análisis de archivos .aspx, .asmx y .asax.
Especifique los valores para los atributos requestEncoding, responseEncoding, fileEncoding, culture y uiCulture en los siguientes tres lugares de la aplicación de ASP.NET:
En la sección de globalización de un archivo Web.config. Este archivo es externo a la aplicación de ASP.NET. Para obtener más información, vea Elemento <globalization>.
En una directiva de página. Tenga en cuenta que cuando una aplicación está en una página, el archivo ya se ha leído. Por lo tanto, es demasiado tarde para especificar fileEncoding y requestEncoding. Sólo uiCulture, Culture y responseEncoding se pueden especificar en una directiva de página.
Mediante programación en el código de la aplicación. Esta configuración puede cambiarse para cada solicitud. Como con la directiva de página, cuando se llega al código de la aplicación es demasiado tarde para especificar fileEncoding y requestEncoding. Sólo uiCulture, Culture y responseEncoding se pueden especificar en el código de la aplicación.
Tenga en cuenta que se puede establecer uiCulture como el idioma aceptado por el explorador. Para obtener información detallada, vea el ejemplo Trabajar con recursos del Tutorial rápido de ASP.NET.