コード例 #1
0
        public void GetDbResourcesTest()
        {
            DbResourceDataManager       manager = new DbResourceDataManager();
            Dictionary <string, object> items   = manager.GetResourceSetNormalizedForLocaleId("de-de", "resources");

            WriteResourceDictionary(items, "DB Resources");
        }
コード例 #2
0
        public void GetDbResourcesTest()
        {
            DbResourceDataManager manager = new DbResourceDataManager();
            Dictionary<string,object> items = manager.GetResourceSetNormalizedForLocaleId("de-de", "resources");

            WriteResourceDictionary(items, "DB Resources");            
        }
コード例 #3
0
        public void ProcessRequest(HttpContext context)
        {
            HttpRequest  Request  = HttpContext.Current.Request;
            HttpResponse Response = HttpContext.Current.Response;

            string resourceSet     = Request.Params["ResourceSet"];
            string localeId        = Request.Params["LocaleId"] ?? "";
            string resourceType    = Request.Params["ResourceType"] ?? "Resx"; // Resx/ResDb
            bool   includeControls = (Request.Params["IncludeControls"] ?? "") != "";
            string varname         = Request.Params["VarName"] ?? "resources";
            string resourceMode    = (Request.Params["ResourceMode"] ?? "0");

            // 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.");
            }

            Dictionary <string, object> resDict = null;

            if (resourceType.ToLower() == "resdb")
            {
                DbResourceDataManager manager = new DbResourceDataManager();
                resDict = manager.GetResourceSetNormalizedForLocaleId(localeId, resourceSet) as Dictionary <string, object>;
            }
            else  // Resx Resources
            {
                DbResXConverter converter = new DbResXConverter();
                // must figure out the path
                string resxPath = null;
                //if (DbResourceConfiguration.Current.ResxExportProjectType == GlobalizationResxExportProjectTypes.WebForms)
                //    resxPath = converter.FormatWebResourceSetPath(resourceSet, (resourceMode == "0") );
                //else
                resxPath = converter.FormatResourceSetPath(resourceSet);

                resDict = converter.GetResXResourcesNormalizedForLocale(resxPath, localeId) as Dictionary <string, object>;
            }


            if (resourceMode == "0" && !includeControls)
            {
                // filter the list to strip out controls (anything that contains a . in the ResourceId
                // is considered a control value
                resDict = resDict.Where(res => !res.Key.Contains('.') && res.Value is string)
                          .ToDictionary(dict => dict.Key, dict => dict.Value);
            }
            else
            {
                // return all resource strings
                resDict = resDict.Where(res => res.Value is string)
                          .ToDictionary(dict => dict.Key, dict => dict.Value);
            }

            string javaScript = SerializeResourceDictionary(resDict, varname);


            // client cache
            if (!HttpContext.Current.IsDebuggingEnabled)
            {
                Response.ExpiresAbsolute = DateTime.UtcNow.AddDays(30);
                Response.Cache.SetLastModified(DateTime.UtcNow);
                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["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(10));
            cache.SetValidUntilExpires(true);
            cache.SetLastModified(now);

            SendTextOutput(javaScript, "application/javascript");
        }