15

Ich habe ein Projekt in Xamarin, die Android, iOS und Windows Phone zielt. Ich benutzte Kern (PCL-Bibliothek), um gemeinsamen Code zwischen verschiedenen Plattformen zu teilen. Ich fügte hinzu, Ressource-Dateien (.net Ressource) .resx in meinem Kern-Bibliothek und die Kultur bestimmte Zeichenfolge i in einem meiner Ansichtsmodell folgende Code-Schnipsel verwendet zu lesen:Lokalisierung für mobile Cross-Plattform mit Xamarin und Problem mit nur iOS

public string GetString() 
{ 
    // CommonResources is the name of my resource file 
    ResourceManager resManager = new ResourceManager(typeof(CommonResources)); 
    return resManager.GetString("LoginLabel",CultureInfo.CurrentCulture); 
} 

„LoginLabel“ ist mein Ressourcenschlüssel und dessen Wert ist "Anmelden" (in Englisch) und "inloggen" auf Niederländisch.

Ich habe zwei Ressourcen-Dateien CommonResources für Englisch und Niederländisch in meinem PCL-Projekt erstellt. CommonResources.resx
CommonResources.nl-NL.resx

in Android, iOS und Windows Phone, habe ich Kultur wie folgt:

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("nl-NL"); 
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("nl-NL"); 

Dies funktioniert für Android und Windows Phone in Ordnung.

Aber für iOS funktioniert es nicht. Es gibt immer einen Ressourcenstring aus einer englischen Datei zurück. Die Kultur ist richtig eingestellt und wird im Debug-Modus angezeigt. aber irgendwie ist es nicht in der Lage, den Ressourcenstring von der niederländischen Ressource zu laden.

Also die Frage ist, ist es möglich, Zeichenfolge (. Net-Weg) mit PCL für alle Plattformen zu lokalisieren? hat jemand eine Idee? Vielen Dank im Voraus.

+0

Ist Niederländisch die einzige andere Sprache? Wenn nicht, funktionieren die anderen Sprachen wie erwartet? Wenn ja, können Sie eine andere Sprache als Test hinzufügen? – chad

+0

Nein, Hindi ist eine andere Sprache außer Niederländisch. Es funktioniert nicht für eine der unterstützten Sprachen außer für Englisch. – SoftSan

Antwort

2

Für die Lokalisierung in unseren Xamarin Projekten habe ich das Multilingual App Toolkit (detailed here) von Microsoft und T4 Templates verwendet, um die Ausgabe des Toolkits in nutzbare Formate für Android und iOS umzuwandeln.

This Tutorial hat einen fantastischen Überblick über den Prozess und es basiert auf this Code-Projekt.

0

Entweder:

  • Sie Einstellung nicht wirklich die Current auf iOS.
  • Sie setzen die CurrentCulture auf Thread A ein und rufen sie unter Thread B ab.

Try this:

public string GetString() 
{ 
    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("nl-NL"); 
    Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("nl-NL"); 

    // CommonResources is the name of my resource file 
    ResourceManager resManager = new ResourceManager(typeof(CommonResources)); 
    return resManager.GetString("LoginLabel",CultureInfo.CurrentCulture); 
} 
0

Sie es auf einem realen Gerät testen Sie? Im Simulator ist es nicht möglich, die Kultur zu ändern. Ich hatte ein ähnliches Problem mit meinen Sprachdateien.

Verwandte Themen