From 720c16f3ac249b335c502ce8d9eb0ff8d062f587 Mon Sep 17 00:00:00 2001 From: KDSBrowne <kert.browne85@gmail.com> Date: Fri, 7 Oct 2016 09:36:27 -0700 Subject: [PATCH] Moved over the previous solution to the server side and cleaned up the code --- bigbluebutton-html5/client/langprovider.jsx | 61 ------------- bigbluebutton-html5/client/main.jsx | 30 ++++++- bigbluebutton-html5/client/services.js | 90 ------------------- bigbluebutton-html5/imports/locales/en.json | 3 - bigbluebutton-html5/imports/locales/index.js | 9 +- .../imports/startup/server/index.js | 49 ++++++++++ 6 files changed, 81 insertions(+), 161 deletions(-) delete mode 100755 bigbluebutton-html5/client/langprovider.jsx delete mode 100755 bigbluebutton-html5/client/services.js diff --git a/bigbluebutton-html5/client/langprovider.jsx b/bigbluebutton-html5/client/langprovider.jsx deleted file mode 100755 index 671cb5ee95..0000000000 --- a/bigbluebutton-html5/client/langprovider.jsx +++ /dev/null @@ -1,61 +0,0 @@ -import React, { Component, PropTypes } from 'react'; -import { IntlProvider } from 'react-intl'; -import { loadMessages } from './services'; -import { renderRoutes } from '../imports/startup/client/routes.js'; -import Locales from '../imports/locales'; - -// Set the defaultLocale below for all <FormattedMessage /> default messages. -// The corresponding locale must be exported in /imports/locales/index.js -let defaultLocale = 'en'; -let defaultMsgs; -let newMsgs; -let msgsUpdated = false; -let flag = true; - -let browserLang = navigator.language.split('-'); -let langRegion = browserLang[0] + '-' + browserLang[1].toUpperCase(); -let lang = browserLang[0]; -let region = browserLang[1].toUpperCase(); - -defaultMsgs = Locales[defaultLocale]; - -if (langRegion == defaultLocale || lang == defaultLocale) { - flag = false; -} - -class LangProvider extends Component { - constructor(props) { - super(props); - this.state = {}; - } - - updateMessages(msgs) { - let updatedMsgs = loadMessages(msgs, defaultLocale, lang, langRegion); - return updatedMsgs; - } - - render() { - while (flag) { - newMsgs = this.updateMessages(defaultMsgs); - flag = false; - msgsUpdated = true; - } - - let passLocale; - let passMsgs; - - if (msgsUpdated) { - passLocale = newMsgs[0]; passMsgs = newMsgs[1]; - }else { - passLocale = defaultLocale; passMsgs = defaultMsgs; - } - - return ( - <IntlProvider locale={passLocale} messages={passMsgs}> - {renderRoutes()} - </IntlProvider> - ); - } -} - -export default LangProvider; diff --git a/bigbluebutton-html5/client/main.jsx b/bigbluebutton-html5/client/main.jsx index dc22962247..fa345e0bb1 100755 --- a/bigbluebutton-html5/client/main.jsx +++ b/bigbluebutton-html5/client/main.jsx @@ -3,7 +3,29 @@ import { Meteor } from 'meteor/meteor'; import { render } from 'react-dom'; import { renderRoutes } from '../imports/startup/client/routes.js'; import { IntlProvider } from 'react-intl'; -import LangProvider from './langprovider'; + +let defaultLocale = 'en'; +let browserLanguage = navigator.language; +let messages; + +function LoadMessages(browserLanguage) { + $.ajax({ + type: 'GET', + async: false, + url: `http://192.168.32.128/html5client/locale?locale=${browserLanguage}`, + dataType: 'json', + success: SetMessages, + error: Err, + }); + + function SetMessages(data) { + messages = data; + } + + function Err(data) { + console.log('Error : Locale Not Found, Using Default'); + } +} // Helper to load javascript libraries from the BBB server function loadLib(libname, success, fail) { @@ -36,7 +58,11 @@ Meteor.startup(() => { loadLib('verto_extension.js'); loadLib('jquery.jsonrpcclient.js'); + LoadMessages(browserLanguage); + render(( - <LangProvider /> + <IntlProvider locale={defaultLocale} messages={messages}> + {renderRoutes()} + </IntlProvider> ), document.getElementById('app')); }); diff --git a/bigbluebutton-html5/client/services.js b/bigbluebutton-html5/client/services.js deleted file mode 100755 index 308f9b1b4f..0000000000 --- a/bigbluebutton-html5/client/services.js +++ /dev/null @@ -1,90 +0,0 @@ -import { Meteor } from 'meteor/meteor'; -import Locales from '../imports/locales'; - -var extend = require('util')._extend; - -function loadMessages(defaultMsgs, defaultLocale, lang, langRegion) { - let newMessages; - - let langOnly = false; - - let langRegionOnly = false; - - //let localeFound = false; - //let attempted = false; - - //pt_BR is used for testing. - /* - let PT_BR = { - "app.home.greeting": "Bem-vindo {name}! Sua aprensentação começará em breve...", - "app.userlist.participantsTitle": "Participantes", - "app.userlist.messagesTitle": "Mensagens", - "app.userlist.presenter": "Apresentador", - "app.userlist.you": "Você", - "app.chat.submitLabel": "Enviar Mensagem", - "app.chat.inputLabel": "Campo de mensagem para conversa {name}", - "app.chat.titlePublic": "Conversa PublÃca", - "app.chat.titlePrivate": "Conversa Privada com {name}", - "app.chat.partnerDisconnected": "{name} saiu da sala", - "app.chat.moreMessages": "Mais mensagens abaixo", - "app.kickMessage": "Você foi expulso da apresentação", - "app.failedMessage": "Desculpas, estamos com problemas para se conectar ao servidor.", - "app.connectingMessage": "Conectando...", - "app.waitingMessage": "Desconectado. Tentando reconectar em {seconds} segundos..." - } - */ - - //TODO: get ajax calls to work, issue is with the url. doesnt have access to locale .json files - /* - while(!localeFound && !attempted){ - $.ajax({ - type: 'GET', - url: `http://192.168.32.128/bigbluebutton/${langRegion}.json`, - dataType: 'json', - success: function (data) { - //alert("SUCCESS::> " + data); - newMessages = data; - attempted = true; - localeFound = true; - langRegionOnly = true; - }, - error: function (result) { - alert("Error: Not found, Checking backup"); - $.ajax({ - type: 'GET', - url: `http://192.168.32.128/bigbluebutton/${lang}.json`, - dataType: 'json', - success: function (data) { - //alert("SUCCESS::> " + data); - newMessages = data; - attempted = true; - localeFound = true; - langOnly = true; - }, - error: function (result) { - alert("Error: Locale not found, Using Default"); - }, - }); - }, - }); - attempted = true; - } - */ - - //var combined = extend(defaultMsgs, pt_BR); - - var combined = extend(defaultMsgs, newMessages); - - let results = []; - if (langOnly) { - results = [lang, combined]; - }else if (langRegionOnly) { - results = [langRegion, combined]; - }else { - results = [defaultLocale, combined]; - } - - return results; -} - -export {loadMessages}; diff --git a/bigbluebutton-html5/imports/locales/en.json b/bigbluebutton-html5/imports/locales/en.json index 4183f0b30e..ee4e0c8e61 100755 --- a/bigbluebutton-html5/imports/locales/en.json +++ b/bigbluebutton-html5/imports/locales/en.json @@ -1,6 +1,3 @@ - - - { "app.home.greeting": "Welcome {name}! Your presentation will begin shortly...", "app.userlist.participantsTitle": "Participants", diff --git a/bigbluebutton-html5/imports/locales/index.js b/bigbluebutton-html5/imports/locales/index.js index 09fa0e0dd7..3891b4704d 100755 --- a/bigbluebutton-html5/imports/locales/index.js +++ b/bigbluebutton-html5/imports/locales/index.js @@ -1,9 +1,8 @@ import en from './en.json'; - -//import ptBR from './pt-BR.json'; +import ptBR from './pt-BR.json'; export default { - en: en, - - //'pt-BR': ptBR, + 'en': en, + 'en-US': en, + 'pt-BR': ptBR, }; diff --git a/bigbluebutton-html5/imports/startup/server/index.js b/bigbluebutton-html5/imports/startup/server/index.js index 1f8488b40a..d7aff4b056 100755 --- a/bigbluebutton-html5/imports/startup/server/index.js +++ b/bigbluebutton-html5/imports/startup/server/index.js @@ -3,6 +3,8 @@ import '/server/server'; import { RedisPubSub } from '/imports/startup/server/RedisPubSub'; import { EventQueue } from '/imports/startup/server/EventQueue'; import { clearCollections } from '/imports/api/common/server/helpers'; +import { Meteor } from 'meteor/meteor'; +import Locales from '/imports/locales'; Meteor.startup(function () { redisPubSub = new RedisPubSub(); @@ -33,6 +35,53 @@ WebApp.connectHandlers.use('/check', (req, res, next) => { res.end(JSON.stringify(payload)); }); +WebApp.connectHandlers.use('/locale', (req, res) => { + let defaultLocale = 'en'; + let availableTranslations = ['en', 'en-US', 'pt-BR']; + let defaultMessages = {}; + let newMessages = {}; + let languageRegion = null; + let language = null; + let foundl = false; + let foundlr = false; + + let browserLang = req.query.locale.split('-'); + + if (browserLang[1]) { + languageRegion = browserLang[0] + '-' + browserLang[1].toUpperCase(); + language = browserLang[0]; + } else { + language = browserLang[0]; + } + + defaultMessages = Locales[defaultLocale]; + + for (i = 0; i < availableTranslations.length; i++) { + if (languageRegion == availableTranslations[i]) { + foundlr = true; + } else if (language == availableTranslations[i]) { + foundl = true; + } + } + + if (foundlr) { + newMessages = Locales[languageRegion]; + foundlr = false; + }else if (foundl) { + newMessages = Locales[language]; + foundl = false; + } else { + newMessages = defaultMessages; + } + + let merged = {}; + Object.assign(merged, defaultMessages, newMessages); + + res.setHeader('Content-Type', 'application/json'); + res.writeHead(200); + res.end(JSON.stringify(merged)); +}); + export const myQueue = new EventQueue(); export const eventEmitter = new (Npm.require('events').EventEmitter); -- GitLab