Megosztás a következőn keresztül:


Minősítők az MRM-ben

Az erőforrás-indexelő (és az MRT-futtatókörnyezet) a "minősítők" használatával határozza meg, hogy mely környezet(ek)ben érdemes használni egy adott erőforrás-jelöltet. Minden erőforrás rendelkezik névvel és egy vagy több jelölttel (vagy értékekkel), és minden jelölt nulla vagy több minősítővel rendelkezik. Az erőforrások elnevezéséről további információt az MRM erőforrásnevei című témakörben talál.

Előfordulhat például, hogy egy sztringerőforrás neve üdvözlés , három különböző jelölttel három különböző honosításhoz:

  • Angol nyelven a "Hello" szöveg
  • Német nyelven a "Hallo" szöveg
  • Koreai esetén a "안녕하세요" szöveg

Ezek a jelöltek a megfelelő nyelvi minősítőkkel vannak hozzáadva az Indexelőhöz, és ezek a PRI-fájlban vannak tárolva, hogy az MRT tudja, melyiket használja futásidőben. Ha például ezt a három sztringet szeretné hozzáadni egy indexelőhöz, a következőt használhatja:

    HRESULT hr{};
    hr = MrmIndexString(indexer, L"ms-resource:///strings/greeting", L"Hello", L"language-en");
    hr |= MrmIndexString(indexer, L"ms-resource:///strings/greeting", L"Hallo", L"language-de");
    hr |= MrmIndexString(indexer, L"ms-resource:///strings/greeting", L"안녕하세요", L"language-ko");
    if (FAILED(hr)) { /* error handling */ }

A nyelv csak az egyik lehetséges minősítő; Más gyakori minősítők közé tartozik a Méretezés (a képek különböző felbontásban történő megadásához) vagy a Kontraszt (különböző kontrasztbeállítások esetén). A minősítők teljes listája a ResourceContext.QualifierValues témakörben található.

Vegye figyelembe, hogy a minősítők "rövid" formáját (pl. "lang" a "nyelv" helyett) az MRM API-k nem támogatják; a hosszú űrlapot kell használnia. Ennek ellenére az MrmIndexFileAutoQualifiers és az MrmIndexResourceContainerAutoQualifiers függvények , amelyek a fájlelérési utakból származó minősítőkre következtetnek, támogatják a rövid űrlapokat.

A minősítők sztringként vannak megadva az űrlapon name-value, például language-en vagy scale-200. (A nyelvi minősítő értékei kötőjeleket is tartalmazhatnak, például en-us.) A név és az érték egyaránt megkülönbözteti a kis- és nagybetűket, ezért LANGUAGE-EN-USLanguage-En-Us, és language-en-us mind egyenértékűek.

Vegye figyelembe, hogy hiba két jelöltet megadni ugyanahhoz az erőforráshoz ugyanazokkal a minősítőkkel, de eltérő értékekkel. Sajnos ez a hiba nem jelenik meg, amikor erőforrásokat adnak hozzá az indexelőhöz (például mrmIndexString hívásakor), de a PRI-fájl létrehozásakor – a generálás ERROR_MRM_DUPLICATE_ENTRY ad vissza, de nem jelzi, hogy melyik erőforrás okozta a problémát.

Ez a kódrészlet például sikeres lesz, ha duplikált jelöltet ad hozzá, de később sikertelen lesz a PRI-létrehozás során:

// Add "color = red". Returns S_OK, since all arguments are valid.
hr = MrmIndexString(indexer, L"ms-resource:///strings/color", L"red", L"language-en"); 
// Add "color = blue". Returns S_OK, since all arguments are valid (in isolation).
hr = MrmIndexString(indexer, L"ms-resource:///strings/color", L"blue", L"language-en"); 

// Fails with ERROR_MRM_DUPLICATE_ENTRY since there are two English candidates for "strings/color" 
// ("red" and "blue"). 
hr = MrmCreateResourceFile(indexer, MrmPackagingModeStandaloneFile, MrmPackagingOptionsNone, fileName);

Ha ugyanazt a jelöltet kétszer adja hozzá (például a fenti kódban, ha a második hívás a "kék" helyett "piros"), akkor a rendszer figyelmen kívül hagyja az ismétlődést, és nem jön létre hiba.

