|
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Markup;
using System.Resources;
using System.Reflection;
using System.Windows;
using System.ComponentModel;
using Signum.Utilities;
using System.Diagnostics;
using System.Linq;
using System.Text.RegularExpressions;
namespace Signum.Windows
{
/// <summary>
/// Represents a localization makrup extension.
/// </summary>
[MarkupExtensionReturnType(typeof(object))]
//[ContentProperty("Key")]
public class LocExtension : MarkupExtension
{
/// <summary>
/// Gets or sets the resource key.
/// </summary>
[ConstructorArgument("key")]
public string Key { get; set; }
public LocExtension() { }
/// <summary>
/// Initializes new instance of the class.
/// </summary>
/// <param name="key">The resource key.</param>
public LocExtension(string key)
{
Key = key;
}
static Regex regex = new Regex(@"/(?<an>[^/]*)\;component/");
/// <summary>
/// Returns the object that corresponds to the specified resource key.
/// </summary>
/// <param name="serviceProvider">An object that can provide services for the markup extension.</param>
/// <returns>The object that corresponds to the specified resource key.</returns>
public override object ProvideValue(IServiceProvider serviceProvider)
{
if (string.IsNullOrEmpty(Key))
return "[null]";
Assembly assembly = null;
IUriContext uriContext = serviceProvider.GetService(typeof(IUriContext)) as IUriContext;
if (uriContext != null)
{
Match m = regex.Match(uriContext.BaseUri.ToString());
if (m != null && m.Success)
{
string an = m.Groups["an"].Value;
assembly = AppDomain.CurrentDomain.GetAssemblies().Single(a => a.GetName().Name == an);
}
}
if (assembly == null)
assembly = Assembly.GetExecutingAssembly();
ResourceManager manager = new ResourceManager(assembly.GetName().Name + ".Properties.Resources", assembly);
if (manager == null)
return Key;
return manager.GetObject(Key);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I'm Computer Scientist, one of the founders of Signum Software, and the lead developer behind Signum Framework.
www.signumframework.com
I love programming in C#, Linq, Compilers, Algorithms, Functional Programming, Computer Graphics, Maths...