Bei Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

ASP.NET Support Voice Column

Um diese Spalte an Ihre Anforderungen anzupassen, laden wir Sie ein, Ihre Ideen zu Themen, die Sie interessieren, und Problemen, die in zukünftigen Knowledge Base-Artikeln und Support Voice-Spalten behandelt werden sollen, einzureichen. Sie können Ihre Ideen und Ihr Feedback übermitteln, indem Sie das Formular Ask For It verwenden. Es gibt auch einen Link zum Formular unten in dieser Spalte.

Einführung

Willkommen! Dies ist Sukesh Khare mit dem Microsoft ASP.NET Developer Support-Team. Dies ist das erste Mal, dass ich eine Support Voice-Spalte erstellt habe. Ich freue mich darauf, in den kommenden Monaten weitere solche Spalten zu erstellen.

In der Spalte dieses Monats werde ich Globalisierungsprobleme in Active Server Pages (ASP) und ASP.NET, die Probleme, die wir in ASP haben, wie sich die Dinge in ASP.NET 1x geändert haben und was mit ASP.NET 2.0 auf der Globalisierungsfront zu tun hat.

Hinweis Wenn Sie auf einen Begriff stoßen, den Sie nicht verstehen, lesen Sie den Abschnitt Glossar unten in dieser Spalte.

Globalisierungsprobleme in ASP

Vor ASP.NET gab es keine strukturierte Unterstützung für die Entwicklung von Anwendungen für globale Benutzer. Während der frühen Entwicklung von ASP fanden Entwickler wie ich nur verstreute Unterstützung für die Globalisierung in Betriebssystemen, Browsern, ASPs und Back-End-Systemen. Wir haben jedoch selten eine automatische Konnektivität zwischen diesen Anwendungen beobachtet. Glücklicherweise haben wir Konzepte wie Zeichensätze, Codepages, Browsersprachen und Schriftarten verstanden, die wir für die Entwicklung von Anwendungen für globale Benutzer nutzen können.

Es wäre zu schwierig, alle Globalisierungsprobleme, die wir in ASP.NET gesehen haben, in Kategorien aufzuteilen. Stattdessen listee ich eine Reihe von Konzepten auf, die sich auf eine Vielzahl dieser Probleme beziehen.

Zeichensätze und Codepages

Wir alle wissen, dass die Zeichen auf unserem Computerbildschirm nur eine Reihe von Bytes sind. Die Bytereihe kann auf verschiedene Arten erstellt und interpretiert werden. Wenn die Interpretation eine Codierung verwendet, die sich von der Codierung unterscheidet, mit der das Bytearray erstellt wurde, wird die Interpretation als Garbage angezeigt. Zeichensätze (Zeichensätze) sind Codierungsformate, die normalerweise von Browsern verwendet werden. Die Codepage-Eigenschaft, die für serverseitige Konvertierungen besser geeignet ist, ist nur eine Konvertierungstabelle, die angibt, wie Zeichen codiert werden.

Browser codieren die Formularpostdaten entsprechend dem aktuellen Zeichensatz. Wenn der aktuelle Zeichensatz "windows-1256" ist, wird die Byteübertragung an den Server ebenfalls als "windows-1256" codiert.

