Globalizar los formatos de fecha, hora y número

Diseñe la aplicación para que esté lista para todo el mundo mediante el formato adecuado de fechas, horas, números, números de teléfono y monedas. A continuación, podrá adaptar la aplicación más adelante para culturas, regiones e idiomas adicionales en el mercado global.

Introducción

Al crear la aplicación, si adopta una perspectiva más amplia que un solo idioma y cultura, tendrá menos problemas inesperados (en caso de que los haya) cuando la aplicación crezca en nuevos mercados. Por ejemplo, fechas, horas, números, calendarios, moneda, números de teléfono, unidades de medida y tamaños de papel son todos los elementos que se pueden mostrar de forma diferente en diferentes culturas o idiomas.

Las distintas regiones y culturas usan diferentes formatos de fecha y hora. Incluyen convenciones para el orden de día y mes de la fecha, para la separación de horas y minutos en el tiempo, e incluso para qué puntuación se usa como separador. Además, las fechas pueden mostrarse en varios formatos largos ("miércoles, 28 de marzo de 2012") o formatos cortos ("28/3/12"), que varían en todas las culturas. Y, por supuesto, los nombres y abreviaturas de los días de la semana y los meses del año difieren entre idiomas.

Puede obtener una vista previa de los formatos usados para diferentes idiomas. Vaya a Configuración>Hora e idioma>Región e idioma y haga clic en Configuración adicional de fecha, hora y región>Cambiar formatos de fecha, hora y números. En la pestaña Formatos, seleccione un idioma en la lista desplegable Formato y obtenga una vista previa de los formatos en Ejemplos.

En este tema se utilizan los términos "lista de idiomas del perfil de usuario", "lista de idiomas del manifiesto de la aplicación" y "lista de idiomas del tiempo de ejecución de la aplicación". Para información detallada sobre el significado exacto de esos términos y cómo acceder a sus valores, consulte Descripción de los idiomas de perfil de usuario y los idiomas de manifiesto de la aplicación.

Dar formato a las fechas y horas de la lista de idiomas del runtime de la aplicación

Si necesita permitir a los usuarios elegir una fecha o seleccionar una hora, use los controles de calendario, fecha y hora estándar. Estos usan automáticamente el mejor formato de fecha y hora para la lista de idiomas del runtime de la aplicación.

Si necesita mostrar fechas u horas, puede usar la clase DateTimeFormatter. De manera predeterminada, DateTimeFormatter usa automáticamente el mejor formato de fecha y hora para la lista de idiomas del runtime de la aplicación. Por lo tanto, el código siguiente da formato a un elemento DateTime determinado de la mejor manera para esa lista. Por ejemplo, supongamos que la lista de idiomas del manifiesto de la aplicación incluye inglés (Estados Unidos), que también es el valor predeterminado y alemán (Alemania). Si la fecha actual es noviembre 6 de 2017 y la lista de idiomas del perfil de usuario contiene primero alemán (Alemania), el formateador da "06.11.2017". Si la lista de idiomas del perfil de usuario contiene inglés (Estados Unidos) primero (o si no contiene inglés ni alemán), el formateador da "11/6/2017" (ya que "en-US" coincide o se usa como valor predeterminado).

    // Use the DateTimeFormatter class to display dates and times using basic formatters.

    var shortDateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shortdate");
    var shortTimeFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shorttime");

    var dateTimeToFormat = DateTime.Now;

    var shortDate = shortDateFormatter.Format(dateTimeToFormat);
    var shortTime = shortTimeFormatter.Format(dateTimeToFormat);

    var results = "Short Date: " + shortDate + "\n" +
                  "Short Time: " + shortTime;

Puede probar el código anterior en su propio PC como este.

  • Asegúrese de que tiene archivos de recursos en el proyecto calificado para "en-US" y "de-DE" (consulte Adaptar los recursos al idioma, escala, contraste alto y otros calificadores).
  • Cambie la lista de idiomas del perfil de usuario en Configuración>Hora e idioma>Región e idioma>Idiomas. Agregue alemán (Alemania), haga que sea el valor predeterminado y vuelva a ejecutar el código.

