Xamarin iOS-Lokalisierung mit .NET
Ich versuche zu verwenden .NET-Lokalisierung in einer portable class library für eine Xamarin iOS/Android-Projekt. Ich habe die Schritte auf:
Wie zu verwenden Lokalisation in C#
Und code, die wie folgt aussieht:
string sText = strings.enter_movie_name;
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr");
sText = strings.enter_movie_name;
lblEnterMovieName.Text = sText;
Habe ich auch versucht:
ResourceManager resman = new ResourceManager(typeof(MyApplication.strings));
string sText = resman.GetString("enter_movie_name", new CultureInfo("fr"));
Habe ich strings.resx mit enter_movie_name gleich "Enter-Film-name:" und Streicher.fr.resx gleich "Entre la Film-name:"
Jedoch, sText immer endet es mit "Enter-Film-name:". Ich kann nicht scheinen, um dem "Entre la Film-name:" - version heraus.
Sah ich auch den Beitrag Cross-Plattform-Lokalisierung aber nicht dahintergekommen. Ich auch don ' T wollen, verwenden Sie die iOS-spezifische version auf Lokalisierung auf Xamarin.iOS, wie ich möchte in der Lage sein zu Holen auf meine Zeichenfolgen aus einer Plattform-unabhängige Bibliothek.
Kann mir jemand zeigen wo ich bin mache ich falsch?
- Ich habe eigentlich nur geschrieben, eine ähnliche Frage hier: stackoverflow.com/questions/20608106/... Es scheint, dass die Sprache bestimmte resx-Dateien (strings.fr.resx) ist "kompiliert" in fr\MyApplication.resources.dll die nicht eingebettet sind in die app. Daher immer wählen Sie die Standardeinstellung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich eine etwas unschöne Lösung, aber es funktioniert. Was ich getan habe, ist ein Ordner namens "strings" in meinem Portable Class Library (PCL) und innen, die erstellt Dateien mit der Bezeichnung:
Ich habe alle diese als Eingebettete Ressource mit custom tool als ResXFileCodeGenerator. Das bedeutet ich habe eine separate resource-DLL für jede Sprache.
In iOS ich kann dann das Gebietsschema an, indem Sie aufrufen:
Ich würde vermuten, gibt es ein Android-äquivalent unter Gebietsschema aber ich weiß nicht, was es ist.
Gibt mir ein string wie "ja_JP" oder "de_de" oder "de_de" (beachten Sie die Unterstriche, keine Bindestriche). Dann verwende ich dies mit den folgenden statischen Klasse, die ich erstellt, um eine entsprechende Ressource-manager und Holen Sie sich den string aus.
Wenn gegeben, eine locale aa_BB sucht es zuerst für strings_aa_BB, dann für strings_aa, dann für Streicher.
Ein Beispiel, wie diese verwendet werden würde (bezieht sich auf obigen code) wäre:
Einen signifikanten Nachteil dieser Lösung ist, dass alle Ansichten benötigen, um Ihren text programmatisch, aber nicht den Kopf, dass die übersetzungen können auch einmal gemacht und dann erneut auf vielen Plattformen. Sie bleiben auch getrennt von der Haupt-code in Ihre eigenen DLLs und kann daher neu kompiliert werden einzeln, wenn nötig.
Erstellte ich eine ähnliche Lösung für die akzeptierte Antwort, aber mit txt Dateien, anstatt Resx und nuget bereit zu gehen: https://github.com/xleon/I18N-Portable. Blog-post hier.
Weitere Verbesserungen sind:
"anyKey".Translate(); //from anywhere
List<PortableLanguage> languages = I18N.Current.Languages;