Bei der Webpart Entwicklung ist es oft notwendig, die darzustellenden Labels, Hinweistexte und sonstige Schriftzüge in verschiedenen Sprachen zu halten. Sei es ein freies Webpart, welches für die breite Community gedacht ist, ein Kundenwunsch, weil er mehrere Standorte in verschiedenen Ländern und somit auch anderssprachige Mitarbeiter hat oder sonst ein beliebiger Grund wie z.B. Langeweile.
Bei mir trifft heute der zweite Punkt zu und daher möchte ich kurz auf die Lokalisierung eingehen. (kurz deshalb, weil es gar nicht soviel ist
)
Man nehme ein Webpart seiner Wahl und beginnt zu entwickeln.
Beispiel: Wir möchten einen String ausgeben, welches uns in verschiedenen Sprachen begrüßt. Diese Texte sollen in Deutsch und in Englisch erscheinen.
Zuerst legen wir 3 Resourcendateien an, welche beim SharePoint im Verzeichnis 12/Resources/ liegen.
Diese Datei nennen wir Beispiel.resx, Beispiel.en-us.resx und Beispiel.de-de.resx.
Inhalt Beispiel.resx und Beispiel.en-us.resx
<?xml version="1.0" encoding="utf-8"?>
<!-- _lcid="1033" _version="12.0.4518.1014" _dal="1" -->
<!-- _LocalBinding -->
<root>
<Data Name="wphallotext">
<Value>Hello WebPart</Value>
</Data>
</root>
Inhalt Beispiel.de-de.resx
<?xml version="1.0" encoding="utf-8"?>
<!-- _lcid="1031" _version="12.0.4518.1014" _dal="1" -->
<!-- _LocalBinding -->
<root>
<Data Name="wphallotext">
<Value>Hallo WebPart</Value>
</Data>
</root>
Hierbei ist der einzige Unterschied die LCID und der Wert unseres Keys. Die ersten beiden Dateien sind sogar komplett gleichen Inhalts, worauf ich später nochmal eingehe.
Wenn diese 3 Dateien nun fertig im Verzeichnis hinterlegt sind, können wir diese Strings nun zur Laufzeit im Webpart laden. Dazu bietet das Objektmodell des SharePoints bereits eine Methode, welche 3 Parameter erwartet.
string str = SPUtility.GetLocalizedString("$Resources:wphallotext", "Beispiel", 1033);
- den Source (string)
- Resourcenfile (string)
- LCID (uint)
"wphallotext" ist der Key, welcher in den Dateien definiert ist
"Beispiel" ist das Ressourcenfile (ohne die spezifische Sprachendung)
"1033" steht für die Englisch (natürlich sollte dies nicht hartcodiert sein, sondern z.B. per SPContext.Current.Web.Language ermittelt werden
)
Tja das war es dann auch schon. Kompilieren, anschauen und freuen wie einfach es doch ist.
Aber wozu werden denn nun 3 Dateien gebraucht wenn es nur 2 Sprachen gibt und warum sind Beispiel.resx und Beispiel.en-us.resx komplett gleich? Die Datei Beispiel.resx ist das Default-Resourcenfile und wird benutzt, wenn eine Sprache nicht verfügbar ist. Da Englisch eine Weltsprache ist macht es hier Sinn, diese in die Default Resource zu packen. Wird nun die Webseite in Russisch geladen und wir haben keine Beispiel.ru-ru.resx hinterlegt, wird unser Text in Englisch angezeigt.