/// <summary> /// normalized SCRIPT tag to reference localized resources for a specific /// ResourceSet. /// </summary> /// <param name="varName"></param> /// <param name="resourceSet"></param> /// <param name="localeId"></param> /// <param name="resourceMode></param> /// <example> /// @LocalizationResourceController.GetJavaScriptResourcesScriptTag("myResources","MyServerResources") /// @LocalizationResourceController.GetJavaScriptResourcesScriptTag("myResources","MyServerResources",resourceMode: ResourceAccessMode.AutoConfiguration) /// @LocalizationResourceController.GetJavaScriptResourcesScriptTag("myResources","MyServerResources","de-DE,ResourceAccessMode.AutoConfiguration) /// </example> /// <returns></returns> public static HtmlString GetJavaScriptResourcesScriptTag(string varName, string resourceSet, string localeId = null, ResourceAccessMode resourceMode = ResourceAccessMode.AutoConfiguration) { var url = GetJavaScriptResourcesUrl(varName, resourceSet, localeId, resourceMode); return(new HtmlString($"<script src=\"{url}\"></script>")); }
/// <summary> /// Helper function called from strongly typed resources to retrieve /// non-string based resource values. /// /// This method returns a resource value based on the active /// Generated ResourceAccessMode. /// </summary> /// <param name="resourceSet"></param> /// <param name="resourceId"></param> /// <param name="manager"></param> /// <param name="resourceMode"></param> /// <returns></returns> public static object GetResourceObject(string resourceSet, string resourceId, ResourceManager manager, ResourceAccessMode resourceMode) { if (resourceMode == ResourceAccessMode.Resx) { return(manager.GetObject(resourceId)); } return(DbRes.TObject(resourceId, resourceSet)); }
/// <summary> /// Helper function called from strongly typed resources to retrieve /// string based resource values. /// /// This method returns a resource string based on the active /// Generated ResourceAccessMode. /// </summary> /// <param name="resourceSet"></param> /// <param name="resourceId"></param> /// <param name="manager"></param> /// <param name="resourceMode"></param> /// <returns></returns> public static string GetResourceString(string resourceSet, string resourceId, ResourceManager manager, ResourceAccessMode resourceMode) { if (resourceMode == ResourceAccessMode.AspNetResourceProvider) return GetAspNetResourceProviderValue(resourceSet, resourceId) as string; if (resourceMode == ResourceAccessMode.Resx) return manager.GetString(resourceId); return DbRes.T(resourceSet, "LocalizationForm"); }
/// <summary> /// Helper function called from strongly typed resources to retrieve /// string based resource values. /// /// This method returns a resource string based on the active /// Generated ResourceAccessMode. /// </summary> /// <param name="resourceSet"></param> /// <param name="resourceId"></param> /// <param name="manager"></param> /// <param name="resourceMode"></param> /// <returns></returns> public static string GetResourceString(string resourceSet, string resourceId, ResourceManager manager, ResourceAccessMode resourceMode) { if (resourceMode == ResourceAccessMode.Resx) { return(manager.GetString(resourceId)); } return(DbRes.T(resourceId, resourceSet)); }
/// <summary> /// Helper function called from strongly typed resources to retrieve /// non-string based resource values. /// /// This method returns a resource value based on the active /// Generated ResourceAccessMode. /// </summary> /// <param name="resourceSet"></param> /// <param name="resourceId"></param> /// <param name="manager"></param> /// <param name="resourceMode"></param> /// <returns></returns> public static object GetResourceObject(string resourceSet, string resourceId, ResourceManager manager, ResourceAccessMode resourceMode) { if (resourceMode == ResourceAccessMode.AspNetResourceProvider) { return(GetAspNetResourceProviderValue(resourceSet, resourceId)); } if (resourceMode == ResourceAccessMode.Resx) { return(manager.GetObject(resourceId)); } return(DbRes.TObject(resourceSet, "LocalizationForm")); }
/// <summary> /// Helper function called from strongly typed resources to retrieve /// string based resource values. /// /// This method returns a resource string based on the active /// Generated ResourceAccessMode. /// </summary> /// <param name="resourceSet"></param> /// <param name="resourceId"></param> /// <param name="manager"></param> /// <param name="resourceMode"></param> /// <returns></returns> public static string GetResourceString(string resourceSet, string resourceId, ResourceManager manager, ResourceAccessMode resourceMode) { if (resourceMode == ResourceAccessMode.AspNetResourceProvider) { return(GetAspNetResourceProviderValue(resourceSet, resourceId) as string); } if (resourceMode == ResourceAccessMode.Resx) { return(manager.GetString(resourceId)); } return(DbRes.T(resourceId, resourceSet)); }
/// <summary> /// Helper function called from strongly typed resources to retrieve /// non-string based resource values. /// /// This method returns a resource value based on the active /// Generated ResourceAccessMode. /// </summary> /// <param name="resourceSet"></param> /// <param name="resourceId"></param> /// <param name="manager"></param> /// <param name="resourceMode"></param> /// <returns></returns> public static object GetResourceObject(string resourceSet, string resourceId, ResourceManager manager, ResourceAccessMode resourceMode) { #if NETFULL if (resourceMode == ResourceAccessMode.AspNetResourceProvider) { return(GetAspNetResourceProviderValue(resourceSet, resourceId)); } #endif if (resourceMode == ResourceAccessMode.Resx) { return(manager.GetObject(resourceId)); } return(DbRes.TObject(resourceId, resourceSet)); }
/// <summary> /// Returns a URL to the JavaScriptResourceHandler.axd handler that retrieves /// normalized resources for a given resource set and localeId and creates /// a JavaScript object with the name specified. /// /// This function returns only the URL - you're responsible for embedding /// the URL into the page as a script tag to actually load the resources. /// </summary> /// <param name="varName"></param> /// <param name="resourceSet"></param> /// <param name="localeId"></param> /// <param name="resourceMode></param> /// <returns></returns> public static string GetJavaScriptResourcesUrl(string varName, string resourceSet, string localeId = null, ResourceAccessMode resourceMode = ResourceAccessMode.AutoConfiguration) { if (resourceMode == ResourceAccessMode.AutoConfiguration) { resourceMode = DbResourceConfiguration.Current.ResourceAccessMode; } StringBuilder sb = new StringBuilder(512); string resType = resourceMode == ResourceAccessMode.DbResourceManager ? "resdb" : "resx"; sb.Append("/api/JavaScriptLocalizationResources"); sb.Append($"?ResourceSet={resourceSet}&LocaleId={localeId}&VarName={varName}&ResourceMode={resType}"); return(sb.ToString()); }
/// <summary> /// Helper function called from strongly typed resources to retrieve /// string based resource values. /// /// This method returns a resource string based on the active /// Generated ResourceAccessMode. /// </summary> /// <param name="resourceSet"></param> /// <param name="resourceId"></param> /// <param name="manager"></param> /// <param name="resourceMode"></param> /// <returns></returns> public static string GetResourceString(string resourceSet, string resourceId, ResourceManager manager, ResourceAccessMode resourceMode) { #if NETFULL if (resourceMode == ResourceAccessMode.AspNetResourceProvider) { return(GetAspNetResourceProviderValue(resourceSet, resourceId) as string); } #endif try { if (resourceMode == ResourceAccessMode.Resx) { return(manager.GetString(resourceId)); } } catch (Exception ex) { return(resourceId); } return(DbRes.T(resourceId, resourceSet)); }
public ActionResult ProcessRequest() { var Request = HttpContext.Request; string resourceSet = Request.Query["ResourceSet"]; string localeId = Request.Query["LocaleId"]; if (string.IsNullOrEmpty(localeId)) { localeId = "auto"; } string resourceMode = Request.Query["ResourceMode"]; if (string.IsNullOrEmpty(resourceMode)) { resourceMode = "Resx"; // Resx/ResDb/Auto } string varname = Request.Query["VarName"]; if (string.IsNullOrEmpty(varname)) { varname = "resources"; } // varname is embedded into script so validate to avoid script injection // it's gotta be a valid C# and valid JavaScript name Match match = Regex.Match(varname, @"^[\w|\d|_|$|@|\.]*$"); if (match.Length < 1 || match.Groups[0].Value != varname) { SendErrorResponse("Invalid variable name passed."); } if (string.IsNullOrEmpty(resourceSet)) { SendErrorResponse("Invalid ResourceSet specified."); } // pick current UI Culture if (localeId == "auto") { try { // Use ASP.NET Core RequestLocalization Mapping var cultureProvider = HttpContext.Features.Get <IRequestCultureFeature>(); if (cultureProvider != null) { localeId = cultureProvider.RequestCulture.UICulture.IetfLanguageTag; } else { localeId = Thread.CurrentThread.CurrentUICulture.IetfLanguageTag; } } catch { localeId = Thread.CurrentThread.CurrentUICulture.IetfLanguageTag; } } Dictionary <string, object> resDict = null; resourceMode = string.IsNullOrEmpty(resourceMode) ? "auto" : resourceMode.ToLower(); ResourceAccessMode mode = ResourceAccessMode.Resx; if (resourceMode == "resdb") { mode = ResourceAccessMode.DbResourceManager; } else if (resourceMode == "auto") { mode = DbResourceConfiguration.Current.ResourceAccessMode; } if (mode == ResourceAccessMode.DbResourceManager) { var resManager = DbResourceDataManager.CreateDbResourceDataManager( Config.DbResourceDataManagerType); resDict = resManager.GetResourceSetNormalizedForLocaleId(localeId, resourceSet); if (resDict == null || resDict.Count == 0) { mode = ResourceAccessMode.Resx; // try Resx resources from disk instead } } if (mode != ResourceAccessMode.DbResourceManager) // Resx Resources loaded from disk { string basePath = Request.MapPath(DbResourceConfiguration.Current.ResxBaseFolder, basePath: Host.ContentRootPath); DbResXConverter converter = new DbResXConverter(basePath); resDict = converter.GetCompiledResourcesNormalizedForLocale(resourceSet, DbResourceConfiguration.Current.ResourceBaseNamespace, localeId); if (resDict == null) { // check for .resx disk resources string resxPath = converter.FormatResourceSetPath(resourceSet); resDict = converter.GetResXResourcesNormalizedForLocale(resxPath, localeId); } else { resDict = resDict.OrderBy(kv => kv.Key).ToDictionary(k => k.Key, v => v.Value); } } // return all resource strings resDict = resDict.Where(res => res.Value is string) .ToDictionary(dict => dict.Key, dict => dict.Value); string javaScript = SerializeResourceDictionary(resDict, varname); #if NETFULL // client cache if (!HttpContext.Current.IsDebuggingEnabled) { Response.ExpiresAbsolute = DateTime.UtcNow.AddDays(1); Response.AppendHeader("Accept-Ranges", "bytes"); Response.AppendHeader("Vary", "Accept-Encoding"); Response.Cache.SetETag("\"" + javaScript.GetHashCode().ToString("x") + "\""); Response.Cache.SetLastModified(DateTime.UtcNow); // OutputCache settings HttpCachePolicy cache = Response.Cache; cache.VaryByParams["ResourceSet"] = true; cache.VaryByParams["LocaleId"] = true; cache.VaryByParams["ResoureType"] = true; cache.VaryByParams["IncludeControls"] = true; cache.VaryByParams["VarName"] = true; cache.VaryByParams["ResourceMode"] = true; //cache.SetOmitVaryStar(true); DateTime now = DateTime.Now; cache.SetCacheability(HttpCacheability.Public); cache.SetExpires(now + TimeSpan.FromDays(1)); cache.SetValidUntilExpires(true); cache.SetLastModified(now); } #endif return(SendTextOutput(javaScript, "text/javascript; charset=utf-8")); }
/// <summary> /// Helper function called from strongly typed resources to retrieve /// non-string based resource values. /// /// This method returns a resource value based on the active /// Generated ResourceAccessMode. /// </summary> /// <param name="resourceSet"></param> /// <param name="resourceId"></param> /// <param name="manager"></param> /// <param name="resourceMode"></param> /// <returns></returns> public static object GetResourceObject(string resourceSet, string resourceId, ResourceManager manager, ResourceAccessMode resourceMode) { if (resourceMode == ResourceAccessMode.AspNetResourceProvider) return GetAspNetResourceProviderValue(resourceSet, resourceId); if (resourceMode == ResourceAccessMode.Resx) return manager.GetObject(resourceId); return DbRes.TObject(resourceId, resourceSet); }