09. marts 2004 - 14:57Der er
14 kommentarer og 1 løsning
Hjælp til Satellite assemblies
Jeg skal igang med at lave en hjemmeside på 3 sprog og havde tænkt mig at bruge Satellite assemblies, men er der nogen der har erfaring med Satellite assemblies, som evt. kunne hjælpe mig igang?
Jeg synes at have læst at teksten til de forskelige sprog compileres ned i dll filer, men hvad så når man skal rette teksten? Nogle af sider skal en ikke programør vedligeholde.
Jeg kan godt hjælpe hvis du stadig mangler noget - bare sig til. Du kan sagtens lave en løsning hvor sprogtekster skrives i xml-filer, og smides ned i en assembly som embedded resource, med efterfølgende mulighed for at redigere teksterne af en ikke-programmør, men det er lidt mere omstændigt (særligt for den der skal ændre teksterne), så hvis det er hensigten at forskellige brugere skal sidde og rette løs med jævne mellemrum, ville jeg også proppe det i databasen hvis du alligevel benytter sådan en i forvejen.
Nå men nu har jeg leget lidt med det eksempel der ligger i .NET frameworket "worddocs", men i det eksempel bruges der txt filer, men snepnet du skriver noget om at bruge xml filer, hvad skal jeg vælge?
Er der noget i visual studio der gør det nemmere at styrre Satellite assemblies?
Jeg synes du skal bruge xml-filer. Du kan tilføje ressourcefiler til dit projekt (det er dem der hedder assembly resource files med extension resx). Hvis du markerer dem som embedded resources (kan du gøre i property-vinduet under build-action), og navngiver dem iht. de sprog du vil understøtte - f.eks. Resource.da-DK.resx Resource.de-DE.resx Desuden opretter du en Resource.resx (denne bliver din fall-back ressource... altså hvis du ikke har angivet en tekst i en af dine sprogspecifikke ressourcer, tages værdien fra Resource.resx).
// adgang til ressourcer via statics (kan være behageligt) using System;
using System.Globalization; using System.Resources; using System.Reflection;
namespace Snippets { /// <summary> /// Summary description for ResMan. /// </summary> public class ResourceReader { private static UiResource res;
static ResourceReader() { res = new UiResource("Snippets.Resource",Assembly.GetAssembly(typeof(UiResource))); }
public static string GetString(string name) { return res.GetString(name); }
private class UiResource : ResourceManager { public UiResource(string baseName, System.Reflection.Assembly assembly) : base(baseName, assembly){} } } }
Du kan så tilgå ressourcen som følger : // angiv UiCulture System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("da-DK"); // udskriv værdi Response.Write(ResourceReader.GetString("test")); // angiv ny UiCulture System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); // udskriv værdi igen Response.Write(ResourceReader.GetString("test"));
Hvis du benytter ovenstående, og har en Resource.resx, og en Resource.da-DK.resx i dit projekt vil etGetString("da-DK") kald give dig værdien angivet ved nøglen test i Resource.da-DK.resx, og det næste GetString("de-DE") give dig værdien angivet under nøglen i din Resource.resx (altså din fallback). Hvis du så skulle få lyst til at oprette dig en Resource.de-DE.resx en dag, vil du få værdien derfra.
At redigere filerne i vs fungerer fint, men du kan benytte en hvilken som helst xml-editor (eller bare en teksteditor til det).
Bemærk den filstruktur vs opretter i forbindelse med ovenstående (kig i dit bin-dir).
Hvis du skulle få lyst til at lade andre redigere i filerne (uden får vs), kan du lave små batches så du kan få kompileret de nye ressourcer ind.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.