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 locale at runtime. * * @example * import React from 'react'; * import { Admin, Resource, resolveBrowserLocale } from 'react-admin'; * import englishMessages from 'ra-language-english'; * import frenchMessages from 'ra-language-french'; * const messages = { * fr: frenchMessages, * en: englishMessages, * }; * const App = () => ( * * ... * * ); * * @param {String} defaultLocale Defaults to 'en' */ export const resolveBrowserLocale = (defaultLocale = DEFAULT_LOCALE) => { // 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; return (language || browserLanguage || userLanguage || defaultLocale).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 React from 'react'; * import { Admin, Resource, mergeTranslations } from 'react-admin'; * import englishMessages from 'ra-language-english'; * import englishTreeMessages from 'ra-tree-language-english'; * const messages = { * en: mergeTranslations(englishMessages, englishTreeMessages), * }; * const App = () => ( * * ... * * ); */ export const mergeTranslations = (...translationsModules: object[]) => merge({}, ...translationsModules);