Благодаря небольшому количеству поисковых запросов и полезному сообщению в блоге мне удалось решить эту проблему, которая произошла с перерывами с проектами Xamarin.Forms.
Это сообщение в блоге, что привело меня к решению: http://blog.tpcware.com/2016/06/xamarin-forms-localization/
В основном, как вы получить доступ к ресурсам на Android и IOS с Xamarin.Forms и Windows Phone отличается:
Для сделайте это коротко, нам нужно «автоматически» использовать метод ResourceLoader.GetString (...) при работе в приложениях Store, продолжая использовать обычный метод ResourceManager.GetString (...) на всех других платформах. И поскольку в решении Xamarin Forms мы используем файл ресурсов типа RESX, у нас также есть автоматически созданный класс ресурсов. Сложная идея, содержащаяся в приведенном выше сообщении, заключается в том, чтобы «взломать» класс ресурсов, введя производный класс ResourceManager с переопределенным методом GetString (...) в свойство ресурса класса resourceMan (для более подробного объяснения этого взлома , вы можете прочитать сообщение).
Нам нужно создать свою собственную версию ResourceManager как так и поменять его на существующем ResourceManager с помощью отражения:
public class WinRTResourceManager : ResourceManager
{
readonly ResourceLoader _resourceLoader;
private WinRTResourceManager(string baseName, Assembly assembly) : base(baseName, assembly)
{
_resourceLoader = ResourceLoader.GetForViewIndependentUse(baseName);
}
public static void InjectIntoResxGeneratedApplicationResourcesClass(Type resxGeneratedApplicationResourcesClass)
{
resxGeneratedApplicationResourcesClass
.GetRuntimeFields()
.First(m => m.Name == "resourceMan")
.SetValue(null, new WinRTResourceManager(
resxGeneratedApplicationResourcesClass.FullName,
resxGeneratedApplicationResourcesClass.GetTypeInfo().Assembly));
}
public override string GetString(string name, CultureInfo culture)
{
return _resourceLoader.GetString(name);
}
}
Все, что тогда осталось сделать, это называют это, когда приложение запускается в первый время:
WinRTResourceManager.InjectIntoResxGeneratedApplicationResourcesClass(typeof(AppResources));
После внесения этих изменений все должно работать нормально. Конечно, это абсолютно взломать, но я уведомил команду Xamarin.Forms о проблеме, и они смотрят в нее так, надеюсь, она скоро будет решена!
Вы решили этот Джей? –
Нет, он еще не решен. Но я реализовал локализацию по-разному. Я использовал весь файл строковых ресурсов, и в зависимости от локали приложение загружает их из соответствующих строк ресурсов в словаре. У меня не было альтернативы, как я пытался с другими форумами, но не удалось. – Jay
Спасибо за информацию Jay, я нашел решение, которое отлично работает - возможно, стоит проверить! –