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
Sub
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);
}
}
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
Sub
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