IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Quel service Windows 7 permet de faire de la reconnaissance de langages ?

Toutes les semaines un peu de code pour aller plus loin avec Windows 7

Retrouvez l'intégralité des questions / réponses sur le développement sous Windows 7 dans l'article suivant.

Commentez cet article : 41 commentaires Donner une note à l´article (5)

Article lu   fois.

Les deux auteurs

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Quel service Windows 7 permet de faire de la reconnaissance de langages ?

Bien que le support des langages dans Windows (NLS) n'a fait que s'accroitre de version en version, les développeurs qui produisent des composants et des applications et qui visent différents marchés internationaux ont toujours été à la recherche de plus en plus de fonctionnalités. Fonctionnalités qui leur permettraient de développer des applications qui réagissent mieux, en fonction du langage ou des langages de l'utilisateur. Avec les services linguistiques étendus (ELS pour faire court), Microsoft met à disposition des développeurs, une plate-forme et des API qui permettent :

  • de détecter le langage de l'utilisateur, par exemple lorsqu'il saisit du texte ;
  • de détecter plusieurs types de caractères dans une chaîne (ex-Latin, Cyrillique, ou autre) ;
  • des conversions (Une translittération) de type de caractère vers un autre. Par exemple du cyrillique vers du latin ou vice-versa, du bengali vers du latin, etc.

Cette fonctionnalité n'est disponible qu'à partir de Windows 7.

Énumération des services disponibles C#
Sélectionnez
public static void EnumerationServices()
{
        MappingEnumOptions enumOptions = new MappingEnumOptions();
        MappingService[] transliterationServices = MappingService.GetServices(enumOptions);
        foreach (MappingService service in transliterationServices)
        {
        Console.WriteLine("Service : {0} ", service.Description);
        }
}
Énumération des services disponibles VB.NET
Sélectionnez
Public Shared Sub EnumerationServices()
    Dim enumOptions As New MappingEnumOptions
    Dim transliterationServices As MappingService() = MappingService.GetServices(enumOptions)
    Dim service As MappingService
    For Each service In transliterationServices
        Console.WriteLine("Service : {0} ", service.Description)
    Next
End Sub
Énumération des services disponibles C++
Sélectionnez
void static EnumerationServices()
{
    PMAPPING_SERVICE_INFO   prgServices = NULL;
    DWORD                   dwServicesCount = 0;
    HRESULT                 hr;        
    hr = MappingGetServices(NULL, &prgServices, &dwServicesCount);
    if (SUCCEEDED(hr))
    {
        for (DWORD i = 0; i < dwServicesCount; ++i)
        {
            
            wprintf(L"Service : %ws\n", prgServices[i].pszDescription);
        }
        MappingFreeServices(prgServices);
    }
}
Détection d'un langage C#
Sélectionnez
public static void DetecterLangage()
{
    MappingService languageDetection = new MappingService(MappingAvailableServices.LanguageDetection);
    using (MappingPropertyBag bag =
        languageDetection.RecognizeText("??? ?? ??????????", null))
    {
        string[] languages = bag.GetResultRanges()[0].FormatData(
                            new StringArrayFormatter());
        foreach (string language in languages)
            {
                Console.WriteLine("Langage reconnu : {0}", language);
            }
    }
}
Détection d'un langage VB.NET
Sélectionnez
Public Shared Sub DetecterLangage()
Dim languageDetection As New MappingService(MappingAvailableServices.LanguageDetection)
    Using bag As MappingPropertyBag = languageDetection.RecognizeText("??? ?? ??????????"), Nothing)
Dim languages As String() = bag.GetResultRanges(0).FormatData(Of String())(New StringArrayFormatter)
        Dim language As String
        For Each language In languages
            Console.WriteLine("Langage reconnu : {0}", language)
        Next
    End Using
End Sub
Détection d'un langage C++
Sélectionnez
void DetecterLangage()
{
    LPCWSTR texte=L"??? ?? ??????????";
    MAPPING_ENUM_OPTIONS    EnumOptions;
    PMAPPING_SERVICE_INFO   prgServices = NULL;
    DWORD                   dwServicesCount = 0;
    HRESULT hr;

    ZeroMemory(&EnumOptions, sizeof (MAPPING_ENUM_OPTIONS));
    EnumOptions.Size = sizeof (MAPPING_ENUM_OPTIONS);
    EnumOptions.pGuid = (GUID *)&ELS_GUID_LANGUAGE_DETECTION;
    hr = MappingGetServices(&EnumOptions, &prgServices, &dwServicesCount);
    if (SUCCEEDED(hr))
    {
        MAPPING_PROPERTY_BAG bag;
        ZeroMemory(&bag, sizeof (MAPPING_PROPERTY_BAG));
        bag.Size = sizeof (MAPPING_PROPERTY_BAG);
        hr=MappingRecognizeText (&prgServices[0],texte,wcslen (texte),0,NULL,&bag);
        WCHAR * p;
        for (p = (WCHAR *)bag.prgResultRanges[0].pData; *p; p += wcslen(p) + 1)
        {
         printf("%ws\n", p);
        }
        hr = MappingFreePropertyBag(&bag);
    }
}

Pour plus d'infos

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2011 Microsoft MSDN France. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.