Nefunkční lokalizace ve WinRT?

Uncategorized

8 years ago

Tento týden jsem musel řešit velice záhadné chování při snaze o lokalizaci aplikace pro Windows 8.1. Jako obvykle jsem si připravil třídu pro lokalizaci, přidal odpovídající soubory *.resw, texty pro lokalizaci v en a cs a nakonec na XAML stránkách stringy přes binding napojil. Vše se zdálo v pořádku až na ten malý detail, že fungovala pouze anglická (neutral) varianta. Situace se ještě více zkomplikovala ve chvíli, kdy jsem vytvořil nový projekt, který se po přesně stejném nastavení choval správně. Po delším hledání jsem našel nepříliš zřejmou příčinu problému. Soubor Package.appmanifest, který obsahuje různá nastavení chování aplikace v systému obsahuje některá nastavení, která přes vizuální návrhář nejsou dostupná. Soubor AppManifest je totiž ve skutečnosti jen převlečený klasický textový XML dokument, který můžete otevřít ve Visual Studiu kliknutím pravým tlačítkem myši na tento soubor v Solution Exploreru a následně výběrem příikazu Open With... nebo View Code. Otevření Package.appmanifest v XML editoru Zdrojem mých problémů byl jeden z elementů manifestu - konkrétně element Resources. Tento element ovlivňuje chování souborů resource v projektu a především určuje jejich dostupné jazyky. V mém případě vypadal takto:

<Resources>
   <Resource Language="en-US"/>
</Resources>

Pokud bych chtěl přidat další jazyky, mohl bych zopakovat element Resource s dalšími ISO zkratkami jazyků, které požaduji. Toto však jak jistě uznáte není příliš praktické. Lepší řešení nabízí podoba, která je výchozí po vytvoření nového Windows 8.1 projektu:

<Resources>
   <Resource Language="x-generate"/>
</Resources>

Speciální konstanta x-generate určuje, že při sestavování balíčku se automaticky vygenerují příslušné lokalizace na základě toho, jaké budou nalezeny soubory *.resw v projektu.