public void GetResXResourcesTest() { DbResXConverter converter = new DbResXConverter(null); Dictionary <string, object> items = converter.GetResXResourcesNormalizedForLocale(@"C:\projects2008\Westwind.GlobalizationWeb\App_GlobalResources\resources", "de-de"); this.WriteResourceDictionary(items, "ResX Resources"); }
public void GetResXResourcesTest() { string path = @"c:\temp\resources"; DbResXConverter converter = new DbResXConverter(path); Dictionary<string, object> items = converter.GetResXResourcesNormalizedForLocale(@"C:\Temp\Westwind.Globalizations\Westwind.Globalization.Sample\LocalizationAdmin\App_LocalResources\LocalizationAdmin.aspx", "de-de"); WriteResourceDictionary(items,"ResX Resources"); }
public void GetResXResourcesTest() { string path = @"c:\temp\resources"; DbResXConverter converter = new DbResXConverter(configuration, path); Dictionary <string, object> items = converter.GetResXResourcesNormalizedForLocale(@"C:\Temp\Westwind.Globalizations\Westwind.Globalization.Sample\LocalizationAdmin\App_LocalResources\LocalizationAdmin.aspx", "de-de"); WriteResourceDictionary(items, "ResX Resources"); }
public string GetJavaScript(string varname, string resourceSet, string localeId, string resourceType, string resourceMode) { // varname is embedded into script so validate to avoid script injection // it's gotta be a valid C# and valid JavaScript name var match = Regex.Match(varname, @"^[\w|\d|_|$|@|\.]*$"); if (match.Length < 1 || match.Groups[0].Value != varname) { throw new WestwindException("Invalid variable name passed."); } if (string.IsNullOrEmpty(resourceSet)) { throw new WestwindException("Invalid ResourceSet specified."); } // pick current UI Culture if (localeId == "auto") { localeId = Thread.CurrentThread.CurrentUICulture.IetfLanguageTag; } Dictionary <string, object> resDict = null; if (string.IsNullOrEmpty(resourceType) || resourceType == "auto") { resourceType = "resdb"; } var basePath = hostingEnvironment.MapPath(configuration.ResxBaseFolder); var converter = new DbResXConverter(configuration, basePath); if (resourceType.ToLower() == "resdb") { // use existing/cached resource manager if previously used // so database is accessed only on first hit var resManager = DbRes.GetResourceManager(resourceSet); resDict = converter.GetResourcesNormalizedForLocale(resManager, localeId); //resDict = manager.GetResourceSetNormalizedForLocaleId(localeId, resourceSet); if (resDict == null || resDict.Keys.Count < 1) { // try resx instead var resxPath = converter.FormatResourceSetPath(resourceSet); resDict = converter.GetResXResourcesNormalizedForLocale(resxPath, localeId); } } else // Resx Resources { resDict = converter.GetCompiledResourcesNormalizedForLocale(resourceSet, configuration.ResourceBaseNamespace, localeId); if (resDict == null) { // check for .resx disk resources var resxPath = converter.FormatResourceSetPath(resourceSet); resDict = converter.GetResXResourcesNormalizedForLocale(resxPath, localeId); } else { resDict = resDict.OrderBy(kv => kv.Key).ToDictionary(k => k.Key, v => v.Value); } } if (resourceMode == "0") { resDict = resDict.Where(res => !res.Key.Contains('.') && res.Value is string) .ToDictionary(dict => dict.Key, dict => dict.Value); } else { resDict = resDict.Where(res => res.Value is string) .ToDictionary(dict => dict.Key, dict => dict.Value); } var javaScript = SerializeResourceDictionary(resDict, varname); return(javaScript); }
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")); }
public void GetResXResourcesTest() { DbResXConverter converter = new DbResXConverter(null); Dictionary<string,object> items = converter.GetResXResourcesNormalizedForLocale(@"C:\projects2008\Westwind.GlobalizationWeb\App_GlobalResources\resources","de-de"); this.WriteResourceDictionary(items,"ResX Resources"); }