У меня есть рабочий проект 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
в своем проекте, но у него нет этих региональных опций.
Итак, мне нужна помощь с обновленным способом ее выполнения.
Благодаря