webForumDet fria alternativet

Flerspråkssida

.NETur .NET

3 svar · 346 visningar · startad av Brimba

BrimbaMedlem sedan dec. 19995 875 inlägg
#1

Hej!

Jag har funderat ett tag på detta när man har en sida med flera språk.

Som jag ser det finns det fyra alternativ..

1. Bygg en språkklass som hämtar texterna från databasen. Vid pageload fyller man sedan i rätt text till varje kontroll.

2. Bygg en webkontroll (ärver literal exempelvis) där man kan specificera vilken sida man är på och vilken text man är ute efter, exempelvis <kek:myTexts id="lit" page="register" text="firstname">

3. Använd resource och det inbyggda localizationverktyget

4. Bygg en presentationssida för varje språk

Finns det andra - bättre sätt?

Problemet med 1an och 3an är att det kräver mycket arbete och omkompilering om man vill lägga till eller ta bort en liten text.
Problemet med 2:an är att den måste instansiera språkklassen vid varje hämtning. Prestanda?
Problemet med 4an är att det är osmidigt att behöva ändra presentationen på många ställen om layouten alltid skall vara likadan ändå.

GladhMedlem sedan maj 20012 812 inlägg
#2

1. Antagligen så som jag hade löst det. Du bygger en klass som i princip är en HashTable, där du har nycklen (ditt specifika ID) och värdet (ordet på rätt språk). Sedan när du väl väljer språk så instansierar du din klass och hämtar all text på detta språk från databasen och lägger denna språkversion i cachen (du kan alltså ha flera språkklasser i cachen) och sedan när du vill ha ut rätt text till en kontrol så skriver du:

Label1.Text = languageClass["Välkommen"];

Och så kommer det skrivas ut välkommen till Label1 för det språk som du valde när du instanciserade din objekt. Detta kräver absoult inte mycket jobb (klassen tar mindre än 2 timmar att skriva) och behöver inte kompileras om för att du ändrar i någon text, däremot om du vill ändra vilket ID som en text skall ha. Vill du inte ha det i en databas, så går en XML fil också bra, är du riktigt generell så gör du så att din Languageklass kan läsa ifrån vilken källa som helst genom att använda dig av Interface i den.

2. Låter smidigt, men det finns ju massor med kontroller som kan ha text, inte bara literal, utan även buttons, dropdownlistor osv osv, så fall måste du även bygga en sådan kontrol och det blir extremt myckte jobb, men väldigt smidigat när det är färdigt.

3. Resourcer är väl det enklaste och det som MS förespråkar, har för mig att det har bra prestanda och är relativt enkelt att använda.

4. Helt oacceptabelt ur underhållssynpunkt, dock bäst ur prestandasynpunkt.

- Magnus

PDahlenMedlem sedan apr. 2004778 inlägg
#3

Jag använder första lösningen. Jag har en Page-klass som laddar när sidan öppnar. Funktionen i code-behind som laddar allt har jag i en BasePage klass som alla sidor i klassen ärver.
Jag använder Wilson MasterPages för att kunna återanvända mallar för sidorna och på så sätt kunna skapa nya sidor enkelt i ett administrationsgränssnitt.

När det gäller resources så gillar jag det inte alls eftersom de måste kompileras. De enda gångerna jag använder resource-filer är till fasta texter i t.ex. administrationen. De texter som inte kommer ändras.

Med andra ord en kombination av punkt 1 och 2. För de texter som har "innehåll" och kan ändras väldigt ofta använder jag databas och en klass som laddar texten. För de texter som är statiska funkar resource-filer bra. :)

BrimbaMedlem sedan dec. 19995 875 inlägg
#4

Tack för era svar!

Jag gjorde som så att jag har en xml-fil per språk som jag bygger en administration runt. Sedan har jag en cachedependency på den filen och jag ärver alla kontroller som jag kan tänkas behöva, literal, button, checkbox, validators m.m och slänger in ett key-attribut som jag kan ange i min aspx-sida. Detta medför att prestandan är bra och jag kan lägga till, ta bort och ändra texter från presentationen utan att behöva omkompilera. Det finns även stöd för parametrar, exempelvis om en sträng på svenska är "Hej {username}, välkommen till denna sida." Så går det utmärkt och username ersätts således till den parametern som man har angett.

Känns väldigt flexibelt.

134 ms totalt · 3 externa anrop · v20260731065814-full.b2af184d
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)