Aanmelden met Microsoft
Meld u aan of maak een account.
Hallo,
Selecteer een ander account.
U hebt meerdere accounts
Kies het account waarmee u zich wilt aanmelden.

ASP.NET ondersteuningskolom

Als u deze kolom wilt aanpassen aan uw behoeften, nodigen we u uit om uw ideeën in te dienen over onderwerpen die u interesseren en problemen die u wilt zien behandeld in toekomstige Knowledge Base-artikelen en ondersteuningsstemkolommen. U kunt uw ideeën en feedback indienen met behulp van het formulier Vraag om het. Er is ook een koppeling naar het formulier onderaan deze kolom.

Inleiding

Welkom! Dit is Sukesh Khare met het ondersteuningsteam voor microsoft ASP.NET ontwikkelaars. Dit is de eerste keer dat ik een ondersteuningsstemkolom heb geschreven. Ik kijk ernaar uit om in de komende maanden meer van dergelijke kolommen te schrijven.

In de kolom van deze maand ga ik het hebben over globalisatieproblemen in ASP (Active Server Pages) en ASP.NET, de problemen waarmee we te maken hebben in ASP, hoe dingen zijn veranderd in ASP.NET 1x en wat er aan de hand is met ASP.NET 2.0 op het gebied van globalisering.

Opmerking Als u een term tegenkomt die u niet begrijpt, raadpleegt u de sectie Woordenlijst onderaan deze kolom.

Globalisatieproblemen in ASP

Vóór ASP.NET was er geen gestructureerde ondersteuning voor de ontwikkeling van toepassingen voor globale gebruikers. Tijdens de vroege ontwikkeling van ASP vonden ontwikkelaars zoals ik alleen verspreide ondersteuning voor globalisering in besturingssystemen, browsers, ASP's en back-endsystemen. We hebben echter zelden automatische connectiviteit tussen deze toepassingen waargenomen. Gelukkig hebben we concepten zoals tekensets, codepagina's, browsertalen en lettertypen begrepen die we kunnen gebruiken voor de ontwikkeling van toepassingen voor globale gebruikers.

Het zou te moeilijk zijn om alle globaliseringsproblemen die wij in ASP.NET hebben gezien, in categorieën op te delen. In plaats daarvan noem ik een reeks concepten die betrekking hebben op verschillende van deze problemen.

Tekensets en codepagina's

We weten allemaal dat de tekens op ons computerscherm slechts een reeks bytes zijn. De bytereeks kan op verschillende manieren worden gemaakt en geïnterpreteerd. Als de interpretatie een andere codering gebruikt dan de codering waarmee de bytematrix is gemaakt, wordt de interpretatie weergegeven als garbage. Tekensets (tekensets) zijn coderingsindelingen die meestal door browsers worden gebruikt. De eigenschap Codepage, die meer van toepassing is op conversies aan de serverzijde, is slechts een conversietabel die aangeeft hoe tekens worden gecodeerd.

Browsers coderen de formulierpostgegevens volgens de huidige tekenset. Als de huidige tekenset 'windows-1256' is, wordt de byteoverdracht naar de server ook gecodeerd als 'windows-1256'.

Wanneer de ASP wordt geïnterpreteerd, worden de verzamelingen Formulier en Querystring pas gebouwd als er in code naar wordt verwezen. Wanneer ze worden gebouwd, worden de tekenreeksgegevens getransformeerd naar Unicode volgens de huidige codepagina. (Standaard verwerken zowel ASP als ASP.NET inhoud met behulp van de Unicode-indeling). Het is erg belangrijk dat u de juiste codepagina instelt voordat u naar de verzamelingen verwijst; Anders is de Unicode-weergave in het geheugen niet juist.

Als u een codepagina wilt instellen, gebruikt u Session.Codepage of Response.Codepage. De pagina Response.Code is alleen beschikbaar in Microsoft Internet Information Services (IIS) 5.1 of hoger. Ga naar de volgende Microsoft-website voor informatie over de geheel getalwaarden (die overeenkomen met de tekenset) waarop we deze eigenschappen zouden instellen:

Herkenning
van tekenset http://msdn2.microsoft.com/en-us/library/Aa752010.aspxAls u bijvoorbeeld de codepagina voor de Arabische taal wilt instellen, gebruikt u de volgende code:

Session.Codepage = 1256

Response.Codepage is alleen van invloed op het huidige antwoord. Session.Codepage is echter van invloed op alle antwoorden van de huidige gebruiker. Wanneer de codepagina wordt ingesteld met behulp van een van deze eigenschappen en de verzamelingen Formulier- en Querytekenreeks worden gemaakt, zorgt deze wijziging in de huidige codepagina ervoor dat de methode Response.Write de Unicode in het geheugen transformeert naar de huidige codepagina. Ga naar de volgende MSDN-website voor meer informatie over dit onderwerp:

De codepagina instellen voor tekenreeksconversies (ASP)http://msdn2.microsoft.com/en-us/library/ms525789.aspxDe bottom-line als het gaat om problemen met betrekking tot charsets en codepagina's, is dat client charset en servercodepage moeten overeenkomen.

Talen accepteren

Als een ASP-ontwikkelaar wil weten welke talen een gebruiker in zijn browser heeft ingesteld, kan de ontwikkelaar de variabele Request.ServerVariables ('HTTP_ACCEPT_LANGUAGE') gebruiken om de lijst met talen te vinden waarin de gebruiker het antwoord wil lezen (zoals Engels, Duits of Indiaas) en de volgorde van voorkeur waarin de gebruiker deze talen wil zien. In ASP.NET is vergelijkbare informatie aanwezig in de eigenschap Request.UserLanguages als een matrix.
Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie over het gebruik van deze informatie in ASP-code:

229690 De ASP-landinstellings-id instellen volgens de taalinstellingen van de browser
 

Tekensets met meerdere bytes weergeven in Internet Explorer

De enige coderingsindeling die een tekenset met meerdere bytes kan weergeven, is Unicode (UTF-8). Met UTF-8 kunnen we cyrillisch, Indisch en Japans op dezelfde pagina weergeven. Als we UTF-8 niet gebruiken, kunnen we slechts één van deze talen tegelijk weergeven. Als u de charset van de browser wilt instellen, gebruikt u de eigenschap Response.CharSet.

Statische multi-bytetekens op een pagina

Als u tekens voor meerdere bytes wilt weergeven die rechtstreeks op de pagina zijn opgeslagen, moeten we de pagina eerst opslaan met specifieke codering. UTF-8 is het beste, maar een specifieke codepagina (die overeenkomt met de codepagina van de tekens) werkt ook.

Het opslaan van een ASP-bestand met Microsoft Visual InterDev helpt hier niet, omdat Visual InterDev alleen kan worden opgeslagen in ANSI Engels of Unicode. Asp-pagina's die zijn opgeslagen als Unicode, worden niet ondersteund door ASP.

In Microsoft Visual Studio .NET kunt u een bestand in elke codering opslaan. Er zijn twee manieren om dit te doen. De standaard manier is om het bestand op te slaan met behulp van de huidige codepagina voor de gebruiker. Een extra manier om een bestand op te slaan met een codering is als volgt:
Klik in het menu Bestand op Bestand opslaan als. Klik in het
dialoogvensterBestand opslaan als op de vervolgkeuzepijl op de
knopOpslaan. Wanneer u op de pijl klikt, zijn
de optiesOpslaan en Opslaan met codering. Wanneer u opOpslaan met codering klikt
, wordt het dialoogvenster Geavanceerde opties voor opslaan weergegeven, waarin u het type codering kunt selecteren dat u wilt toepassen in een lijst met codepagina's die op de computer zijn geïnstalleerd.


Opmerking Hiermee wijzigt u de codering voor de opslagbewerking, maar dit is slechts één keer. De volgende opslag wordt teruggezet op de standaardinstelling.

Als u de standaardcodepagina wilt wijzigen, klikt u op Geavanceerde opties voor opslaan in het
menuBestand. In het dialoogvenster Geavanceerde opties voor opslaan kunt u de standaardcodering voor opslagbewerkingen instellen op de codepagina van uw keuze.

Deze methoden zijn gerelateerd aan hoe het bestand op schijf wordt opgeslagen. Als u echter de uitvoer voor ASP wilt beheren, zoals al is besproken, moeten we de eigenschappen Session.CodePage en Response.CharSet instellen. Met IIS 5.1 en latere versies kunnen we ook de eigenschap Response.CodePage gebruiken.

StandaardCODEPAGE op server

De standaardinstelling en de standaardcodepagina voor de pagina zijn afhankelijk van de registerinstellingen voor de . STANDAARDgebruiker. We kunnen de internationale sleutel vinden op registry hive HKEY_USERS\.DEFAULT\Control Panel\International. We kunnen ook het gedrag wijzigen van de landinstelling die is gekozen door IIS.

Als de aangemelde gebruiker dezelfde landinstelling heeft ingesteld als de bovenstaande sleutel of de standaardinstelling van het systeem, heeft de gebruikersinstelling voorrang.

Voorbeeld: De datumnotatie van de standaardinstelling is ingesteld op 11.1.2004, terwijl de aangemelde gebruiker (met dezelfde landinstelling) de datumnotatie heeft als 11-1-2004. De instelling 11-11-2004 wordt van kracht voor ASP.

(Voor ASP.NET kan dit variëren. In sommige installaties heeft de ASPNET-gebruiker een eigen profiel dat wordt weergegeven onder HKEY_USERS wanneer deze wordt geladen. In andere wordt de . STANDAARDprofiel. We kunnen ook het codepaginakenmerk gebruiken in de declaratie <%@ %>. Dit moet worden gebruikt wanneer het bestand wordt opgeslagen met een andere codering dan de standaardcode, zoals codepagina 932 (Japans)).

Problemen met codepagina versus problemen met het converteren van lettertypen: wat is wat?

Soms ziet u mogelijk een vraagteken (?) of een vak waarin een teken moet worden weergegeven.

Conversieproblemen met codepagina's

Wanneer een teken wordt vervangen door een vraagteken (?), geeft dit aan dat er een probleem met de conversie van codepagina's is opgetreden. Het vraagteken (?) is een standaardteken voor de codepaginaconversie en betekent in feite dat het besturingssysteem niet weet hoe de tekenwaarde moet worden verwerkt en geconverteerd. De tekenwaarde wordt vervangen door een vraagteken (?). Dit kan betekenen dat het teken een ongeldige waarde heeft voor de codepagina of dat de codepagina die nodig is voor de conversie niet is geïnstalleerd.

Problemen met lettertypeconversie

Wanneer een teken wordt vervangen door een vak, geeft dit aan dat er een probleem met de lettertypeconversie is opgetreden. Dit gebeurt aan de clientzijde wanneer de client niet het juiste lettertype heeft geïnstalleerd om dit teken correct weer te geven. Als een teken bijvoorbeeld afkomstig is van de Japanse tekenset en de client de Japanse lettertypen niet heeft geïnstalleerd, wordt het Japanse teken weergegeven als een vak.

Vervolgens zal ik het hebben over hoe dingen zijn veranderd in ASP.NET 1.x en hoe deze wijzigingen van invloed zijn op globaliseringsproblemen in de context van ASP.NET.

Problemen met globalisering in ASP.NET 1.x:

Met ASP.NET zijn er drie geweldige dingen geïntroduceerd:

  • De tag <globalization> in web.config-bestand
    De <globalization> tag neemt ons weg van de incoherent concepten van codepagina's en charsets en laat ons de meeste varianten binnen ASP.NET beheren.

  • De naamruimte
    System.Globalization De globalization-naamruimte biedt ons de programmatische kracht van het afhandelen van globalisering.

  • Het concept van resourcebestanden is aanzienlijk verbeterd.
    We gaan niet met resourcebestanden om zoals in ASP. De resourcebestanden hebben nu de vorm van XML-bestanden wanneer we ze ontwerpen en ontwikkelen, en ze bestaan als samengestelde bestanden tijdens runtime.

De configuratietag Globalization:

Twee belangrijke instellingen in de tag zijn als volgt:

<globalization 
            requestEncoding="utf-8" 
            responseEncoding="utf-8"  />

Andere mogelijke instellingengebieden volgen:

fileEncoding

Hiermee geeft u de standaardcodering voor .aspx, .asmx en .asax bestand parseren. Unicode- en UTF-8-bestanden die zijn opgeslagen met het bytevolgordemarkeringsvoorvoegsel (met handtekening) worden automatisch herkend, ongeacht de waarde van fileEncoding.

Cultuur

Hiermee geeft u de standaardcultuur voor het verwerken van inkomende webaanvragen (van toepassing op methoden van klassen uit de System.Globalization-naamruimte).

uiCulture