Wenn der ASP interpretiert wird, werden die Auflistungen Form und Querystring erst erstellt, wenn im Code darauf verwiesen wird. Wenn sie erstellt werden, werden die Zeichenfolgendaten gemäß der aktuellen Codepage in Unicode transformiert. (Standardmäßig verarbeiten sowohl ASP als auch ASP.NET Inhalte im Unicode-Format. Es ist sehr wichtig, dass Sie die richtige Codepage festlegen, bevor Sie auf die Auflistungen verweisen. Andernfalls ist die Unicode-Darstellung im Arbeitsspeicher nicht korrekt.

Um eine Codepage festzulegen, verwenden Sie Session.Codepage oder Response.Codepage. Die Response.Codepage ist nur in Microsoft-Internetinformationsdienste (IIS) 5.1 oder höheren Versionen verfügbar. Informationen zu den ganzzahligen Werten (die dem Zeichensatz entsprechen), auf die wir diese Eigenschaften festlegen würden, finden Sie auf der folgenden Microsoft-Website:

Zeichensatzerkennung
http://msdn2.microsoft.com/en-us/library/Aa752010.aspxVerwenden Sie beispielsweise den folgenden Code, um die Codepage für die Arabische Sprache festzulegen:

Session.Codepage = 1256

Response.Codepage wirkt sich nur auf die aktuelle Antwort aus. Session.Codepage wirkt sich jedoch auf alle Antworten des aktuellen Benutzers aus. Wenn die Codepage mit einer dieser Eigenschaften festgelegt wird und die Auflistungen Form und Querystring erstellt werden, bewirkt diese Änderung in der aktuellen Codepage, dass die Response.Write-Methode den Unicode-Code im Arbeitsspeicher in die aktuelle Codepage transformiert. Weitere Informationen zu diesem Thema finden Sie auf der folgenden MSDN-Website:

Festlegen der Codepage für Zeichenfolgenkonvertierungen (ASP)http://msdn2.microsoft.com/en-us/library/ms525789.aspxUnter dem Strich sollten Client-Zeichensatz und Servercodepage übereinstimmen, wenn es um Probleme im Zusammenhang mit Zeichensätzen und Codepages geht.

Sprachen akzeptieren

Wenn ein ASP-Entwickler wissen möchte, welche Sprachen ein Benutzer in seinem Browser festgelegt hat, kann der Entwickler die Variable Request.ServerVariables ("HTTP_ACCEPT_LANGUAGE") verwenden, um die Liste der Sprachen zu finden, in denen der Benutzer die Antwort lesen möchte (z. B. Englisch, Deutsch oder Indisch) und die Reihenfolge, in der der Benutzer diese Sprachen sehen möchte. In ASP.NET sind ähnliche Informationen in der Request.UserLanguages-Eigenschaft als Array vorhanden.
Weitere Informationen zur Verwendung dieser Informationen in ASP-Code finden Sie im folgenden Artikel der Microsoft Knowledge Base:

229690 Festlegen der ASP-Gebietsschema-ID gemäß den Spracheinstellungen des Browsers
 

Anzeigen von Mehrbytezeichensätzen in Internet Explorer

Das einzige Codierungsformat, das einen Multibytezeichensatz anzeigen kann, ist Unicode (UTF-8). Mit UTF-8 können wir Kyrillisch, Indisch und Japanisch auf derselben Seite anzeigen. Wenn wir UTF-8 nicht verwenden, können wir jeweils nur eine dieser Sprachen anzeigen. Verwenden Sie die Response.CharSet-Eigenschaft, um den Zeichensatz des Browsers festzulegen.

Statische Multibytezeichen auf einer Seite

Um direkt auf der Seite gespeicherte Multibytezeichen anzuzeigen, müssen wir zuerst die Seite mit einer bestimmten Codierung speichern. UTF-8 ist am besten geeignet, aber eine bestimmte Codepage (die mit der Codepage der Zeichen übereinstimmt) funktioniert ebenfalls.

Das Speichern einer ASP-Datei mit Microsoft Visual InterDev ist hier nicht hilfreich, da Visual InterDev nur in ANSI-Englisch oder Unicode speichern kann. Als Unicode gespeicherte ASP-Seiten werden von ASP nicht unterstützt.

In Microsoft Visual Studio .NET können Sie eine Datei in beliebiger Codierung speichern. Hierfür gibt es zwei Möglichkeiten. Die Standardeinstellung besteht darin, die Datei mithilfe der aktuellen Codepage für den Benutzer zu speichern. Eine weitere Möglichkeit zum Speichern einer Datei mit einer Codierung ist wie folgt:
Klicken Sie im Menü Datei auf Datei speichern unter. Klicken Sie im
DialogfeldDatei speichern unter auf den Dropdownpfeil der
SchaltflächeSpeichern. Wenn Sie auf den Pfeil klicken, sind
die OptionenSpeichern und Mit Codierung speichern. Wenn Sie aufMit Codierung speichern klicken
, wird das Dialogfeld Erweiterte Speicheroptionen angezeigt, in dem Sie aus einer Liste der auf dem Computer installierten Codepages den Codierungstyp auswählen können, den Sie anwenden möchten.


Hinweis Dadurch wird die Codierung für den Speichervorgang geändert, ist jedoch nur einmalig. Das nächste Speichern wird auf den Standardwert zurückgesetzt.

Um die Standardcodepage zu ändern, klicken Sie im MenüDatei auf
Erweiterte Speicheroptionen. Im Dialogfeld Erweiterte Speicheroptionen können Sie die Standardcodierung für Speichervorgänge auf die Codepage Ihrer Wahl festlegen.

Diese Methoden beziehen sich darauf, wie die Datei auf dem Datenträger gespeichert wird. Um jedoch die Ausgabe für ASP zu steuern, müssen wir, wie bereits erwähnt, die Eigenschaften Session.CodePage und Response.CharSet festlegen. Mit IIS 5.1 und höheren Versionen können wir auch die Response.CodePage-Eigenschaft verwenden.

StandardCODEPAGE auf dem Server

Das Standardgebietsschema und die Standardcodepage für die Seite hängen von den Registrierungseinstellungen für ab. DEFAULT-Benutzer. Wir finden den internationalen Schlüssel unter Registrierungsstruktur HKEY_USERS\.DEFAULT\Control Panel\International. Wir können auch das Verhalten des Gebietsschemas ändern, das von IIS ausgewählt wird.

Wenn der angemeldete Benutzer das gleiche Gebietsschema wie der obige Schlüssel oder die Systemstandardeinstellung festgelegt hat, hat die Benutzereinstellung Vorrang.

Beispiel: Für das Standardgebietsschema ist das Datumsformat 11.1.2004 festgelegt, während der angemeldete Benutzer (mit demselben Gebietsschemasatz) das Datumsformat 1.11.2004 aufweist. Die Einstellung vom 1.11.2004 wird für ASP wirksam.

(Für ASP.NET kann dies variieren. In einigen Installationen verfügt der ASPNET-Benutzer über ein eigenes Profil, das beim Laden unter HKEY_USERS angezeigt wird. In anderen wird verwendet. DEFAULT-Profil. Wir können auch das Codepage-Attribut in der <%@ %>-Deklaration verwenden. Dies sollte verwendet werden, wenn die Datei mit einer anderen Codierung als der Standardcodierung gespeichert wird, z. B. codepage 932 (Japanisch)).

Codepageprobleme im Vergleich zu Problemen bei der Konvertierung von Schriftarten: Was ist was?

Manchmal wird möglicherweise ein Fragezeichen (?) oder ein Feld angezeigt, in dem ein Zeichen angezeigt werden soll.

Probleme bei der Codepagekonvertierung

Wenn ein Zeichen durch ein Fragezeichen (?) ersetzt wird, ist dies ein Hinweis darauf, dass ein Codepage-Konvertierungsproblem aufgetreten ist. Das Fragezeichen (?) ist ein Standardzeichen für die Codepagekonvertierung und bedeutet im Grunde, dass das Betriebssystem nicht weiß, wie der Zeichenwert behandelt und konvertiert werden soll. Er ersetzt den Zeichenwert durch ein Fragezeichen (?). Dies kann bedeuten, dass das Zeichen einen ungültigen Wert für die Codepage aufweist oder dass die codepage, die für die Konvertierung benötigt wird, nicht installiert ist.

Probleme bei der Schriftkonvertierung

Wenn ein Zeichen durch ein Feld ersetzt wird, ist dies ein Hinweis darauf, dass ein Problem mit der Schriftkonvertierung aufgetreten ist. Dies geschieht auf der Clientseite, wenn auf dem Client nicht die richtige Schriftart installiert ist, um dieses Zeichen ordnungsgemäß anzuzeigen. Wenn beispielsweise ein Zeichen aus dem japanischen Zeichensatz stammt und die japanischen Schriftarten auf dem Client nicht installiert sind, wird das japanische Zeichen als Feld angezeigt.

Als Nächstes werde ich darüber sprechen, wie sich die Dinge in ASP.NET 1.x geändert haben und wie sich diese Änderungen auf Globalisierungsprobleme im Kontext von ASP.NET auswirken.

Globalisierungsprobleme in ASP.NET 1.x:

Mit ASP.NET wurden drei großartige Dinge eingeführt:

  • Das <>-Tag für die Globalisierung in web.config Datei
    Die <Globalisierung> Tag entfernt uns von den inkohärenten Konzepten von Codepages und Charsets und ermöglicht es uns, die meisten Varianten innerhalb von ASP.NET zu steuern.

  • Der System.Globalization-Namespace
    Der Namespace Globalization bietet uns die programmatische Leistungsfähigkeit der Globalisierung.

  • Das Konzept der Ressourcendateien wurde erheblich verbessert.
    Wir behandeln Ressourcendateien nicht in der Weise, wie wir es in ASP früher getan haben. Die Ressourcendateien sind nun in Form von XML-Dateien, wenn wir sie entwerfen und entwickeln, und sie sind zur Laufzeit als Assemblys vorhanden.

Das Globalisierungskonfigurationstag:

Zwei wichtige Einstellungen im Tag sind wie folgt:

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

Weitere mögliche Einstellungsbereiche folgen:

fileEncoding

Gibt die Standardcodierung für die Analyse von ASPX-, ASMX- und ASAX-Dateien an. Unicode- und UTF-8-Dateien, die mit dem Präfix der Bytereihenfolge (mit Signatur) gespeichert wurden, werden automatisch erkannt, unabhängig vom Wert von fileEncoding.

Kultur

Gibt die Standardkultur für die Verarbeitung eingehender Webanforderungen an (gilt für Methoden von Klassen aus dem System.Globalization-Namespace).

Uiculture

Gibt die Standardkultur für die Verarbeitung von gebietsschemaabhängigen Ressourcensuchen (Satellitenassemblys) an.

Weitere Informationen zu Kulturzeichenfolgen (Werte für Kultur und UiCulture) finden Sie auf der folgenden Microsoft-Website:

System.Globalization.CultureInfoClass
http://msdn2.microsoft.com/en-us/library/system.globalization.cultureinfo(vs.71).aspxDiese Einstellungen werden von ASP.NET angewendet, nachdem die Antwort abgeschlossen ist und bevor die Anforderung an Ihre Anwendung übergeben wird. Für responseEncoding wird der Puffer, der zum Speichern der Ausgabe erstellt wird, auf diese Codierung festgelegt. Alles, was in diesen Puffer fließt, wird entsprechend der Einstellung codiert, wenn es in den Puffer eingefügt wird.

Für requestEncoding liest die Runtime die Anforderung und interpretiert sie entsprechend der Einstellung in diesem Abschnitt. Dies ist eine Einstellung, die jedoch Probleme verursachen kann. Die folgende Tabelle zeigt das Bitlayout einer gültigen UTF-8-Bytesequenz.

Wenn der Zeichenwert in den ASCII-7-Bit-Standard fällt, wird der Bytewert nicht geändert. Wenn der Wert über 127 liegt, muss er die unten angegebenen Regeln befolgen. Der führende Satz von Bits zeigt an, wie viele Zeichen in der Sequenz enthalten sind. Jedes Byte nach dem ersten muss mit dem ersten Bit beginnen, das auf 1 festgelegt ist.

UTF-8-Bytelayout:

Bytes

Bits

Darstellung

1

7

0vvvvvvv

2

11

110vvvvv 10vvvvvv

3

16

1110vvvv 10vvvvvv 10vvvvvv

4

21

11110vvv 10vvvvvv 10vvvv 10vvvvvv

Hier kommt das Problem. Wenn der Browser die Anforderung gemäß einer Einzelbytecodierung codiert (z. B. iso-8859-1), sind die Werte über 127 gemäß dem obigen Layout nicht gültig. Wenn sie in den UTF-8-Puffer eingelesen werden, werden die ungültigen Zeichen einfach aus der Ausgabe gelöscht.

Änderungen an der Laufzeitcodierung

Im Application_BeginRequest-Ereignis können wir den Wert von requestEncoding ändern und ihn wirksam machen, bevor die Anforderung verarbeitet wird. Für die Antwort ist das Page_PreRender-Ereignis die letzte Möglichkeit, die Codierung der Ausgabe zu ändern. Beachten Sie außerdem, dass Response.Write Zeichen in diesen Puffer eingibt, sobald wir ihn aufrufen. Stellen Sie daher sicher, dass Sie die richtige Codierung festgelegt haben, bevor Sie Response.Write verwenden.

Ursprüngliche Daten sind nicht Unicode: Wie können Sie dennoch internetbasierte Explorer Multibyte-Zeichensätze interpretieren?

Wir können auch festlegen, dass ASP.NET sich bei Bedarf wie ASP verhält. Um dies zu ermöglichen, müssen wir responseEncoding und requestEncoding auf windows-1252 (eine vollständigere Codierung als iso-8859-1) festlegen und die Response.Charset-Eigenschaft verwenden, um den Text richtig anzuzeigen. Dies funktioniert, da windows-1252 ein Einzelne-Byte-Codierungsschema ist und keine Bytes ändert, die dem Puffer hinzugefügt werden. Daher werden Doppelbytezeichen als Eine Reihe einzelner Bytes gesendet. Mithilfe der Response.Charset-Eigenschaft können wir dann internet Explorer darüber informieren, wie die Bytes interpretiert werden. Dieses Szenario kann erforderlich sein, wenn die ursprünglichen Daten nicht als Unicode oder UTF-8 gespeichert werden, z. B. als Rückgabewert eines COM-Objekts, oder wenn die Daten in Microsoft SQL Server in einem Nicht-N-Feld (z. B. varchar) gespeichert werden.

SQL Server und ASP.NET Globalisierungsprobleme

Unicode-Dateneingabe in SQL Server

Die beste Möglichkeit zum Speichern von Daten in SQL Server ist die Verwendung von Unicode. Wenn wir INSERT, UPDATE usw. verwenden, wenn die Wahrscheinlichkeit von Unicode-Daten gering ist, müssen wir vor dem Wert ein N hinzufügen. Dadurch wird der Datenbank mitgeteilt, dass der Wert Unicode ist. Ein gutes Beispiel hierfür sind die ADO-Objekte. Sie tun dies automatisch, wenn wir das Recordset-Objekt verwenden, um neue Datensätze hinzuzufügen.

Es folgt ein Beispiel:

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)"
Datums-/Uhrzeiteingabe für SQL Server

