Eine gute Anleitung zur Globalisierung von Windows Phone 7 Apps findet man in der MSDN Library. Für Schnell-über-leser hier das wichtigste zusammen gefast.
- Ressourcen Dateien der Solution hinzufügen (MyResources.resx, MyResources.resx.de-DE, MyResources.es-ES).
- Ressourcen Dateien öffnen und den AccessModifier auf Public stellen.
- Zum Test einen Eintrag erzeugen. Der Key muss dabei in allen Ressourcendateien der selbe sein. Der Value beinhaltet die Übersetzungen.
- Default Sprache in den Eigenschaften des Projektes unter Assembly Information –>Neutral Language einstellen. Dieses definiert die Sprache in der Ressourcen Datei ohne Culture-Zusatz (MyResources.resx)
- Die Projektdatei (.csproj) mit einem Editor öffnen und die zusätzlich unterstützten Sprachen dem Tag <SupportedCultures> hinzufügen. <SupportedCultures>de-DE;es-ES;<SupportedCultures>
- Ein Property erzeugen, dass MyResources bereitstellt:
public class LocalizedStrings
{
public LocalizedStrings()
{
}
private static var localizedResources = new MyNamespace.MyResources();
public MyNamespace.MyResources LocalizedResources
{ get { return localizedResources; } }
}
6. In der App.xaml die eben erstellte Klasse bereitstellen:
<Application.Resources> <local:LocalizedStrings xmlns:local = "clr-namespace:MyNamespace" x:Key="LocalizedStrings" /> </Application.Resources>
7. Nun fehlt nur noch das Binding
<TextBlock Text="{Binding Path=LocalizedResources.KeyInMyResources, Source={StaticResource LocalizedStrings}}" />
Hinweis zur ApplicationBar:
Da die ApplicationBar keine Silverlight-Komponente ist, wird dynamisches DataBinding nicht unterstützt. Also nicht wundern warum beim Kompilieren eine XamlParseException “AG_E_PARSER_BAD_PROPERTY_VALUE” bekommt. Im Xaml wird die entsprechende Zeile markiert mit dem Hinweis “Text cannot be empty”. Die Lösung lautet: code behind…
public MainPage()
{
InitializeComponent()
BuildApplicationBar()
}
private void BuildApplicationBar()
{
ApplicationBar = new ApplicationBar();
var appBarButton = new ApplicationBarIconButton(new Uri("/Images/ApplicationIcon.png",UriKind.Relative)){Text = MyResources.MyAppBarButtonKey};
ApplicationBar.Buttons.Add(appBarButton);
var appBarMenuItem = new ApplicationBarMenuItem(MyResources.MyMenuItemTextKey);
ApplicationBar.MenuItems.Add(appBarMenuItem);
}
