public LocalizationProvider(AbstractTranslator translator )
        {
            this.translator = translator;
            translator.translationResult += provideTranslation;

            timer = new Timer( 10, 1 );
            timer.timerComplete += sendTranslationRequest;

            pendingTranslations = new JsObject<JsArray<Node>>();
        }
        private void sendTranslationRequest(Timer timer)
        {
            var domainLabels = new JsObject<JsArray<JsString>>();

            var keyValuePair = new JsRegExp(@"\[(labels|messages|reference)\.(\w+)\]");
            JsRegExpResult result;

            JsString domain;
            JsString key;

            //The translation translator works on domains, so we need to break up the available items we have and make appropriate requests to the translator
            foreach (JsString expression in pendingTranslations) {
                result = expression.match(keyValuePair);
                domain = result[1];
                key = result[ 2 ];

                if (domainLabels[domain] == null ) {
                    domainLabels[domain] = new JsArray<JsString>();
                }

                domainLabels[domain].push( key );
            }

            foreach ( JsString domainEntry in domainLabels ) {
                translator.translate(domainEntry, domainLabels[domainEntry]);
            }
        }