diff options
Diffstat (limited to 'server/sonar-web/src/main/js/helpers/l10n.ts')
-rw-r--r-- | server/sonar-web/src/main/js/helpers/l10n.ts | 129 |
1 files changed, 5 insertions, 124 deletions
diff --git a/server/sonar-web/src/main/js/helpers/l10n.ts b/server/sonar-web/src/main/js/helpers/l10n.ts index 9b8fafa258e..149955f2844 100644 --- a/server/sonar-web/src/main/js/helpers/l10n.ts +++ b/server/sonar-web/src/main/js/helpers/l10n.ts @@ -17,22 +17,13 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { fetchL10nBundle } from '../api/l10n'; -import { L10nBundle, L10nBundleRequestParams } from '../types/l10n'; -import { Dict } from '../types/types'; -import { toNotSoISOString } from './dates'; -import { get as loadFromLocalStorage, save as saveInLocalStorage } from './storage'; -export type Messages = Dict<string>; +import { getMessages } from './l10nBundle'; -export const DEFAULT_LOCALE = 'en'; -export const DEFAULT_MESSAGES = { - // eslint-disable-next-line camelcase - default_error_message: 'The request cannot be processed. Try again later.' -}; - -let allMessages: Messages = {}; -let locale: string | undefined; +export function hasMessage(...keys: string[]): boolean { + const messageKey = keys.join('.'); + return getMessages()[messageKey] != null; +} export function translate(...keys: string[]): string { const messageKey = keys.join('.'); @@ -61,23 +52,6 @@ export function translateWithParameters( return `${messageKey}.${parameters.join('.')}`; } -export function hasMessage(...keys: string[]): boolean { - const messageKey = keys.join('.'); - return getMessages()[messageKey] != null; -} - -export function getMessages() { - if (typeof allMessages === 'undefined') { - logWarning('L10n messages are not initialized. Use default messages.'); - return DEFAULT_MESSAGES; - } - return allMessages; -} - -export function resetMessages(newMessages: Messages) { - allMessages = newMessages; -} - export function getLocalizedMetricName( metric: { key: string; name?: string }, short = false @@ -101,14 +75,6 @@ export function getLocalizedMetricDomain(domainName: string) { return hasMessage(bundleKey) ? translate(bundleKey) : domainName; } -export function getCurrentLocale() { - return locale; -} - -export function resetCurrentLocale(newLocale: string) { - locale = newLocale; -} - export function getShortMonthName(index: number) { const months = [ 'Jan', @@ -136,88 +102,3 @@ export function getShortWeekDayName(index: number) { const weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; return weekdays[index] ? translate(weekdays[index]) : ''; } - -const L10N_BUNDLE_LS_KEY = 'l10n.bundle'; - -export async function loadL10nBundle() { - const bundle = await getLatestL10nBundle().catch(() => ({ - locale: DEFAULT_LOCALE, - messages: {} - })); - - resetCurrentLocale(bundle.locale); - resetMessages(bundle.messages); - - return bundle; -} - -export async function getLatestL10nBundle() { - const browserLocale = getPreferredLanguage(); - const cachedBundle = loadL10nBundleFromLocalStorage(); - - const params: L10nBundleRequestParams = {}; - - if (browserLocale) { - params.locale = browserLocale; - - if ( - cachedBundle.locale && - browserLocale.startsWith(cachedBundle.locale) && - cachedBundle.timestamp && - cachedBundle.messages - ) { - params.ts = cachedBundle.timestamp; - } - } - - const { effectiveLocale, messages } = await fetchL10nBundle(params).catch(response => { - if (response && response.status === 304) { - return { - effectiveLocale: cachedBundle.locale || browserLocale || DEFAULT_LOCALE, - messages: cachedBundle.messages ?? {} - }; - } - throw new Error(`Unexpected status code: ${response.status}`); - }); - - const bundle = { - timestamp: toNotSoISOString(new Date()), - locale: effectiveLocale, - messages - }; - - saveL10nBundleToLocalStorage(bundle); - - return bundle; -} - -export function getCurrentL10nBundle() { - return loadL10nBundleFromLocalStorage(); -} - -function getPreferredLanguage() { - return window.navigator.languages ? window.navigator.languages[0] : window.navigator.language; -} - -function loadL10nBundleFromLocalStorage() { - let bundle: L10nBundle; - - try { - bundle = JSON.parse(loadFromLocalStorage(L10N_BUNDLE_LS_KEY) ?? '{}'); - } catch { - bundle = {}; - } - - return bundle; -} - -function saveL10nBundleToLocalStorage(bundle: L10nBundle) { - saveInLocalStorage(L10N_BUNDLE_LS_KEY, JSON.stringify(bundle)); -} - -function logWarning(message: string) { - if (process.env.NODE_ENV !== 'production') { - // eslint-disable-next-line no-console - console.warn(message); - } -} |