Globaliser vos formats de date/heure/chiffres

Concevez votre application comme étant prête à l’échelle mondiale en mettant en forme les dates, les heures, les numéros, les numéros de téléphone et les devises. Vous pourrez ensuite adapter votre application à d’autres cultures, régions et langues sur le marché mondial.

Introduction

Lorsque vous créez votre application, si vous pensez plus largement qu’une langue et une culture uniques, vous aurez moins (le cas échéant) de problèmes inattendus lorsque votre application s’étend sur de nouveaux marchés. Par exemple, les dates, les heures, les nombres, les calendriers, les devises, les numéros de téléphone, les unités de mesure et les tailles de papier sont tous des éléments qui peuvent être affichés différemment dans différentes cultures ou langues.

Différentes régions et cultures utilisent différents formats de date et d’heure. Elles incluent des conventions pour l’ordre du jour et du mois dans la date, pour la séparation des heures et des minutes dans l’heure, et même pour la ponctuation utilisée comme séparateur. De plus, les dates peuvent être affichées dans différents formats longs (« Mercredi, 28 mars 2012 ») ou formats courts (« 28/03/12 »), qui varient selon les cultures. Bien entendu, les noms et abréviations des jours de la semaine et des mois de l’année diffèrent entre les langues.

Vous pouvez afficher un aperçu des formats utilisés pour différentes langues. Accédez à Paramètres> Langue et langue>, puis cliquez sur Autres paramètres>de date, d’heure et de région Modifier la date, l’heure ou les formats de nombre. Sous l’onglet Formats, sélectionnez une langue dans la liste déroulante Format et affichez un aperçu des formats dans Exemples.

Cette rubrique utilise les termes « liste de langues de profil utilisateur », « liste de langues du manifeste de l’application » et « liste de langues du runtime d’application ». Pour plus d’informations sur exactement ce que signifient ces termes et sur la façon d’accéder à leurs valeurs, consultez Comprendre les langues de profil utilisateur et les langues du manifeste de l’application.

Mettre en forme les dates et les heures de la liste de langues du runtime d’application

Si vous devez autoriser les utilisateurs à choisir une date ou à sélectionner une heure, utilisez le calendrier standard, la date et les contrôles d’heure. Celles-ci utilisent automatiquement le meilleur format de date et d’heure pour la liste de langues du runtime d’application.

Si vous devez afficher des dates ou des heures vous-même, vous pouvez utiliser la classe DateTimeFormatter. Par défaut, DateTimeFormatter utilise automatiquement le meilleur format de date et d’heure pour la liste de langues du runtime d’application. Par conséquent, le code ci-dessous met en forme un DateTime donné de la meilleure façon pour cette liste. Par exemple, supposons que votre liste de langues de manifeste de l’application inclut l’anglais (États-Unis), qui est également votre valeur par défaut et l’allemand (Allemagne). Si la date actuelle est le 6 novembre 2017 et que la liste des langues de profil utilisateur contient d’abord l’allemand (Allemagne), le formateur donne « 06.11.2017 ». Si la liste de langues du profil utilisateur contient d’abord l’anglais (États-Unis) (ou s’il ne contient ni l’anglais ni l’allemand), le formateur donne « 11/06/2017 » (étant donné que « en-US » correspond ou est utilisé comme valeur par défaut).

    // 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;

Vous pouvez tester le code ci-dessus sur votre propre PC comme celui-ci.

Mettre en forme les dates et les heures de la liste des langues du profil utilisateur

N’oubliez pas que, par défaut, DateTimeFormatter correspond à la liste des langues du runtime d’application. De cette façon, si vous affichez des chaînes telles que « La date est <la date> », la langue correspond au format de date.

Si, pour une raison quelconque, vous souhaitez mettre en forme des dates et/ou des heures uniquement en fonction de la liste de langues du profil utilisateur, vous pouvez le faire à l’aide de code comme dans l’exemple ci-dessous. Toutefois, si vous le faites, comprenez que l’utilisateur peut choisir une langue pour laquelle votre application n’a pas de chaînes traduites. Par exemple, si votre application n’est pas localisée en allemand (Allemagne), mais que l’utilisateur choisit cela comme langue préférée, cela peut entraîner l’affichage de chaînes sans doute impaires telles que « La date est 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);

Mettre en forme les nombres et les devises de manière appropriée

