File size: 1,447 Bytes
ec8acdf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
type TranslationRecord = Record<string, unknown>;

function isRecord(value: unknown): value is TranslationRecord {
  return typeof value === 'object' && value !== null && !Array.isArray(value);
}

function deepEqualJson(left: unknown, right: unknown): boolean {
  if (Object.is(left, right)) return true;
  if (Array.isArray(left) || Array.isArray(right)) {
    return Array.isArray(left)
      && Array.isArray(right)
      && left.length === right.length
      && left.every((value, index) => deepEqualJson(value, right[index]));
  }
  if (!isRecord(left) || !isRecord(right)) return false;

  const leftKeys = Object.keys(left);
  const rightKeys = Object.keys(right);
  return leftKeys.length === rightKeys.length
    && leftKeys.every((key) => (
      Object.prototype.hasOwnProperty.call(right, key)
      && deepEqualJson(left[key], right[key])
    ));
}

export function resolveEffectiveWelcomeContentLanguage(
  currentLanguage: string,
  englishWelcome: unknown,
  currentResources: TranslationRecord | undefined,
): string {
  const base = (currentLanguage || 'en').split('-')[0]?.toLowerCase() || 'en';
  if (base === 'en') return 'en';
  if (!currentResources || !Object.prototype.hasOwnProperty.call(currentResources, 'welcome')) {
    return 'en';
  }

  const localizedWelcome = currentResources.welcome;
  if (!isRecord(localizedWelcome) || deepEqualJson(localizedWelcome, englishWelcome)) {
    return 'en';
  }
  return base;
}