In der Regel verfügen wir über das Wissen über die Kultur und das Gebietsschema des Datums/der Uhrzeit, das in unserer ASP.NET Anwendung interpretiert wird. Beim Pushen und Pullen der Datums-/Uhrzeitdaten in und aus externen Quellen besteht jedoch die Gefahr, dass die Datums-/Uhrzeitformate falsch interpretiert werden. Dies liegt daran, dass wir nicht immer garantieren können, dass die Kultur und das Gebietsschema der externen Quelle mit der in unserer Anwendung identisch sind. In SQL Server kann dies mithilfe des Attributs "current language" in der Verbindungszeichenfolge der Verbindung, die mit der SQL-Datenbank hergestellt wird, gelöst werden. Wir können die gleiche Spracheinstellung in der Verbindungszeichenfolge wie die Kultur in unserer Anwendung bereitstellen. Dies schützt uns vor dem Risiko von Fehlinterpretationen, da SQL Server die Datums-/Uhrzeitdaten immer in Zustimmung mit der oben genannten Einstellung akzeptiert und sendet.

System.Globalization-Namespace

Dieser Namespace ist der Kern der Globalisierung und Lokalisierung im .NET Framework. Die Standard Klasse, die in diesem Namespace verwendet wird, ist die CultureInfo-Klasse. Sie enthält kulturspezifische Informationen, z. B. das Datums-/Uhrzeitformat, Zahlenformate, Vergleichsinformationen und Textinformationen. Weitere Informationen zur CultureInfo-Klasse finden Sie auf der folgenden MSDN-Website:

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