Différentes cultures mettez en forme les nombres différemment. Les différences de format peuvent inclure le nombre de chiffres décimaux à afficher, les caractères à utiliser comme séparateurs décimaux et le symbole monétaire à utiliser. Utilisez des classes dans l’espace de noms NumberFormatting pour afficher des nombres décimaux, pourcentages ou permille et devises. La plupart du temps, vous souhaiterez que ces classes de formateur utilisent le meilleur format pour le profil utilisateur. Toutefois, vous pouvez utiliser les formateurs pour afficher une devise pour n’importe quelle région ou format.

Cet exemple montre comment afficher des devises à la fois par profil utilisateur et pour un système monétaire donné spécifique.

    // 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;

Vous pouvez tester le code ci-dessus sur votre propre PC en modifiant le pays ou la région dans Paramètres>Heure et langue>Région et langue>Pays ou région. Choisissez un pays ou une région (peut-être l’Islande) et réexécutez le code.

Utiliser un calendrier adapté à la culture

Le calendrier diffère entre les régions et les langues. Le calendrier grégorien n’est pas la valeur par défaut pour chaque région. Les utilisateurs de certaines régions peuvent choisir d’autres calendriers, tels que le calendrier de l’ère japonaise ou les calendriers lunaires arabes. Les dates et heures du calendrier sont également sensibles aux différents fuseaux horaires et à l’heure d’été.

Pour vous assurer que le format de calendrier préféré est utilisé, vous pouvez utiliser les contrôles de calendrier, de date et d’heure standard. Pour les scénarios plus complexes, où l’utilisation directe d’opérations sur les dates de calendrier peut être requise, Windows.Globalization fournit une classe Calendar qui fournit une représentation de calendrier appropriée pour la culture, la région et le type de calendrier donnés.

Mettre en forme les numéros de téléphone de manière appropriée

Téléphone nombres sont mis en forme différemment entre les régions. Le nombre de chiffres, la façon dont les chiffres sont regroupés et l’importance de certaines parties du numéro de téléphone varient entre les pays. À compter de Windows 10, version 1607, vous pouvez utiliser des classes dans l’espace de noms PhoneNumberFormatting pour mettre en forme les numéros de téléphone de manière appropriée pour la région actuelle.

PhoneNumberInfo analyse une chaîne de chiffres et vous permet de déterminer si les chiffres sont un numéro de téléphone valide dans la région actuelle ; comparer deux nombres pour l’égalité ; et pour extraire les différentes parties fonctionnelles du numéro de téléphone, telles que le code de pays ou le code de zone géographique.

PhoneNumberFormatter met en forme une chaîne de chiffres ou un PhoneNumberInfo pour l’affichage, même lorsque la chaîne de chiffres représente un numéro de téléphone partiel. Vous pouvez utiliser cette mise en forme de nombre partiel pour mettre en forme un nombre en tant qu’utilisateur entrant le nombre.

L’exemple ci-dessous montre comment utiliser PhoneNumberFormatter pour mettre en forme un numéro de téléphone tel qu’il est entré. Chaque fois que le texte change dans une TextBox nommée phoneNumberInputTextBox, le contenu de la zone de texte est mis en forme à l’aide de la région par défaut actuelle et affiché dans un TextBlock nommé phoneNumberOutputTextBlock. À des fins de démonstration, la chaîne est également mise en forme à l’aide de la région pour la Nouvelle-Zélande et affichée dans un TextBlock nommé 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);
        }
    }

Vous pouvez tester le code ci-dessus sur votre propre PC en modifiant le pays ou la région dans Paramètres>Heure et langue>Région et langue>Pays ou région. Choisissez un pays ou une région (peut-être en Nouvelle-Zélande pour confirmer que les formats correspondent) et réexécutez le code. Pour les données de test, vous pouvez effectuer une recherche web pour le numéro de téléphone d’une entreprise en Nouvelle-Zélande.

Préférences linguistiques et culturelles de l’utilisateur

Pour les scénarios où vous souhaitez fournir différentes fonctionnalités basées uniquement sur la langue, la région ou les préférences culturelles de l’utilisateur, Windows vous permet d’accéder à ces préférences, via Windows.System.UserProfile.GlobalizationPreferences. Si nécessaire, utilisez la classe GlobalizationPreferences pour obtenir la valeur de la région géographique actuelle de l’utilisateur, les langues préférées, les devises préférées, et ainsi de suite. Mais n’oubliez pas que si les chaînes/images de votre application ne sont pas localisées pour la langue préférée de l’utilisateur, les dates et les heures et les autres données mises en forme pour cette langue préférée ne correspondent pas aux chaînes que vous affichez.

API importantes

Exemples