Dar formato a las fechas y horas de la lista de idiomas del perfil de usuario

Recuerde que, de manera predeterminada, DateTimeFormatter coincide con la lista de idiomas del runtime de la aplicación. De este modo, si muestra cadenas como "La fecha es <fecha>", el idioma coincidirá con el formato de fecha.

Si por cualquier motivo quiere dar formato a fechas u horas solo según la lista de idiomas del perfil de usuario, puede hacerlo con código como en el ejemplo siguiente. Pero si lo hace, comprenda que el usuario puede elegir un idioma para el que la aplicación no tenga cadenas traducidas. Por ejemplo, si la aplicación no está localizada en alemán (Alemania), pero el usuario lo elige como su idioma preferido, esto podría dar lugar a que se muestren cadenas de aspecto extraño, como "La fecha es 06.11.2017".

    // Use the DateTimeFormatter class to display dates and times using basic formatters.

    var userLanguages = Windows.System.UserProfile.GlobalizationPreferences.Languages;

    var shortDateFormatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter("shortdate", userLanguages);

    var results = "Short Date: " + shortDateFormatter.Format(DateTime.Now);

Dar formato a números y monedas adecuadamente

Culturas diferentes dan formato a los números de forma diferente. Las diferencias de formato pueden incluir cuántos dígitos decimales se van a mostrar, qué caracteres utilizar como separadores decimales y qué símbolo de moneda se va a utilizar. Use clases en el espacio de nombres NumberFormatting para mostrar números decimales, porcentajes o números por mil y monedas. La mayoría de las veces, querrá que estas clases de formateadores usen el mejor formato para el perfil de usuario. Pero puede utilizar los formateadores para mostrar una moneda para cualquier región o formato.

En este ejemplo se muestra cómo mostrar las monedas tanto por el perfil de usuario como para un sistema de moneda determinado específico.

    // This scenario uses the CurrencyFormatter class to format a number as a currency.

    var userCurrency = Windows.System.UserProfile.GlobalizationPreferences.Currencies[0];

    var valueToBeFormatted = 12345.67;

    var userCurrencyFormatter = new Windows.Globalization.NumberFormatting.CurrencyFormatter(userCurrency);
    var userCurrencyValue = userCurrencyFormatter.Format(valueToBeFormatted);

    // Create a formatter initialized to a specific currency,
    // in this case US Dollar (specified as an ISO 4217 code) 
    // but with the default number formatting for the current user.
    var currencyFormatUSD = new Windows.Globalization.NumberFormatting.CurrencyFormatter("USD");
    var currencyValueUSD = currencyFormatUSD.Format(valueToBeFormatted);

    // Create a formatter initialized to a specific currency.
    // In this case it's the Euro with the default number formatting for France.
    var currencyFormatEuroFR = new Windows.Globalization.NumberFormatting.CurrencyFormatter("EUR", new[] { "fr-FR" }, "FR");
    var currencyValueEuroFR = currencyFormatEuroFR.Format(valueToBeFormatted);

    // Results for display.
    var results = "Fixed number (" + valueToBeFormatted + ")\n" +
                    "With user's default currency: " + userCurrencyValue + "\n" +
                    "Formatted US Dollar: " + currencyValueUSD + "\n" +
                    "Formatted Euro (fr-FR defaults): " + currencyValueEuroFR;

Para probar el código anterior en su propio PC, cambie el país o región en Configuración>Hora e idioma>Región e idioma>País o región. Elija un país o región (quizás Islandia) y vuelva a ejecutar el código.

Utilizar un calendario adecuado culturalmente

El calendario difiere entre regiones e idiomas. El calendario gregoriano no es el valor predeterminado para cada región. Los usuarios de algunas regiones pueden elegir calendarios alternativos, como el calendario de la era japonesa o calendarios lunares árabes. Las fechas y horas del calendario también son sensibles a diferentes zonas horarias y horario de verano.

