define( function() {

    var fallbackLanguage = "en-us",
        texts = {
    "player": {
        "quiz": {
            "button": {
                "submit": {
                    "et-ee": "Esita vastus",
                    "bg-bg": "Подаване на отговор",
                    "cs-cz": "Zadat odpověď",
                    "da-dk": "Afgiv svar",
                    "de-de": "Antwort abgeben",
                    "en-us": "Submit answer",
                    "es-es": "Enviar respuesta",
                    "es-ar": "Enviar respuesta",
                    "es-ar": "Enviar respuesta",
                    "fi-fi": "Anna vastaus",
                    "fr-fr": "Soumettre la réponse",
                    "el-gr": "Παρέχετε απάντηση",
                    "hi-in": "उत्तर सबमिट करें",
                    "hr-hr": "Odgovori",
                    "hu-hu": "Válasz megadása",
                    "it-it": "Invia risposta",
                    "ja-jp": "回答を送信する",
                    "ko-kr": "답변 제출",
                    "lt-lt": "Pateikti atsakymą",
                    "mk-mk": "Поднеси одговор",
                    "mn-mn": "Хариулт илгээх",
                    "ms-id": "Kirim jawaban",
                    "nl-nl": "Antwoord versturen",
                    "no-no": "Send inn svar",
                    "pl-pl": "Prześlij odpowiedź",
                    "pt-pt": "Responder",
                    "pt-br": "Responder",
                    "ro-ro": "Transmitere răspuns",
                    "ru-ru": "Отправить ответ",
                    "sk-sk": "Odoslať odpoveď",
                    "sl-si": "Oddaj odgovor",
                    "sr-rs": "Odgovori",
                    "sv-se": "Skicka svar",
                    "th-th": "ส่งคำตอบ",
                    "tr-tr": "Cevapla",
                    "zh-tw": "送出答案",
                    "zh-cn": "提交答案",
                    "de-at": "Antwort abgeben",
                    "de-ch": "Antwort abgeben",
                    "eo-de": "Antwort abgeben",
                    "nl-be": "Antwoord versturen",
                    "en-ie": "Submit answer",
                    "en-gb": "Submit answer",
                    "eo-en": "Antwort abgeben",
                    "fr-be": "Soumettre la réponse"
                },
                "submitExceeded": {
                    "et-ee": "Vastus esitatud",
                    "bg-bg": "Отговорът е подаден",
                    "cs-cz": "Odpověď byla zadána",
                    "da-dk": "Svar afgivet",
                    "de-de": "Antwort abgegeben",
                    "en-us": "Answer submitted",
                    "es-es": "Respuesta enviada",
                    "es-ar": "Respuesta enviada",
                    "fi-fi": "Vastaus annettu",
                    "fr-fr": "Réponse soumise",
                    "el-gr": "Παρασχέθηκε απάντηση",
                    "hi-in": "उत्तर सबमिट किया गया",
                    "hr-hr": "Odgovoreno",
                    "hu-hu": "Válasz megadva",
                    "it-it": "Risposta inviata",
                    "ja-jp": "回答を送信しました",
                    "ko-kr": "답변 제출됨",
                    "lt-lt": "Atsakymas pateiktas",
                    "mk-mk": "Одговорот е поднесен",
                    "mn-mn": "Хариултыг илгээлээ",
                    "ms-id": "Jawaban terkirim",
                    "nl-nl": "Antwoord verstuurd",
                    "no-no": "Svar sendt",
                    "pl-pl": "Odpowiedź przesłana",
                    "pt-pt": "Resposta entregue",
                    "pt-br": "Resposta entregue",
                    "ro-ro": "Răspuns transmis",
                    "ru-ru": "Ответ отправлен",
                    "sk-sk": "Odpoveď odoslaná",
                    "sl-si": "Odgovor je oddan",
                    "sr-rs": "Odgovoreno",
                    "sv-se": "Svar skickat",
                    "th-th": "ส่งคำตอบแล้ว",
                    "tr-tr": "Cevaplandırıldı",
                    "zh-tw": "答案已送出",
                    "zh-cn": "答案已提交",
                    "de-at": "Antwort abgegeben",
                    "de-ch": "Antwort abgegeben",
                    "eo-de": "Antwort abgegeben",
                    "nl-be": "Antwoord verstuurd",
                    "en-ie": "Answer submitted",
                    "en-gb": "Answer submitted",
                    "eo-en": "Antwort abgegeben",
                    "fr-be": "Réponse soumise"
                },
                "evaluate": {
                    "et-ee": "Hindamine",
                    "bg-bg": "Оценяване",
                    "cs-cz": "Vyhodnocení",
                    "da-dk": "Analyse",
                    "de-de": "Auswertung",
                    "en-us": "Evaluate",
                    "es-es": "Evaluación",
                    "fi-fi": "Arviointi",
                    "fr-fr": "Evaluation",
                    "el-gr": "Αξιολόγηση",
                    "hi-in": "मूल्यांकन",
                    "hr-hr": "Vrednovanje",
                    "hu-hu": "Kiértékelés",
                    "it-it": "Valutazione",
                    "ja-jp": "評価",
                    "ko-kr": "평가",
                    "lt-lt": "Vertinimas",
                    "mk-mk": "Испит",
                    "mn-mn": "Үнэлгээ",
                    "ms-id": "Evaluasi",
                    "nl-nl": "Oplossing",
                    "no-no": "Vurdering",
                    "pl-pl": "Ocena",
                    "pt-pt": "Avaliação",
                    "ro-ro": "Evaluare",
                    "ru-ru": "Подведение итогов",
                    "sk-sk": "Vyhodnotenie",
                    "sl-si": "Obdelava",
                    "sr-rs": "Ocena",
                    "sv-se": "Bedömning",
                    "th-th": "การประเมิน",
                    "tr-tr": "Değerlendirme",
                    "zh-tw": "評估",
                    "zh-cn": "评估",
                    "ca-es": "Valoració",
                    "eu-es": "Balorazioa",
                    "es-ar": "Evaluación",
                    "pt-br": "Avaliação",
                    "de-at": "Auswertung",
                    "de-ch": "Auswertung",
                    "eo-de": "Auswertung",
                    "nl-be": "Oplossing",
                    "en-ie": "Evaluate",
                    "en-gb": "Evaluate",
                    "eo-en": "Auswertung",
                    "fr-be": "Evaluation"
                },
                "bestPracticeSolution": {
                    "et-ee": "Kuva lahendus",
                    "bg-bg": "Показване на решението",
                    "cs-cz": "Zobrazit řešení",
                    "da-dk": "Vis løsning",
                    "de-de": "zur Musterlösung",
                    "en-us": "Show sample solution",
                    "es-es": "Ver Solución correcta",
                    "fi-fi": "Ratkaisun näyttäminen",
                    "fr-fr": "Afficher la bonne solution",
                    "el-gr": "Εμφάνιση λύσης",
                    "hi-in": "समाधान प्रदर्शित करें",
                    "hr-hr": "Prikazati riješenje",
                    "hu-hu": "Megoldás bemutatása",
                    "it-it": "Mostra soluzione modello",
                    "ja-jp": "正解を表示",
                    "ko-kr": "해답 표시",
                    "lt-lt": "Rodyti sprendimą",
                    "mk-mk": "Прикажи решение",
                    "mn-mn": "Дэлгэцийн шийдэл",
                    "ms-id": "Tampilkan jawaban",
                    "nl-nl": "Oplossing tonen",
                    "no-no": "Vis løsning",
                    "pl-pl": "Pokaż rozwiązanie",
                    "pt-pt": "Indicar solução",
                    "ro-ro": "Afişarea soluţiei",
                    "ru-ru": "Показать решение",
                    "sk-sk": "Zobrazenie riešenie",
                    "sl-si": "Pokaži rešitev",
                    "sr-rs": "Prikaz rešenja",
                    "sv-se": "Visa lösning",
                    "th-th": "แสดงวิธีแก้ไขปัญหา",
                    "tr-tr": "Çözümü göster",
                    "zh-tw": "答複通知",
                    "zh-cn": "答复通知",
                    "ca-es": "Mostrar solució",
                    "eu-es": "Erantzun zuzena ikusi",
                    "es-ar": "Visualizar solución",
                    "pt-br": "Indicar solução",
                    "de-at": "zur Musterlösung",
                    "de-ch": "zur Musterlösung",
                    "eo-de": "zur Musterlösung",
                    "nl-be": "Oplossing tonen",
                    "en-ie": "Show sample solution",
                    "en-gb": "Show sample solution",
                    "eo-en": "zur Musterlösung",
                    "fr-be": "Afficher la bonne solution"
                },
                "userSolution": {
                    "et-ee": "Kuva testiküsimuse hinne",
                    "bg-bg": "Оценяване",
                    "cs-cz": "Vyhodnocení",
                    "da-dk": "Analyse",
                    "de-de": "Zurück zur Auswertung",
                    "en-us": "Back to evaluation",
                    "es-es": "Volver a la evaluación",
                    "fi-fi": "Arviointi",
                    "fr-fr": "Retour à l'evaluation",
                    "el-gr": "Αξιολόγηση",
                    "hi-in": "परीक्षा प्रश्न का मूल्यांकन प्रदर्शित करें",
                    "hr-hr": "Vrednovanje",
                    "hu-hu": "Kiértékelés",
                    "it-it": "Indietro alla valutazione",
                    "ja-jp": "テスト質問の評価を表示",
                    "ko-kr": "시험 문제의 평가 표시",
                    "lt-lt": "Vertinimas",
                    "mk-mk": "Испит",
                    "mn-mn": "Үнэлгээ",
                    "ms-id": "Evaluasi",
                    "nl-nl": "Oplossing",
                    "no-no": "Vurdering",
                    "pl-pl": "Ocena",
                    "pt-pt": "Avaliação",
                    "ro-ro": "Evaluare",
                    "ru-ru": "Подведение итогов",
                    "sk-sk": "Vyhodnotenie",
                    "sl-si": "Obdelava",
                    "sr-rs": "Ocena",
                    "sv-se": "Visa bedömning av testfråga",
                    "th-th": "แสดงการประเมินคำถามทดสอบ",
                    "tr-tr": "Deðerlendirme",
                    "zh-tw": "測試問題評估通知",
                    "zh-cn": "测试问题评估通知",
                    "ca-es": "Valoració",
                    "eu-es": "Galderen balorazioa ikusi",
                    "es-ar": "Volver a la evaluación",
                    "pt-br": "Avaliação",
                    "de-at": "Zurück zur Auswertung",
                    "de-ch": "Zurück zur Auswertung",
                    "eo-de": "Zurück zur Auswertung",
                    "nl-be": "Oplossing",
                    "en-ie": "Back to evaluation",
                    "en-gb": "Back to evaluation",
                    "eo-en": "Zurück zur Auswertung",
                    "fr-be": "Retour à l'evaluation"
                }
            }
        }
    }
};

    /**
     * Gets data from a nested object
     *
     * @private
     * @param {string} key - a dot separated representation of the objectstructure e.g.("cmi.core.lesson_status")
     * @param {object|string} data - the data object where the value should be got from
     */
    function getData( key, data ) {

        var parts = key.split("."),
            i = 0,
            parent = data;

        for(; i < parts.length; ++i) {
            if (!parent[parts[i]]) {
                return null;
            }
            parent = parent[parts[i]];
        }

        return parent;
    }

    // revealing public API
    return {

        /**
         * Gets a text in a given language
         * If the text is not defined in the given language, the text in teh fallback "en-us" is used, otherwise "null".
         *
         * @public
         * @param {string} key - a dot separated representation of the resource e.g.("quiz.evaluate")
         * @param {string} [language] - the language for the text e.g.("en-us")
         */
        get : function( key, language ){

            var text = getData( key, texts );
            if( text ){
                return getData( language, text ) || getData( fallbackLanguage, text );
            }

            return null;
        }
    }
});