Compartir a través de


Globalización de 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. Posteriormente, podrá adaptar su aplicación para incluir culturas, regiones e idiomas adicionales en el mercado global.

Introducción

Al crear la aplicación, si piensas más ampliamente que un solo idioma y una referencia cultural, tendrás menos problemas inesperados (si los hay) 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 referencias culturales 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 ("3/28/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>, y haga clic en Fecha, hora y configuración> regionalCambiar formatos de fecha, hora o número adicionales. 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 en tiempo de ejecución de la aplicación". Para obtener información detallada sobre exactamente qué significan esos términos y cómo acceder a sus valores, consulte Descripción de los lenguajes de perfil de usuario y los lenguajes de manifiesto de la aplicación.

Formatear las fechas y horas para la lista de idiomas durante la ejecución de la aplicación

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

Si necesita mostrar fechas o horas usted mismo, puede usar la clase DateTimeFormatter . De forma predeterminada, DateTimeFormatter usa automáticamente el mejor formato de fecha y hora para la lista de idiomas de tiempo de ejecución 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 el 6 de noviembre 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 primero inglés (Estados Unidos) (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;

Puedes probar el código anterior en tu propio PC de esta manera.

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

Recuerde que, de forma predeterminada, DateTimeFormatter coincide con la lista de lenguajes en tiempo de ejecución 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 desea dar formato a fechas o 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 haces, entiendes 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 al alemán (Alemania), pero el usuario elige ese idioma como su preferido, esto podría dar lugar a la presentación de cadenas de texto inusuales, 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

Diferentes culturas formatean números de manera diferente. Las diferencias de formato pueden incluir cuántos dígitos decimales se van a mostrar, qué caracteres usar como separadores decimales y qué símbolo de moneda se va a usar. 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 usar 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;

Puede probar el código anterior en su propio PC cambiando 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.

Usar 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 usa el formato de calendario preferido, puede usar los controles estándar de calendario, fecha y hora. 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 referencia cultural, la región y el tipo de calendario especificados.

Formatea los números de teléfono adecuadamente

Los números 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 o regiones. A partir de Windows 10, versión 1607, puedes usar clases en el espacio de nombres PhoneNumberFormatting para dar formato a los números de teléfono correctamente para la región actual.

PhoneNumberInfo analiza una cadena de dígitos y le 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 phoneNumberInfo para su visualización, incluso cuando la cadena de dígitos representa un número de teléfono parcial. Puede usar este formato de número parcial para dar formato a un número mientras un usuario escribe el número.

En el ejemplo siguiente se muestra cómo usar PhoneNumberFormatter para dar formato a un número de teléfono tal como se está especificando. Cada vez que el texto cambia en un textBox denominado phoneNumberInputTextBox, el contenido del cuadro de texto se da formato mediante la región predeterminada actual y se muestra en un TextBlock denominado phoneNumberOutputTextBlock. Con fines de demostración, la cadena también se formatea utilizando la región para Nueva Zelanda y se muestra en un TextBlock llamado 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);
        }
    }

Puede probar el código anterior en su propio PC cambiando 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 realizar una búsqueda web del número de teléfono de una empresa en Nueva Zelanda.

Idioma y preferencias culturales del usuario

En escenarios en los que desea proporcionar diferentes funcionalidades basadas únicamente en las preferencias culturales, región o idioma del usuario, Windows le ofrece una manera de acceder a esas preferencias, a través de 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

Muestras