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.
public static void EnumerationServices()
{
MappingEnumOptions enumOptions = new MappingEnumOptions();
MappingService[] transliterationServices = MappingService.GetServices(enumOptions);
foreach (MappingService service in transliterationServices)
{
Console.WriteLine("Service : {0} ", service.Description);
}
}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 Subvoid 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);
}
}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);
}
}
}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 Subvoid 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