Neutrale Kulturen vs. spezifische Kulturen

Eine neutrale Kultur ist eine Kultur, die einer Sprache zugeordnet ist, aber nicht einem bestimmten Land/einer bestimmten Region. Eine bestimmte Kultur ist sowohl einer Sprache als auch einem bestimmten Land/einer bestimmten Region zugeordnet.

Ein Beispiel: "DE" (neutrale Kultur) ist für die deutsche Sprache, aber "de-AT" (spezifische Kultur) ist für die deutsche Sprache, wie sie in Österreich gesprochen wird. Neutrale Kulturen können nicht für die Formatierung verwendet werden.

Aktueller Thread und Kulturbewusstsein für .NET Framework Klassen

Alle Klassen und Methoden in der .NET Framework Bibliothek, bei denen die Ausgabe kulturabhängig sein würde, weisen zwei integrierte Verhaltensweisen auf:

  • Sie ermöglichen es uns, den Kulturcode bei der Bereitstellung der Argumente anzugeben, sodass die Ausgabe auf der angegebenen Kultur basiert. Dies ist optional.

  • Wenn dies übersehen wird (normalerweise ist dies der Fall), sind die Klassen intelligent genug, um die Thread.CurrentThread.CurrentCulture-Eigenschaft zu überprüfen und entsprechend zu arbeiten.

