Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az erőforrásfájlok központi szerepet játszanak a honosított alkalmazásokban. Lehetővé teszik, hogy egy alkalmazás sztringeket, képeket és egyéb adatokat jelenítsen meg a felhasználó nyelvén és kultúrájában, és alternatív adatokat biztosítson, ha a felhasználó nyelvének vagy kultúrájának erőforrásai nem érhetők el. A .NET egy küllős modellt használ a honosított erőforrások megkereséséhez és lekéréséhez. A központ az a fő szerelvény, amely tartalmazza a nem honosítható végrehajtható kódot és az erőforrásokat egyetlen kultúrához, amelyet semleges vagy alapértelmezett kultúrának neveznek. Az alapértelmezett kultúra az alkalmazás tartalék kultúrája; akkor használatos, ha nem érhetők el honosított erőforrások. A NeutralResourcesLanguageAttribute attribútumot használja az alkalmazás alapértelmezett kultúrájának megadásához. Minden küllő egy műholdas szerelvényhez csatlakozik, amely egyetlen honosított kultúrához tartozó erőforrásokat tartalmaz, de nem tartalmaz kódot. Mivel a műholdas szerelvények nem részei a főszerelvénynek, egyszerűen frissítheti vagy lecserélheti az adott kultúrának megfelelő erőforrásokat anélkül, hogy lecserélte volna az alkalmazás fő szerelvényét.
Feljegyzés
Az alkalmazás alapértelmezett kultúrájának erőforrásai műholdas szerelvényben is tárolhatók. Ehhez a NeutralResourcesLanguageAttribute attribútumot a következő értékhez UltimateResourceFallbackLocation.Satellite rendelheti.
Műholdas szerelvény neve és helye
A küllős modellhez szükség van arra, hogy az erőforrásokat meghatározott helyeken helyezze el, hogy azok könnyen elhelyezhetők és használhatók legyenek. Ha nem a várt módon fordítja le és adja el az erőforrásokat, vagy ha nem a megfelelő helyre helyezi őket, a közös nyelvi futtatókörnyezet nem fogja tudni megtalálni őket, és ehelyett az alapértelmezett kultúra erőforrásait fogja használni. A .NET-erőforrás-kezelőt a ResourceManager típus jelöli, és a honosított erőforrások automatikus elérésére szolgál. Az erőforrás-kezelőnek a következőkre van szüksége:
Egyetlen műholdas szerelvénynek tartalmaznia kell egy adott kultúrához szükséges összes erőforrást. Más szóval több .txt vagy .resx fájlt kell egyetlen bináris .resources fájlba lefordítani.
Az alkalmazáskönyvtárban külön alkönyvtárnak kell lennie minden olyan honosított kultúrához, amely az adott kultúra erőforrásait tárolja. Az alkönyvtár nevének meg kell egyeznie a kultúra nevével. Alternatív megoldásként a műhold-összeállításokat a globális összeállítási gyorsítótárban is tárolhatja. Ebben az esetben a szerelvény erős nevének kulturális információs összetevőjének meg kell jelölnie annak kultúráját. További információ: Műholdas szerelvények telepítése a globális szerelvénygyorsítótárban.
Feljegyzés
Ha az alkalmazás szubkultúrákhoz tartalmaz erőforrásokat, helyezze az egyes szubkultúrákat egy külön alkönyvtárba az alkalmazáskönyvtár alatt. A szubkultúrákat ne helyezze el alkönyvtárakba a fő kultúra könyvtára alatt.
A műholdas szerelvénynek ugyanazzal a névvel kell rendelkeznie, mint az alkalmazásnak, és a ".resources.dll" fájlnévkiterjesztést kell használnia. Ha például egy alkalmazás neve Example.exe, az egyes műholdszerelvények nevét Example.resources.dll kell megadni. A műholdas szerelvény neve nem jelzi az erőforrásfájlok kultúráját. A műholdas szerelvény azonban megjelenik egy olyan könyvtárban, amely meghatározza a kultúrát.
A műholdas szerelvény kultúrájával kapcsolatos információkat fel kell venni a szerelvény metaadataiba. A kultúra nevének a műholdas összeállítás metaadataiban való tárolásához megadja a
/cultureopciót, amikor az Assembly Linker használatával ágyazza be az erőforrásokat a műholdas összeállításba.
Az alábbi ábra egy mintakönyvtár-struktúrát és elhelyezési követelményeket mutat be a globális szerelvény-gyorsítótárba nem telepített alkalmazásokhoz. A .txt és .resources kiterjesztésű elemek nem lesznek a végső alkalmazással együtt szállítva. Ezek a köztes erőforrásfájlok a végső műholdas erőforrás-szerelvények létrehozásához. Ebben a példában a .resx fájlokat helyettesítheti a .txt fájlokra. További információ: Erőforrások csomagolása és üzembe helyezése.
Az alábbi képen a műhold összeszerelési könyvtára látható.
Műholdas szerelvények összeállítása
Az erőforrásfájl-generátor (resgen.exe) használatával olyan szövegfájlokat vagy XML-fájlokat (.resx) állíthat össze, amelyek erőforrásokat tartalmaznak bináris .resources fájlokhoz. Ezután az Assembly Linker (al.exe) használatával a .resources fájlokat mellék-összeállításokba fordíthatja. al.exe létrehoz egy szerelvényt a megadott .resources fájlokból. A műholdas szerelvények csak erőforrásokat tartalmazhatnak; nem tartalmazhatnak végrehajtható kódot.
Az alábbi al.exe parancs létrehoz egy műholdas szerelvényt az alkalmazáshoz Example a német resources file strings.de.resources fájlból.
al -target:lib -embed:strings.de.resources -culture:de -out:Example.resources.dll
Az alábbi al.exe parancs egy műholdas szerelvényt is létrehoz az alkalmazáshoz Example a strings.de.resources fájlból. A /template beállítás hatására a műholdas szerelvény örökli az összes szerelvény metaadatait, kivéve a szülőszerelvény kulturális adatait (Example.dll).
al -target:lib -embed:strings.de.resources -culture:de -out:Example.resources.dll -template:Example.dll
Az alábbi táblázat részletesebben ismerteti az ezekben a parancsokban használt al.exe beállításokat:
| Lehetőség | Leírás |
|---|---|
-target:lib |
Kijelöli, hogy a műhold-összeállítás egy könyvtárfájlba (.dll) kerül lefordításra. Mivel egy műholdas szerelvény nem tartalmaz végrehajtható kódot, és nem az alkalmazás fő szerelvénye, a műholdas szerelvényeket DLL-ként kell mentenie. |
-embed:strings.de.resources |
Meghatározza a beágyazandó erőforrásfájl nevét, amikor az al.exe lefordítja a szerelvényt. Több .resources fájlt is beágyazhat egy műholdas szerelvénybe, de ha a küllős modellt követi, minden kultúrához össze kell állítania egy műholdas szerelvényt. Sztringekhez és objektumokhoz azonban külön .resources fájlokat hozhat létre. |
-culture:de |
A lefordítandó erőforrás kulturális környezetét határozza meg. A közös nyelvi futtatókörnyezet ezt az információt használja, amikor egy adott kultúrához tartozó erőforrásokat keres. Ha kihagyja ezt a beállítást, al.exe továbbra is lefordítja az erőforrást, de a futtatókörnyezet nem fogja tudni megtalálni, amikor egy felhasználó megkeresi. |
-out:Example.resources.dll |
Megadja a kimeneti fájl nevét. A névnek a baseName.resources.kiterjesztés elnevezési standardot kell követnie, ahol baseName a fő-összeállítás neve, és kiterjesztés érvényes fájlnév-kiterjesztés (például .dll). A futtatókörnyezet nem tudja meghatározni egy műholdas szerelvény kultúráját a kimeneti fájl neve alapján; a /culture kapcsolót kell használnia a beállítás megadásához. |
-template:Example.dll |
Olyan szerelvényt ad meg, amelyből a műholdas szerelvény örökli az összes szerelvény metaadatait a kulturális mező kivételével. Ez a beállítás csak akkor érinti a műholdas összeállításokat, ha egy erős névvel rendelkező összeállítást ad meg. |
A al.exe elérhető lehetőségek teljes listáját lásd: Assembly Linker (al.exe).
Feljegyzés
Előfordulhatnak olyan esetek, amikor a .NET Core MSBuild feladatot szeretné használni a szatellit-összeállítások fordításához, még akkor is, ha a .NET Framework a célja. Előfordulhat például, hogy a C#-fordító determinisztikus beállításával összehasonlíthatja a különböző buildekből származó szerelvényeket. Ebben az esetben állítsa be a GenerateSatelliteAssembliesForCore értéket a true fájlban úgy, hogy a Al.exe (Assembly Linker) helyett a csc.exe programmal legyenek műholdas assembly-k generálva.
<Project>
<PropertyGroup>
<GenerateSatelliteAssembliesForCore>true</GenerateSatelliteAssembliesForCore>
</PropertyGroup>
</Project>
A .NET Core MSBuild feladat alapértelmezés szerint al.exe helyett csc.exe használ a műholdas szerelvények létrehozásához. További információért lásd: "Core" műhold-összeállítások generálásának egyszerűsítése.
Példa műholdas összeállításokra
Az alábbiakban egy egyszerű "Hello world" példa látható, amely egy honosított üdvözlést tartalmazó üzenetmezőt jelenít meg. A példa az angol (Egyesült Államok), a francia (Franciaország) és az orosz (Oroszország) kultúrák erőforrásait tartalmazza, a tartalék kultúrája pedig az angol. A példa létrehozásához tegye a következőket:
Hozzon létre egy Greeting.resx vagy Greeting.txt nevű erőforrásfájlt, amely az alapértelmezett kultúra erőforrását tartalmazza. Tároljon egyetlen karakterláncot, amelynek neve
HelloStringés értéke "Hello world!" ebben a fájlban.Annak jelzéséhez, hogy az angol (en) az alkalmazás alapértelmezett kultúrája, adja hozzá az alábbi System.Resources.NeutralResourcesLanguageAttribute attribútumot az alkalmazás AssemblyInfo-fájljába vagy az alkalmazás fő szerelvényébe lefordítandó fő forráskódfájlhoz.
[assembly: NeutralResourcesLanguage("en")]<Assembly: NeutralResourcesLanguage("en")>További kultúrák (
en-USfr-FRésru-RU) támogatásának hozzáadása az alkalmazáshoz az alábbiak szerint:Az
en-USangol (Egyesült Államok) kultúra támogatásához hozzon létre egy Greeting.en-US.resx vagy Greeting.en-US.txt nevű erőforrásfájlt, és tároljon benne egyetlenHelloStringnevű karakterláncot, amelynek értéke "Hello világ!".A francia (franciaországi
fr-FR) kultúra támogatásához hozzon létre egy Greeting.fr-FR.resx vagy Greeting.fr-FR.txt nevű erőforrásfájlt, és tároljon benne egyetlen sztringetHelloString, amelynek értéke "Salut tout le monde!".Az orosz (oroszországi) kultúra megsegítésére
ru-RU, hozzon létre egy Greeting.ru-RU.resx vagy Greeting.ru-RU.txt nevű erőforrásfájlt, és tároljon benne egyetlen sztringetHelloString, amelynek értéke "Всем привет!".
A resgen.exe használatával lefordíthatja az egyes szöveg- vagy XML-erőforrásfájlokat egy bináris .resources fájlba. A kimenet olyan fájlok készlete, amelyek gyökérfájlnevük megegyezik a .resx vagy a .txt fájl nevével, de .resources kiterjesztéssel rendelkeznek. Ha a példát a Visual Studióval hozza létre, a rendszer automatikusan kezeli a fordítási folyamatot. Ha nem a Visual Studiót használja, futtassa az alábbi parancsokat a .resx fájlok .resources fájlokba való fordításához:
resgen Greeting.resx resgen Greeting.en-us.resx resgen Greeting.fr-FR.resx resgen Greeting.ru-RU.resxHa az erőforrások XML-fájlok helyett szövegfájlokban találhatók, cserélje le a .resx bővítményt .txt.
Fordítsa le a következő forráskódot az alapértelmezett kultúra erőforrásaival együtt az alkalmazás fő szerelvényébe:
Fontos
Ha a példa létrehozásához a Visual Studio helyett a parancssort használja, módosítsa az osztálykonstruktor hívását a ResourceManager következőre:
ResourceManager rm = new ResourceManager("Greeting", typeof(Example).Assembly);using System; using System.Globalization; using System.Reflection; using System.Resources; using System.Threading; using System.Windows.Forms; class Example { static void Main() { // Create array of supported cultures string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU"}; Random rnd = new Random(); int cultureNdx = rnd.Next(0, cultures.Length); CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture; try { CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]); Thread.CurrentThread.CurrentCulture = newCulture; Thread.CurrentThread.CurrentUICulture = newCulture; ResourceManager rm = new ResourceManager("Example.Greeting", typeof(Example).Assembly); string greeting = String.Format("The current culture is {0}.\n{1}", Thread.CurrentThread.CurrentUICulture.Name, rm.GetString("HelloString")); MessageBox.Show(greeting); } catch (CultureNotFoundException e) { Console.WriteLine($"Unable to instantiate culture {e.InvalidCultureName}"); } finally { Thread.CurrentThread.CurrentCulture = originalCulture; Thread.CurrentThread.CurrentUICulture = originalCulture; } } }Imports System.Globalization Imports System.Resources Imports System.Threading Module Module1 Sub Main() ' Create array of supported cultures Dim cultures() As String = {"en-CA", "en-US", "fr-FR", "ru-RU"} Dim rnd As New Random() Dim cultureNdx As Integer = rnd.Next(0, cultures.Length) Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture Try Dim newCulture As New CultureInfo(cultures(cultureNdx)) Thread.CurrentThread.CurrentCulture = newCulture Thread.CurrentThread.CurrentUICulture = newCulture Dim greeting As String = String.Format("The current culture is {0}.{1}{2}", Thread.CurrentThread.CurrentUICulture.Name, vbCrLf, My.Resources.Greetings.HelloString) MsgBox(greeting) Catch e As CultureNotFoundException Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName) Finally Thread.CurrentThread.CurrentCulture = originalCulture Thread.CurrentThread.CurrentUICulture = originalCulture End Try End Sub End ModuleHa az alkalmazás neve Példa , és a parancssorból származik, a C#-fordító parancsa a következő:
csc Example.cs -res:Greeting.resourcesA megfelelő Visual Basic fordítóparancs a következő:
vbc Example.vb -res:Greeting.resourcesHozzon létre egy alkönyvtárat a fő alkalmazáskönyvtárban az alkalmazás által támogatott minden honosított kultúrához. Létre kell hoznia egy en-US-t, egy fr-FR-t és egy ru-RU alkönyvtárat. A Visual Studio automatikusan létrehozza ezeket az alkönyvtárakat a fordítási folyamat részeként.
Ágyazza be az egyes kultúraspecifikus .resources fájlokat segédszerelvényekbe, és mentse őket a megfelelő könyvtárba. Az egyes .resources-fájlokhoz a következő parancsot kell végrehajtani:
al -target:lib -embed:Greeting.culture.resources -culture:culture -out:culture\Example.resources.dllahol a kultúra annak a kultúrának a neve, amelynek erőforrásait a műholdas szerelvény tartalmazza. A Visual Studio automatikusan kezeli ezt a folyamatot.
Ezután futtathatja a példát. Véletlenszerűen teszi az egyik támogatott kultúrát a jelenlegi kultúrává, és lokalizált üdvözlést jelenít meg.
Műholdas összeállítások telepítése a globális gyűjteménytárban
Ahelyett, hogy egy helyi alkalmazás alkönyvtárában telepítené az assembly-ket, telepítheti őket a globális assembly-gyorsítótárba. Ez különösen akkor hasznos, ha több alkalmazás által használt osztálykódtárakat és osztálytár-erőforrás-szerelvényeket használ.
Az összetevők globális assembly gyorsítótárban való telepítéséhez erős nevekre van szükség. Az erős névvel ellátott szerelvények érvényes nyilvános/titkos kulcspárokkal vannak aláírva. A futtatókörnyezet által a kötési kérések teljesítéséhez használandó szerelvény meghatározásához használt verzióinformációkat tartalmazzák. További információkért az erős nevekről és a verziószámozásról lásd: Assembly versioning. Ha többet szeretne megtudni az erős nevekről, lásd az Erős nevű összeszerelések című témakört.
Alkalmazás fejlesztésekor nem valószínű, hogy hozzáfér a végső nyilvános/titkos kulcspárhoz. Ha egy műholdas szerelvényt szeretne telepíteni a globális szerelvény-gyorsítótárba, és meggyőződni arról, hogy az elvárt módon működik, használhat egy késleltetett aláírás nevű technikát. Ha késlelteti egy assembly aláírását, a fordítási időben helyet foglal a fájlban az erős név aláírás számára. A tényleges aláírás későbbre halasztódik, amikor a végső nyilvános/titkos kulcspár elérhető. További információért a késleltetett aláírásról, tekintse meg a Szerelvény aláírásának késleltetése című témát.
A nyilvános kulcs beszerzése
Egy szerelvény aláírásának késleltetéséhez hozzáféréssel kell rendelkeznie a nyilvános kulcshoz. Beszerezheti a valódi nyilvános kulcsot a cégen belüli szervezettől, amely elvégezi a végleges aláírást, vagy létrehozhat egy nyilvános kulcsot az Erős név eszközzel (sn.exe) keresztül.
A következő Sn.exe parancs létrehoz egy nyilvános/titkos kulcspár tesztelését. A –k beállítás azt határozza meg, hogy Sn.exe hozzon létre egy új kulcspárt, és mentse egy TestKeyPair.snk nevű fájlba.
sn –k TestKeyPair.snk
A nyilvános kulcsot kinyerheti a tesztkulcspárt tartalmazó fájlból. A következő parancs kinyeri a nyilvános kulcsot a TestKeyPair.snk fájlból, és menti a PublicKey.snk fájlban:
sn –p TestKeyPair.snk PublicKey.snk
Gyűlés aláírásának késleltetése
A nyilvános kulcs beszerzése vagy létrehozása után az assembly linker (al.exe) használatával fordíthatja az összeállítást, és megadhatja a késleltetett aláírást.
A következő al.exe parancs egy erős nevűvel ellátott szatellit-összeállítást hoz létre a StringLibrary alkalmazáshoz a strings.ja.resources fájlból.
al -target:lib -embed:strings.ja.resources -culture:ja -out:StringLibrary.resources.dll -delay+ -keyfile:PublicKey.snk
A -delay+ beállítás azt határozza meg, hogy a Assembly Linkernek késleltetnie kell a szerelvény aláírását. A -keyfile beállítás megadja annak a kulcsfájlnak a nevét, amely a szerelvény aláírásának késleltetéséhez használandó nyilvános kulcsot tartalmazza.
Szerelvény újra aláírása
Az alkalmazás üzembe helyezése előtt újra alá kell írnia a késleltetett aláírású műhold-összeállítást a valódi kulcspárral. Ezt a Sn.exe használatával teheti meg.
Az alábbi Sn.exe parancs aláírja StringLibrary.resources.dll a RealKeyPair.snk fájlban tárolt kulcspárral. Az –R opció azt határozza meg, hogy egy korábban aláírt vagy késleltetve aláírt szerelvényt újra alá kell írni.
sn –R StringLibrary.resources.dll RealKeyPair.snk
A műhold-összetevő telepítése a Globális Assembly Cache-ben
Amikor a futtatókörnyezet erőforrásokat keres az erőforrás-visszaesési folyamatban, először a globális verzió-gyűjteményben keres. (További információért lásd az Erőforrások csomagolása és üzembe helyezése cikk "Erőforrás-tartalékfolyamat" című részét.) Amint egy szatellit-assembly erős névvel van aláírva, telepíthető a Globális Szerelvénygyorsítótárba a Globális Szerelvénygyorsítótár eszköz (gacutil.exe) segítségével.
A következő Gacutil.exe parancs telepíti a StringLibrary.resources.dll* a globális szerelvény-gyorsítótárba:
gacutil -i:StringLibrary.resources.dll
A /i beállítás azt határozza meg, hogy Gacutil.exe telepítse a megadott szerelvényt a globális szerelvény-gyorsítótárba. Miután telepítette a műholdas szerelvényt a gyorsítótárba, a benne található erőforrások elérhetővé válnak a műholdas szerelvény használatára tervezett összes alkalmazás számára.
Erőforrások a globális szerelvénygyorsítótárban: egy példa
Az alábbi példa egy .NET-osztálytár metódusával nyer ki és ad vissza egy honosított üdvözlést egy erőforrásfájlból. A kódtár és erőforrásai a globális szerelvény-gyorsítótárban vannak regisztrálva. A példa az angol (Egyesült Államok), a francia (Franciaország), az orosz (Oroszország) és az angol kultúrák erőforrásait tartalmazza. Az alapértelmezett kultúra az angol; az erőforrások a főszerelvényben vannak tárolva. A példa kezdetben nyilvános kulccsal látja el késleltetett aláírással a könyvtárat és a műholdas szerelvényeket, majd újra aláírja őket egy nyilvános/titkos kulcspárral. A példa létrehozásához tegye a következőket:
Ha nem a Visual Studiót használja, a következő Erős név eszköz (Sn.exe) paranccsal hozzon létre egy ResKey.snk nevű nyilvános/privát kulcspárt:
sn –k ResKey.snkHa Visual Studiót használ, a Aláírás lapot a projekt Tulajdonságai párbeszédpanelben használja a kulcsfájl létrehozásához.
A következő Strong Name Tool (Sn.exe) paranccsal hozzon létre egy PublicKey.snk nevű nyilvános kulcsfájlt:
sn –p ResKey.snk PublicKey.snkHozzon létre egy Strings.resx nevű erőforrásfájlt, amely az alapértelmezett kultúra erőforrását tartalmazza. Tároljon a fájlban egyetlen karakterláncot
Greetingnéven, amelynek értéke "Hogy van?"Ha azt szeretné jelezni, hogy az "en" az alkalmazás alapértelmezett kultúrája, adja hozzá a következő System.Resources.NeutralResourcesLanguageAttribute attribútumot az alkalmazás AssemblyInfo-fájljába vagy az alkalmazás fő szerelvényébe lefordítandó fő forráskódfájlhoz:
[assembly:NeutralResourcesLanguageAttribute("en")]<Assembly: NeutralResourcesLanguageAttribute("en")>További kultúrák (az en-US, fr-FR és ru-RU kultúrák) támogatása az alkalmazáshoz az alábbiak szerint:
Az "en-US" vagy az angol (Egyesült Államok) kultúra támogatásához hozzon létre egy Strings.en-US.resx vagy Strings.en-US.txt nevű amelynek értéke "Hello!".
Az "fr-FR" vagy a francia (Franciaország) kultúra támogatásához hozzon létre egy Strings.fr-FR.resx vagy Strings.fr-FR.txt nevű "Bon jour!".
Az "ru-RU" vagy az orosz (Oroszország) kultúra támogatásához hozzon létre egy Strings.ru-RU.resx vagy Strings.ru-RU.txt nevű !".
A resgen.exe használatával lefordíthatja az egyes szöveg- vagy XML-erőforrásfájlokat egy bináris .resources fájlba. A kimenet olyan fájlok készlete, amelyek gyökérfájlnevük megegyezik a .resx vagy a .txt fájl nevével, de .resources kiterjesztéssel rendelkeznek. Ha a példát a Visual Studióval hozza létre, a rendszer automatikusan kezeli a fordítási folyamatot. Ha nem a Visual Studiót használja, futtassa a következő parancsot a .resx fájlok .resources fájlokba való fordításához:
resgen filenameAhol a fájlnév az opcionális elérési út, fájlnév és kiterjesztés a .resx vagy szövegfájl esetén.
Állítsa össze a következő forráskódot: StringLibrary.vb vagy StringLibrary.cs, valamint az alapértelmezett kultúra erőforrásait egy késleltetett aláírással rendelkező könyvtár-összeállításba, amelynek neve StringLibrary.dll.
Fontos
Ha a példa létrehozásához a Visual Studio helyett a parancssort használja, módosítsa az osztálykonstruktor hívását ResourceManager a következőre
ResourceManager rm = new ResourceManager("Strings",typeof(Example).Assembly);.using System; using System.Globalization; using System.Reflection; using System.Resources; using System.Threading; [assembly:NeutralResourcesLanguageAttribute("en")] public class StringLibrary { public string GetGreeting() { ResourceManager rm = new ResourceManager("Strings", Assembly.GetAssembly(typeof(StringLibrary))); string greeting = rm.GetString("Greeting"); return greeting; } }Imports System.Globalization Imports System.Reflection Imports System.Resources Imports System.Threading <Assembly: NeutralResourcesLanguageAttribute("en")> Public Class StringLibrary Public Function GetGreeting() As String Dim rm As New ResourceManager("Strings", _ Assembly.GetAssembly(GetType(StringLibrary))) Dim greeting As String = rm.GetString("Greeting") Return greeting End Function End ClassA C#-fordító parancsa a következő:
csc -t:library -resource:Strings.resources -delaysign+ -keyfile:publickey.snk StringLibrary.csA megfelelő Visual Basic fordítóparancs a következő:
vbc -t:library -resource:Strings.resources -delaysign+ -keyfile:publickey.snk StringLibrary.vbHozzon létre egy alkönyvtárat a fő alkalmazáskönyvtárban az alkalmazás által támogatott minden honosított kultúrához. Létre kell hoznia egy en-US-t, egy fr-FR-t és egy ru-RU alkönyvtárat. A Visual Studio automatikusan létrehozza ezeket az alkönyvtárakat a fordítási folyamat részeként. Mivel minden szatellit összeszerelésnek ugyanaz a fájlneve, az alkönyvtárak az egyes kultúraspecifikus szatellit összeszerelések tárolására szolgálnak, amíg alá nem írják őket egy nyilvános/titkos kulcspárral.
Ágyazza be az egyes kultúraspecifikus .resources fájlokat a késleltetetten aláírt műhold-összeállításokba, és mentse őket a megfelelő könyvtárba. Az egyes .resources-fájlokhoz a következő parancsot kell végrehajtani:
al -target:lib -embed:Strings.culture.resources -culture:culture -out:culture\StringLibrary.resources.dll -delay+ -keyfile:publickey.snkahol a kultúra a kultúra neve. Ebben a példában a kultúra neve en-US, fr-FR és ru-RU.
Írja újra alá a StringLibrary.dll fájlt az Erősnév eszközzel (sn.exe) az alábbiak szerint:
sn –R StringLibrary.dll RealKeyPair.snkÍrja alá újra az egyes műholdas szerelvényeket. Ehhez használja az Erős név eszközt (sn.exe) az egyes műholdszerelvények esetében az alábbiak szerint:
sn –R StringLibrary.resources.dll RealKeyPair.snkRegisztrálja a StringLibrary.dll és annak minden társ-gyűjteményét a globális gyűjtemény-gyorsítótárban az alábbi paranccsal:
gacutil -i filenameahol a fájlnév a regisztrálandó fájl neve.
Ha Visual Studiót használ, hozzon létre egy új konzolalkalmazás-projektet ,
Exampleadjon hozzá egy hivatkozást a StringLibrary.dll és a következő forráskódhoz, és fordítsa le.using System; using System.Globalization; using System.Threading; public class Example { public static void Main() { string[] cultureNames = { "en-GB", "en-US", "fr-FR", "ru-RU" }; Random rnd = new Random(); string cultureName = cultureNames[rnd.Next(0, cultureNames.Length)]; Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName); Console.WriteLine($"The current UI culture is {Thread.CurrentThread.CurrentUICulture.Name}"); StringLibrary strLib = new StringLibrary(); string greeting = strLib.GetGreeting(); Console.WriteLine(greeting); } }Imports System.Globalization Imports System.Threading Module Example Public Sub Main() Dim cultureNames() As String = {"en-GB", "en-US", "fr-FR", "ru-RU"} Dim rnd As New Random() Dim cultureName As String = cultureNames(rnd.Next(0, cultureNames.Length)) Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(cultureName) Console.WriteLine("The current UI culture is {0}", Thread.CurrentThread.CurrentUICulture.Name) Dim strLib As New StringLibrary() Dim greeting As String = strLib.GetGreeting() Console.WriteLine(greeting) End Sub End ModuleA parancssorból való fordításhoz használja a következő parancsot a C# fordítóhoz:
csc Example.cs -r:StringLibrary.dllA Visual Basic fordító parancssora a következő:
vbc Example.vb -r:StringLibrary.dllFuttassa Example.exe.