Hej! I sektionen artiklar har jag en komplett lösning i asp.net som pellesoft använder, men det finns även sattelit assemblys som du kan använda. Net har inbyggt stöd, men jag skrev en alternativ lösning som fått både ris och ros. Jag hade nog tittat på reursfiler. det vore intressant med en motivering varför du gjorde en egen istället för att använda den inbyggda. Den främsta anledningen är just språkhanteringen. Tänk dig att du skickar en xml-fil till en översättare och säger, översätt allt detta till finska, och en annan till franska. Jag tycker filen är lätt och översiktlig att arbeta med helt enkelt, det är ju en smaksak. En sak som kan vara bra att tänka på är att skapa en "proxy-komponent" som ligger mellan applikationen och språkfilerna. På detta sätt blir det lätt att ändra lagringssätt. Själv har jag använt databasen för att lagra texter, vilket har fungerat, men jag ser inget direkt som skulle vara sämre med någon av ovannämnda lösningar. Andreas: Andreas, Fredrik, För att förtydliga det hela lite. Andreas: Jösses vilka diskussioner man kan råka ge upphov till... Bra förklarat, Johan. Per: Jag har kikat lite på det inbyggda med XML-filer.Flerspråksstöd
Jag håller på med en fristående applikation som ska ha stöd för ett antal språk (svenska, engelska, norska mfl.)
Nu undrar jag vilket är bästa sättet att gå till väga. Är det XML som gäller eller finns det andra lösnignar som är bättre? Jag har letat tutorials på nätet men utan framgång.
Alla tips emottages tacksamt.
/FredrikSv: Flerspråksstöd
Sv:Flerspråksstöd
Det som är bra med dem är att det är det standariserade sättet att få språkstöd. Beroende på, är det hela artiklar så är det ett annat scenario.Sv:Flerspråksstöd
som påpekats i kommentarerna till artikeln så går det ju att ha ickeinkompilerade resxfiler.
utan att fundera så mycket på det så ser jag följade för och nackdelar:
fördelar:
* man kan kanske peta in något special special om man behöver och får då kanske lite mer kontroll
nackdelar:
* du fick skriva en egen modul = x tid = y pengar
* det är en icke 'standard' modul så det finns garanterat både mer support och folk som kan det inbyggda sättet.
* större risk för buggar , allt i .net är ju ganska vältestat så risken att det finns en bugg i din kod är ju större än att det finns en i .nets motsvarighet
* mer kod att underhålla
jag kan köpa att om motiveringen är att det var den gamla latmasken som gnagde lite och du inte ville/orkade sätta dig in i det stöd som finns i .net och ville få ut en fungerande lösning fort där du dessutom är själv om att underhålla all kod.
men att föreslå att andra ska börja använda samma modul utan motivering vad man tjänar på det som väger tyngre än de uppenbara nackdelar man får känns lite fel.Sv: Flerspråksstöd
Jag säger inte på något sätt att man skall använda denna variant framför någon annan. I "vår" värld finns alla möjligheter till att ta olika vägar, detta tyckte jag var en bra lösning för pellesoft - så enkelt är det.
När det gäller tid och pengar så snackar vi två timmar i detta fall. Hoppas det räcker som svar på din fråga.Sv:Flerspråksstöd
Sv:Flerspråksstöd
Proxy är en klass som representerar en annan klass ;)
Pelle:
.resx filer är i XML format ;)
/Fredrik Normén NSQUARED2
http://fredrik.nsquared2.comSv:Flerspråksstöd
Klart jag vet ;) Men Per pratar antagligen om att använda Proxy pattern för att skapa en proxy klass som i sin tur använder en klass för att ersätter hämtning av resurser(?), fast jag skulle nog använt mig av en Adapter eftersom jag skulle nog förenkla interfacet mot ResourceManager, eftersom jag skulle bara använt mig av ResourceManager ;)
En provider för mig är mer en Plugin [Fowler] men vem säger att jag har rätt, ett tag där fick du mig att tro något helt annat ;)
/Fredrik Normén NSQUARED2
http://fredrik.nsquared2.comSv: Flerspråksstöd
Lite svårt att se hur en proxy skulle kunna vara användbart mot ResourceManagern, eftersp, em årpxy agerar som det objekt man slutgiltigen arbetar på men kan (i princip alltid annars finns det ingen vits med en proxy) innehålla helt annan logik (nu vet jag att du vet detta, men för fram lite information till diskussionen för de som inte hänger med).
Adapter eller Provider .. Jag skulle nog faktiskt också kunna tänka mig att kalla det för en Adapter - eller rättare sagt det borde jag ha gjort. Provider är en lite lösare term som kan ha flera betydelser, iaf för mig =)Sv:Flerspråksstöd
Proxy fungerar som en vägvisare mellan olika klasser baserat på nått specifikt.
Den ser till så att den ger oss det objekt för en viss funktion vi eftersöker... (alla proxyns objekt Baserat på samma interface.)
Provider, om vi pratar MS Provider Pattern? Är mer eller mindre gjort för att ha transparanta utbytbara dynamiska objekt. Meningne är ju att objekten skall aggera providers "den som tillhandahåller saker och ting" åt andra objekt. Vilket kan nyttkas i en proxy utan problem.
Ang ResourceManager så skulle en Proxy kunna styras genom att den kör ett objekt där funktionaliteten man söker finns. En klass som går under Proxyn kan hämta resurser via resourcefilerna en annan via de embedade resurserna och en tredje mot nått annat. Som användare av huvudklass vet vi inte vart proxyn hämtar sin data eller vilka objekt den nyttjar, detta behöver vi heller inte veta.
En proxy kan byggas på många olika sätt.
huduklass ---> Proxy -----> klass1 --> datakälla1
-----> klass2 --> datakälla2
-----> kalss3 --> datakälla3
En proxy struntar alltaså i vilket objekt den kommer att köra bara vi får den info vi vill ha.
Adapter (GOF) är även en Wrapper, typ en klass som nyttjar ResourceManager rakt av fast lite förenklade interface (eller samma)
Language ---> ResourceManager
Adapter (Evans)
En klass som omvandlar datakällans data till ett format man kan läsa.
AnropsKälla1 Adatper1
AnropsKälla2 ---> Service --> Adatper2 ---> Source
AnropsKälla3 Adapter3
För mig är en adapter något som i princip har en liten trasformations uppgift.
Kan vara en sak som konverterar ett interface för en klass till ett interface för en annan klass som den förstår. (Wrapper klass)
Dock är det en liten skillnad på GOF Adapter pattern (som även kan ses som en wrapper) jämför med den Evans pratar om i sina böcker. Där är en Adapter typ samma sak som en Adapter i ASP .Net 2.0, något som har i uppgift att mer eller mindre transformerar datan till ett output användaren kan nyttja.
Provider (MS)
Kan användas i både Proxy, Adapter (Evans) för att hämta in de olika objekten,
som används. Ex Proxyns klasser, Adaptrarena (Evans). Den nyttjar Latebinding mot en
configurationsfil.
Plugin (Fowler)
Kan ses som samma som MS Provider. Länkar ihop klasser via configurationer.
Kan oxå andändas för Proxy, Adapter (Evans).
Ni visste säkert detta, men ville vara liteförtydligande över vad de gör o lite hur de kan användas för dem som inte hängt med.
Mvh JohanSv:Flerspråksstöd
>Lite svårt att se hur en proxy skulle kunna vara användbart mot ResourceManagern
Skrev lite fel, Per går ju mot databas ;)
Men som du säger så är interfacet för en Proxy per definition hårt kopplat till det objekt den ska vara en proxy för.
Övrigt:
Istället för Proxy pattern, för att uppnå det Per vill, så skulle jag använt mig av Startegy pattern (ev tillsammans med Depedency Injection) eller använt Plugin [Fowler].
/Fredrik Normén Nsquared2
http://fredrik.squared2.comSv: Flerspråksstöd
Det viktiga här är inte begreppet utan budskapet (som egentligen är en självklarhet).
Det jag menade var helt enkelt en komponent (en dll) som utgör gränssnittet för att jobba med texterna (CRUD). Har man en egen komponent för detta så uppnår man fördelarna att det är lätt att ändra lagringssätt och att hanteringen kan återanvändas i andra applikationer och verktyg för översättare.
Vilket pattern är rätt att använda?
/PelleSv:Flerspråksstöd
För det du förklrar, så är det Adapter pattern. Jag skulle rekommendera Strategy eller Plugin [Fowler], för då har du möjligheter att skapa en klass per datakälla som du enklet kan byta ut utan att förändra något i din kod. Med tex Strategy kan du uppnå Open/Close Principal (OCP) och med hjälp av Dependency Injection skulle du kunna enklet byta ut din klass som går mot en datakällan mot en klass som går mot en annan datakälla, utan att kompilera om koden (Du kan tex speca dina injection i XML med tex Spring.Net ramverket).
Med Plugin (vilket även skulle kunna kallas för provider). Kan du oxå byta ut en plugin/provider (En plugin/provider går mot sin egna datakälla). Ett exempel på när Plugin används är .Net 2.0s nya provider baserade lösningar.
Plugin [Fowler]
http://www.martinfowler.com/eaaCatalog/plugin.html
Strategy [GoF]
http://www.dofactory.com/Patterns/PatternStrategy.aspx
Proxy [GoF]
http://www.dofactory.com/Patterns/PatternProxy.aspx
/Fredrik Normén NSQUARED2
http://fredrik.nsquared2.comSv: Flerspråksstöd
Vore roligt om nån förklarade lite konkret hur det funkar.
När jag valde svenska på en Form så skapades dessa filer:
MainForm.resx
MainForm.sv.resx
MainForm.sv-SE.resx
Vad har dom för uppgift?
Jag kan inte hitta mina svenska ord i nån av dom om jag laddar in dom i en editor.
Sen är det svårt att testa om det verkligen blir på svenska också eftersom jag har Windows XP på engelska då det är lättare att få support och leta hjälp då.