0

Ich habe ein funktionierendes PCL-Projekt für iOS und ich versuche, die Windows Phone 8.1-Version zu erstellen.Wie Windows Phone-Projekt mit Resx-Lokalisierung zu Xamarin PCL-Lösung hinzufügen?

Ich verfolge dieses Tutorial: https://developer.xamarin.com/guides/xamarin-forms/advanced/localization/

Und Überprüfung der App an: https://github.com/xamarin/xamarin-forms-samples/tree/master/UsingResxLocalization

aber es ist zu veraltet. Selbst das Git-Projekt unterscheidet sich von dem Tutorial, und keiner von ihnen funktioniert.

sollte die iLocalize Schnittstelle für Windows wie folgt aussehen:

[assembly: Dependency(typeof(UsingResxLocalization.WinPhone.Localize))] 

namespace UsingResxLocalization.WinPhone 
{ 
    public class Localize : UsingResxLocalization.ILocalize 
    { 
     public System.Globalization.CultureInfo GetCurrentCultureInfo() 
     { 
      return System.Threading.Thread.CurrentThread.CurrentUICulture; 
     } 
    } 
} 

Aber System.Threading.Thread.CurrentThread.CurrentUICulture einfach nicht existiert. Ich habe herausgefunden, dass ich stattdessen Windows.System.UserProfile.GlobalizationPreferences.Languages[0].ToString() verwenden kann.

Es funktioniert für die lokalisierten Sprachressourcen, aber die Standardressource funktioniert nicht für die Standardsprache "en" oder eine andere nicht lokalisierte Sprache wie "ru". Ich bekomme einen anderen Fehler:

In der TranslateExtention Klasse ProvideValue() Methode, die ich erhalten:

Key 'Start' was not found in resources 'AppNameSpace.AppResources' for culture 'en'

Sein „Start“ der erste Schlüssel aus der Ressource zu erhalten versucht. Es passiert für alle anderen Schlüssel im Projekt.

AppNameSpace.AppResources wäre die richtige Datei, und "en" ist die Region, die ich eingestellt habe, so sollte es funktionieren. Aber es ist nicht.

ich auch bin immer die folgende Warnung beim Kompilieren:

The assembly "MyApp.dll" does not have a NeutralResourcesLanguageAttribute on it. To be used in an app package, portable libraries must define a NeutralResourcesLanguageAttribute on their main assembly (ie, the one containing code, not a satellite assembly). 4>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(1216,5): warning APPX2002: Cannot find the neutral resource language for the resources for portable library 'MyApp'. Verify that the portable library defines a NeutralResourcesLanguageAttribute. The build is continuing assuming the project's default culture of 'en-US' correctly identifies the portable library's neutral resources. 4>MakePRI : warning 0xdef00522: Resources found for language(s) 'de, es, fr, pt' but no resources found for default language(s): 'en-US'. Change the default language or qualify resources with the default language. http://go.microsoft.com/fwlink/?LinkId=231899

Aber ich habe keine Ahnung, wie es zu beheben.

Auf dem Tutorial auch sagt:

Windows Phone projects must be properly configured for localized text to be displayed. Supported languages must be selected in the Project Options and the WMAppManifest.xml files. If these settings are not updated the localized RESX resources will not be loaded.

Gut, aber diese Optionen gibt es nicht mehr. Zumindest wo sie sein sollten. Ich habe sogar eine Package.appxmanifest Datei in meinem Projekt gefunden, aber es hat diese regionalen Optionen nicht.

Also brauche ich Hilfe mit einem aktualisierten Weg, es zu tun.

Dank

Antwort

0

So fand ich heraus, dass, wenn Sie ein Windows Phone Projekt zu einer Lösung ohne Projekte Windows Phone hinzufügen, es alles nicht hinzufügen es braucht.

Auch die Tutorials zeigen nicht alles, was notwendig ist (keine großen Neuigkeiten).

Alle meine Projekt fehlte war [assembly: NeutralResourcesLanguage("en-US")] in meiner PCL AssemblyInfo.cs Datei.

Die RESX Tutorial sagt auch, dass Sie verwenden sollten:

 if (Device.OS == TargetPlatform.iOS || Device.OS == TargetPlatform.Android) 
    { 
      ci = DependencyService.Get<ILocalize>().GetCurrentCultureInfo(); 
    } 

In den TranslateExtention.cs Datei, weil Windows Phones es nicht brauchen. Nun, das ist falsch.Zumindest für den Emulator, um die richtige Sprache zu erhalten, muss es den DependencyService verwenden und die CultureInfo auf diese Weise abrufen: