public string Execute(GetTranslation.Query query) { if (!ConfigurationContext.Current.EnableLocalization()) { return(query.Key); } var key = query.Key; var language = query.Language; var cacheKey = CacheKeyHelper.BuildKey(key); var localizationResource = ConfigurationContext.Current.CacheManager.Get(cacheKey) as LocalizationResource; if (localizationResource != null) { return(GetTranslationFromAvailableList(localizationResource.Translations, language, query.UseFallback)?.Value); } LocalizationResourceTranslation localization = null; LocalizationResource resource; try { resource = new GetResource.Query(key).Execute(); } catch (KeyNotFoundException) { // this can be a case when Episerver initialization infrastructure calls localization provider way too early // and there is no registration for the GetResourceHandler - so we can fallback to default implementation // TODO: maybe we should just have default mapping (even if init has not been called) // (before any of the setup code in the provider is executed). this happens if you have DisplayChannels in codebase resource = new GetResourceHandler().Execute(new GetResource.Query(query.Key)); } if (resource == null) { resource = LocalizationResource.CreateNonExisting(key); } else { localization = GetTranslationFromAvailableList(resource.Translations, language, query.UseFallback); } ConfigurationContext.Current.CacheManager.Insert(cacheKey, resource); return(localization?.Value); }
public IEnumerable <LocalizationResource> Execute(GetAllResources.Query query) { if (query.ForceReadFromDb) { return(_inner.Execute(query)); } // get keys for known resources var keys = ConfigurationContext.Current.BaseCacheManager.KnownResourceKeys.Keys; // if keys = 0, execute inner query to actually get resources from the db // this is usually called during initialization when cache is not yet filled up if (keys.Count == 0) { return(_inner.Execute(query)); } var result = new List <LocalizationResource>(); foreach (var key in keys) { var cacheKey = CacheKeyHelper.BuildKey(key); if (ConfigurationContext.Current.CacheManager.Get(cacheKey) is LocalizationResource localizationResource) { result.Add(localizationResource); } else { // failed to get from cache, should call database var resourceFromDb = new GetResource.Query(key).Execute(); if (resourceFromDb != null) { ConfigurationContext.Current.CacheManager.Insert(cacheKey, resourceFromDb); result.Add(resourceFromDb); } } } return(result); }
/// <summary> /// Gets the resource from database. /// </summary> /// <param name="key">The key.</param> /// <returns></returns> protected virtual LocalizationResource GetResourceFromDb(string key) { var q = new GetResource.Query(key); return(q.Execute()); }