webForumDet fria alternativet

.resources- och .ResX-filer

.NET

11 svar · 316 visningar · startad av kristoffer

Medlem sedan juni 20001 257 inlägg
Frågan#1

Jag har en webbsida som skall kunna visas på olika språk. Därför har jag skapat bland annat följande filer:

Resources.de.resx
Resources.en.resx
Resources.resx
Resources.sv.resx

som var och en innehåller strängar som skall skrivas ut på siten. Det fungerar till 100% men jag har nu stött på ett tråkigt problem: Tanken är att administratörerna sedan skall kunna redigera dessa filer från en webbsida. Enligt vad jag har förstått måste hela projektet buildas om efter att resourcefilerna har redigerats. Fast när jag läser på http://samples.gotdotnet.com/QuickStart/howto/default.aspx?url=/quickstart/howto/doc/ResourcesCustomReader.aspx blir jag osäker på om projektet verkligen behöver buildas om. Det verkar ju heltokigt att man inte skulle kunna redigera filerna från en webbsida? I så fall skulle jag behöva använda en databas istället.

Info om Resource-filer:

http://samples.gotdotnet.com/QuickStart/aspplus/default.aspx?url=/quickstart/aspplus/doc/resourcefiles.aspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemresources.asp
http://www.devx.com/dotnet/articles/oc022102/

Medlem sedan juni 20011 732 inlägg
#2

Vi hade en liknande lösning för flerspåkstöd och vi var tvungna att kompilera vid varje ändring, MEN .resx är väl en slags xml-filer så det borde ju inte behövas?

Medlem sedan juni 20001 257 inlägg
#3

Men hur gjorde ni för att någon som inte hade tillgång till kompilatorn skulle kunna göra ändringar? .resx är xml-filer ja, vad använde ni då eftersom ni också behövde kompilera om vid varje ändring?

Medlem sedan juni 20011 732 inlägg
#4

Vi hade aldrig det problemet eftersom vi själva byggde upp resx-filerna (behövde tills vidare bara svenska och engelska). Men visst har vi tänkt tanken att bygga en webb där en administratör (utan tillgång till själva projektet) ska kunna lägga till ett språk.

Jag sitter här och provar lite men det verkar inte fungera att ändra direkt i dessa filer utan att kompilera om. Om jag däremot kompilerar så går ändringarna igenom. Jag gissar att .resx-filerna bakas in i din dll-fil? Det går ju att helt ta bort resx-filerna från katalogen och ändå ta fram innehållet i dem...

Medlem sedan juni 20001 257 inlägg
#5

I bin-katalog skapas en katalog för varje språk. I varje katalog läggs en fil som heter projektnamn.resources.dll.

Har du något tips på vad jag egentligen skall göra nu? Skita i resx-filerna och göra om det till databas istället?

Medlem sedan juni 20011 732 inlägg
#6

Aha, ja det ser jag nu. Ja, då lär det ju inte fungera... det var inte jag som gjorde språkstödet så jag har inte så bra koll på hur den fungerar.

Nej, jag tror inte att en databas är det bästa sättet, åtminstone inte om det är många små textformateringar som ska göras. Vi har exempelvis en jäkla massa buttons, labels och andra kontroller där textattributet sätts till respektive språk beroende på dina nationella inställningar. Om vi skulle använda en databas till detta skulle det ju innebära mängder med anrop och en hel del kod. Jag tror att det bästa är att du själv gör en xml-fil för respektive språk och hämtar respektive text från dessa.

Medlem sedan juni 20001 257 inlägg
#7

Kan administratören då redigera xml-filen? Har du något exempel på hur jag sedan hämtar infon därifrån? Vad är fördelen med att använda en xml-fil istället för databas?

Angående databas så känns det inte bra heller, men hade det inte gått att komma undan med endast ett databasanrop?

Medlem sedan aug. 20003 575 inlägg
#8

skulle kanske en include fil kunna vara något där det finns en massa fördeklarerade strängar.

Så skriver du bara ut strängarna? t.ex.

ett par olika include filer med olika språk

string strHeadNews = "blablablablabla";

den vanliga

<html>
<bla>
<%=strHeadNews%>

sedan finns ju arrayer också

Medlem sedan juni 20011 732 inlägg
#9

Kan administratören då redigera xml-filen? Har du något exempel på hur jag sedan hämtar infon därifrån? Vad är fördelen med att använda en xml-fil istället för databas?

Fördelen med en xml-fil är ju att den är väldigt behändig. Visst, om du gör en webb som uppdaterar en databas eller ett xml-dokument så spelar det ju ingen större roll för slutanvändaren. Men ett xml-dokument är ju betydligt mer behändigt att använda i "rå-format", det finns ju mängder med program och verktyg för att redigera dem och vill du ha en enkel översikt av din språkfil så är det bara att öppna dokumentet i din webbläsare (direkt eller genom en xsl(t)) oavsett vilken miljö du arbetar med. En databas skickar man inte runt på samma sätt, är definitivt inte lika överblickbar och den är bökigare att sätta upp.

XML är ett utmärkt medium för laging, inte minst av olika språk, även om det naturligtvis går att använda en databas också.

Angående databas så känns det inte bra heller, men hade det inte gått att komma undan med endast ett databasanrop?

Jag antar att du nu (precis som vi) har en klass där du hämtar respektive text för varje språk (beroende på vilken nationell inställning du har). För varje kontroll vi sätter en text på så gör vi ett anrop till klassen vilken returnerar rätt text på rätt språk. Du får göra på samma sätt med den skillnaden att du hämtar text från ett xml-dokument eller en databas istället.

Medlem sedan juni 20011 732 inlägg
#10

Nickemannen:

  1. Gaah, inga <%%>... ;) Tro mig det blir en soppa till slut, då kan man lika gärna hoppa tillbaka till asp. ALLA textformateringar sätter du naturligtvis i koden, ALL text hämtar du från ett media som är till för lagring.

  2. Jag tror inte att någon vill/kan göra en massa include-filer, tanken är ju att en person utan några kunskaper i programmering ska kunna lägga till ett språk.

  3. Ska du kunna bygga upp en webb där administratören kan lägga till ett nytt språk måste dessa data kunna sparas, även om det kanske är möjligt att skapa en includefil on the fly så lär det vara bökigt.

  4. Du måste dessutom ha en include för varje sida om du inte vill hämta ALLA texter varje gång en sida exekveras, alltså även sådana texter som inte används. Det blir många filer till slut...

Medlem sedan maj 2001329 inlägg
#11

Hittade hur man kan editera .resx filerna utan att byggaa om applikationen eller för den delen använda Visual studio.

Man ska använda Windows Resource Localization Editor, vilken finns i bin bibloteket till SDK som WinRes.exe. Programmet är helt stand-alone så det ska bara vara att skicka över det (och filen att översätta) till de som ska sköta översättningen och låta de göra det. Sen stoppa in den översatta .resx filen i projektet.

Happy coding

Medlem sedan juni 20001 257 inlägg
#12

Ok, tack för tipset. Det skulle alltså gå, fast nu har jag byggt om så att jag lagrar fraserna i XML-filer istället. Det var inga större problem, väldigt enkelt att redigera dem mha http://www.webforum.nu/showthread.php?s=&threadid=46727

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)