Skip to content
This repository was archived by the owner on Apr 7, 2024. It is now read-only.

Commit 7f9cdc9

Browse files
committed
Solves issue #74 , adding fallback language support
1 parent 1a5a654 commit 7f9cdc9

File tree

3 files changed

+67
-9
lines changed

3 files changed

+67
-9
lines changed

ScheduledJobs/StaticWebScheduledJob.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -372,12 +372,12 @@ protected void AddAllPagesInAllLanguagesForConfiguration(SiteConfigurationElemen
372372

373373
if (!ignorePage)
374374
{
375-
_staticWebService.GetUrlsForPage(page, lang, out string pageUrl, out string simpleAddress);
375+
var urls = _staticWebService.GetUrlsForPage(configuration, page, lang, out string simpleAddress);
376376

377-
if (!string.IsNullOrEmpty(pageUrl))
377+
foreach (var url in urls)
378378
{
379-
UpdateScheduledJobStatus(configuration, pageUrl);
380-
_sitePages[configuration.Name].TryAdd(pageUrl, null);
379+
UpdateScheduledJobStatus(configuration, url);
380+
_sitePages[configuration.Name].TryAdd(url, null);
381381
}
382382
if (!string.IsNullOrEmpty(simpleAddress))
383383
{

Services/IStaticWebService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public interface IStaticWebService
7171
void GeneratePage(ContentReference contentReference, IContent content, bool? useTemporaryAttribute, bool ignoreHtmlDependencies);
7272
void GeneratePage(SiteConfigurationElement configuration, PageData page, CultureInfo lang, bool? useTemporaryAttribute, bool ignoreHtmlDependencies, ConcurrentDictionary<string, string> generatedResources = null);
7373
void GeneratePage(SiteConfigurationElement configuration, string pageUrl, bool? useTemporaryAttribute, bool ignoreHtmlDependencies, string simpleAddress = null, ConcurrentDictionary<string, string> generatedResources = null);
74-
void GetUrlsForPage(PageData page, CultureInfo lang, out string pageUrl, out string simpleAddress);
74+
List<string> GetUrlsForPage(SiteConfigurationElement configuration, PageData page, CultureInfo lang, out string simpleAddress);
7575
void GeneratePagesDependingOnBlock(SiteConfigurationElement configuration, ContentReference contentLink, bool? useTemporaryAttribute, bool ignoreHtmlDependencies);
7676
void GeneratePagesDependingOnContent(SiteConfigurationElement configuration, ContentReference contentReference, bool? useTemporaryAttribute, bool ignoreHtmlDependencies);
7777
void GeneratePageInAllLanguages(IContentRepository contentRepository, SiteConfigurationElement configuration, PageData page, bool ignoreHtmlDependencies);

Services/StaticWebService.cs

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,14 +162,72 @@ public void CreateRedirectPages(SiteConfigurationElement configuration, string o
162162
}
163163
public void GeneratePage(SiteConfigurationElement configuration, PageData page, CultureInfo lang, bool? useTemporaryAttribute, bool ignoreHtmlDependencies, ConcurrentDictionary<string, string> generatedResources = null)
164164
{
165-
GetUrlsForPage(page, lang, out string pageUrl, out string simpleAddress);
166-
GeneratePage(configuration, pageUrl, useTemporaryAttribute, ignoreHtmlDependencies, simpleAddress, generatedResources);
165+
var urls = GetUrlsForPage(configuration, page, lang, out string simpleAddress);
166+
167+
var firstUrl = urls.FirstOrDefault();
168+
if (!string.IsNullOrEmpty(firstUrl))
169+
{
170+
GeneratePage(configuration, firstUrl, useTemporaryAttribute, ignoreHtmlDependencies, simpleAddress, generatedResources);
171+
}
172+
173+
urls = urls.Skip(1).ToList();
174+
foreach (var url in urls)
175+
{
176+
GeneratePage(configuration, url, useTemporaryAttribute, ignoreHtmlDependencies, null, generatedResources);
177+
}
167178
}
168179

169-
public void GetUrlsForPage(PageData page, CultureInfo lang, out string pageUrl, out string simpleAddress)
180+
public List<string> GetUrlsForPage(SiteConfigurationElement configuration, PageData page, CultureInfo lang, out string simpleAddress)
170181
{
182+
var urls = new List<string>();
183+
171184
simpleAddress = string.IsNullOrEmpty(page.ExternalURL) ? null : "/" + page.ExternalURL;
172-
pageUrl = GetPageUrl(page.ContentLink.ToReferenceWithoutVersion(), lang);
185+
var pageUrl = GetPageUrl(page.ContentLink.ToReferenceWithoutVersion(), lang);
186+
187+
if (!string.IsNullOrEmpty(pageUrl))
188+
{
189+
urls.Add(pageUrl);
190+
191+
// TODO: Add configuration.UseFallbackLanguage?
192+
if (true)
193+
{
194+
urls.AddRange(GetFallbackUrlsForPageUrl(page.Language.TwoLetterISOLanguageName, pageUrl));
195+
}
196+
}
197+
198+
return urls;
199+
}
200+
201+
private IEnumerable<string> GetFallbackUrlsForPageUrl(string twoLetterISOLanguageName, string pageUrl)
202+
{
203+
var urls = new List<string>();
204+
205+
var langList = new Dictionary<string, List<string>>();
206+
var languageSettingsList = ServiceLocator.Current.GetInstance<EPiServer.DataAbstraction.ContentLanguageSettingRepository>().List();
207+
foreach (var languageSetting in languageSettingsList)
208+
{
209+
var fallbackLangeuageKey = languageSetting.LanguageBranch;
210+
foreach (var languageKey in languageSetting.LanguageBranchFallback)
211+
{
212+
if (!langList.ContainsKey(languageKey))
213+
{
214+
langList.Add(languageKey, new List<string> { fallbackLangeuageKey });
215+
}else
216+
{
217+
langList[languageKey].Add(fallbackLangeuageKey);
218+
}
219+
}
220+
}
221+
222+
if (langList.ContainsKey(twoLetterISOLanguageName))
223+
{
224+
foreach (string langKey in langList[twoLetterISOLanguageName])
225+
{
226+
urls.Add(pageUrl.Replace($"/{twoLetterISOLanguageName}/", $"/{langKey}/"));
227+
}
228+
}
229+
230+
return urls;
173231
}
174232

175233
public void GeneratePage(SiteConfigurationElement configuration, string pageUrl, bool? useTemporaryAttribute, bool ignoreHtmlDependencies, string simpleAddress = null, ConcurrentDictionary<string, string> generatedResources = null)

0 commit comments

Comments
 (0)