0

У меня есть рабочий проект PCL для iOS, и я пытаюсь создать версию Windows Phone 8.1.Как добавить проект Windows Phone с локализацией resx в решение Xamarin PCL?

Я следую за этот учебник: https://developer.xamarin.com/guides/xamarin-forms/advanced/localization/

И проверить приложение на: https://github.com/xamarin/xamarin-forms-samples/tree/master/UsingResxLocalization

Но это тоже не рекомендуется. Даже проект git отличается от учебника, и ни один из них не работает.

Интерфейс ILocalize для Windows, должна выглядеть следующим образом:

[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; 
     } 
    } 
} 

Но System.Threading.Thread.CurrentThread.CurrentUICulture просто не существует. Я узнал, что вместо этого могу использовать Windows.System.UserProfile.GlobalizationPreferences.Languages[0].ToString().

Он работает с локализованными языковыми ресурсами, но по умолчанию ресурс не работает ни для языка «en» по умолчанию, ни для любого другого нелокализованного языка, такого как «ru». Я получаю другую ошибку:

В методе класс TranslateExtention ProvideValue() я получаю:

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

Будучи «Start» первым ключ он пытается получить от ресурса. Это происходит для всех остальных ключей проекта.

AppNameSpace.AppResources будет правильным файлом, а «en» - это область, которую я установил, поэтому она должна работать. Но это не так.

Я также получаю следующее предупреждение при компиляции:

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

Но я понятия не имею, как это исправить.

В учебнике также говорится:

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.

Fine, но эти варианты больше не существует. По крайней мере, где они должны быть. Я даже нашел файл Package.appxmanifest в своем проекте, но у него нет этих региональных опций.

Итак, мне нужна помощь с обновленным способом ее выполнения.

Благодаря

ответ

0

Так я узнал, что при добавлении проекта Windows Phone для решения без каких-либо телефонных проектов для Windows, он не добавляет все, что необходимо.

Также учебные пособия не показывают все, что необходимо (никаких больших новостей там нет).

Весь мой проект отсутствовал, был [assembly: NeutralResourcesLanguage("en-US")] в моем PCL AssemblyInfo.cs файла.

Resx учебник также говорит, что вы должны использовать:

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

В TranslateExtention.cs файл, потому что телефоны Windows не нужно. Ну, это ложь.По крайней мере, для того, чтобы эмулятор получил правильный язык, ему необходимо использовать DependencyService и получить CultureInfo таким образом:

System.Globalization.CultureInfo ci = null; 
    ci = new System.Globalization.CultureInfo(Windows.System.UserProfile.GlobalizationPreferences.Languages[0].ToString()); 
    return ci;