Globalizar los formatos de fecha, hora y númeroGlobalize your date/time/number formats

Diseñe la aplicación para que esté preparada para el uso global mediante el formato adecuado de fechas, horas, números, números de teléfono y monedas.Design your app to be global-ready by appropriately formatting dates, times, numbers, phone numbers, and currencies. Después podrá adaptar su aplicación para obtener más referencias culturales, regiones y idiomas en el mercado mundial.You'll then be able later to adapt your app for additional cultures, regions, and languages in the global market.

IntroducciónIntroduction

Al crear la aplicación, si cree una idea más amplia que un único idioma y una referencia cultural, tendrá menos problemas inesperados (si los hay) cuando la aplicación crezca en nuevos mercados.When creating your app, if you think more broadly than a single language and culture then you'll have fewer (if any) unexpected issues when your app grows into new markets. Por ejemplo, elementos como las fechas, horarios, números, calendarios, monedas, números telefónicos, unidades de medida y tamaños de papel se pueden mostrar de diferente forma según la cultura o el idioma.For example, dates, times, numbers, calendars, currency, telephone numbers, units of measurement, and paper sizes are all items that can be displayed differently in different cultures or languages.

Las distintas regiones y referencias culturales usan diferentes formatos de fecha y hora.Different regions and cultures use different date and time formats. Incluyen convenciones para el orden del día y el 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.These include conventions for the order of day and month in the date, for the separation of hours and minutes in the time, and even for what punctuation is used as a separator. Además, las fechas se pueden mostrar en varios formatos largos ("miércoles, 28 de marzo de 2012") o formatos cortos ("3/28/12"), que varían en las referencias culturales.In addition, dates may be displayed in various long formats ("Wednesday, March 28, 2012") or short formats ("3/28/12"), which vary across cultures. Y, por supuesto, los nombres y las abreviaturas de los días de la semana y los meses del año difieren entre los idiomas.And, of course, the names and abbreviations for the days of the week and months of the year differ between languages.

Puede obtener una vista previa de los formatos usados para los distintos idiomas.You can preview the formats used for different languages. Vaya a configuración > hora & > región de idioma & idioma y haga clic en fecha adicional, hora, & configuración regional > cambiar los formatos de fecha, hora o número .Go to Settings > Time & Language > Region & language , and click Additional date, time, & regional settings > Change date, time, or number formats . En la pestaña formatos , seleccione un idioma en la lista desplegable formato y obtenga una vista previa de los formatos en ejemplos .On the Formats tab, select a language from the Format drop-down and preview the formats in Examples .

En este tema se usan los términos "lista de lenguaje de 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".This topic uses the terms "user profile language list", "app manifest language list", and "app runtime language list". Para obtener información detallada sobre exactamente lo que significan esos términos y cómo obtener acceso a sus valores, consulte comprender los lenguajes de Perfil de usuario y los lenguajes de manifiesto de aplicación.For details on exactly what those terms mean and how to access their values, see Understand user profile languages and app manifest languages.

Dar formato a las fechas y horas para la lista de idiomas del tiempo de ejecución de aplicacionesFormat dates and times for the app runtime language list

Si necesita permitir que los usuarios elijan una fecha, o para seleccionar una hora, use los controles estándar de calendario, fecha y hora.If you need to allow users to choose a date, or to select a time, then use the standard calendar, date, and time controls. 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.These automatically use the best date and time format for the app runtime language list.

Si necesita mostrar fechas u horas usted mismo, puede usar la clase DateTimeFormatter .If you need to display dates or times yourself then you can use the DateTimeFormatter class. 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.By default, DateTimeFormatter automatically uses the best date and time format for the app runtime language list. Por lo tanto, el código siguiente da formato a una fecha y hora determinada de la mejor manera para esa lista.So, the code below formats a given DateTime in the best way for that list. 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).As an example, assume that your app manifest language list includes English (United States), which is also your default, and German (Germany). Si la fecha actual es 6 2017 de noviembre y la lista de idioma del perfil de usuario contiene el alemán (Alemania) en primer lugar, el formateador dará "06.11.2017".If the current date is Nov 6 2017 and the user profile language list contains German (Germany) first, then the formatter gives "06.11.2017". Si la lista de idioma del perfil de usuario contiene el inglés (Estados Unidos) en primer lugar (o si no contiene el inglés ni el alemán), el formateador dará "11/6/2017" (ya que "en-US" coincide o se utiliza como valor predeterminado).If the user profile language list contains English (United States) first (or if it contains neither English nor German), then the formatter gives "11/6/2017" (since "en-US" matches, or is used as the default).

    // 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 equipo, como este.You can test the code above on your own PC like this.

Dar formato a las fechas y horas para la lista de idiomas del perfil de usuarioFormat dates and times for the user profile language list

Recuerde que, de forma predeterminada, DateTimeFormatter coincide con la lista de idiomas de tiempo de ejecución de la aplicación.Remember that, by default, DateTimeFormatter matches the app runtime language list. De este modo, si se muestran cadenas como "la fecha es la fecha < > ", el idioma coincidirá con el formato de fecha.That way, if you display strings such as "The date is <date>", then the language will match the date format.

Si, por cualquier motivo, desea dar formato a las fechas y horas solo según la lista de idiomas del perfil de usuario, puede hacerlo mediante código como el ejemplo siguiente.If for whatever reason you want to format dates and/or times only according to the user profile language list, then you can do that using code like the example below. Pero si lo hace así, comprenda que el usuario puede elegir un idioma para el que la aplicación no tenga cadenas traducidas.But if you do so then understand that the user can choose a language for which your app doesn't have translated strings. Por ejemplo, si la aplicación no está localizada en alemán (Alemania), pero el usuario la elige como su lenguaje preferido, esto podría dar lugar a la visualización de cadenas posiblemente impares, como "la fecha es 06.11.2017".For example, if your app is not localized into German (Germany), but the user chooses that as their preferred language, then that could result in the display of arguably odd-looking strings such as "The date is 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);

Da un formato adecuado a los números y a las monedasFormat numbers and currencies appropriately

Las diferentes culturas dan un formato distinto a los números.Different cultures format numbers differently. Entre esas diferencias de formato podemos encontrar la cantidad de decimales para mostrar, los caracteres usados como separadores decimales y el símbolo de moneda que se va a usar.Format differences may include how many decimal digits to display, what characters to use as decimal separators, and what currency symbol to use. Use las clases del espacio de nombres NumberFormatting para mostrar los números de decimales, porcentajes o de Percent y las monedas.Use classes in the NumberFormatting namespace to display decimal, percent, or permille numbers, and currencies. La mayoría de las veces, querrá que estas clases de formateador usen el mejor formato para el perfil de usuario.Most of the time, you will want these formatter classes to use the best format for the user profile. Sin embargo, puede usar los formateadores para mostrar una moneda para cualquier región o formato.But you may use the formatters to display a currency for any region or format.

En este ejemplo se muestra cómo mostrar monedas tanto por Perfil de usuario como por un determinado sistema de moneda.This example shows how to display currencies both per the user profile, and for a specific given currency system.

    // 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 equipo, cambie el país o región en configuración > hora & región de idioma > & > país o región de idioma.You can test the code above on your own PC by changing the country or region in Settings > Time & Language > Region & language > Country or region . Elija un país o región (quizás Islandia) y vuelva a ejecutar el código.Choose a country or region (perhaps Iceland), and run the code again.

Usa un calendario apropiado culturalmenteUse a culturally appropriate calendar

El calendario difiere según las regiones y los idiomas.The calendar differs across regions and languages. Ten en cuenta que el calendario gregoriano no es el predeterminado de todas las regiones.The Gregorian calendar is not the default for every region. Los usuarios de algunas regiones pueden elegir calendarios alternativos, como el calendario de la era japonesa o los calendarios lunares árabes.Users in some regions may choose alternate calendars, such as the Japanese era calendar, or Arabic lunar calendars. Las fechas y horas del calendario también distinguen entre distintas zonas horarias y el horario de verano.Dates and times on the calendar are also sensitive to different time zones and daylight-saving time.