Wir können den Wert dieser Eigenschaft mit Code ändern, der dem folgenden ähnelt:

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

In diesem Codebeispiel steht "de" für die deutsche Sprache und "AT" für Österreich. In diesem instance also DateTime.Now(). Die ToString-Methode würde Datum und Uhrzeit in einem Format zurückgeben, das der Art und Weise entspricht, wie Datum und Uhrzeit in der deutschen Sprache in Österreich ausgedrückt werden.

Das Framework stellt sicher (wie folgt), dass die CurrentCulture-Eigenschaft immer initialisiert wird:

  1. Was auch immer programmgesteuert festgelegt ist.

  2. Falls sie nicht explizit vom Programmierer festgelegt wird, wird die Eigenschaft aus den Konfigurationsdateien ausgewählt (<Globalisierung> Tag).

  3. Wenn die Eigenschaft dort fehlt, ist dies die Kultur, in der der Webserver ausgeführt wird. Dies ist in der Regel die neutrale Kultur, die der Sprache des Betriebssystems entspricht.

Ressourcendateien

Alle RESX-, RESOURCE-Dateien und Dateien, deren Buildaktionsattribut auf Eingebettete Ressource festgelegt ist und die einem ASP.NET Projekt in Visual Studio .NET hinzugefügt werden, werden automatisch kompiliert und als Teil des Manifests in die Anwendungsassembly eingebettet. Dies kann sogar manuell mithilfe des Resgen-Hilfsprogramms (Resource File Generator) über eine Visual Studio .NET-Eingabeaufforderung erfolgen. Weitere Informationen finden Sie auf der folgenden MSDN-Website:

http://msdn2.microsoft.com/en-de/library/ccec7sz1(vs.71).aspxDies ist ein allgemeines Konzept, das immer dann anwendbar ist, wenn wir Anwendungsressourcen verwalten müssen, die nichts mit der Globalisierung zu tun haben. Wenn wir jedoch die Globalisierung implementieren, sollten wir Satellitenassemblys verwenden.

Satellitenassemblys

Satellitenassemblys können in einem ASP.NET Projekt verwendet werden, wenn Sie sicherstellen, dass Folgendes zutrifft:

  1. Alle Benutzeroberflächenelemente in allen ASPX-Dateien müssen mit id- und runat=server-Attributen ausgestattet werden.

  2. Wir erstellen separate RESX-Dateien. Jede muss jeder Kultur entsprechen, die von unserer Anwendung unterstützt werden soll.

  3. Wir müssen einen gemeinsamen Vornamen für alle diese Dateien für z. B. entscheiden. 'Zeichenfolgen'.

  4. Wir benennen die separaten RESX-Dateien mit der folgenden Namenskonvention commonfirstname. languagecode-regioncode.resx (z. B. Strings.de-AT.resx, Strings.en-GB.resx ).

  5. Wir sollten über die Ressourcendatei
    commonfirstname.resx (Strings.resx) verfügen, die alle Zeichenfolgen enthält, die im Standardfall angezeigt werden.

  6. Schreiben Sie Code, um die Kultur des Benutzers zu erkennen, und legen Sie die Thread.CurrentThread.CurrentUICulture-Eigenschaft so fest, dass sie mit ihr übereinstimmt.

  7. Schreiben Sie Code zum Laden der Ressourcen mithilfe der ResourceManager-Klasse.

  8. Schreiben Sie Code, um Zeichenfolgen aus dem geladenen Objekt zu extrahieren, und weisen Sie diese Elementen der Benutzeroberfläche zu.

Wenn Sie diese Schritte ausgeführt haben, kompiliert Visual Studio.NET Strings.resx und bettet sie in die Anwendungsassembly ein (MyGlobalizationTestProjectName.dll). Für alle anderen RESX-Dateien werden jedoch separate DLL-Dateien generiert, die keinen ausführbaren Code, sondern nur Ressourcendaten enthalten. Diese werden tatsächlich als Satellitenassemblys bezeichnet. Außerdem platziert Visual Studio .NET diese in einer Ordnerstruktur, die der folgenden ähnelt:MyGlobalizationTestProjectName
|------- Bin
|------En-US

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

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

Unterschied zwischen CurrentCulture und CurrentUICulture

Während die Methoden von Klassen im System.Globalization-Namespace von der Thread.CurrentThread.CurrentCulture-Eigenschaft abhängen, um ihre Ausgabe zu geben, hängt die ResourceManager-Klasse, die die Ressourcenassembly lädt, von der Thread.CurrentThread.CurrentUICulture-Eigenschaft ab, um die entsprechende Satellitenassembly zu laden. Im Folgenden finden Sie ein Beispiel für 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");
   }

 }

Reihenfolge, in der ASP.NET Satellitenassemblys auswählt:

Wenn Sie die CurrentUICulture des Threads festgelegt haben, wählt ASP.NET automatisch die übereinstimmenden Ressourcen in der folgenden Reihenfolge aus:

  • Wenn eine Satellitenassembly mit einer übereinstimmenden Kultur gefunden wird, werden die Ressourcen aus dieser Assembly verwendet.

  • Wenn eine Satellitenassembly mit einer neutralen Kultur gefunden wird, die currentUICulture entspricht, werden Ressourcen aus dieser Assembly verwendet.

  • Wenn für CurrentUICulture keine Übereinstimmung gefunden wird, werden die in der ausführbaren Assembly gespeicherten Fallbackressourcen verwendet.

Hinweis Dies basiert auf dem allgemeineren Ressourcenfallbackprozess. Weitere Informationen finden Sie auf der folgenden MSDN-Website:

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

Manuelles Erstellen von Satellitenassemblys:

Diese Verwendung von Satellitenassemblys ist der Ort, an dem Visual Studio .NET die Assemblys selbst erstellt. Visual Studio .NET verwendet jedoch standardmäßig keine starken Namen für Satellitenassemblys. Wenn Sie diese Optionen ändern möchten, müssen Sie Satellitenassemblys manuell erstellen. Weitere Informationen finden Sie auf der folgenden MSDN-Website:

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

Was ist mit ASP.NET 2.0 an der Globalisierungsfront zu tun?

