public override string GetString(ILanguageSource languageSource, string resourceName, CultureInfo cultureInfo)
{
Argument.IsNotNull("languageSource", languageSource);
Argument.IsNotNullOrWhitespace("resourceName", resourceName);
Argument.IsNotNull("cultureInfo", cultureInfo);
string value = null;
var source = languageSource.GetSource();
var resourceLoader = GetResourceManager(source);
if (resourceLoader != null)
{
#if NETFX_CORE
var resourceContainer = GetResourceContainer(source);
// Try the language specific first
var neutralSource = string.Format("{0}", resourceContainer);
var cultureName = cultureInfo.Name;
var languageSpecificSource = string.Format("{0}.{1}", resourceContainer, cultureName);
var currentResourceManager = Windows.ApplicationModel.Resources.Core.ResourceManager.Current;
var finalResourceMap = (from resourceMap in currentResourceManager.AllResourceMaps
let rm = resourceMap.Value.GetSubtree(languageSpecificSource)
where rm != null
select rm).FirstOrDefault();
if ((finalResourceMap == null) && !cultureInfo.IsNeutralCulture)
{
cultureName = cultureInfo.Parent.Name;
languageSpecificSource = string.Format("{0}.{1}", resourceContainer, cultureName);
finalResourceMap = (from resourceMap in currentResourceManager.AllResourceMaps
let rm = resourceMap.Value.GetSubtree(languageSpecificSource)
where rm != null
select rm).FirstOrDefault();
}
if (finalResourceMap == null)
{
finalResourceMap = (from resourceMap in currentResourceManager.AllResourceMaps
let rm = resourceMap.Value.GetSubtree(neutralSource)
where rm != null
select rm).FirstOrDefault();
}
if (finalResourceMap != null)
{
var resourceContext = ResourceContext.GetForViewIndependentUse();
resourceContext.Languages = new[] { cultureName };
var resourceCandidate = finalResourceMap.GetValue(resourceName, resourceContext);
if (resourceCandidate != null)
{
value = resourceCandidate.ValueAsString;
}
}
#else
value = resourceLoader.GetString(resourceName, cultureInfo);
#endif
}
return value;
}