Hiermee geeft u de standaardcultuur voor het verwerken van landinstellingsafhankelijke resourcezoekopdrachten (satellietassembly's).

Ga naar de volgende Microsoft-website voor meer informatie over cultuurtekenreeksen (waarden voor cultuur en uicultuur):

System.Globalization.CultureInfoClass
http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo(vs.71).aspxDeze instellingen worden toegepast door ASP.NET nadat het antwoord is voltooid en voordat de aanvraag is overgedragen aan uw toepassing. Voor responseEncoding wordt de buffer die wordt gemaakt om de uitvoer op te slaan ingesteld op deze codering. Alles wat in deze buffer gaat, wordt gecodeerd op basis van de instelling die in de buffer wordt ingevoegd.

Voor requestEncoding leest de runtime de aanvraag en interpreteert deze volgens de instelling in deze sectie. Dit is echter een instelling die problemen kan veroorzaken. In de onderstaande tabel ziet u de bitindeling van een geldige UTF-8-bytesreeks.

Als de tekenwaarde in de ASCII 7-bits standaard valt, wordt de bytewaarde niet gewijzigd. Als de waarde hoger is dan 127, moet deze voldoen aan de onderstaande regels. De voorloopset bits laat zien hoeveel tekens de reeks bevat. Elke byte na de eerste moet beginnen met de eerste bit ingesteld op 1.

Indeling UTF-8-byte:

Bytes

bits

Vertegenwoordiging

1

7

0vvvvvvv

2

11

110vvvvv 10vvvvvvvv

3

16

1110vvvv 10vvvvvvvv 10vvvvvv

4

21

11110vvv 10vvvvvvvv 10vvvvvv 10vvvvvvvv

Dit is waar het probleem zich voordoet. Als de browser de aanvraag codeert volgens één bytecodering (zoals iso-8859-1), zijn de waarden boven 127 niet geldig volgens de bovenstaande indeling. Wanneer ze worden gelezen in de UTF-8-buffer, worden de ongeldige tekens gewoon uit de uitvoer verwijderd.

Wijzigingen in runtimecodering

In de Application_BeginRequest gebeurtenis kunnen we de waarde van requestEncoding wijzigen en deze van kracht laten worden voordat de aanvraag wordt verwerkt. Voor het antwoord is de gebeurtenis Page_PreRender de laatste kans om de codering van de uitvoer te wijzigen. Houd er ook rekening mee dat Response.Write tekens in deze buffer plaatst zodra we deze aanroepen, dus zorg ervoor dat u de juiste codering hebt ingesteld voordat u Response.Write gebruikt.

De oorspronkelijke gegevens zijn niet Unicode: hoe kunt u in Internet Explorer nog steeds multi-bytetekensets interpreteren?

We kunnen ook ASP.NET zich gedragen als ASP als dat nodig is. Hiervoor moeten we de responseEncoding en requestEncoding instellen op windows-1252 (een volledigere codering dan iso-8859-1) en de eigenschap Response.Charset gebruiken om de tekst correct weer te geven. Dit werkt omdat windows-1252 een enkel bytecoderingsschema is en geen bytes wijzigt die aan de buffer worden toegevoegd. Dubbele bytetekens worden dus verzonden als een reeks van enkele bytes. Vervolgens kunnen we Internet Explorer vertellen hoe de bytes moeten worden geïnterpreteerd met behulp van de eigenschap Response.Charset. Dit scenario kan nodig zijn als de oorspronkelijke gegevens niet zijn opgeslagen als Unicode of UTF-8, zoals een retourwaarde van een COM-object, of als de gegevens zijn opgeslagen in Microsoft SQL Server in een niet-N-veld (zoals varchar).

problemen met SQL Server en ASP.NET globalisering

Unicode-gegevensinvoer voor SQL Server

De beste manier om gegevens op te slaan in SQL Server is door Unicode te gebruiken. Wanneer we INSERT, UPDATE, enzovoort gebruiken, als er zelfs maar een minimale kans op Unicode-gegevens is, moeten we een N vóór de waarde toevoegen. Hiermee wordt aan de database aangegeven dat de waarde Unicode is. Een goed voorbeeld hiervan zijn de ADO-objecten. Ze doen dit automatisch als we het object Recordset gebruiken om nieuwe records toe te voegen.

Hier volgt een voorbeeld:

INSERT INTO MusicAlbum (Album_ID, [Year], Name, Artist_ID, Company_ID) VALUES (12345, 2005, N'Abida', 4653, 403)
Or:
Dim t As String = "INSERT INTO MusicAlbum(Album_ID, [Year], Name, Artist_ID, Company_ID) VALUES (12345, 2005, N'" & TextBox1.Text & "', 4653, 403)"
Datum-/tijdinvoer voor SQL Server

Meestal hebben we de kennis over de cultuur en de landinstelling van de datum/tijd die binnen onze ASP.NET toepassing wordt geïnterpreteerd. Tijdens het pushen en ophalen van de datum-/tijdgegevens van en naar externe bronnen, lopen we echter het risico dat de datum-/tijdnotaties onjuist worden geïnterpreteerd. Dit komt omdat we niet altijd kunnen garanderen dat de cultuur en landinstelling van de externe bron hetzelfde zijn als in onze toepassing. In SQL Server kan dit worden opgelost met behulp van het kenmerk 'current language' in de verbindingsreeks van de verbinding die wordt gemaakt met de SQL-database. We kunnen dezelfde taalinstelling bieden in de verbindingsreeks als de cultuur in onze toepassing. Dit beschermt ons tegen het risico van onjuiste interpretatie, omdat SQL Server de datum/tijd-gegevens altijd in toestemming accepteert en verzendt met de bovenstaande instelling.

System.Globalization-naamruimte

Deze naamruimte is de kern van globalisering en lokalisatie in de .NET Framework. De belangrijkste klasse die in deze naamruimte wordt gebruikt, is de klasse CultureInfo. Het bevat cultuurspecifieke informatie, zoals de datum-/tijdnotatie, getalnotaties, vergelijkingsinformatie en tekstinformatie. Ga naar de volgende MSDN-website voor meer informatie over de klasse CultureInfo:

http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo(vs.71).aspxCultureInfo

Neutrale culturen versus specifieke culturen

Een neutrale cultuur is een cultuur die is gekoppeld aan een taal, maar niet aan een specifiek land/regio. Een specifieke cultuur is gekoppeld aan zowel een taal als een specifiek land/regio.

Een voorbeeld: "DE" (neutrale cultuur) is voor de Duitse taal, maar "de-AT" (specifieke cultuur) is voor de Duitse taal zoals deze wordt gesproken in Oostenrijk. Neutrale culturen kunnen niet worden gebruikt voor opmaak.

Huidige thread en cultuurbewustzijn van .NET Framework klassen

Alle klassen en methoden in de .NET Framework-bibliotheek waarvan we verwachten dat de uitvoer cultuurafhankelijk is, hebben twee ingebouwde gedrag:

  • Hiermee kunnen we de cultuurcode opgeven terwijl we de argumenten opgeven, zodat de uitvoer is gebaseerd op de opgegeven cultuur. Dit is optioneel.

  • Als dit wordt gemist (meestal is dit het), zijn de klassen intelligent genoeg om de eigenschap Thread.CurrentThread.CurrentCulture te controleren en volgens die eigenschap te werken.

We kunnen de waarde van deze eigenschap wijzigen met code die er ongeveer als volgt uitziet:

    Dim ci As CultureInfo
        ci = New CultureInfo("de-AT")
        Thread.CurrentThread.CurrentCulture = ci

In dit codevoorbeeld staat 'de' voor de Duitse taal en 'AT' voor Oostenrijk. In dit geval de DateTime.Now(). De methode ToString retourneert de datum en tijd in een notatie die overeenkomt met de manier waarop de datum en tijd worden uitgedrukt in de Duitse taal in Oostenrijk.

Het framework zorgt er (als volgt) voor dat de eigenschap CurrentCulture altijd wordt geïnitialiseerd:

  1. Wat het programmatisch ook is ingesteld.

  2. Als deze niet expliciet is ingesteld door de programmeur, wordt de eigenschap gekozen uit de configuratiebestanden (<globalisatie> tag).

  3. Als de eigenschap ontbreekt, is dit de cultuur waarop de webserver wordt uitgevoerd. Dit is meestal de neutrale cultuur die overeenkomt met de taal van het besturingssysteem.

Resourcebestanden

Alle .resx-, .resource-bestanden en bestanden waarvoor het kenmerk Build Action is ingesteld op Ingesloten resource die worden toegevoegd aan een ASP.NET-project in Visual Studio .NET, worden automatisch gecompileerd en ingesloten in de toepassingsassembly als onderdeel van het manifest. Dit kan zelfs handmatig worden gedaan met behulp van het hulpprogramma Resource File Generator (RESGEN) via een Visual Studio .NET-opdrachtprompt. Ga voor meer informatie naar de volgende MSDN-website:

http://msdn2.microsoft.com/en-us/library/ccec7sz1(vs.71).aspxDit is een algemeen concept dat van toepassing is wanneer we toepassingsresources moeten beheren die geen verband houden met globalisering. Wanneer we echter globalisering implementeren, moeten we satellietassembly's gebruiken.

Satellietassembly's

Satellietassembly's kunnen worden gebruikt in een ASP.NET-project wanneer u ervoor zorgt dat het volgende waar is:

  1. Alle elementen van de gebruikersinterface in alle aspx-bestanden moeten worden uitgerust met id- en runat=-serverkenmerken.

  2. We maken afzonderlijke .resx-bestanden. Elke cultuur moet overeenkomen met elke cultuur die we met onze toepassing willen ondersteunen.

  3. We moeten een gemeenschappelijke voornaam kiezen voor al deze bestanden voor bijvoorbeeld. 'Tekenreeksen'.

  4. We noemen de afzonderlijke .resx-bestanden met de volgende naamconventie commonfirstname. languagecode-regioncode.resx (bijvoorbeeld: Strings.de-AT.resx, Strings.en-GB.resx ).

  5. We moeten het resourcebestand
    commonfirstname.resx (Strings.resx) hebben met alle tekenreeksen zoals we willen weergeven in de standaardcase.

  6. Schrijf code om de cultuur van de gebruiker te detecteren en stel de eigenschap Thread.CurrentThread.CurrentUICulture in op overeenkomst.

  7. Schrijf code om de resources te laden met behulp van de klasse ResourceManager.

  8. Schrijf code om tekenreeksen uit het geladen object te extraheren en toe te wijzen aan elementen van de gebruikersinterface.

Wanneer u deze stappen hebt uitgevoerd, compileert Visual Studio.NET Strings.resx en sluit deze in de toepassingsassembly (MyGlobalizationTestProjectName.dll). Voor alle andere RESX-bestanden worden echter afzonderlijke DLL-bestanden gegenereerd die geen uitvoerbare code bevatten, maar alleen resourcegegevens. Dit worden eigenlijk satellietassembly's genoemd. Visual Studio .NET plaatst deze ook in de mapstructuur, vergelijkbaar met de volgende:MyGlobalizationTestProjectName
|------- bin
|------en-US

MyGlobalizationTestProjectName.resources.dll |------ja-JP

MyGlobalizationTestProjectName.resources.dll |------de-AT
MyGlobalizationTestProjectName.resources.dll

Verschil tussen CurrentCulture en CurrentUICulture

Hoewel de methoden van klassen in de naamruimte System.Globalization afhankelijk zijn van de eigenschap Thread.CurrentThread.CurrentCulture om hun uitvoer op te geven, is de klasse ResourceManager die de resourceassembly laadt afhankelijk van de eigenschap Thread.CurrentThread.CurrentUICulture om de juiste satellietassembly te laden. Hier volgt een voorbeeld van C#-code:

using System.Globalization;
using System.Threading;
using System.Resources;

//Load resources. 
protected ResourceManager gStrings = new ResourceManager("MyGlobalizationTestProjectName.strings", typeof(MyTestWebFormName).Assembly);

// Get the user's preferred language.
string sLang = Request.UserLanguages[0];
// Set the thread's culture for formatting, comparisons, etc.   
Thread.CurrentThread.CurrentCulture =  CultureInfo.CreateSpecificCulture(sLang);
// Set the thread's UICulture to load resources
// from satellite assembly.
Thread.CurrentThread.CurrentUICulture = new CultureInfo(sLang);

private void Page_Load(object sender, System.EventArgs e) 

{ 

 if (!IsPostBack)  

 {      
// Get strings from resource file and assign to UI elements.
head1.InnerHtml = gStrings.GetString("satellite.head1");
p1.InnerHtml = gStrings.GetString("satellite.p1");
sp1.InnerHtml = gStrings.GetString("satellite.sp1");
sp2.InnerHtml = gStrings.GetString("satellite.sp2");
butOK.Text = gStrings.GetString("satellite.butOK");
butCancel.Value = gStrings.GetString("satellite.butCancel");
   }

 }

Volgorde waarin ASP.NET satellietassembly's selecteert:

Wanneer u CurrentUICulture van de thread hebt ingesteld, selecteert ASP.NET automatisch de resources die overeenkomen, in de volgende volgorde:

  • Als er een satellietassembly wordt gevonden met een overeenkomende cultuur, worden de resources uit die assembly gebruikt.

  • Als er een satellietassembly wordt gevonden met een neutrale cultuur die overeenkomt met de CurrentUICulture, worden resources uit die assembly gebruikt.

  • Als er geen overeenkomst wordt gevonden voor de CurrentUICulture, worden de terugvalresources gebruikt die zijn opgeslagen in de uitvoerbare assembly.

Opmerking Dit is gebaseerd op het meer algemene resourceterugvalproces. Ga voor meer informatie naar de volgende MSDN-website:

http://msdn2.microsoft.com/en-us/library/sb6a8618(vs.71).aspx

Handmatig satellietassembly's maken:

Dit gebruik van satellietassembly's is waar Visual Studio .NET de assembly's zelf maakt. Visual Studio .NET bevat echter standaard geen sterke namen van satellietassembly's. Als u deze opties wilt wijzigen, moet u handmatig satellietassembly's maken. Ga voor meer informatie naar de volgende MSDN-website:

http://msdn2.microsoft.com/en-us/library/21a15yht(vs.71).aspx .

Hoe zit het met ASP.NET 2.0 op het vlak van globalisering?

Het wijdverbreide gebruik van ASP.NET en de soorten problemen die we zouden zien met betrekking tot de globaliseringsfuncties in ASP.NET 2.0 liggen nog voor de boeg. Het zou echter goed zijn om kort te kijken naar welke richting de globaliseringsmethodologie gaat voor webtoepassingen.

Ondersteuning voor globalisering in ASP.NET 2.0 heeft een ingrijpende verandering ondergaan en webontwikkelaars hebben de mogelijkheid gekregen om de lokalisatie van webtoepassingen net zo eenvoudig te maken als voor Windows-toepassingen. Hier volgt een lijst met functies die de basis vormen van de globaliseringsmethodologie in ASP.NET 2.0:

Sterk getypte resources De kern van de .NET Framework 2.0-release is ondersteuning voor sterk getypte resources die ontwikkelaars voorzien van Intellisense en code vereenvoudigt die nodig is voor toegang tot resources tijdens runtime.

Managed Resource Editor Visual Studio .NET 2.0 bevat een nieuwe resource-editor met betere ondersteuning voor het maken en beheren van resourcevermeldingen, waaronder tekenreeksen, afbeeldingen, externe bestanden en andere complexe typen.

Het genereren van resources voor Web Forms Windows Forms ontwikkelaars hebben al genoten van de voordelen van automatische internationalisering. Visual Studio .NET 2005 ondersteunt nu snelle internationalisering door automatisch resources te genereren voor Web Forms, gebruikersbesturingselementen en basispagina's.

Verbeterde runtimeondersteuning ResourceManager-exemplaren worden beheerd door de runtime en zijn gemakkelijk toegankelijk voor servercode via meer toegankelijke programmeerinterfaces.

Lokalisatie-expressies Moderne declaratieve expressies voor webpagina's ondersteunen het toewijzen van resourcevermeldingen om eigenschappen, HTML-eigenschappen of statische inhoudsregio's te beheren. Deze expressies zijn ook uitbreidbaar en bieden extra manieren om het proces voor het koppelen van gelokaliseerde inhoud aan HTML-uitvoer te beheren.

Automatische cultuurselectie Het beheren van cultuurselectie voor elke webaanvraag kan automatisch worden gekoppeld aan browservoorkeuren.

Resourceprovidermodel Met een nieuw resourceprovidermodel kunnen ontwikkelaars resources hosten in alternatieve gegevensbronnen, zoals platte bestanden en databasetabellen, terwijl het programmeermodel voor toegang tot deze resources consistent blijft.

Ga naar de volgende MSDN-website voor meer informatie over de globaliseringsmethodologie in ASP.NET 2.0:

lokalisatiefuncties van ASP.NET 2.0: Een nieuwe benadering voor het lokaliseren van webtoepassingen
http://msdn2.microsoft.com/en-us/library/ms379546(VS.80).aspx

Conclusie

Dat is voorlopig alles over globalisatieproblemen in ASP en ASP.NET. Ik hoop dat dit artikel een paar klanten helpt bij het oplossen van hun problemen met de globalisering in ASP en ASP.NET voordat ze ervoor kiezen contact op te leggen met Microsoft Ondersteuning. Ik eindig met de volgende gedachte:

"Waar en wanneer je je ontwikkelt, denk na over de miljoenen mensen die je over de hele wereld kunt machtigen. Maak uw oplossingen wereldklaar! Microsoft-hulpprogramma's en -technologieën maken internationalisering eenvoudiger."

We zullen volgende maand weer bijpraten met een ander interessant onderwerp.

Bedankt voor je tijd.

Zie de volgende Microsoft-websites voor meer informatie over globaliseringsproblemen in ASP en ASP.NET:

SetLocale en GetLocale in vbscript
http://msdn2.microsoft.com/en-us/library/5xf99h19.aspx

Globalisatie Stapsgewijze
http://msdn.microsoft.com/en-us/goglobal/bb688110

Ga globaal: Dynamische Web Apps lokaliseren met IIS 5.0 en SQL Server
http://msdn.microsoft.com/msdnmag/issues/01/05/global/default.aspx

Go Global: Uw ASP-website ontwerpen ter ondersteuning van globalisatie
http://msdn.microsoft.com/msdnmag/issues/0700/localize/default.aspx

315616 Een clienttaal detecteren op een pagina met actieve serverpagina's inIIS-http://support.microsoft.com/?id=315616

LCID-grafiek
(Locale ID)http://msdn2.microsoft.com/en-us/library/0h88fahh.aspx

System.Globalization-naamruimte
http://msdn2.microsoft.com/en-us/library/system.globalization(vs.71).aspx

Resources en lokalisatie Met de .NET Framework SDK
http://msdn2.microsoft.com/en-us/library/aa309421(VS.71).aspx

Resources in ASP.NET Applications
http://msdn2.microsoft.com/en-us/library/1ztca10y(vs.71).aspx

ASP.NET <globalization>configuratie-element http://msdn2.microsoft.com/en-us/library/hy4kkhe0(vs.71).aspx

Ontwerp- en implementatierichtlijnen voor webclients -Globalization and Localization
http://msdn2.microsoft.com/en-us/library/ms978628.aspx

Officiële Microsoft-site - Global Development and Computing Portal
http://msdn.microsoft.com/en-us/goglobal/bb688096

Ontwikkeling van wereldklare toepassingen
http://msdn2.microsoft.com/en-us/library/h6270d0z(vs.71).aspx

Globalization Architecture for ASP.NET
http://msdn2.microsoft.com/en-us/library/aa478974.aspx

Enterprise Localization Toolkit - Voor het ontwikkelen van gelokaliseerde Microsoft ASP.NET-toepassingen
http://msdn2.microsoft.com/en-us/library/aa479334.aspx

Microsofttypografie
http://www.microsoft.com/typography/default.mspx

Woordenlijst

ANSI staat voor American National Standards Institute. In deze context vertegenwoordigt het een specifieke codepagina voor een specifieke taal/tekenset. Verwijst meestal naar de Engelse codepagina (windows-1252).

ASCII Een 1 byte (of 7-bits) coderingsschema. Alleen de tekens in het bereik 0-127 worden gestandaardiseerd. Het bereik 128-255 is uitbreiding van ASCII en maakt geen deel uit van de standaard. Een voorbeeld hiervan is het verschil tussen het bovenste bereik van de OEM ASCII-grafiek en de VB ASCII-grafiek.

CharSet-instelling wordt meestal gebruikt voor Internet Explorer en browsers die de browser vertelt hoe de tekengegevens moeten worden geïnterpreteerd. Voorbeeld: Response.charSet = 'iso-8859-1'.

Codepagina Een conversietabel die aangeeft hoe tekens worden gecodeerd (meestal gebruikt voor servers).

Globalization Globalization is een proces van het ontwerpen en maken van een toepassing, zodat kan worden voldaan aan de unieke vereisten van een cultuur, regio of nationale/regionale en taalkundige behoeften. Met andere woorden, het ontwerpen van een toepassing op een manier die later kan worden gelokaliseerd, is globalisering.

Landinstelling/cultuur Taal- en regiospecifieke notaties/voorkeuren, waaronder datum- en kalendernotaties, tijdnotaties, valuta-indelingen, hoofdletters, sorteer- en tekenreeksvergelijking, adresnotaties, notaties voor telefoonnummers, papierformaten, maateenheid, schrijfrichting, enzovoort.

LocaleID (LCID) Een DWORD-waarde die de taal-id en sorteer-id aangeeft. Het kan worden gebruikt om de specifieke regio-indelingen voor ex datum/tijd enz. moeten worden opgemaakt op basis van.

Lokalisatie De mogelijkheid van een toepassing om inhoud te presenteren voor de gewenste taal/landinstelling.

LokalisatieLokalisatie is het proces van het vertalen van een gebruikersinterface naar specifieke talen en/of landinstellingen.

Tekenset met meerderebyte Een tekenset waarin de tekens bestaan uit twee of meer bytes, zoals Japans. UTF-8 valt ook onder deze categorie. (Unicode bevindt zich technisch gezien in deze categorie, maar in Windows heeft het een eigen categorie.)

Unicode Een coderingsschema van 2 bytes. Windows maakt intern gebruik van Unicode. Alle API's die specifiek voor Unicode zijn, worden aangeduid met een 'W' aan het einde van de functienaam. Ook wel bekend als wide char; kan niet rechtstreeks worden gebruikt vanuit webtoepassingen.

UTF-8 Een tekencodering waarbij een teken kan worden vertegenwoordigd door 1-6 bytes. In Windows is het bereik 1-3 bytes. Niet ondersteund onder NT4 voor webtoepassingen.



Brede tekenset Een alias voor Unicode. Ook wel bekend als DBCS (double byte character set), UCS-2, UTF-16.

Zoals altijd kunt u ideeën indienen over onderwerpen die u in toekomstige kolommen of in de Knowledge Base wilt bespreken met behulp van het formulier Vraag om het.

Meer hulp nodig?

Meer opties?

Verken abonnementsvoordelen, blader door trainingscursussen, leer hoe u uw apparaat kunt beveiligen en meer.

Community's helpen u vragen te stellen en te beantwoorden, feedback te geven en te leren van experts met uitgebreide kennis.

Was deze informatie nuttig?

Hoe tevreden bent u met de taalkwaliteit?
Wat heeft uw ervaring beïnvloed?
Als u op Verzenden klikt, wordt uw feedback gebruikt om producten en services van Microsoft te verbeteren. Uw IT-beheerder kan deze gegevens verzamelen. Privacyverklaring.

Hartelijk dank voor uw feedback.

×