Minősítő listák

Az erőforrás-jelöltek több minősítőt is használhatnak. Előfordulhat például, hogy a képfájloknak a skálázás (100%, 200%stb.) és a Kontraszt (standard vagy magas) alapján is szüksége lehet jelöltekre. Ha a kép szöveget tartalmaz, előfordulhat, hogy a nyelv alapján is minősíteni kell.

Több minősítő egyetlen sztringben van megadva, aláhúzásjelekkel elválasztva. Például a 200% skálázott képre jelölt kép a minősítőt contrast-high_scale-200használná. Nem számít, hogy a minősítők milyen sorrendben vannak megadva a listában; Az MRT-nek beépített fontossági sorrendje van az egyes minősítők számára (például a nyelv fontosabb, mint a skálázás).

Bár nem hiba megismételni egy minősítőt egy minősítő listában (akár eltérő értékekkel is), az első kivételével az összes figyelmen kívül lesz hagyva.

  • language-en_language-en (adja meg kétszer az angolt – az érvényes nyelv az angol)
  • language-en_language-de (adja meg az angolt, majd a németet – az érvényes nyelv az angol)
  • language-de_language-en (adja meg a német, majd az angol nyelvet – az érvényes nyelv a német)

Ahogy fentebb már említettük, hiba két erőforrás-jelöltet hozzáadni ugyanazokkal a minősítőkkel, de eltérő értékekkel. Ez függetlenül attól, hogy a minősítők sorrendje egy minősítő listában szerepel-e.

Semleges jelöltek

Amikor erőforrás-jelölteket ad hozzá az indexelőhöz, megadhat egy üres sztringet (vagy null mutatót) minősítőként, amely jelzi, hogy a jelölt "semleges", és bármilyen környezetnek megfelelhet. Előfordulhat például, hogy a Start menüben látható alkalmazás neve semleges jelölt, mivel az alkalmazásnevek általában nem honosítottak (és nem függnek más dolgoktól, például a skálázástól vagy a kontraszttól). A semleges jelöltek adott jelöltek mellett is használhatók, ha szükséges.

Például:

// The name of the app is the same, regardless of language, scale, etc.
hr = MrmIndexString(indexer, L"ms-resource:///strings/AppName", L"Contoso Widgets", nullptr); 

// The name of the publisher is always "Contoso Inc." except in Australia, where it is "Contoso PTY LTD".
hr = MrmIndexString(indexer, L"ms-resource:///strings/AppPublisher", L"Contoso Inc.", nullptr); 
hr = MrmIndexString(indexer, L"ms-resource:///strings/AppPublisher", L"Contoso PTY LTD", L"homeregion-au"); 

Alapértelmezett minősítők

Konfigurációs fájl létrehozásakor (az MrmCreateConfig... függvények egyikén keresztül) vagy erőforrás-indexelő létrehozásakor (az MrmCreateResourceIndexer egyik függvényén keresztül) az alapértelmezettQualifiers a minősítők (például a nyelv), amelyek jelzik a használni kívánt erőforrás-jelölteket, ha nem található jobb egyezés. Ha például egy alkalmazás angol és francia nyelvű erőforrásokkal rendelkezik, de a rendszer japán nyelvre állítja a nyelvet, akkor a rendszer a PRI-fájl létrehozásakor az "alapértelmezett minősítőként" megadott nyelvet fogja használni. Az alapértelmezett minősítők azt is meghatározzák, hogy melyik nyelvet és skálázást kell használni a fő PRI-fájl létrehozásához az AutoSplit-csomagolás használatakor (további információt a MrmPackagingMode című témakörben talál).

Vegye figyelembe, hogy minden erőforrásnak rendelkeznie kell az alapértelmezett minősítőkkel (vagy egy semleges jelölttel) megadott jelölttel, különben nincs semmi, ami visszaesne arra az esetre, ha nem lenne a legjobb egyezés. Vegye figyelembe, hogy a tartalékjelölt megadásának elmulasztása nem minősül hibának (az indexelő üres sztringjelöltet hoz létre Ön helyett), de ez gyenge felhasználói élményt vagy alkalmazáshibát eredményezhet.