Para asegurarse de que se utiliza el formato de calendario preferido, puede usar los controles de calendario, fecha y hora estándar. Para escenarios más complejos, en los que puede ser necesario trabajar directamente con operaciones en fechas de calendario, Windows.Globalization proporciona una clase Calendar que proporciona una representación de calendario adecuada para la cultura, la región y el tipo de calendario especificados.

Dar formato a los números de teléfono adecuadamente

Los número de teléfono tienen un formato diferente entre regiones. El número de dígitos, cómo se agrupan los dígitos y la importancia de ciertas partes del número de teléfono varían entre países. A partir de Windows 10, versión 1607, puede utilizar clases en el espacio de nombres PhoneNumberFormatting para dar formato a los números de teléfono de forma adecuada para la región actual.

PhoneNumberInfo analiza una cadena de dígitos y permite: determinar si los dígitos son un número de teléfono válido en la región actual; comparar dos números para la igualdad; y para extraer las distintas partes funcionales del número de teléfono, como el código de país o el código de área geográfica.

PhoneNumberFormatter da formato a una cadena de dígitos o un elemento PhoneNumberInfo para mostrar, incluso cuando la cadena de dígitos representa un número de teléfono parcial. Puedes utilizar este formato de número parcial para dar formato a un número mientras un usuario lo introduce.

En el ejemplo siguiente se muestra cómo usar PhoneNumberFormatter para dar formato a un número de teléfono tal como se especifica. Cada vez que el texto cambia en un elemento TextBox denominado phoneNumberInputTextBox, se da formato al contenido del cuadro de texto mediante la región predeterminada actual y se muestra en un elemento TextBlock denominado phoneNumberOutputTextBlock. Con fines de demostración, se da formato a la cadena mediante el uso de la región para Nueva Zelanda y se muestra en un elemento TextBlock denominado phoneNumberOutputTextBlockNZ.

    using Windows.Globalization.PhoneNumberFormatting;

    PhoneNumberFormatter currentFormatter, NZFormatter;

    public MainPage()
    {
        this.InitializeComponent();

        // Use the default formatter for the current region
        this.currentFormatter = new PhoneNumberFormatter();

        // Create an explicit formatter for New Zealand. 
        PhoneNumberFormatter.TryCreate("NZ", out this.NZFormatter);
    }

    private void phoneNumberInputTextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        // Format for the default region.
        this.phoneNumberOutputTextBlock.Text = currentFormatter.FormatPartialString(this.phoneNumberInputTextBox.Text);

        // If the NZFormatter was created successfully, format the partial string for the NZ TextBlock.
        if(this.NZFormatter != null)
        {
            this.phoneNumberOutputTextBlockNZ.Text = this.NZFormatter.FormatPartialString(this.phoneNumberInputTextBox.Text);
        }
    }

Para probar el código anterior en su propio PC, cambie el país o región en Configuración>Hora e idioma>Región e idioma>País o región. Elija un país o región (quizás Nueva Zelanda para confirmar que coinciden los formatos) y vuelva a ejecutar el código. Para los datos de prueba, puede hacer una búsqueda web del número de teléfono de una empresa en Nueva Zelanda.

Preferencias de idioma y cultura del usuario

En escenarios en los que desea proporcionar diferentes funcionalidades basadas únicamente en las preferencias de cultura, región o idioma del usuario, Windows le ofrece una manera de acceder a esas preferencias, a través Windows.System.UserProfile.GlobalizationPreferences. Cuando sea necesario, use la clase GlobalizationPreferences para obtener el valor de la región geográfica actual del usuario, los idiomas preferidos, las monedas preferidas, etc. Pero recuerde que si las cadenas o imágenes de la aplicación no están localizadas para el idioma preferido del usuario, las fechas y horas y otros datos con formato para ese idioma preferido no coincidirán con las cadenas que se muestran.

API importantes

Ejemplos