Tag Archives: Localization

Jak se zbavit českých exception messages?

Možná vás stejně jako mě nepotěší české hlášky .NET (přestože máte anglická Windows):

V aplikaci / došlo k chybě serveru.
Odkaz na objekt není nastaven na instanci objektu.
Popis: Při provádění aktuálního webového požadavku došlo k neošetřené výjimce. Další informace o chybě a o jejím původu v kódu naleznete v trasování zásobníku.

Podrobnosti o výjimce: System.NullReferenceException: Odkaz na objekt není nastaven na instanci objektu.

Zdrojová chyba:

Zpravidla je to o souhře dvou okolností:

  1. Thread.CurrentThread.Current[UI]Culture máte nastaveno na cs-cz.
  2. Máte na počítači český language pack.

Prvního nastavení se při vývoji aplikace obecně zbavit nechcete. Prostě chcete, aby se zobrazovaly aplikační resources (.resx) české a používala česká globalizace (formátování čísel, data, řazení, …).

Druhé podmínky se dá však zbavit – český language pack odinstalovat.

Dříve se jednalo o samostatnou instalaci pro .NET, kterou jste mohli najít v Programs & Features ve Windows, dneska je to zpravidla Windows 10 Language Pack, který v sobě české texty chybových hlášek obsahuje.

Language Pack nejrychleji pošlete do věčných lovišť z příkazové řádky:

lpksetup /u

…potřebujete se dostat do čistého stavu:

2019-06-27_17-29-34

 

Vyhledávání nezávislé na diakritice pomocí COLLATE

Pomocí explicitního nastavení collation lze jednoduše udělat vyhledávání nezávislé na diakritice a velkých/malých písmenech:

 SELECT 'Ano!' WHERE ('ABCacžžzř' COLLATE Latin1_General_CI_AI LIKE 'abcáčžzžr' COLLATE Latin1_General_CI_AI) 

Celý tento způsob má několik problematických otazníků, které jsem zatím neprobádal:

  • není mi úplně jasné, jaký je vztah mezi collation a indexy, v mém konkrétním případě nedošlo ke změně execution planu a operace zůstala „Clustered Index Scan“.
  • není mi úplně jasné, proč některé collation fungují, a některé ne – např. „Czech_CI_AI“ mi očekávané výsledky nedávalo.

Update: Czech_CI_AI

Po letech jsem se dopátral, jak je to s Czech_CI_AI. Věc se má tak, že v češtině jsou C-Č, D-Ď, R-Ř, … různá písmena (na rozdíl od A-Á, E-Ě, …) a collation Czech_CI_AI to důsledně rozlišuje (na rozdíl od Latin1_General_CI_AI).