aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-web/src/main/js/helpers/l10n.ts
blob: bf1a5969784b1a5ec6d7ef355a1bec6c819d8627 (plain)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*
 * SonarQube
 * Copyright (C) 2009-2022 SonarSource SA
 * mailto:info AT sonarsource DOT com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

import { getMessages } from './l10nBundle';

export function hasMessage(...keys: string[]): boolean {
  const messageKey = keys.join('.');
  return getMessages()[messageKey] != null;
}

export function translate(...keys: string[]): string {
  const messageKey = keys.join('.');
  const l10nMessages = getMessages();
  if (process.env.NODE_ENV === 'development' && !l10nMessages[messageKey]) {
    // eslint-disable-next-line no-console
    console.error(`No message for: ${messageKey}`);
  }
  return l10nMessages[messageKey] || messageKey;
}

export function translateWithParameters(
  messageKey: string,
  ...parameters: Array<string | number>
): string {
  const message = getMessages()[messageKey];
  if (message) {
    return parameters
      .map((parameter) => String(parameter))
      .reduce((acc, parameter, index) => acc.replace(`{${index}}`, () => parameter), message);
  }
  if (process.env.NODE_ENV === 'development') {
    // eslint-disable-next-line no-console
    console.error(`No message for: ${messageKey}`);
  }
  return `${messageKey}.${parameters.join('.')}`;
}

export function getLocalizedMetricName(
  metric: { key: string; name?: string },
  short = false
): string {
  const bundleKey = `metric.${metric.key}.${short ? 'short_name' : 'name'}`;
  if (hasMessage(bundleKey)) {
    return translate(bundleKey);
  } else if (short) {
    return getLocalizedMetricName(metric);
  }
  return metric.name || metric.key;
}

export function getLocalizedCategoryMetricName(metric: { key: string; name?: string }) {
  const bundleKey = `metric.${metric.key}.extra_short_name`;
  return hasMessage(bundleKey) ? translate(bundleKey) : getLocalizedMetricName(metric, true);
}

export function getLocalizedMetricDomain(domainName: string) {
  const bundleKey = `metric_domain.${domainName}`;
  return hasMessage(bundleKey) ? translate(bundleKey) : domainName;
}

export function getShortMonthName(index: number) {
  const months = [
    'Jan',
    'Feb',
    'Mar',
    'Apr',
    'May',
    'Jun',
    'Jul',
    'Aug',
    'Sep',
    'Oct',
    'Nov',
    'Dec',
  ];
  return translate(months[index]);
}

export function getWeekDayName(index: number) {
  const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
  return weekdays[index] ? translate(weekdays[index]) : '';
}

export function getShortWeekDayName(index: number) {
  const weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
  return weekdays[index] ? translate(weekdays[index]) : '';
}