Minden böngészőben beállítható, hogy működése során milyen értéket küldjön az “Accept-Language” headerben a webszervernek. Sok webalkalmazás ez alapján dönti el, hogy milyen nyelvű felhasználói felületet renderel a böngészőnek küldött válaszba.
Néhány kulturált webalakalmazásban azt is be lehet állítani, hogy mi legyen az alapértelmezett nyelv arra az esetre, ha a böngésző olyat kér, amit az alkalmazás nem támogat. De sok webalkalmazásnál sajnos nincs lehetőségünk az alapértelmezett nyelv állítására. Ilyenkor megoldás lehet a bejövő kérések “Accept-Language” headerjének áthamisítása arra az értékre, amit alapértelmezettnek szeretnénk tudni. A “hamisítás” egy ISAPI filterben történik, mely beültethető a bejövő kérések útjába.
A lenti kódrészlet ezt teszi. Ha az “Accept-Language” header értéke nem “en-us”, “en-gb” vagy “hu”, akkor átírja azt “en-us”-re:
DWORD CAaitLanguageFilterFilter::OnPreprocHeaders(CHttpFilterContext* pCtxt, PHTTP_FILTER_PREPROC_HEADERS pHeaderInfo)
{
char buffer[256];
DWORD buffSize = sizeof(buffer);
BOOL bHeader=pHeaderInfo->GetHeader(pCtxt->m_pFC, "Accept-Language:", buffer, &buffSize);
if( strncmp( buffer, "en-us", 256 ) && strncmp( buffer, "en-gb", 256 ) && strncmp( buffer, "hu", 256 ) )
{
char* nyelv = "en-us";
pHeaderInfo->SetHeader( pCtxt->m_pFC, "Accept-Language:", nyelv );
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
Az ISAPI filtert fejlesztéséhez a Visual Studio 6 (tényleg, csak ezért van fent a gépemen) ISAPI Extension Projectet használtam kiinduló alapnak:
A lefejlesztett filtert az IIS management felületén lehet betenni a kérések útjába. Az, hogy ez a beállítás hol található, az a management felülettől függ. Lenti ábra a Windows XP-n default IIS 5.1 felületét mutatja - a fejlesztőknek, tesztelőknek talán ez a legfontosabb.