Die weit verbreitete Verwendung von ASP.NET und die Arten von Problemen, die wir in Bezug auf Globalisierungsfeatures in ASP.NET 2.0 sehen würden, sind noch ein stück weit vor uns. Es wäre jedoch sinnvoll, einen kurzen Blick darauf zu werfen, in welche Richtung die Globalisierungsmethodik für Webanwendungen geht.

Die Globalisierungsunterstützung in ASP.NET 2.0 hat sich grundlegend verändert, und Webentwickler haben die Möglichkeit erhalten, die Lokalisierung von Webanwendungen so einfach wie für Windows-basierte Anwendungen zu gestalten. Im Folgenden finden Sie eine Liste der Features, die die Grundlage der Globalisierungsmethodik in ASP.NET 2.0 bilden:

Stark typisierte Ressourcen Im Kern des .NET Framework 2.0-Release besteht die Unterstützung für stark typisierte Ressourcen, die Entwicklern IntelliSense bereitstellen und code vereinfachen, der für den Zugriff auf Ressourcen zur Laufzeit erforderlich ist.

Der Editor für verwaltete Ressourcen Visual Studio .NET 2.0 enthält einen neuen Ressourcen-Editor mit besserer Unterstützung für das Erstellen und Verwalten von Ressourceneinträgen, einschließlich Zeichenfolgen, Bildern, externen Dateien und anderen komplexen Typen.

Die Ressourcengenerierung für Web Forms Windows Forms Entwickler haben bereits von den Vorteilen der automatischen Internationalisierung profitiert. Visual Studio .NET 2005 unterstützt jetzt die schnelle Internationalisierung, indem ressourcen für Web Forms, Benutzersteuerelemente und master Seiten automatisch generiert werden.

Verbesserte Laufzeitunterstützung ResourceManager-Instanzen werden von der Runtime verwaltet und für Servercode über besser zugängliche Programmierschnittstellen leicht zugänglich.

Lokalisierungsausdrücke Moderne deklarative Ausdrücke für Webseiten unterstützen die Zuordnung von Ressourceneinträgen zu Steuerelementeigenschaften, HTML-Eigenschaften oder statischen Inhaltsbereichen. Diese Ausdrücke sind auch erweiterbar und bieten zusätzliche Möglichkeiten, den Prozess des Anfügens lokalisierter Inhalte an die HTML-Ausgabe zu steuern.

Automatische Kulturauswahl Verwalten der Kulturauswahl für jede Webanforderung kann automatisch mit Browsereinstellungen verknüpft werden.

Ressourcenanbietermodell Mit einem neuen Ressourcenanbietermodell können Entwickler Ressourcen in alternativen Datenquellen wie Flatfiles und Datenbanktabellen hosten, während das Programmiermodell für den Zugriff auf diese Ressourcen konsistent bleibt.

Weitere Informationen zur Globalisierungsmethodik in ASP.NET 2.0 finden Sie auf der folgenden MSDN-Website:

ASP.NET 2.0 Lokalisierungsfeatures: Ein neuer Ansatz zum Lokalisieren von Webanwendungen
http://msdn2.microsoft.com/en-us/library/ms379546(VS.80).aspx

Zusammenfassung

Im Folgenden geht es um Globalisierungsprobleme in ASP und ASP.NET. Ich hoffe, dass dieser Artikel einigen Kunden helfen wird, ihre Globalisierungsprobleme in ASP und ASP.NET zu beheben, bevor sie sich entscheiden, sich an Microsoft-Support zu wenden. Ich werde mit dem folgenden Gedanken enden:

"Wo und wann immer Sie sich entwickeln, denken Sie an die Millionen von Menschen, die Sie auf der ganzen Welt unterstützen können. Machen Sie Ihre Lösungen welttauglich! Microsoft-Tools und -Technologien erleichtern die Internationalisierung."

Wir werden nächsten Monat noch einmal mit einem weiteren interessanten Thema aufholen.

Vielen Dank für Ihre Zeit.

Weitere Informationen zu Globalisierungsproblemen in ASP und ASP.NET finden Sie auf den folgenden Microsoft-Websites:

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

Schritt-für-Schritt-http://msdn.microsoft.com/en-us/goglobal/bb688110
der Globalisierung

Go Global: Lokalisieren dynamischer Web-Apps mit IIS 5.0 und SQL Server
http://msdn.microsoft.com/msdnmag/issues/01/05/global/default.aspx

Go Global: Entwerfen Ihrer ASP-basierten Website zur Unterstützung der Globalisierung
http://msdn.microsoft.com/msdnmag/issues/0700/localize/default.aspx

315616 How To Detect a Client Language in an Active Server Pages page in IIS
http://support.microsoft.com/?id=315616

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

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

Ressourcen und Lokalisierung mithilfe des .NET Framework SDK
http://msdn2.microsoft.com/en-de/library/aa309421(VS.71).aspx

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

