UNPKG

ra-core

Version:

Core components of react-admin, a frontend Framework for building admin applications on top of REST services, using ES6, React

86 lines (80 loc) 2.69 kB
import merge from 'lodash/merge'; import { DEFAULT_LOCALE } from './index'; interface AllNavigatorLanguage extends NavigatorLanguage { browserLanguage?: string; userLanguage?: string; } /** * Resolve the browser locale according to the value of the global window.navigator * * Use it to determine the <Admin> locale at runtime. * * @example * import * as React from "react"; * import { Admin, Resource, resolveBrowserLocale } from 'react-admin'; * import polyglotI18nProvider from 'ra-i18n-polyglot'; * import englishMessages from 'ra-language-english'; * import frenchMessages from 'ra-language-french'; * * const messages = { * fr: frenchMessages, * en: englishMessages, * }; * const i18nProvider = polyglotI18nProvider( * locale => messages[locale] ? messages[locale] : messages.en, * resolveBrowserLocale() * ); * * const App = () => ( * <Admin i18nProvider={i18nProvider}> * ... * </Admin> * ); * * @param {string} defaultLocale Defaults to 'en' * @param options * @param {boolean} options.fullLocale Defaults to false */ export const resolveBrowserLocale = ( defaultLocale?: string, options?: { fullLocale?: boolean } ): string => { // from http://blog.ksol.fr/user-locale-detection-browser-javascript/ // Rely on the window.navigator object to determine user locale const { language, browserLanguage, userLanguage } = window.navigator as AllNavigatorLanguage; const locale = language || browserLanguage || userLanguage || defaultLocale || DEFAULT_LOCALE; return options?.fullLocale ? locale : locale.split('-')[0]; }; /** * Compose translations from multiple packages for a single language (eg: 'english'). * * Use it to merge translations from addons with the main react-admin translations. * * @example * import * as React from "react"; * import { Admin, Resource, mergeTranslations } from 'react-admin'; * import polyglotI18nProvider from 'ra-i18n-polyglot'; * import englishMessages from 'ra-language-english'; * import englishTreeMessages from 'ra-tree-language-english'; * * const messages = { * en: mergeTranslations(englishMessages, englishTreeMessages), * }; * const i18nProvider = polyglotI18nProvider( * locale => messages[locale] ? messages[locale] : messages.en * ); * * const App = () => ( * <Admin i18nProvider={i18nProvider}> * ... * </Admin> * ); */ export const mergeTranslations = (...translationsModules: object[]) => merge({}, ...translationsModules);