16. februar 2004 - 21:34
Der er
2 kommentarer og
3 løsninger
Satellite assemblies - hvordan?
Jeg har læst at man kan have "eksterne" assemblies såkaldte satellite assemblies - men jeg har ikke fundet noget der forklarer mig hvordan jeg laver det?
Jeg skal bruge det til at håndterer flere sprogversioner af et site
16. februar 2004 - 21:49
#2
Der er grundlæggende 3 forskellige tilgange til at globalisere et asp.net baseret website:
1) bestem og viderestil (eller vælg)
2) justering ved afvikling
3) brug af satellite assemblies
1) bruges ved sites med meget tekst. Med request.userlanguages kan man afgøre, hvilket sprog brugerens computer har og på baggrund af det viderestille til et sprogspecifikt site eller vælge det rigtige content i databasen.
2) bruges ved simple applikationer uden for meget tekst. Med request.userlanguages og thread.currentthread.currentculture kan man skifte visningen af datoer mm. i henhold til brugerens computer
3) bruges til applikationer, der genererer indholdet ved runtime. Du kan er oprette sprogspecifikke assemblies som beskrevet i de links lauge så flot har fundet frem til dig.
Jeg håber du kan bruge ovenstående.
17. februar 2004 - 10:50
#3
Hej,
Jeg bruger satellite assemblies/resourcefiles¨på følgende måde:
Jeg laver en folder, "resx", til mine resource-filer. En fil for hvert sprog. Navngivningen af disse filer er MEGET vigtig, da .NET bruger en del af navnet til at finde ud af hvilken fil den skal indlæse til et bestemt sprog.
Der skal ALTID være en default-ressource fil, "texts.resx". Når .NET ikke kan finde en resource-fil til det pågældende sprog, anvender den istedet denne fil. Alternative sprog oprettes så i nye filer, som navngives på følgende måde: "texts.xx.resx" eller "texts.xx-XX.resx".
Eksempeler:
"texts.da.resx" er dansk.
"texts.en.resx" er engelsk, mens "texts.en-GB.resx" er britisk engelsk, og "texts.en-US.resx" vil være amerikansk engelsk! Man kan altså give tage højde for "dialekter".
Hvis brugeren anvender en britisk browser, men der ikke er oprettet en "texts.en-GB.resx", vil den defaulte til "texts.en.resx". Og hvis den heller ikke fandtes, vil den ende med "texts.resx".
Søg på "CultureInfo Class" i MSDN for at få den meget omfattende liste over gyldige sprog-betegnelser. Syntaxen er meget vigtigt, og der skelnes (vistnok) mellem store og små bogstaver.
Tilbage til mit projekt. Jeg har lavet to .resx filer:
"texts.resx" og "texts.da-DK.resx".
Begge indholder ét element,
"pagDefault.lblHello.Text",
men med forskellige værdier, henholdsvis:
"Hello World" og
"Hej Verden"
Jeg har lavet en enkelt side, "default.aspx", som indeholder en label, "lblHello".
Min code-behind ser sådan ud:
Public Class _default
Inherits System.Web.UI.Page
' Mit projekt hedder "egometer" og mine resource-filer hedder "texts"!!!!!!!!!!!!!!
' Bemærk GetType på _default klassen, den skal naturligvis ændres for hver side, så det er den rigtige den peger på!!!!
Private rmTexts As New System.Resources.ResourceManager("egometer.texts", GetType(_default).Assembly)
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Threading.Thread.CurrentThread.CurrentCulture = Globalization.CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))
Threading.Thread.CurrentThread.CurrentUICulture = New Globalization.CultureInfo(Request.UserLanguages(0))
lblHello.Text = Text("pagDefault.lblHello.Text")
End Sub
Protected Function Text(ByVal Key As String) As String
Return rmTexts.GetString(Key)
End Function
End Class
Som du kan se, er der meget af det, der med fordel kan ligges ned i en Page base-class, så man bare arver en function, "Text", der kan anvendes til at hive tekster ud...
Så vidt jeg husker, så er grunden til at du sætter CurrentCulture og CurrentUICulture at ellers ville sitet altid anvende serverens indstillinger! Men det skal naturligvis også pakkes væk i base-class'en. Her kunne man evt. også pille i det, hvis man ikke ville anvende browserens indstilling, men istedet et valg foretaget af brugeren (men det må blive en anden gang:).
Jeg håber ovenstående giver mening...