ASP.NET <Globalisierung> Konfigurationselement
http://msdn2.microsoft.com/en-de/library/hy4kkhe0(vs.71).aspx

Entwurfs- und Implementierungsrichtlinien für Webclients – Globalisierung und Lokalisierung
http://msdn2.microsoft.com/en-us/library/ms978628.aspx

Offizielle Microsoft-Website – Global Development and Computing Portal
http://msdn.microsoft.com/en-us/goglobal/bb688096

Developing World-Ready Applications
http://msdn2.microsoft.com/en-us/library/h6270d0z(vs.71).aspx

Globalisierungsarchitektur für ASP.NET
http://msdn2.microsoft.com/en-us/library/aa478974.aspx

Enterprise Localization Toolkit – Für die Entwicklung lokalisierter Microsoft ASP.NET-Anwendungen
http://msdn2.microsoft.com/en-us/library/aa479334.aspx

Microsoft-typografische
http://www.microsoft.com/typography/default.mspx

Glossar

ANSI steht für American National Standards Institute. In diesem Kontext stellt sie eine bestimmte Codepage für eine bestimmte Sprache/einen bestimmten Zeichensatz dar. Am häufigsten bezieht sich auf die englische Codepage (windows-1252).

ASCII Ein Codierungsschema mit 1 Byte (oder 7 Bit). Nur die Zeichen im Bereich 0–127 sind standardisiert. Der Bereich 128-255 ist Erweiterungen für ASCII und nicht Teil des Standards. Ein Beispiel hierfür ist der Unterschied zwischen dem oberen Bereich des OEM-ASCII-Diagramms und dem VB-ASCII-Diagramm.

Die CharSet-Einstellung wird hauptsächlich für Internet-Explorer und Browser verwendet, die dem Browser mitteilt, wie die Zeichendaten interpretiert werden sollen. Beispiel: Response.charSet = "iso-8859-1"

Codepage Eine Konvertierungstabelle, die angibt, wie Zeichen codiert werden (normalerweise für Server verwendet).

Globalisierung Globalisierung ist ein Prozess des Entwerfens und Erstellens einer Anwendung, damit die einzigartigen Anforderungen einer Kultur, Region oder nationaler/regionaler und sprachlicher Anforderungen erfüllt werden können. Anders ausgedrückt: Eine Anwendung so zu entwerfen, dass sie später lokalisiert werden kann, ist Globalisierung.

Gebietsschema/Kultur Sprache und regionsspezifische Formate/Präferenzen, einschließlich Datums- und Kalenderformate, Zeitformate, Währungsformate, Groß-/Kleinschreibung, Sortierung und Zeichenfolgenvergleich, Adressformate, Telefonnummernformate, Papierformate, Maßeinheit, Schreibrichtung usw.

LocaleID (LCID) Ein DWORD-Wert, der den Sprachbezeichner und die Sortier-ID angibt. Es kann verwendet werden, um die spezifischen Regionsformate für Datum/Uhrzeit usw. anzugeben, die entsprechend formatiert werden sollen.

Lokalisierbarkeit Die Fähigkeit einer Anwendung, Inhalte für die angeforderte Sprache/das gewünschte Gebietsschema zu präsentieren.

Lokalisierung Lokalisierung ist der Prozess der Übersetzung einer Benutzeroberfläche in bestimmte Sprachen und/oder Gebietsschemas.

Multibyte-Zeichensatz Ein Zeichensatz, in dem die Zeichen aus zwei oder mehr Bytes bestehen, z. B. Japanisch. UTF-8 fällt ebenfalls unter diese Kategorie. (Unicode gehört technisch gesehen zu dieser Kategorie, aber in Windows hat es eine eigene Kategorie.)

Unicode Ein 2-Byte-Codierungsschema. Windows verwendet unicode intern. Alle APIs speziell für Unicode werden durch ein "W" am Ende des Funktionsnamens gekennzeichnet. Auch bekannt als wide char; kann nicht direkt von Webanwendungen verwendet werden.

UTF-8 Eine Zeichencodierung, bei der ein Zeichen durch 1 bis 6 Byte dargestellt werden kann. Unter Windows beträgt der Bereich 1 bis 3 Byte. Wird unter NT4 für Webanwendungen nicht unterstützt.



Breitzeichensatz Ein Alias für Unicode. Auch bekannt als DBCS (Double-Byte-Zeichensatz), UCS-2, UTF-16.

Wie immer können Sie Ideen zu Themen einreichen, die In zukünftigen Spalten oder in der Wissensdatenbank behandelt werden sollen, indem Sie das Formular "Fragen nach" verwenden.

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×