* fix: Combined Hotkeys for special characters * add record method to hotkey manager * fix record plugin * remove unused component * add record to modal props * rename record method * replace handlers to use hotkeyRecord * fix combined keys * change expected result count from 18 to 17 * autoformat * Remove duplicate test, that was testing the wrong things; fix label; update configs * Revert "Remove duplicate test, that was testing the wrong things; fix label; update configs" This reverts commit 4292f4fe67351962d61cae623b920dcbd87dd71d. * Fix the record plugin's registration * fix exposed record method usage * adding logging for info level items * Hotkey definitions don't need to be globally reactive; use localstorage/appconfig as sources of truth; not redux * Tidy up test * Remove unused code from UserPreferencesForm * Log info when we run a command * fix hotkey preference restore * use application configured hotkeys if there are no user preferred * Avoid logging circular ref * Fix callouts * Fix small issue with array * Fix langua issue after refactor and merge * Refactor on recordCurrentCombo as Rodrigo did before * Separating components in 2 files * WIP Refactor to simplify the user preferences and move into each form the save and controll functionalities * Remove context * Remove unused import * Initial work on Field treatment * Refactor General preferences * Small refactor removing type from HotkeyField * small update on style * Refactor and layout fixed * Make hotkeys preferences working with old hotkeys row * Move error handling out of hotkey row/input component * WIP custom form * Moving validation function to component * Exposing hotkeyRecord as it does not depend on HotkeyManager Class * Making hotkeyField as much detached possible from parent component * Small refactors * Refactor on user preferences * Clean up into the changes * Small fix to let save working * Style finish * move about docs into about folder * Fix double tap on single keys * Style refactor * Remove log * Fix log issues on unit tests * Fix unit test breaking on ohif/core index * Fixing hotkeys unpause unit test issue * Rename file to adopt lowercase * Rename file to adopt lowercase * Fixing callouts * Big refactor miving some of the components into viewer and creating small components into ohif/ui * Typo on folder name * Updating ohif ui docs * Remove comments * Fix binding of combo keys * Fix some cypress tests failures * Fixing onCancel button * Fixing e2e tests * Small style update * Fixing unit tests failing after fix issue * Remove some not used code * Remove left over after debug * Adding prevent default on hotkeys events * Fixinf existing hotkeys validator with 3 keys pressed * Exposing hotkeys as root level on ohif-core * Clean up * Exposing all availableLanguages with labels and fixing an issue on language switcher * Fixing e2e cypress tests * Preveinting some simple errors * Treating error once we try to set hotkey definitions * Adding ui notification on setHotkeys errors * Implementing a service queue request to hold until functions are implemented * Making sure toFixed is only called on Numbers Co-authored-by: Danny Brown <danny.ri.brown@gmail.com> Co-authored-by: Gustavo André Lelis <galelis@gmail.com>
147 lines
4.7 KiB
JavaScript
147 lines
4.7 KiB
JavaScript
import i18n from 'i18next';
|
|
import Backend from 'i18next-locize-backend';
|
|
import LastUsed from 'locize-lastused';
|
|
import Editor from 'locize-editor';
|
|
import LanguageDetector from 'i18next-browser-languagedetector';
|
|
import { initReactI18next } from 'react-i18next';
|
|
import customDebug from './debugger';
|
|
import pkg from '../package.json';
|
|
import { debugMode, detectionOptions } from './config';
|
|
|
|
// Note: The index.js files inside src/locales are dynamically generated
|
|
// by the pullTranslations.sh script
|
|
import locales from './locales';
|
|
|
|
function addLocales(newLocales) {
|
|
customDebug(`Adding locales ${newLocales}`, 'info');
|
|
|
|
let resourceBundle = [];
|
|
|
|
Object.keys(newLocales).map(key => {
|
|
Object.keys(newLocales[key]).map(namespace => {
|
|
const locale = newLocales[key][namespace];
|
|
resourceBundle.push({ key, namespace, locale });
|
|
i18n.addResourceBundle(key, namespace, locale, true, true);
|
|
});
|
|
});
|
|
|
|
customDebug(`Locales added successfully`, 'info');
|
|
customDebug(resourceBundle, 'info');
|
|
}
|
|
|
|
/*
|
|
* Note: Developers can add the API key to use the
|
|
* in-context editor using environment variables.
|
|
* (DO NOT commit the API key)
|
|
*/
|
|
const locizeOptions = {
|
|
projectId: process.env.LOCIZE_PROJECTID,
|
|
apiKey: process.env.LOCIZE_API_KEY,
|
|
referenceLng: 'en-US',
|
|
fallbacklng: 'en-US',
|
|
};
|
|
|
|
const envUseLocize = !!process.env.USE_LOCIZE;
|
|
const envApiKeyAvailable = !!process.env.LOCIZE_API_KEY;
|
|
const DEFAULT_LANGUAGE = 'en-US';
|
|
|
|
function initI18n(
|
|
detection = detectionOptions,
|
|
useLocize = envUseLocize,
|
|
apiKeyAvailable = envApiKeyAvailable
|
|
) {
|
|
let initialized;
|
|
|
|
if (useLocize) {
|
|
customDebug(`Using Locize for translation files`, 'info');
|
|
initialized = i18n
|
|
// i18next-locize-backend
|
|
// loads translations from your project, saves new keys to it (saveMissing: true)
|
|
// https://github.com/locize/i18next-locize-backend
|
|
.use(Backend)
|
|
// locize-lastused
|
|
// sets a timestamp of last access on every translation segment on locize
|
|
// -> safely remove the ones not being touched for weeks/months
|
|
// https://github.com/locize/locize-lastused
|
|
.use(LastUsed)
|
|
// locize-editor
|
|
// InContext Editor of locize ?locize=true to show it
|
|
// https://github.com/locize/locize-editor
|
|
.use(Editor)
|
|
// detect user language
|
|
// learn more: https://github.com/i18next/i18next-browser-languageDetector
|
|
.use(LanguageDetector)
|
|
// pass the i18n instance to react-i18next.
|
|
.use(initReactI18next)
|
|
// init i18next
|
|
// for all options read: https://www.i18next.com/overview/configuration-options
|
|
.init({
|
|
fallbackLng: DEFAULT_LANGUAGE,
|
|
saveMissing: apiKeyAvailable,
|
|
debug: debugMode,
|
|
keySeparator: false,
|
|
interpolation: {
|
|
escapeValue: false, // not needed for react as it escapes by default
|
|
},
|
|
detection,
|
|
backend: locizeOptions,
|
|
locizeLastUsed: locizeOptions,
|
|
editor: {
|
|
...locizeOptions,
|
|
onEditorSaved: async (lng, ns) => {
|
|
// reload that namespace in given language
|
|
await i18n.reloadResources(lng, ns);
|
|
// trigger an event on i18n which triggers a rerender
|
|
// based on bindI18n below in react options
|
|
i18n.emit('editorSaved');
|
|
},
|
|
},
|
|
react: {
|
|
useSuspense: false, // TODO: Was seeing weird errors without this
|
|
wait: true,
|
|
bindI18n: 'languageChanged editorSaved',
|
|
},
|
|
});
|
|
} else {
|
|
customDebug(`Using local translation files`, 'info');
|
|
initialized = i18n
|
|
// detect user language
|
|
// learn more: https://github.com/i18next/i18next-browser-languageDetector
|
|
.use(LanguageDetector)
|
|
// pass the i18n instance to react-i18next.
|
|
.use(initReactI18next)
|
|
// init i18next
|
|
// for all options read: https://www.i18next.com/overview/configuration-options
|
|
.init({
|
|
fallbackLng: DEFAULT_LANGUAGE,
|
|
resources: locales,
|
|
debug: debugMode,
|
|
keySeparator: false,
|
|
interpolation: {
|
|
escapeValue: false, // not needed for react as it escapes by default
|
|
},
|
|
detection,
|
|
react: {
|
|
wait: true,
|
|
},
|
|
});
|
|
}
|
|
|
|
return initialized.then(function(t) {
|
|
i18n.T = t;
|
|
customDebug(`T function available.`, 'info');
|
|
});
|
|
}
|
|
|
|
customDebug(`version ${pkg.version} loaded.`, 'info');
|
|
|
|
i18n.initializing = initI18n();
|
|
i18n.initI18n = initI18n;
|
|
i18n.addLocales = addLocales;
|
|
i18n.defaultLanguage = DEFAULT_LANGUAGE;
|
|
|
|
import getAvailableLanguagesInfo from './getAvailableLanguagesInfo.js';
|
|
i18n.availableLanguages = getAvailableLanguagesInfo(locales);
|
|
|
|
export default i18n;
|