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

| Microsoft MSDN France | Jérôme Lambert |

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

Commentez cet article : Commentez ♪

- Titre : Quel service Windows 7 permet de faire de la reconnaissance de langages ?

- Auteurs : Microsoft MSDN France, Jérôme Lambert

- Parution : 25 avril 2010

- Licence : Copyright ® 2011 Microsoft MSDN France. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.

Sommaire

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

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#

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

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++

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#

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

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++

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

- Pour les exemples en C# et VB.NET vous devez avoir téléchargé WindowsAPICodePack http://code.msdn.microsoft.com/WindowsAPICodePack

- MSDN : http://msdn.microsoft.com/fr-fr/windows/default.aspx

- Le coach Windows 7 : http://msdn.microsoft.com/fr-fr/windows/msdn.coach.windows7

- Kit de développement pour Windows 7 : http://msdn.microsoft.com/fr-fr/windows/gg398052.aspx