* feat(recording): frontend logic can support live streaming and recording Instead of either live streaming or recording, now both can live together. The changes to facilitate such include the following: - Killing the state storing in Recording.js. Instead state is stored in the lib and updated in redux for labels to display the necessary state updates. - Creating a new container, Labels, for recording labels. Previously labels were manually created and positioned. The container can create a reasonable number of labels and only the container itself needs to be positioned with CSS. The VideoQualityLabel has been shoved into the container as well because it moves along with the recording labels. - The action for updating recording state has been modified to enable updating an array of recording sessions to support having multiple sessions. - Confirmation dialogs for stopping and starting a file recording session have been created, as they previously were jquery modals opened by Recording.js. - Toolbox.web displays live streaming and recording buttons based on configuration instead of recording availability. - VideoQualityLabel and RecordingLabel have been simplified to remove any positioning logic, as the Labels container handles such. - Previous recording state update logic has been moved into the RecordingLabel component. Each RecordingLabel is in charge of displaying state for a recording session. The display UX has been left alone. - Sipgw availability is no longer broadcast so remove logic depending on its state. Some moving around of code was necessary to get around linting errors about the existing code being too deeply nested (even though I didn't touch it). * work around lib-jitsi-meet circular dependency issues * refactor labels to use html base * pass in translation keys to video quality label * add video quality classnames for torture tests * break up, rearrange recorder session update listener * add comment about disabling startup resize animation * rename session to sessionData * chore(deps): update to latest lib for recording changes
Jitsi Meet Translation
Jitsi Meet uses i18next library for translation. i18next uses separate json files for each language.
Translating Jitsi Meet
The translation of Jitsi Meet is integrated with Pootle. You can translate Jitsi Meet via our Pootle user interface on http://translate.jitsi.org.
WARNING: Please don't create or edit manually the language files! Please use our Pootle user interface!
Development
If you want to add new functionality for Jitsi Meet and you have texts that need to be translated please use our translation module. It is located in modules/translation. You must add key and value in main.json file in English for each translatable text. Than you can use the key to get the translated text for the current language.
WARNING: Please don't change the other language files except main.json! They must be updated and translated via our Pootle user interface!
You can add translatable text in the HTML:
- via attribute on HTML element - add data-i18n attribute with value the key of the translatable text.
<span data-i18n="dialog.OK">OK</span>
You can also use APP.translation.generateTranslationHTML(key, options) to get this HTML code as Javascript string.
APP.translation.generateTranslationHTML("dialog.OK") // returns <span data-i18n="dialog.OK">OK</span>
The value in the options parameter will be added in data-i18n-options attribute of the element.
Note: If you dynamically add HTML elements don't forget to call APP.translation.translateElement(jquery_selector) to translate the text initially.
APP.translation.translateString("dialog.OK") // returns the value for the key of the current language file. "OK" for example.
For the available values of options parameter for the above methods of translation module see i18next documentation.
Note: It is useful to add attributes in the HTML for persistent HTML elements because when the language is changed the text will be automatically translated.