Para asegurarse de que se usa el formato de calendario preferido, puede usar los controles estándar de calendario, fecha y hora.To ensure that the preferred calendar format is used, you can use the standard calendar, date, and time controls. En escenarios más complejos, es posible que sea necesario trabajar directamente con las operaciones en fechas del calendario, Windows. Globalization proporciona una clase de calendario que proporciona una representación de calendario adecuada para la referencia cultural, región y tipo de calendario especificados.For more complex scenarios, where working directly with operations on calendar dates may be required, Windows.Globalization provides a Calendar class that gives an appropriate calendar representation for the given culture, region, and calendar type.

Da un formato adecuado a los números de teléfonoFormat phone numbers appropriately

Los números de teléfono tienen un formato diferente según la región.Phone numbers are formatted differently across regions. 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.The number of digits, how the digits are grouped, and the significance of certain parts of the phone number vary between countries. A partir de Windows 10, versión 1607, puede usar las clases del espacio de nombres PhoneNumberFormatting para dar formato adecuado a los números de teléfono para la región actual.Starting in Windows 10, version 1607, you can use classes in the PhoneNumberFormatting namespace to format phone numbers appropriately for the current region.

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. compara dos números para determinar si son iguales; 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.PhoneNumberInfo parses a string of digits and allows you to: determine whether the digits are a valid phone number in the current region; compare two numbers for equality; and to extract the different functional parts of the phone number, such as country code or geographical area code.

PhoneNumberFormatter da formato a una cadena de dígitos o un PhoneNumberInfo para su presentación, incluso cuando la cadena de dígitos representa un número de teléfono parcial.PhoneNumberFormatter formats a string of digits or a PhoneNumberInfo for display, even when the string of digits represents a partial phone number. Puede usar este formato de número parcial para dar formato a un número cuando un usuario escribe el número.You can use this partial number formatting to format a number as a user is entering the number.

En el ejemplo siguiente se muestra cómo usar PhoneNumberFormatter para dar formato a un número de teléfono a medida que se escribe.The example below shows how to use PhoneNumberFormatter to format a phone number as it is being entered. Cada vez que cambia el texto en un cuadro de texto denominado phoneNumberInputTextBox, se da formato al contenido del cuadro de texto mediante la región predeterminada actual y se muestra en un TextBlock denominado phoneNumberOutputTextBlock.Each time text changes in a TextBox named phoneNumberInputTextBox, the contents of the text box are formatted using the current default region and displayed in a TextBlock named phoneNumberOutputTextBlock. Para fines de demostración, la cadena también tiene el formato que usa la región para Nueva Zelanda y se muestra en un TextBlock denominado phoneNumberOutputTextBlockNZ.For demonstration purposes, the string is also formatted using the region for New Zealand, and displayed in a TextBlock named 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 equipo, cambie el país o región en configuración > hora & región de idioma > & > país o región de idioma.You can test the code above on your own PC by changing the country or region in Settings > Time & Language > Region & language > Country or region . Elija un país o región (quizás Nueva Zelanda para confirmar que los formatos coinciden) y vuelva a ejecutar el código.Choose a country or region (perhaps New Zealand to confirm that the formats match), and run the code again. En el caso de los datos de prueba, puede realizar una búsqueda web para el número de teléfono de una empresa en Nueva Zelanda.For test data, you can do a web search for the phone number of a business in New Zealand.

El idioma y las preferencias culturales del usuarioThe user's language and cultural preferences

En el caso de los escenarios en los que desea proporcionar una funcionalidad diferente basada únicamente en el idioma, la región o las preferencias culturales del usuario, Windows le ofrece una forma de acceder a estas preferencias, a través de Windows.SysTEM. UserProfile. GlobalizationPreferences.For scenarios where you wish to provide different functionality based solely on the user's language, region, or cultural preferences, Windows gives you a way to access those preferences, through Windows.System.UserProfile.GlobalizationPreferences. Cuando sea necesario, usa la clase GlobalizationPreferences para conseguir el valor de la región geográfica actual del usuario, sus idiomas preferidos, monedas preferidas, etc.When needed, use the GlobalizationPreferences class to get the value of the user's current geographic region, preferred languages, preferred currencies, and so on. Pero recuerde que si las imágenes o cadenas 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.But remember that if your app's strings/images aren't localized for the user's preferred language then dates and times and other data formatted for that preferred language won't match the strings that you display.

API importantesImportant APIs

EjemplosSamples