public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { ResourceExpressionFields fields = parsedData as ResourceExpressionFields; CodeExpression[] expr; // TODO: check what MS runtime does in this situation if (entry == null) { return(null); } if (!String.IsNullOrEmpty(fields.ClassKey)) { if (!(entry.PropertyInfo is PropertyInfo)) { return(null); // TODO: check what MS runtime does here } expr = new CodeExpression [] { new CodePrimitiveExpression(fields.ClassKey), new CodePrimitiveExpression(fields.ResourceKey) }; CodeMethodInvokeExpression getgro = new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), "GetGlobalResourceObject", expr); return(new CodeCastExpression(entry.PropertyInfo.PropertyType, getgro)); } else { return(CreateGetLocalResourceObject(entry, fields.ResourceKey)); } }
private static IResourceProvider GetResourceProvider(ResourceExpressionFields fields, VirtualPath virtualPath) { if (fields.ClassKey.Length == 0) { return(GetLocalResourceProvider(virtualPath)); } return(GetGlobalResourceProvider(fields.ClassKey)); }
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { ResourceExpressionFields fields = (ResourceExpressionFields)parsedData; if (fields.ClassKey.Length == 0) { return(this.GetPageResCodeExpression(fields.ResourceKey, entry)); } return(this.GetAppResCodeExpression(fields.ClassKey, fields.ResourceKey, entry)); }
public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { ResourceExpressionFields fields = (ResourceExpressionFields)parsedData; IResourceProvider resourceProvider = GetResourceProvider(fields, context.VirtualPathObject); if (entry.Type == typeof(string)) { return(GetResourceObject(resourceProvider, fields.ResourceKey, null)); } return(GetResourceObject(resourceProvider, fields.ResourceKey, null, entry.DeclaringType, entry.PropertyInfo.Name)); }
private static IResourceProvider GetResourceProvider(ResourceExpressionFields fields, VirtualPath virtualPath) { // If there is no classKey, it's a page-level resource if (fields.ClassKey.Length == 0) { return(GetLocalResourceProvider(virtualPath)); } // Otherwise, it's a global resource return(GetGlobalResourceProvider(fields.ClassKey)); }
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { // Retrieve our parsed data ResourceExpressionFields fields = (ResourceExpressionFields)parsedData; // If there is no classKey, it's a page-level resource if (fields.ClassKey.Length == 0) { return(GetPageResCodeExpression(fields.ResourceKey, entry)); } // Otherwise, it's a global resource return(GetAppResCodeExpression(fields.ClassKey, fields.ResourceKey, entry)); }
public override object ParseExpression(string expression, Type propertyType, ExpressionBuilderContext context) { ResourceExpressionFields fields = null; try { fields = ParseExpressionInternal(expression); } catch { } // If the parsing failed for any reason throw an error if (fields == null) { throw new HttpException( SR.GetString(SR.Invalid_res_expr, expression)); } // The resource expression was successfully parsed. We now need to check whether // the resource object actually exists in the neutral culture // If we don't have a virtual path, we can't check that the resource exists. // This happens in the designer. if (context.VirtualPathObject != null) { IResourceProvider resourceProvider = GetResourceProvider(fields, VirtualPath.Create(context.VirtualPath)); object o = null; if (resourceProvider != null) { try { o = resourceProvider.GetObject(fields.ResourceKey, CultureInfo.InvariantCulture); } catch {} } // If it doesn't throw an exception if (o == null) { throw new HttpException( SR.GetString(SR.Res_not_found, fields.ResourceKey)); } } return(fields); }
public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { // Retrieve our parsed data ResourceExpressionFields fields = (ResourceExpressionFields)parsedData; IResourceProvider resourceProvider = GetResourceProvider(fields, context.VirtualPathObject); if (entry.Type == typeof(string)) { return(GetResourceObject(resourceProvider, fields.ResourceKey, null /*culture*/)); } // If the property is not of type string, pass in extra information // so that the resource value will be converted to the right type return(GetResourceObject(resourceProvider, fields.ResourceKey, null /*culture*/, entry.DeclaringType, entry.PropertyInfo.Name)); }
private static ResourceExpressionFields ParseExpressionInternal(string expression) { ResourceExpressionFields fields = new ResourceExpressionFields(); int length = expression.Length; string[] strArray = expression.Split(new char[] { ',' }); int num = strArray.Length; if (num > 2) { return null; } if (num == 1) { fields.ResourceKey = strArray[0].Trim(); return fields; } fields.ClassKey = strArray[0].Trim(); fields.ResourceKey = strArray[1].Trim(); return fields; }
public override object ParseExpression(string expression, Type propertyType, ExpressionBuilderContext context) { ResourceExpressionFields fields = null; try { fields = ParseExpressionInternal(expression); } catch { } if (fields == null) { throw new HttpException(System.Web.SR.GetString("Invalid_res_expr", new object[] { expression })); } if (context.VirtualPathObject != null) { IResourceProvider resourceProvider = GetResourceProvider(fields, VirtualPath.Create(context.VirtualPath)); object obj2 = null; if (resourceProvider != null) { try { obj2 = resourceProvider.GetObject(fields.ResourceKey, CultureInfo.InvariantCulture); } catch { } } if (obj2 == null) { throw new HttpException(System.Web.SR.GetString("Res_not_found", new object[] { fields.ResourceKey })); } } return(fields); }
private static string LocalizeControl(Control control, IServiceProvider serviceProvider, IDesignTimeResourceWriter resourceWriter, bool shouldLocalizeInnerContent) { ResourceExpressionEditor expressionEditor = (ResourceExpressionEditor)ExpressionEditor.GetExpressionEditor("resources", serviceProvider); IControlBuilderAccessor accessor = control; ControlBuilder controlBuilder = accessor.ControlBuilder; ObjectPersistData objectPersistData = controlBuilder.GetObjectPersistData(); string resourceKey = controlBuilder.GetResourceKey(); string b = LocalizeObject(serviceProvider, control, objectPersistData, expressionEditor, resourceWriter, resourceKey, string.Empty, control, string.Empty, shouldLocalizeInnerContent, false, false); if (!string.Equals(resourceKey, b, StringComparison.OrdinalIgnoreCase)) { controlBuilder.SetResourceKey(b); } if (objectPersistData != null) { foreach (PropertyEntry entry in objectPersistData.AllPropertyEntries) { BoundPropertyEntry entry2 = entry as BoundPropertyEntry; if ((entry2 != null) && !entry2.Generated) { string[] strArray = entry2.Name.Split(new char[] { '.' }); if (strArray.Length > 1) { object component = control; foreach (string str3 in strArray) { PropertyDescriptor descriptor = TypeDescriptor.GetProperties(component)[str3]; if (descriptor == null) { break; } PersistenceModeAttribute attribute = descriptor.Attributes[typeof(PersistenceModeAttribute)] as PersistenceModeAttribute; if (attribute != PersistenceModeAttribute.Attribute) { if (string.Equals(entry2.ExpressionPrefix, "resources", StringComparison.OrdinalIgnoreCase)) { System.Web.Compilation.ResourceExpressionFields parsedExpressionData = entry2.ParsedExpressionData as System.Web.Compilation.ResourceExpressionFields; if ((parsedExpressionData != null) && string.IsNullOrEmpty(parsedExpressionData.ClassKey)) { object obj3 = expressionEditor.EvaluateExpression(entry2.Expression, entry2.ParsedExpressionData, entry2.PropertyInfo.PropertyType, serviceProvider); if (obj3 == null) { object obj4; obj3 = ControlDesigner.GetComplexProperty(control, entry2.Name, out obj4).GetValue(obj4); } resourceWriter.AddResource(parsedExpressionData.ResourceKey, obj3); } } break; } component = descriptor.GetValue(component); } } } } } return(b); }
public override object EvaluateExpression(object target, BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { ResourceExpressionFields fields = parsedData as ResourceExpressionFields; return(HttpContext.GetGlobalResourceObject(fields.ClassKey, fields.ResourceKey)); }
private static IResourceProvider GetResourceProvider(ResourceExpressionFields fields, VirtualPath virtualPath) { if (fields.ClassKey.Length == 0) { return GetLocalResourceProvider(virtualPath); } return GetGlobalResourceProvider(fields.ClassKey); }
/// <summary> /// Gets a global resource. /// </summary> /// <param name="fields">The fields.</param> /// <param name="args">The arguments.</param> /// <returns>The global resource.</returns> private static string GetGlobalResource(ResourceExpressionFields fields, object[] args) { return string.Format(CultureInfo.CurrentCulture, (string)HttpContext.GetGlobalResourceObject(fields.ClassKey, fields.ResourceKey, CultureInfo.CurrentUICulture), args); }
static string GetLocalResource(string path, ResourceExpressionFields fields, object[] args) { return string.Format((string)HttpContext.GetLocalResourceObject(path, fields.ResourceKey, CultureInfo.CurrentUICulture), args); }
private static string LocalizeObject(IServiceProvider serviceProvider, object obj, ObjectPersistData persistData, ResourceExpressionEditor resEditor, IDesignTimeResourceWriter resourceWriter, string resourceKey, string objectModelName, object topLevelObject, string filter, bool shouldLocalizeInnerContent, bool isComplexProperty, bool implicitlyLocalizeComplexProperty) { bool flag; if (isComplexProperty) { flag = implicitlyLocalizeComplexProperty; } else { flag = (persistData == null) || persistData.Localize; } PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj); for (int i = 0; i < properties.Count; i++) { try { PropertyDescriptor propertyDescriptor = properties[i]; if (string.Equals(propertyDescriptor.Name, "Controls", StringComparison.Ordinal)) { Control control = obj as Control; if ((control != null) && shouldLocalizeInnerContent) { if (!ParseChildren(control.GetType())) { foreach (Control control2 in control.Controls) { IControlBuilderAccessor accessor = control2; ControlBuilder controlBuilder = accessor.ControlBuilder; if (controlBuilder != null) { string str = controlBuilder.GetResourceKey(); string b = LocalizeObject(serviceProvider, control2, controlBuilder.GetObjectPersistData(), resEditor, resourceWriter, str, string.Empty, control2, string.Empty, true, false, false); if (!string.Equals(str, b, StringComparison.OrdinalIgnoreCase)) { controlBuilder.SetResourceKey(b); } } } } continue; } } PersistenceModeAttribute attribute = (PersistenceModeAttribute)propertyDescriptor.Attributes[typeof(PersistenceModeAttribute)]; string str3 = (objectModelName.Length > 0) ? (objectModelName + '.' + propertyDescriptor.Name) : propertyDescriptor.Name; if ((attribute.Mode == PersistenceMode.Attribute) && (propertyDescriptor.SerializationVisibility == DesignerSerializationVisibility.Content)) { resourceKey = LocalizeObject(serviceProvider, propertyDescriptor.GetValue(obj), persistData, resEditor, resourceWriter, resourceKey, str3, topLevelObject, filter, true, true, flag); } else if ((attribute.Mode == PersistenceMode.Attribute) || (propertyDescriptor.PropertyType == typeof(string))) { bool flag2 = false; bool flag3 = false; object obj2 = null; string name = string.Empty; if (persistData != null) { PropertyEntry filteredProperty = persistData.GetFilteredProperty(string.Empty, str3); if (filteredProperty is BoundPropertyEntry) { BoundPropertyEntry entry2 = (BoundPropertyEntry)filteredProperty; if (!entry2.Generated) { if (string.Equals(entry2.ExpressionPrefix, "resources", StringComparison.OrdinalIgnoreCase)) { System.Web.Compilation.ResourceExpressionFields parsedExpressionData = entry2.ParsedExpressionData as System.Web.Compilation.ResourceExpressionFields; if ((parsedExpressionData != null) && string.IsNullOrEmpty(parsedExpressionData.ClassKey)) { name = parsedExpressionData.ResourceKey; obj2 = resEditor.EvaluateExpression(entry2.Expression, entry2.ParsedExpressionData, propertyDescriptor.PropertyType, serviceProvider); if (obj2 != null) { flag3 = true; } flag2 = true; } } } else { flag2 = true; } } else { flag2 = flag && IsPropertyLocalizable(propertyDescriptor); } } else { flag2 = flag && IsPropertyLocalizable(propertyDescriptor); } if (flag2) { if (!flag3) { obj2 = propertyDescriptor.GetValue(obj); } if (name.Length == 0) { if (string.IsNullOrEmpty(resourceKey)) { resourceKey = resourceWriter.CreateResourceKey(null, topLevelObject); } name = resourceKey + '.' + str3; if (filter.Length != 0) { name = filter + ':' + name; } } resourceWriter.AddResource(name, obj2); } if (persistData != null) { foreach (PropertyEntry entry3 in persistData.GetPropertyAllFilters(str3)) { if (entry3.Filter.Length > 0) { if (entry3 is SimplePropertyEntry) { if (flag && IsPropertyLocalizable(propertyDescriptor)) { if (name.Length == 0) { if (string.IsNullOrEmpty(resourceKey)) { resourceKey = resourceWriter.CreateResourceKey(null, topLevelObject); } name = resourceKey + '.' + str3; } string str5 = entry3.Filter + ':' + name; resourceWriter.AddResource(str5, ((SimplePropertyEntry)entry3).Value); } } else if (!(entry3 is ComplexPropertyEntry) && (entry3 is BoundPropertyEntry)) { BoundPropertyEntry entry4 = (BoundPropertyEntry)entry3; if (!entry4.Generated && string.Equals(entry4.ExpressionPrefix, "resources", StringComparison.OrdinalIgnoreCase)) { System.Web.Compilation.ResourceExpressionFields fields2 = entry4.ParsedExpressionData as System.Web.Compilation.ResourceExpressionFields; if ((fields2 != null) && string.IsNullOrEmpty(fields2.ClassKey)) { object obj3 = resEditor.EvaluateExpression(entry4.Expression, entry4.ParsedExpressionData, entry3.PropertyInfo.PropertyType, serviceProvider); if (obj3 == null) { obj3 = string.Empty; } resourceWriter.AddResource(fields2.ResourceKey, obj3); } } } } } } } else if (shouldLocalizeInnerContent) { if (typeof(ICollection).IsAssignableFrom(propertyDescriptor.PropertyType)) { if (persistData != null) { foreach (ComplexPropertyEntry entry5 in persistData.GetPropertyAllFilters(propertyDescriptor.Name)) { foreach (ComplexPropertyEntry entry6 in entry5.Builder.GetObjectPersistData().CollectionItems) { ControlBuilder builder = entry6.Builder; object obj4 = builder.BuildObject(); string str6 = builder.GetResourceKey(); string str7 = LocalizeObject(serviceProvider, obj4, builder.GetObjectPersistData(), resEditor, resourceWriter, str6, string.Empty, obj4, string.Empty, true, false, false); if (!string.Equals(str6, str7, StringComparison.OrdinalIgnoreCase)) { builder.SetResourceKey(str7); } } } } } else if (typeof(ITemplate).IsAssignableFrom(propertyDescriptor.PropertyType)) { if (persistData != null) { foreach (TemplatePropertyEntry entry7 in persistData.GetPropertyAllFilters(propertyDescriptor.Name)) { TemplateBuilder builder3 = (TemplateBuilder)entry7.Builder; IDesignerHost designerHost = (IDesignerHost)serviceProvider.GetService(typeof(IDesignerHost)); Control[] controlArray = ControlParser.ParseControls(designerHost, builder3.Text); for (int j = 0; j < controlArray.Length; j++) { if (!(controlArray[j] is LiteralControl) && !(controlArray[j] is DesignerDataBoundLiteralControl)) { LocalizeControl(controlArray[j], serviceProvider, resourceWriter, true); } } StringBuilder builder4 = new StringBuilder(); for (int k = 0; k < controlArray.Length; k++) { if (controlArray[k] is LiteralControl) { builder4.Append(((LiteralControl)controlArray[k]).Text); } else { builder4.Append(ControlPersister.PersistControl(controlArray[k], designerHost)); } } builder3.Text = builder4.ToString(); } } } else if (persistData != null) { object obj5 = propertyDescriptor.GetValue(obj); ObjectPersistData objectPersistData = null; ComplexPropertyEntry entry8 = (ComplexPropertyEntry)persistData.GetFilteredProperty(string.Empty, propertyDescriptor.Name); if (entry8 != null) { objectPersistData = entry8.Builder.GetObjectPersistData(); } resourceKey = LocalizeObject(serviceProvider, obj5, objectPersistData, resEditor, resourceWriter, resourceKey, str3, topLevelObject, string.Empty, true, true, flag); foreach (ComplexPropertyEntry entry9 in persistData.GetPropertyAllFilters(propertyDescriptor.Name)) { if (entry9.Filter.Length > 0) { ControlBuilder builder5 = entry9.Builder; objectPersistData = builder5.GetObjectPersistData(); obj5 = builder5.BuildObject(); resourceKey = LocalizeObject(serviceProvider, obj5, objectPersistData, resEditor, resourceWriter, resourceKey, str3, topLevelObject, entry9.Filter, true, true, flag); } } } } } catch (Exception exception) { if (serviceProvider != null) { IComponentDesignerDebugService service = serviceProvider.GetService(typeof(IComponentDesignerDebugService)) as IComponentDesignerDebugService; if (service != null) { service.Fail(exception.Message); } } } } return(resourceKey); }
public static string GetKey(ResourceExpressionFields fields, string path) { if (fields == null) { return String.Empty; } if (String.IsNullOrEmpty(fields.ClassKey)) { if (String.IsNullOrEmpty(path)) { return fields.ResourceKey; } path = ResourceHandler.EnsureAppRelative(path).TrimStart('~'); return path + ',' + fields.ResourceKey; } return fields.ClassKey + ',' + fields.ResourceKey; }
private static IResourceProvider GetResourceProvider(ResourceExpressionFields fields, VirtualPath virtualPath) { // If there is no classKey, it's a page-level resource if (fields.ClassKey.Length == 0) { return GetLocalResourceProvider(virtualPath); } // Otherwise, it's a global resource return GetGlobalResourceProvider(fields.ClassKey); }
/// <summary> /// Ctor /// </summary> /// <param name="value"></param> /// <param name="path"></param> protected internal ResourceJbstExtension(string value, string path) : base(value, path) { this.ResKey = ResourceExpressionBuilder.ParseExpression(this.Value); }