diff --git a/i18n/lambda_function.py b/i18n/lambda_function.py index c7ba7fb..3085dfb 100644 --- a/i18n/lambda_function.py +++ b/i18n/lambda_function.py @@ -1,36 +1,42 @@ # -*- coding: utf-8 -*- -# This sample demonstrates handling intents from an Alexa skill and using the -# Alexa Skills Kid SDK (v2) -# Please visit https://alexa.design/cookbook for additional examples on -# implementing slots, dialog management, +# This sample demonstrates handling intents from an Alexa skill using the Alexa Skills Kit SDK for Python. +# Please visit https://alexa.design/cookbook for additional examples on implementing slots, dialog management, # session persistence, api calls, and more. - -import requests +# This sample is built using the handler classes approach in skill builder. import logging +import ask_sdk_core.utils as ask_utils +import os +import json +import locale +import requests import calendar +import gettext +import prompts from datetime import datetime from pytz import timezone -import gettext +from ask_sdk_s3.adapter import S3Adapter +s3_adapter = S3Adapter(bucket_name=os.environ["S3_PERSISTENCE_BUCKET"]) from alexa import data -from ask_sdk_s3.adapter import S3Adapter from ask_sdk_core.skill_builder import CustomSkillBuilder from ask_sdk_core.dispatch_components import ( - AbstractRequestHandler, AbstractExceptionHandler, - AbstractRequestInterceptor, AbstractResponseInterceptor -) + AbstractRequestHandler, AbstractRequestInterceptor, AbstractExceptionHandler) +from ask_sdk_core.handler_input import HandlerInput + +from ask_sdk_model import Response + from ask_sdk_core.utils import is_request_type, is_intent_name -s3_adapter = S3Adapter(bucket_name="custom-walk-testing") -sb = CustomSkillBuilder(persistence_adapter=s3_adapter) +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) -logger = logging.getLogger("main") +logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) -class LaunchRequestIntentHandler(AbstractRequestHandler): +class LaunchRequestHandler(AbstractRequestHandler): """ Handler for Skill Launch """ @@ -39,101 +45,115 @@ def can_handle(self, handler_input): return is_request_type("LaunchRequest")(handler_input) def handle(self, handler_input): - _ = handler_input.attributes_manager.request_attributes["_"] - - speech = _(data.WELCOME_MSG) - reprompt = _(data.WELCOME_REMPROMPT_MSG) + data = handler_input.attributes_manager.request_attributes["_"] + speech = data[prompts.WELCOME_MSG] + reprompt = data[prompts.WELCOME_REPROMPT_MSG] handler_input.response_builder.speak(speech).ask(reprompt) return handler_input.response_builder.response - class HasBirthdayLaunchRequestHandler(AbstractRequestHandler): - """ - Handler for launch after they have set their birthday - """ + """Handler for launch after they have set their birthday""" def can_handle(self, handler_input): # extract persistent attributes and check if they are all present attr = handler_input.attributes_manager.persistent_attributes - attributes_are_present = ( - "year" in attr and "month" in attr and "day" in attr) + attributes_are_present = ("year" in attr and "month" in attr and "day" in attr) - return attributes_are_present and is_request_type("LaunchRequest")(handler_input) + return attributes_are_present and ask_utils.is_request_type("LaunchRequest")(handler_input) def handle(self, handler_input): - _ = handler_input.attributes_manager.request_attributes["_"] - attr = handler_input.attributes_manager.persistent_attributes - year = int(attr['year']) - # month is a string, and we need to convert it to a month index later - month = attr['month'] + month = int(attr['month']) # month is a string, and we need to convert it to a month index later day = int(attr['day']) + data = handler_input.attributes_manager.request_attributes["_"] + error_timezone_speech = data[prompts.ERROR_TIMEZONE_MSG] - # get device id / timezones + # get skill locale from request + skill_locale = handler_input.request_envelope.request.locale + + # get device id sys_object = handler_input.request_envelope.context.system + device_id = sys_object.device.device_id - # get systems api information + # get Alexa Settings API information api_endpoint = sys_object.api_endpoint - device_id = sys_object.device.device_id api_access_token = sys_object.api_access_token # construct systems api timezone url - url = '{api_endpoint}/v2/devices/{device_id}/settings/System.timeZone'.format( - api_endpoint=api_endpoint, device_id=device_id) + url = '{api_endpoint}/v2/devices/{device_id}/settings/System.timeZone'.format(api_endpoint=api_endpoint, device_id=device_id) headers = {'Authorization': 'Bearer ' + api_access_token} userTimeZone = "" try: - r = requests.get(url, headers=headers) - res = r.json() - logger.info("Device API result: {}".format(str(res))) - userTimeZone = res - except Exception: - speech = _(data.ERROR_TIMEZONE_MSG) - handler_input.response_builder.speak(speech) - return handler_input.response_builder.response - - # getting the current date with the time + r = requests.get(url, headers=headers) + res = r.json() + logger.info("Device API result: {}".format(str(res))) + userTimeZone = res + except Exception: + handler_input.response_builder.speak(error_timezone_speech) + return handler_input.response_builder.response + + # get the current date with the time now_time = datetime.now(timezone(userTimeZone)) - # Removing the time from the date because it affects our difference calculation + # remove the time from the date because it affects our difference calculation now_date = datetime(now_time.year, now_time.month, now_time.day) current_year = now_time.year - # getting the next birthday - month_as_index = list(calendar.month_abbr).index(month[:3]) - next_birthday = datetime(current_year, month_as_index, day) + # get the next birthday + next_birthday = datetime(current_year, month, day) # check if we need to adjust bday by one year if now_date > next_birthday: next_birthday = datetime( current_year + 1, - month_as_index, + month, day ) current_year += 1 - # setting the default speak_output to Happy xth Birthday!! - # alexa will automatically correct the oridinal for you. - # no need to worry about when to use st, th, rd - speak_output = _(data.HAPPY_BIRTHDAY_MSG).format( - str(current_year - year)) - if now_date != next_birthday: - diff_days = abs((now_date - next_birthday).days) - logger.info(speak_output) - speak_output = _(data.WELCOME_BACK_MSG).format( - diff_days, - (current_year-year) - ) - if(diff_days != 1): - speak_output = _(data.WELCOME_BACK_MSG_plural).format( - diff_days, - (current_year-year) - ) + + # calculate how many days until the next birthday + diff_days = abs((now_date - next_birthday).days) + + # the following locales have a different WELCOME_BACK_MSG for plural + if (('fr' in skill_locale) or ('it' in skill_locale) or ('es' in skill_locale)) or ('pt' in skill_locale): + + # if it is not the user birthday + if now_date != next_birthday: + if diff_days > 1: + speak_output = data[prompts.WELCOME_BACK_MSG_plural].format(diff_days, current_year-year) + if diff_days < 2: + speak_output = data[prompts.WELCOME_BACK_MSG].format(diff_days, current_year - year) + + # if it is the user birthday + else: + if (current_year - year > 1): + speak_output = data[prompts.HAPPY_BIRTHDAY_MSG_plural].format(current_year - year) + if current_year - year < 2: + speak_output = data[prompts.HAPPY_BIRTHDAY_MSG].format(current_year - year) + + # all other locales + else: + speak_output = data[prompts.HAPPY_BIRTHDAY_MSG].format(current_year - year) + + # if it is not the user birthday + if now_date != next_birthday: + if diff_days > 1: + speak_output = data[prompts.WELCOME_BACK_MSG_plural].format(diff_days, current_year-year) + elif diff_days < 2: + speak_output = data[prompts.WELCOME_BACK_MSG].format(diff_days, current_year - year) + + return ( + handler_input.response_builder + .speak(speak_output) + # .ask("add a reprompt if you want to keep the session open for the user to respond") + .response + ) + + - handler_input.response_builder.speak(speak_output) - return handler_input.response_builder.response class BirthdayIntentHandler(AbstractRequestHandler): @@ -145,103 +165,154 @@ def can_handle(self, handler_input): return is_intent_name("CaptureBirthdayIntent")(handler_input) def handle(self, handler_input): - _ = handler_input.attributes_manager.request_attributes["_"] + data = handler_input.attributes_manager.request_attributes["_"] slots = handler_input.request_envelope.request.intent.slots + skill_locale = handler_input.request_envelope.request.locale # extract slot values year = slots["year"].value month = slots["month"].value day = slots["day"].value + # months abbreviations vary from locale to locale, if there is an error, we capitalize the month and try again + try: + month_as_index = list(calendar.month_abbr).index(month[:3]) + except: + month = month.capitalize() + month_as_index = list(calendar.month_abbr).index(month[:3]) + # save slots into session attributes session_attr = handler_input.attributes_manager.session_attributes session_attr['year'] = year - session_attr['month'] = month + session_attr['month'] = month_as_index session_attr['day'] = day # save session attributes as persistent attributes handler_input.attributes_manager.persistent_attributes = session_attr handler_input.attributes_manager.save_persistent_attributes() - speech = _(data.REGISTER_BIRTHDAY_MSG).format(month, day, year) + # ensure that the order the arguments is correct (MM/DD/YYYY or DD/MM/YYYY) according to locale + date = self.formatDate(year, month, day, skill_locale) + + speech = data[prompts.REGISTER_BIRTHDAY_MSG].format(date[0], date[1], date[2]) handler_input.response_builder.speak(speech) return handler_input.response_builder.response + # function to ensure that the date format corresponds with the locale that is triggering thee skill + def formatDate(self, year, month, day, skill_locale): + if skill_locale == 'en-US': + date = [month, day, year] + elif skill_locale == 'jp-JP': + date = [year, month, day] + else: + date = [day, month, year] + return date -class HelpIntentHandler(AbstractRequestHandler): - """ - Handler for AMAZON.HelpIntent - """ + + +class HelpIntentHandler(AbstractRequestHandler): + """Handler for Help Intent.""" def can_handle(self, handler_input): - return is_intent_name("AMAZON.HelpIntent")(handler_input) + # type: (HandlerInput) -> bool + return ask_utils.is_intent_name("AMAZON.HelpIntent")(handler_input) def handle(self, handler_input): - _ = handler_input.attributes_manager.request_attributes["_"] - speak_output = _(data.HELP_MSG) + # type: (HandlerInput) -> Response - handler_input.response_builder.speak( - speak_output - ).ask(speak_output) - return handler_input.response_builder.response + data = handler_input.attributes_manager.request_attributes["_"] + speak_output = data[prompts.HELP_MSG] + return ( + handler_input.response_builder + .speak(speak_output) + .ask(speak_output) + .response + ) -class CatchAllExceptionHandler(AbstractExceptionHandler): - """ - Catch all exception handler, log exception and - respond with custom message. - """ - def can_handle(self, handler_input, exception): - return True +class CancelOrStopIntentHandler(AbstractRequestHandler): + """Single handler for Cancel and Stop Intent.""" + def can_handle(self, handler_input): + # type: (HandlerInput) -> bool + return (ask_utils.is_intent_name("AMAZON.CancelIntent")(handler_input) or + ask_utils.is_intent_name("AMAZON.StopIntent")(handler_input)) - def handle(self, handler_input, exception): - logger.info(exception) - _ = handler_input.attributes_manager.request_attributes["_"] - speak_output = _(data.ERROR_MSG) - handler_input.response_builder.speak(speak_output).ask(speak_output) - return handler_input.response_builder.response + def handle(self, handler_input): + # type: (HandlerInput) -> Response + data = handler_input.attributes_manager.request_attributes["_"] + speak_output = data[prompts.GOODBYE_MSG] + return ( + handler_input.response_builder + .speak(speak_output) + .response + ) -class CancelAndStopIntentHandler(AbstractRequestHandler): - """ - Handler for AMAZON.CancelIntent and AMAZON.StopIntent - """ +class SessionEndedRequestHandler(AbstractRequestHandler): + """Handler for Session End.""" def can_handle(self, handler_input): - return is_intent_name("AMAZON.CancelIntent")(handler_input) \ - and is_intent_name("AMAZON.StopIntent")(handler_input) + # type: (HandlerInput) -> bool + return ask_utils.is_request_type("SessionEndedRequest")(handler_input) def handle(self, handler_input): - _ = handler_input.attributes_manager.request_attributes["_"] - speak_output = _(data.GOODBYE_MSG) - handler_input.response_builder.speak(speak_output) + # type: (HandlerInput) -> Response + + # Any cleanup logic goes here. + return handler_input.response_builder.response -class SessionEndedRequestHandler(AbstractRequestHandler): - """ - Handler for SessionEndedRequest +class IntentReflectorHandler(AbstractRequestHandler): + """The intent reflector is used for interaction model testing and debugging. + It will simply repeat the intent the user said. You can create custom handlers + for your intents by defining them above, then also adding them to the request + handler chain below. """ - def can_handle(self, handler_input): - return is_request_type("SessionEndedRequest")(handler_input) + # type: (HandlerInput) -> bool + return ask_utils.is_request_type("IntentRequest")(handler_input) def handle(self, handler_input): - # Any cleanup logic goes here - return handler_input.response_builder.response + # type: (HandlerInput) -> Response + data = handler_input.attributes_manager.request_attributes["_"] + intent_name = ask_utils.get_intent_name(handler_input) + speak_output = data[prompts.REFLECTOR_MSG].format(intent_name) + + return ( + handler_input.response_builder + .speak(speak_output) + # .ask("add a reprompt if you want to keep the session open for the user to respond") + .response + ) -class CacheSpeechForRepeatInterceptor(AbstractResponseInterceptor): - """Cache the output speech and reprompt to session attributes, - for repeat intent. +class CatchAllExceptionHandler(AbstractExceptionHandler): + """Generic error handling to capture any syntax or routing errors. If you receive an error + stating the request handler chain is not found, you have not implemented a handler for + the intent being invoked or included it in the skill builder below. """ + def can_handle(self, handler_input, exception): + # type: (HandlerInput, Exception) -> bool + return True - def process(self, handler_input, response): - # type: (HandlerInput, Response) -> None - session_attr = handler_input.attributes_manager.session_attributes - session_attr["speech"] = response.output_speech - session_attr["reprompt"] = response.reprompt + def handle(self, handler_input, exception): + # type: (HandlerInput, Exception) -> Response + logger.error(exception, exc_info=True) + data = handler_input.attributes_manager.request_attributes["_"] + speak_output = data[prompts.ERROR_MSG] + + return ( + handler_input.response_builder + .speak(speak_output) + .ask(speak_output) + .response + ) + +# The SkillBuilder object acts as the entry point for your skill, routing all request and response +# payloads to the handlers above. Make sure any new handlers or interceptors you've +# defined are included below. The order matters - they're processed top to bottom. class LocalizationInterceptor(AbstractRequestInterceptor): @@ -250,26 +321,41 @@ class LocalizationInterceptor(AbstractRequestInterceptor): """ def process(self, handler_input): - locale = handler_input.request_envelope.request.locale - logger.info("Locale is {}".format(locale)) - i18n = gettext.translation( - 'data', localedir='locales', languages=[locale], fallback=True) - handler_input.attributes_manager.request_attributes["_"] = i18n.gettext + skill_locale = handler_input.request_envelope.request.locale + logger.info("Locale is {}".format(skill_locale[:2])) + + # localized strings stored in language_strings.json + with open("language_strings.json") as language_prompts: + language_data = json.load(language_prompts) + # set default translation data to broader translation + data = language_data[skill_locale[:2]] + # if a more specialized translation exists, then select it instead + # example: "fr-CA" will pick "fr" translations first, but if "fr-CA" translation exists, + # then pick that instead + if skill_locale in language_data: + data.update(language_data[skill_locale]) + handler_input.attributes_manager.request_attributes["_"] = data + skill_locale = skill_locale.replace('-','_') + # configure the runtime to treat time according to the skill locale + locale.setlocale(locale.LC_TIME, skill_locale) + + + + +sb = CustomSkillBuilder(persistence_adapter=s3_adapter -# register request / intent handlers sb.add_request_handler(HasBirthdayLaunchRequestHandler()) -sb.add_request_handler(LaunchRequestIntentHandler()) +sb.add_request_handler(LaunchRequestHandler()) sb.add_request_handler(BirthdayIntentHandler()) sb.add_request_handler(HelpIntentHandler()) -sb.add_request_handler(CancelAndStopIntentHandler()) +sb.add_request_handler(CancelOrStopIntentHandler()) sb.add_request_handler(SessionEndedRequestHandler()) +sb.add_request_handler(IntentReflectorHandler()) # make sure IntentReflectorHandler is last so it doesn’t override your custom intent handlers -# register exception handlers sb.add_exception_handler(CatchAllExceptionHandler()) -# register localization interceptor and cache speech interceptor sb.add_global_request_interceptor(LocalizationInterceptor()) -sb.add_global_response_interceptor(CacheSpeechForRepeatInterceptor()) -lambda_handler = sb.lambda_handler() + +lambda_handler = sb.lambda_handler() \ No newline at end of file diff --git a/i18n/language_strings.json b/i18n/language_strings.json new file mode 100644 index 0000000..2abc95e --- /dev/null +++ b/i18n/language_strings.json @@ -0,0 +1,122 @@ +{ + "en": { + "WELCOME_MSG": "Hello! Welcome to Cake walk. What is your birthday?", + "WELCOME_REPROMPT_MSG": "I was born Nov. 6th, 2014. When were you born?", + "WELCOME_BACK_MSG": "Welcome back. It looks like there is {} day until your {}th birthday.", + "WELCOME_BACK_MSG_plural": "Welcome back. It looks like there are {} days until your {}th birthday.", + "HAPPY_BIRTHDAY_MSG": "Happy {}th birthday!", + "REGISTER_BIRTHDAY_MSG": "Thanks, I'll remember that you were born {} {} {}.", + "HELP_MSG": "You can tell me your date of birth and I'll take note. You can also just say, 'register my birthday' and I will guide you. Which one would you like to try?", + "GOODBYE_MSG": "Goodbye!", + "REFLECTOR_MSG": "You just triggered {}", + "ERROR_MSG": "Sorry, I couldn't understand what you said. Can you reformulate?", + "ERROR_TIMEZONE_MSG": "I can't determine your timezone. Please check your device settings and make sure a timezone was selected. After that please reopen the skill and try again!" + }, + "pt": { + "WELCOME_MSG": "Olá! Boas vindas à skill Feliz Aniversário. Quando é o seu aniversário?", + "WELCOME_REPROMPT_MSG": "Eu nasci no dia 6 de novembro de 2014. Quando você nasceu?", + "WELCOME_BACK_MSG": "Que bom que você está de volta! Parece que falta {} dia até o seu {} aniversário.", + "WELCOME_BACK_MSG_plural": "Que bom que você está de volta! Parece que faltam {} dias até o seu {} aniversário.", + "HAPPY_BIRTHDAY_MSG": "Feliz aniversário de {} ano", + "HAPPY_BIRTHDAY_MSG_plural": "Felis aniversário de {} anos", + "REGISTER_BIRTHDAY_MSG": "Obrigada, eu vou lembrar que você nasceu no dia {} de {} de {}.", + "HELP_MSG": "Você pode me dizer o dia em que você nasceu e eu vou me lembrar. Você também pode dizer, 'anote meu aniversário' eu irei guiar sua interação. Qual deles você quer tentar?", + "GOODBYE_MSG": "Tchau!", + "REFLECTOR_MSG": "Você acabou de acionar o {}", + "ERROR_MSG": "Desculpe, eu não entendi o que você falou. Pode reformular?", + "ERROR_TIMEZONE_MSG": "Não consegui determinar seu fuso horário. Por favor verifique as configurações de seu aparelho e certifique-se de que um fuso horário está selecionado. Depois disso, reinicie a skill e tente novamente!" + }, + "de": { + "WELCOME_MSG": "Hallo! Herzlich willkommen zu Herzlichen Glückwunsch. Wann hast du Geburtstag?", + "WELCOME_REPROMPT_MSG": "Ich bin am 6. November 2014 geboren. Wann bist du geboren?", + "WELCOME_BACK_MSG": "Willkommen zurück. Es sieht so aus, als ob noch {} Tag bis zu Deinem {}. Geburtstag verbleibt.", + "WELCOME_BACK_MSG_plural": "Willkommen zurück. Es sieht so aus, als ob noch {} Tage zu Deinem {}. Geburtstag verbleiben.", + "HAPPY_BIRTHDAY_MSG": "Alles Gute zum {}. Geburtstag!", + "REGISTER_BIRTHDAY_MSG": "Danke, ich werde mir merken, dass du am {} {} {} geboren wurdest.", + "HELP_MSG": "Du kannst mir sagen, wann du Geburtstag hast und ich werde es mir merken. Du kannst auch einfach 'merke dir meinen Geburtstag' sagen und ich werde dir weiterhelfen. Was würdest du gerne probieren?", + "GOODBYE_MSG": "Tschüss!", + "REFLECTOR_MSG": "Du hast gerade {} gestartet.", + "ERROR_MSG": "Sorry, ich konnte nicht verstehen was du gesagt hast. Kannst du das bitte umformulieren?", + "ERROR_TIMEZONE_MSG": "Ich kann deine Zeitzone nicht bestimmen. Bitte überprüfe deine Geräteoptionen und stelle sicher, dass eine Zeitzone ausgeewählt ist. Öffne danach den Skill wieder und probiere es erneut!" + + }, + "fr": { + "WELCOME_MSG": "Bonjour! Bienvenue sur le Génie des Anniversaires. Quelle est votre date de naissance ?", + "WELCOME_REPROMPT_MSG": "Je suis née le 6 novembre 2014. Et vous, quand êtes-vous né ?", + "WELCOME_BACK_MSG": "Content de vous revoir! Il vous reste {} jour avant d'avoir {} ans.", + "WELCOME_BACK_MSG_plural": "Content de vous revoir! Il vous reste {} jours avant d'avoir {} ans.", + "HAPPY_BIRTHDAY_MSG": "Joyeux Anniversaire! Aujourd'hui, vous avez {} an!", + "HAPPY_BIRTHDAY_MSG_plural": "Joyeux Anniversaire! Aujourd'hui, vous avez {} ans!", + "REGISTER_BIRTHDAY_MSG": "Merci, je vais me rappeler que vous êtes né le {} {} {}.", + "HELP_MSG": "Je peux me souvenir de votre date de naissance. Dites-moi votre jour, mois et année de naissance ou bien dites-moi simplement 'enregistre mon anniversaire' et je vous guiderai. Quel est votre choix ?", + "GOODBYE_MSG": "Au revoir!", + "REFLECTOR_MSG": "Vous avez invoqué l'intention {}", + "ERROR_MSG": "Désolé, je n'ai pas compris. Pouvez-vous reformuler ?", + "ERROR_TIMEZONE_MSG": "Je n'ai pas réussi à déterminer votre fuseau horaire. Veuillez vérifier les paramètres de votre appareil et réessayez." + + }, + "fr-CA": { + "WELCOME_MSG": "Bonjour! Bienvenue sur le Génie des Fêtes. Quelle est votre date de naissance ?", + "HAPPY_BIRTHDAY_MSG": "Bonne Fête! Aujourd'hui, vous avez {} an!", + "HAPPY_BIRTHDAY_MSG_plural": "Bonne Fête! Aujourd'hui, vous avez {} ans!", + "HELP_MSG": "Je peux me souvenir de votre date de naissance. Dites-moi votre jour, mois et année de naissance ou bien dites-moi simplement 'sauve ma fête' et je vous guiderai. Quel est votre choix ?" + + }, + "it": { + "WELCOME_MSG": "Ciao! Benvenuti a Buon Compleanno. Qual'è la tua data di nascita?", + "WELCOME_REPROMPT_MSG": "Io sono nata il 6 novembre 2014. E tu invece?", + "WELCOME_BACK_MSG": "Ciao di nuovo! Manca {} giorno a quando avrai {} anni.", + "WELCOME_BACK_MSG_plural": "Ciao di nuovo! Mancano {} giorni a quando avrai {} anni.", + "HAPPY_BIRTHDAY_MSG": "Buon compleanno! Oggi compi {} anno!", + "HAPPY_BIRTHDAY_MSG_plural": "Buon compleanno! Oggi compi {} anni!", + "REGISTER_BIRTHDAY_MSG": "Grazie, mi ricorderò la tua data di nascita: {} {} {}.", + "HELP_MSG": "Posso segnarmi la tua data di nascita. Dimmi pure la data oppure dimmi di ricordami il tuo compleanno. Cosa preferisci?", + "GOODBYE_MSG": "A presto!", + "REFLECTOR_MSG": "Hai invocato l'intento {}", + "ERROR_MSG": "Scusa, non ho capito. Puoi ripetere?", + "ERROR_TIMEZONE_MSG": "Non ho potuto determinare il tuo fuso orario. Verifica la configurazione del tuo dispositivo, e riprova." + + }, + "es": { + "WELCOME_MSG": "Hola! Bienvenidos a Feliz Cumpleaños. Cual es tu fecha de nacimiento?", + "WELCOME_REPROMPT_MSG": "Yo nací el 6 de noviembre 2014. Y tú?", + "WELCOME_BACK_MSG": "Hola otra vez! Falta {} día para que cumplas {} año.", + "WELCOME_BACK_MSG_plural": "Hola otra vez! Faltan {} días para que cumplas {} años.", + "HAPPY_BIRTHDAY_MSG": "Feliz Cumpleaños! Hoy cumples {} año!", + "HAPPY_BIRTHDAY_MSG_plural": "Feliz Cumpleaños! Hoy cumples {} años!", + "REGISTER_BIRTHDAY_MSG": "Gracias, me acordaré de tu fecha de nacimiento: {} {} {}.", + "HELP_MSG": "Puedo apuntarme tu fecha de nacimiento. Dime la fecha o dime de acordarme de tu cumpleaños. Qué prefieres?", + "GOODBYE_MSG": "Hasta luego!", + "REFLECTOR_MSG": "Has invocado {}", + "ERROR_MSG": "Perdona, no entendido. Puedes repetir?", + "ERROR_TIMEZONE_MSG": "No he potido determinar tu zona horaria. Verifica la configuración de tu dispositivo, y intenta otra vez." + + }, + "ja-JP": { + "WELCOME_MSG": "こんにちは、ケークウォークへようこそ。あなたの誕生日はいつですか?", + "WELCOME_REPROMPT_MSG": "私は2004年10月6日に生まれました。あなたの誕生日はいつですか?", + "WELCOME_BACK_MSG": "おかえりなさい。{}歳のお誕生日まで、あと{}日です。", + "WELCOME_BACK_MSG_plural": "おかえりなさい。{}歳のお誕生日まで、残り{}日です。", + "HAPPY_BIRTHDAY_MSG": "{}歳のお誕生日、おめでとうございます!", + "REGISTER_BIRTHDAY_MSG": "ありがとうございます。誕生日は {}年 {}月 {}日ですね?", + "HELP_MSG": "あなたの誕生日を言うと、その日付を記憶します。もしくは、「私の誕生日を登録して」と言うと、詳しくご案内します。どちらにしますか?", + "GOODBYE_MSG": "さようなら", + "REFLECTOR_MSG": "{}がトリガーされました。", + "ERROR_MSG": "ごめんなさい、うまく理解できませんでした。もう一度言ってみてください。", + "ERROR_TIMEZONE_MSG": "タイムゾーンを特定できませんでした。Alexaアプリでデバイスの設定を開き、タイムゾーンが正しく選択されていることを確認したあとで、もう一度試してください。" + + }, + "hi-IN": { + "WELCOME_MSG": "नमस्ते. Cake Walk में आपका स्वागत. आपका जनमदिन कब हैं?", + "WELCOME_REPROMPT_MSG": "मेरा जन्म 6 नवंबर, 2014 को हुआ था. आप कब पैदा हुए थे?", + "WELCOME_BACK_MSG": "वापसी पर स्वागत है. आपके {} वे जनमदिन तक {} दिन हैं", + "WELCOME_BACK_MSG_plural": "आपके {} वे जनमदिन तक {} दिन हैं", + "HAPPY_BIRTHDAY_MSG": "{} वां जन्मदिन मुबारक हो", + "REGISTER_BIRTHDAY_MSG": "शुक्रिया. मुझे याद होगा कि आप {} {} {} मैं पैदा हुए थेैं", + "HELP_MSG": "आप मुझे अपनी जन्मतिथि बता सकते हैं और मैं note कर लूंगा. आप यह भी कह सकते हैं, 'मेरा जन्मदिन register करें. आप कौन सा प्रयास करना चाहेंगे?", + "GOODBYE_MSG": "अलवादी ", + "REFLECTOR_MSG": "आपने {} trigger किया हैं ", + "ERROR_MSG": "Sorry, मैं वो समझ नहीं पायी. क्या आप दोहरा सकते हैं ", + "ERROR_TIMEZONE_MSG": "Sorry. मैं आपके समयक्षेत्र का निर्धारण नहीं कर सकता. आपकी Device Settings में timezone select कर दो और एक और बार skill खोलो" + } +} diff --git a/i18n/locales/data.pot b/i18n/locales/data.pot deleted file mode 100644 index c350609..0000000 --- a/i18n/locales/data.pot +++ /dev/null @@ -1,57 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2019-10-02 17:11-0400\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=cp1252\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" - - -#: alexa\data.py:3 -msgid "Hello! Welcome to Cake walk. What is your birthday?" -msgstr "" - -#: alexa\data.py:4 -msgid "I was born Nov. 6th, 2014. When were you born?" -msgstr "" - -#: alexa\data.py:5 -msgid "Welcome back. It looks like there is {} day until your {}th birthday." -msgstr "" - -#: alexa\data.py:7 -msgid "Welcome back. It looks like there are {} days until your {}th birthday" -msgstr "" - -#: alexa\data.py:9 -msgid "Happy {}th birthday!" -msgstr "" - -#: alexa\data.py:10 -msgid "Thanks, I'll remember that you were born {} {} {}" -msgstr "" - -#: alexa\data.py:11 -msgid "You can tell me your date of birth and I'll take note. You can also just say, 'register my birthday' and I will guide you. Which one would you like to try?" -msgstr "" - -#: alexa\data.py:12 -msgid "Goodbye!" -msgstr "" - -#: alexa\data.py:13 -msgid "Sorry, I couldn't understand what you said. Can you reformulate?" -msgstr "" - -#: alexa\data.py:15 -msgid "I can't determine your timezone. Please check your device settings and make sure a timezone was selected. After that please reopen the skill and try again!" -msgstr "" - diff --git a/i18n/locales/en-US/LC_MESSAGES/data.mo b/i18n/locales/en-US/LC_MESSAGES/data.mo deleted file mode 100644 index 0d2f2da..0000000 Binary files a/i18n/locales/en-US/LC_MESSAGES/data.mo and /dev/null differ diff --git a/i18n/locales/en-US/LC_MESSAGES/data.po b/i18n/locales/en-US/LC_MESSAGES/data.po deleted file mode 100644 index 80297ce..0000000 --- a/i18n/locales/en-US/LC_MESSAGES/data.po +++ /dev/null @@ -1,64 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2019-10-02 17:11-0400\n" -"PO-Revision-Date: 2019-10-02 17:19-0400\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.2.4\n" -"Last-Translator: \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: en_US\n" - -#: alexa\data.py:3 -msgid "Hello! Welcome to Cake walk. What is your birthday?" -msgstr "" - -#: alexa\data.py:4 -msgid "I was born Nov. 6th, 2014. When were you born?" -msgstr "" - -#: alexa\data.py:5 -msgid "Welcome back. It looks like there is {} day until your {}th birthday." -msgstr "" - -#: alexa\data.py:7 -msgid "Welcome back. It looks like there are {} days until your {}th birthday" -msgstr "" - -#: alexa\data.py:9 -msgid "Happy {}th birthday!" -msgstr "" - -#: alexa\data.py:10 -msgid "Thanks, I'll remember that you were born {} {} {}" -msgstr "" - -#: alexa\data.py:11 -msgid "" -"You can tell me your date of birth and I'll take note. You can also just " -"say, 'register my birthday' and I will guide you. Which one would you like " -"to try?" -msgstr "" - -#: alexa\data.py:12 -msgid "Goodbye!" -msgstr "" - -#: alexa\data.py:13 -msgid "Sorry, I couldn't understand what you said. Can you reformulate?" -msgstr "" - -#: alexa\data.py:15 -msgid "" -"I can't determine your timezone. Please check your device settings and make " -"sure a timezone was selected. After that please reopen the skill and try " -"again!" -msgstr "" diff --git a/i18n/locales/fr-CA/LC_MESSAGES/data.mo b/i18n/locales/fr-CA/LC_MESSAGES/data.mo deleted file mode 100644 index a31b6cf..0000000 Binary files a/i18n/locales/fr-CA/LC_MESSAGES/data.mo and /dev/null differ diff --git a/i18n/locales/fr-CA/LC_MESSAGES/data.po b/i18n/locales/fr-CA/LC_MESSAGES/data.po deleted file mode 100644 index 18509ea..0000000 --- a/i18n/locales/fr-CA/LC_MESSAGES/data.po +++ /dev/null @@ -1,71 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2019-10-02 17:11-0400\n" -"PO-Revision-Date: 2019-10-02 17:45-0400\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.2.4\n" -"Last-Translator: \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: fr_CA\n" - -#: alexa\data.py:3 -msgid "Hello! Welcome to Cake walk. What is your birthday?" -msgstr "" -"Bonjour! Bienvenue sur le Génie des Fêtes. Quelle est votre date de " -"naissance ?" - -#: alexa\data.py:4 -msgid "I was born Nov. 6th, 2014. When were you born?" -msgstr "Je suis née le 6 novembre 2014. Et vous, quand êtes-vous né ?" - -#: alexa\data.py:5 -msgid "Welcome back. It looks like there is {} day until your {}th birthday." -msgstr "Content de vous revoir! Il vous reste {} jour avant d'avoir {} ans." - -#: alexa\data.py:7 -msgid "Welcome back. It looks like there are {} days until your {}th birthday" -msgstr "Content de vous revoir! Il vous reste {} jours avant d'avoir {} ans." - -#: alexa\data.py:9 -msgid "Happy {}th birthday!" -msgstr "Bonne Fête! Aujourd'hui, vous avez {} an!" - -#: alexa\data.py:10 -msgid "Thanks, I'll remember that you were born {} {} {}" -msgstr "Merci, je vais me rappeler que vous êtes né le {} {} {}." - -#: alexa\data.py:11 -msgid "" -"You can tell me your date of birth and I'll take note. You can also just " -"say, 'register my birthday' and I will guide you. Which one would you like " -"to try?" -msgstr "" -"Je peux me souvenir de votre date de naissance. Dites-moi votre jour, mois " -"et année de naissance ou bien dites-moi simplement \"sauve ma fête\" et je " -"vous guiderai. Quel est votre choix ?" - -#: alexa\data.py:12 -msgid "Goodbye!" -msgstr "Au revoir!" - -#: alexa\data.py:13 -msgid "Sorry, I couldn't understand what you said. Can you reformulate?" -msgstr "Désolé, je n'ai pas compris. Pouvez-vous reformuler ?" - -#: alexa\data.py:15 -msgid "" -"I can't determine your timezone. Please check your device settings and make " -"sure a timezone was selected. After that please reopen the skill and try " -"again!" -msgstr "" -"Je n'ai pas réussi à déterminer votre fuseau horaire. Veuillez vérifier les " -"paramètres de votre appareil et réessayez." diff --git a/i18n/locales/fr-FR/LC_MESSAGES/data.mo b/i18n/locales/fr-FR/LC_MESSAGES/data.mo deleted file mode 100644 index 7a2ce59..0000000 Binary files a/i18n/locales/fr-FR/LC_MESSAGES/data.mo and /dev/null differ diff --git a/i18n/locales/fr-FR/LC_MESSAGES/data.po b/i18n/locales/fr-FR/LC_MESSAGES/data.po deleted file mode 100644 index f69c3e8..0000000 --- a/i18n/locales/fr-FR/LC_MESSAGES/data.po +++ /dev/null @@ -1,73 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2019-10-02 17:11-0400\n" -"PO-Revision-Date: 2019-10-02 18:18-0400\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.2.4\n" -"Last-Translator: \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: fr_FR\n" - -#: alexa\data.py:3 -msgid "Hello! Welcome to Cake walk. What is your birthday?" -msgstr "" -"Bonjour! Bienvenue sur le Génie des Anniversaires. Quelle est votre date de " -"naissance ?" - -#: alexa\data.py:4 -msgid "I was born Nov. 6th, 2014. When were you born?" -msgstr "" -"Bonjour! Bienvenue sur le Génie des Anniversaires. Quelle est votre date de " -"naissance ?" - -#: alexa\data.py:5 -msgid "Welcome back. It looks like there is {} day until your {}th birthday." -msgstr "Content de vous revoir! Il vous reste {} jour avant d'avoir {} ans." - -#: alexa\data.py:7 -msgid "Welcome back. It looks like there are {} days until your {}th birthday" -msgstr "Content de vous revoir! Il vous reste {} jours avant d'avoir {} ans." - -#: alexa\data.py:9 -msgid "Happy {}th birthday!" -msgstr "Joyeux Anniversaire! Aujourd'hui, vous avez {} an!" - -#: alexa\data.py:10 -msgid "Thanks, I'll remember that you were born {} {} {}" -msgstr "Merci, je vais me rappeler que vous êtes né le {} {} {}." - -#: alexa\data.py:11 -msgid "" -"You can tell me your date of birth and I'll take note. You can also just " -"say, 'register my birthday' and I will guide you. Which one would you like " -"to try?" -msgstr "" -"Je peux me souvenir de votre date de naissance. Dites-moi votre jour, mois " -"et année de naissance ou bien dites-moi simplement \"enregistre mon " -"anniversaire\" et je vous guiderai. Quel est votre choix ?" - -#: alexa\data.py:12 -msgid "Goodbye!" -msgstr "Au revoir!" - -#: alexa\data.py:13 -msgid "Sorry, I couldn't understand what you said. Can you reformulate?" -msgstr "Désolé, je n'ai pas compris. Pouvez-vous reformuler ?" - -#: alexa\data.py:15 -msgid "" -"I can't determine your timezone. Please check your device settings and make " -"sure a timezone was selected. After that please reopen the skill and try " -"again!" -msgstr "" -"Je n'ai pas réussi à déterminer votre fuseau horaire. Veuillez vérifier les " -"paramètres de votre appareil et réessayez." diff --git a/i18n/locales/hi-IN/LC_MESSAGES/data.mo b/i18n/locales/hi-IN/LC_MESSAGES/data.mo deleted file mode 100644 index 58caa80..0000000 Binary files a/i18n/locales/hi-IN/LC_MESSAGES/data.mo and /dev/null differ diff --git a/i18n/locales/hi-IN/LC_MESSAGES/data.po b/i18n/locales/hi-IN/LC_MESSAGES/data.po deleted file mode 100644 index d381a2e..0000000 --- a/i18n/locales/hi-IN/LC_MESSAGES/data.po +++ /dev/null @@ -1,68 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2019-10-02 17:11-0400\n" -"PO-Revision-Date: 2019-10-24 10:57-0400\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.2.4\n" -"Last-Translator: \n" -"Plural-Forms: nplurals=2; plural=(n==0 || n==1);\n" -"Language: hi_IN\n" - -#: alexa\data.py:3 -msgid "Hello! Welcome to Cake walk. What is your birthday?" -msgstr "नमस्ते. Cake Walk में आपका स्वागत. आपका जनमदिन कब हैं?" - -#: alexa\data.py:4 -msgid "I was born Nov. 6th, 2014. When were you born?" -msgstr "मेरा जन्म 6 नवंबर, 2014 को हुआ था. आप कब पैदा हुए थे?" - -#: alexa\data.py:5 -msgid "Welcome back. It looks like there is {} day until your {}th birthday." -msgstr "वापसी पर स्वागत है. आपके {} वे जनमदिन तक {} दिन हैं`" - -#: alexa\data.py:7 -msgid "Welcome back. It looks like there are {} days until your {}th birthday" -msgstr "आपके {} वे जनमदिन तक {} दिन हैं" - -#: alexa\data.py:9 -msgid "Happy {}th birthday!" -msgstr "{} वां जन्मदिन मुबारक हो" - -#: alexa\data.py:10 -msgid "Thanks, I'll remember that you were born {} {} {}" -msgstr "शुक्रिया. मुझे याद होगा कि आप {} {} {} मैं पैदा हुए थेैं" - -#: alexa\data.py:11 -msgid "" -"You can tell me your date of birth and I'll take note. You can also just " -"say, 'register my birthday' and I will guide you. Which one would you like " -"to try?" -msgstr "" -"आप मुझे अपनी जन्मतिथि बता सकते हैं और मैं note कर लूंगा. आप यह भी कह सकते हैं, \"मेरा " -"जन्मदिन register करें. आप कौन सा प्रयास करना चाहेंगे?" - -#: alexa\data.py:12 -msgid "Goodbye!" -msgstr "अलवादी" - -#: alexa\data.py:13 -msgid "Sorry, I couldn't understand what you said. Can you reformulate?" -msgstr "Sorry, मैं वो समझ नहीं पायी. क्या आप दोहरा सकते हैं " - -#: alexa\data.py:15 -msgid "" -"I can't determine your timezone. Please check your device settings and make " -"sure a timezone was selected. After that please reopen the skill and try " -"again!" -msgstr "" -"Sorry. मैं आपके समयक्षेत्र का निर्धारण नहीं कर सकता. आपकी Device Settings में " -"timezone select कर दो और एक और बार skill खोलो." diff --git a/i18n/locales/it-IT/LC_MESSAGES/data.mo b/i18n/locales/it-IT/LC_MESSAGES/data.mo deleted file mode 100644 index 5cbbc20..0000000 Binary files a/i18n/locales/it-IT/LC_MESSAGES/data.mo and /dev/null differ diff --git a/i18n/locales/it-IT/LC_MESSAGES/data.po b/i18n/locales/it-IT/LC_MESSAGES/data.po deleted file mode 100644 index 40f2f63..0000000 --- a/i18n/locales/it-IT/LC_MESSAGES/data.po +++ /dev/null @@ -1,68 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2019-10-02 17:11-0400\n" -"PO-Revision-Date: 2019-10-24 10:55-0400\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.2.4\n" -"Last-Translator: \n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"Language: it_IT\n" - -#: alexa\data.py:3 -msgid "Hello! Welcome to Cake walk. What is your birthday?" -msgstr "Ciao! Benvenuti a Buon Compleanno. Qual'è la tua data di nascita?" - -#: alexa\data.py:4 -msgid "I was born Nov. 6th, 2014. When were you born?" -msgstr "Io sono nata il 6 novembre 2014. E tu invece?" - -#: alexa\data.py:5 -msgid "Welcome back. It looks like there is {} day until your {}th birthday." -msgstr "Ciao di nuovo! Manca {} giorno a quando avrai {} anni." - -#: alexa\data.py:7 -msgid "Welcome back. It looks like there are {} days until your {}th birthday" -msgstr "Ciao di nuovo! Mancano {} giorni a quando avrai {} anni." - -#: alexa\data.py:9 -msgid "Happy {}th birthday!" -msgstr "Buon compleanno! Oggi compi {} anno!" - -#: alexa\data.py:10 -msgid "Thanks, I'll remember that you were born {} {} {}" -msgstr "Grazie, mi ricorderò la tua data di nascita: {} {} {}." - -#: alexa\data.py:11 -msgid "" -"You can tell me your date of birth and I'll take note. You can also just " -"say, 'register my birthday' and I will guide you. Which one would you like " -"to try?" -msgstr "" -"Posso segnarmi la tua data di nascita. Dimmi pure la data oppure dimmi di " -"ricordami il tuo compleanno. Cosa preferisci?" - -#: alexa\data.py:12 -msgid "Goodbye!" -msgstr "A presto!" - -#: alexa\data.py:13 -msgid "Sorry, I couldn't understand what you said. Can you reformulate?" -msgstr "Scusa, non ho capito. Puoi ripetere?" - -#: alexa\data.py:15 -msgid "" -"I can't determine your timezone. Please check your device settings and make " -"sure a timezone was selected. After that please reopen the skill and try " -"again!" -msgstr "" -"Non ho potuto determinare il tuo fuso orario. Verifica la configurazione " -"del tuo dispositivo, e riprova." diff --git a/i18n/locales/ja-JP/LC_MESSAGES/data.mo b/i18n/locales/ja-JP/LC_MESSAGES/data.mo deleted file mode 100644 index 73cf083..0000000 Binary files a/i18n/locales/ja-JP/LC_MESSAGES/data.mo and /dev/null differ diff --git a/i18n/locales/ja-JP/LC_MESSAGES/data.po b/i18n/locales/ja-JP/LC_MESSAGES/data.po deleted file mode 100644 index 805f19c..0000000 --- a/i18n/locales/ja-JP/LC_MESSAGES/data.po +++ /dev/null @@ -1,69 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR ORGANIZATION -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: \n" -"POT-Creation-Date: 2019-10-02 17:11-0400\n" -"PO-Revision-Date: 2019-10-24 10:53-0400\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" -"X-Generator: Poedit 2.2.4\n" -"Last-Translator: \n" -"Plural-Forms: nplurals=1; plural=0;\n" -"Language: ja_JP\n" - -#: alexa\data.py:3 -msgid "Hello! Welcome to Cake walk. What is your birthday?" -msgstr "こんにちは、ケークウォークへようこそ。あなたの誕生日はいつですか?" - -#: alexa\data.py:4 -msgid "I was born Nov. 6th, 2014. When were you born?" -msgstr "私は2004年10月6日に生まれました。あなたの誕生日はいつですか?" - -#: alexa\data.py:5 -msgid "Welcome back. It looks like there is {} day until your {}th birthday." -msgstr "おかえりなさい。{}歳のお誕生日まで、あと{{count}}日です。" - -#: alexa\data.py:7 -msgid "Welcome back. It looks like there are {} days until your {}th birthday" -msgstr "おかえりなさい。{}歳のお誕生日まで、残り{}日です。" - -#: alexa\data.py:9 -msgid "Happy {}th birthday!" -msgstr "{}歳のお誕生日、おめでとうございます!" - -#: alexa\data.py:10 -msgid "Thanks, I'll remember that you were born {} {} {}" -msgstr "ありがとうございます。誕生日は {}年 {}月 {}日ですね?" - -#: alexa\data.py:11 -msgid "" -"You can tell me your date of birth and I'll take note. You can also just " -"say, 'register my birthday' and I will guide you. Which one would you like " -"to try?" -msgstr "" -"あなたの誕生日を言うと、その日付を記憶します。もしくは、「私の誕生日を登録し" -"て」と言うと、詳しくご案内します。どちらにしますか?" - -#: alexa\data.py:12 -msgid "Goodbye!" -msgstr "さようなら" - -#: alexa\data.py:13 -msgid "Sorry, I couldn't understand what you said. Can you reformulate?" -msgstr "" -"ごめんなさい、うまく理解できませんでした。もう一度言ってみてください。" - -#: alexa\data.py:15 -msgid "" -"I can't determine your timezone. Please check your device settings and make " -"sure a timezone was selected. After that please reopen the skill and try " -"again!" -msgstr "" -"タイムゾーンを特定できませんでした。Alexaアプリでデバイスの設定を開き、タイ" -"ムゾーンが正しく選択されていることを確認したあとで、もう一度試してください。" diff --git a/i18n/models/de-DE.json b/i18n/models/de-DE.json new file mode 100644 index 0000000..e732bd6 --- /dev/null +++ b/i18n/models/de-DE.json @@ -0,0 +1,125 @@ +{ + "interactionModel": { + "languageModel": { + "invocationName": "herzlichen glückwunsch", + "intents": [ + { + "name": "AMAZON.CancelIntent", + "samples": [] + }, + { + "name": "AMAZON.HelpIntent", + "samples": [] + }, + { + "name": "AMAZON.StopIntent", + "samples": [] + }, + { + "name": "AMAZON.NavigateHomeIntent", + "samples": [] + }, + { + "name": "CaptureBirthdayIntent", + "slots": [ + { + "name": "month", + "type": "AMAZON.Month" + }, + { + "name": "day", + "type": "AMAZON.Ordinal" + }, + { + "name": "year", + "type": "AMAZON.FOUR_DIGIT_NUMBER" + } + ], + "samples": [ + "{day} {month}", + "{day} {month} {year}", + "{month} {year}", + "Ich bin am {day} {month} geboren", + "Ich bin am {day} {month} {year} geboren", + "Ich bin am {month} {year} geboren", + "merke dir meinen Geburtstag" + ] + } + ], + "types": [] + }, + "dialog": { + "intents": [ + { + "name": "CaptureBirthdayIntent", + "confirmationRequired": false, + "prompts": {}, + "slots": [ + { + "name": "month", + "type": "AMAZON.Month", + "elicitationRequired": true, + "confirmationRequired": false, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.795077103633" + } + }, + { + "name": "day", + "type": "AMAZON.Ordinal", + "elicitationRequired": true, + "confirmationRequired": false, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.985837334781" + } + }, + { + "name": "year", + "type": "AMAZON.FOUR_DIGIT_NUMBER", + "elicitationRequired": true, + "confirmationRequired": false, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.27341833344" + } + } + ] + } + ], + "delegationStrategy": "ALWAYS" + }, + "prompts": [ + { + "id": "Elicit.Slot.303899476312.795077103633", + "variations": [ + { + "type": "PlainText", + "value": "Ich wurde im November geboren. In welchem Monat wurdest du geboren?" + }, + { + "type": "PlainText", + "value": "In welchem Monat wurdest du geboren?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.985837334781", + "variations": [ + { + "type": "PlainText", + "value": "Ich wurde am sechsten geboren. An welchem Tag wurdest du geboren?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.27341833344", + "variations": [ + { + "type": "PlainText", + "value": "Ich wurde im Jahr zweitausendvierzehn geboren. In welchem Jahr wurdest du geboren?" + } + ] + } + ] + }, + "version": "2" + } \ No newline at end of file diff --git a/i18n/models/en-CA.json b/i18n/models/en-CA.json new file mode 100644 index 0000000..5a0b593 --- /dev/null +++ b/i18n/models/en-CA.json @@ -0,0 +1,124 @@ +{ + "interactionModel": { + "languageModel": { + "invocationName": "cake walk", + "intents": [ + { + "name": "AMAZON.CancelIntent", + "samples": [] + }, + { + "name": "AMAZON.HelpIntent", + "samples": [] + }, + { + "name": "AMAZON.StopIntent", + "samples": [] + }, + { + "name": "AMAZON.NavigateHomeIntent", + "samples": [] + }, + { + "name": "CaptureBirthdayIntent", + "slots": [ + { + "name": "month", + "type": "AMAZON.Month" + }, + { + "name": "day", + "type": "AMAZON.Ordinal" + }, + { + "name": "year", + "type": "AMAZON.FOUR_DIGIT_NUMBER" + } + ], + "samples": [ + "{month} {day}", + "{month} {day} {year}", + "{month} {year}", + "I was born on {month} {day} ", + "I was born on {month} {day} {year}", + "I was born on {month} {year}", + "register my birthday" + ] + } + ], + "types": [] + }, + "dialog": { + "intents": [ + { + "name": "CaptureBirthdayIntent", + "confirmationRequired": false, + "prompts": {}, + "slots": [ + { + "name": "month", + "type": "AMAZON.Month", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.795077103633" + } + }, + { + "name": "day", + "type": "AMAZON.Ordinal", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.985837334781" + } + }, + { + "name": "year", + "type": "AMAZON.FOUR_DIGIT_NUMBER", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.27341833344" + } + } + ] + } + ], + "delegationStrategy": "ALWAYS" + }, + "prompts": [ + { + "id": "Elicit.Slot.303899476312.795077103633", + "variations": [ + { + "type": "PlainText", + "value": "I was born in November. What month were you born?" + }, + { + "type": "PlainText", + "value": "What month were you born?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.985837334781", + "variations": [ + { + "type": "PlainText", + "value": "I was born on the sixth. What day were you born?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.27341833344", + "variations": [ + { + "type": "PlainText", + "value": "I was born in two thousand fourteen, what year were you born?" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/i18n/models/en-GB.json b/i18n/models/en-GB.json new file mode 100644 index 0000000..245304d --- /dev/null +++ b/i18n/models/en-GB.json @@ -0,0 +1,124 @@ +{ + "interactionModel": { + "languageModel": { + "invocationName": "cake walk", + "intents": [ + { + "name": "AMAZON.CancelIntent", + "samples": [] + }, + { + "name": "AMAZON.HelpIntent", + "samples": [] + }, + { + "name": "AMAZON.StopIntent", + "samples": [] + }, + { + "name": "AMAZON.NavigateHomeIntent", + "samples": [] + }, + { + "name": "CaptureBirthdayIntent", + "slots": [ + { + "name": "month", + "type": "AMAZON.Month" + }, + { + "name": "day", + "type": "AMAZON.Ordinal" + }, + { + "name": "year", + "type": "AMAZON.FOUR_DIGIT_NUMBER" + } + ], + "samples": [ + "{month} {day}", + "{month} {day} {year}", + "{month} {year}", + "I was born on {month} {day} ", + "I was born on {month} {day} {year}", + "I was born on {month} {year}", + "register my birthday" + ] + } + ], + "types": [] + }, + "dialog": { + "intents": [ + { + "name": "CaptureBirthdayIntent", + "confirmationRequired": false, + "prompts": {}, + "slots": [ + { + "name": "month", + "type": "AMAZON.Month", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.795077103633" + } + }, + { + "name": "day", + "type": "AMAZON.Ordinal", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.985837334781" + } + }, + { + "name": "year", + "type": "AMAZON.FOUR_DIGIT_NUMBER", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.27341833344" + } + } + ] + } + ], + "delegationStrategy": "ALWAYS" + }, + "prompts": [ + { + "id": "Elicit.Slot.303899476312.795077103633", + "variations": [ + { + "type": "PlainText", + "value": "I was born in November. What month were you born?" + }, + { + "type": "PlainText", + "value": "What month were you born?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.985837334781", + "variations": [ + { + "type": "PlainText", + "value": "I was born on the sixth. What day were you born?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.27341833344", + "variations": [ + { + "type": "PlainText", + "value": "I was born in two thousand fourteen, what year were you born?" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/i18n/models/es-ES.json b/i18n/models/es-ES.json new file mode 100644 index 0000000..b86c272 --- /dev/null +++ b/i18n/models/es-ES.json @@ -0,0 +1,136 @@ +{ + "interactionModel": { + "languageModel": { + "invocationName": "feliz cumpleaños", + "intents": [ + { + "name": "AMAZON.CancelIntent", + "samples": [] + }, + { + "name": "AMAZON.HelpIntent", + "samples": [] + }, + { + "name": "AMAZON.StopIntent", + "samples": [] + }, + { + "name": "AMAZON.NavigateHomeIntent", + "samples": [] + }, + { + "name": "CaptureBirthdayIntent", + "slots": [ + { + "name": "month", + "type": "AMAZON.Month" + }, + { + "name": "day", + "type": "AMAZON.NUMBER" + }, + { + "name": "year", + "type": "AMAZON.NUMBER" + } + ], + "samples": [ + "{month} del {year}", + "{day} de {month}", + "el año {year}", + "en {year}", + "nací en {year}", + "nací en {year}", + "el {day} de {month}", + "el día {day} de {month}", + "mi fecha de nacimiento es el {day} de {month} de {year}", + "mi fecha de nacimiento es el {day} de {month} {year}", + "nací el {day} de {month} {year}", + "mi cumpleaños es el {day} de {month} {year}", + "registra mi cumpleaños", + "apunta mi cumpleaños", + "apunta mi fecha de nacimiento", + "registra mi fecha de nacimiento", + "recuerda mi cumpleaños", + "acuérdate de mi cumpleaños", + "apúntate mi cumple" + ] + } + ], + "types": [] + }, + "dialog": { + "intents": [ + { + "name": "CaptureBirthdayIntent", + "confirmationRequired": false, + "prompts": {}, + "slots": [ + { + "name": "month", + "type": "AMAZON.Month", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.795077103633" + } + }, + { + "name": "day", + "type": "AMAZON.NUMBER", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.985837334781" + } + }, + { + "name": "year", + "type": "AMAZON.NUMBER", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.27341833344" + } + } + ] + } + ], + "delegationStrategy": "ALWAYS" + }, + "prompts": [ + { + "id": "Elicit.Slot.303899476312.795077103633", + "variations": [ + { + "type": "PlainText", + "value": "Yo nací en noviembre. Y tú?" + }, + { + "type": "PlainText", + "value": "Cual es tu mes de nacimiento?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.985837334781", + "variations": [ + { + "type": "PlainText", + "value": "Nací el 6. Qué día del mes es tu cumpleaños?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.27341833344", + "variations": [ + { + "type": "PlainText", + "value": "Nací en dos mil catorce, y tú en qué año?" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/i18n/models/es-MX.json b/i18n/models/es-MX.json new file mode 100644 index 0000000..b86c272 --- /dev/null +++ b/i18n/models/es-MX.json @@ -0,0 +1,136 @@ +{ + "interactionModel": { + "languageModel": { + "invocationName": "feliz cumpleaños", + "intents": [ + { + "name": "AMAZON.CancelIntent", + "samples": [] + }, + { + "name": "AMAZON.HelpIntent", + "samples": [] + }, + { + "name": "AMAZON.StopIntent", + "samples": [] + }, + { + "name": "AMAZON.NavigateHomeIntent", + "samples": [] + }, + { + "name": "CaptureBirthdayIntent", + "slots": [ + { + "name": "month", + "type": "AMAZON.Month" + }, + { + "name": "day", + "type": "AMAZON.NUMBER" + }, + { + "name": "year", + "type": "AMAZON.NUMBER" + } + ], + "samples": [ + "{month} del {year}", + "{day} de {month}", + "el año {year}", + "en {year}", + "nací en {year}", + "nací en {year}", + "el {day} de {month}", + "el día {day} de {month}", + "mi fecha de nacimiento es el {day} de {month} de {year}", + "mi fecha de nacimiento es el {day} de {month} {year}", + "nací el {day} de {month} {year}", + "mi cumpleaños es el {day} de {month} {year}", + "registra mi cumpleaños", + "apunta mi cumpleaños", + "apunta mi fecha de nacimiento", + "registra mi fecha de nacimiento", + "recuerda mi cumpleaños", + "acuérdate de mi cumpleaños", + "apúntate mi cumple" + ] + } + ], + "types": [] + }, + "dialog": { + "intents": [ + { + "name": "CaptureBirthdayIntent", + "confirmationRequired": false, + "prompts": {}, + "slots": [ + { + "name": "month", + "type": "AMAZON.Month", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.795077103633" + } + }, + { + "name": "day", + "type": "AMAZON.NUMBER", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.985837334781" + } + }, + { + "name": "year", + "type": "AMAZON.NUMBER", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.27341833344" + } + } + ] + } + ], + "delegationStrategy": "ALWAYS" + }, + "prompts": [ + { + "id": "Elicit.Slot.303899476312.795077103633", + "variations": [ + { + "type": "PlainText", + "value": "Yo nací en noviembre. Y tú?" + }, + { + "type": "PlainText", + "value": "Cual es tu mes de nacimiento?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.985837334781", + "variations": [ + { + "type": "PlainText", + "value": "Nací el 6. Qué día del mes es tu cumpleaños?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.27341833344", + "variations": [ + { + "type": "PlainText", + "value": "Nací en dos mil catorce, y tú en qué año?" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/i18n/models/es-US.json b/i18n/models/es-US.json new file mode 100644 index 0000000..b86c272 --- /dev/null +++ b/i18n/models/es-US.json @@ -0,0 +1,136 @@ +{ + "interactionModel": { + "languageModel": { + "invocationName": "feliz cumpleaños", + "intents": [ + { + "name": "AMAZON.CancelIntent", + "samples": [] + }, + { + "name": "AMAZON.HelpIntent", + "samples": [] + }, + { + "name": "AMAZON.StopIntent", + "samples": [] + }, + { + "name": "AMAZON.NavigateHomeIntent", + "samples": [] + }, + { + "name": "CaptureBirthdayIntent", + "slots": [ + { + "name": "month", + "type": "AMAZON.Month" + }, + { + "name": "day", + "type": "AMAZON.NUMBER" + }, + { + "name": "year", + "type": "AMAZON.NUMBER" + } + ], + "samples": [ + "{month} del {year}", + "{day} de {month}", + "el año {year}", + "en {year}", + "nací en {year}", + "nací en {year}", + "el {day} de {month}", + "el día {day} de {month}", + "mi fecha de nacimiento es el {day} de {month} de {year}", + "mi fecha de nacimiento es el {day} de {month} {year}", + "nací el {day} de {month} {year}", + "mi cumpleaños es el {day} de {month} {year}", + "registra mi cumpleaños", + "apunta mi cumpleaños", + "apunta mi fecha de nacimiento", + "registra mi fecha de nacimiento", + "recuerda mi cumpleaños", + "acuérdate de mi cumpleaños", + "apúntate mi cumple" + ] + } + ], + "types": [] + }, + "dialog": { + "intents": [ + { + "name": "CaptureBirthdayIntent", + "confirmationRequired": false, + "prompts": {}, + "slots": [ + { + "name": "month", + "type": "AMAZON.Month", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.795077103633" + } + }, + { + "name": "day", + "type": "AMAZON.NUMBER", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.985837334781" + } + }, + { + "name": "year", + "type": "AMAZON.NUMBER", + "confirmationRequired": false, + "elicitationRequired": true, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.27341833344" + } + } + ] + } + ], + "delegationStrategy": "ALWAYS" + }, + "prompts": [ + { + "id": "Elicit.Slot.303899476312.795077103633", + "variations": [ + { + "type": "PlainText", + "value": "Yo nací en noviembre. Y tú?" + }, + { + "type": "PlainText", + "value": "Cual es tu mes de nacimiento?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.985837334781", + "variations": [ + { + "type": "PlainText", + "value": "Nací el 6. Qué día del mes es tu cumpleaños?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.27341833344", + "variations": [ + { + "type": "PlainText", + "value": "Nací en dos mil catorce, y tú en qué año?" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/i18n/models/pt-BR.json b/i18n/models/pt-BR.json new file mode 100644 index 0000000..53da622 --- /dev/null +++ b/i18n/models/pt-BR.json @@ -0,0 +1,128 @@ +{ + "interactionModel": { + "languageModel": { + "invocationName": "feliz aniversário", + "intents": [ + { + "name": "AMAZON.CancelIntent", + "samples": [] + }, + { + "name": "AMAZON.HelpIntent", + "samples": [] + }, + { + "name": "AMAZON.StopIntent", + "samples": [] + }, + { + "name": "AMAZON.NavigateHomeIntent", + "samples": [] + }, + { + "name": "CaptureBirthdayIntent", + "slots": [ + { + "name": "month", + "type": "AMAZON.Month" + }, + { + "name": "day", + "type": "AMAZON.NUMBER" + }, + { + "name": "year", + "type": "AMAZON.FOUR_DIGIT_NUMBER" + } + ], + "samples": [ + "dia {day} de {month} de {year}", + "{day} de {month} de {year}", + "{day} de {month}", + "Eu nasci em {day} de {month}", + "Eu nasci em {day} de {month} de {year}", + "Eu nasci em {month} de {year}", + "Eu nasci no dia {day}", + "Eu nasci no dia {day} de {month}", + "Eu nasci no dia {day} de {month} de {year}", + "anote meu aniversário" + ] + } + ], + "types": [] + }, + "dialog": { + "intents": [ + { + "name": "CaptureBirthdayIntent", + "confirmationRequired": false, + "prompts": {}, + "slots": [ + { + "name": "month", + "type": "AMAZON.Month", + "elicitationRequired": true, + "confirmationRequired": false, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.795077103633" + } + }, + { + "name": "day", + "type": "AMAZON.NUMBER", + "elicitationRequired": true, + "confirmationRequired": false, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.985837334781" + } + }, + { + "name": "year", + "type": "AMAZON.FOUR_DIGIT_NUMBER", + "elicitationRequired": true, + "confirmationRequired": false, + "prompts": { + "elicitation": "Elicit.Slot.303899476312.27341833344" + } + } + ] + } + ], + "delegationStrategy": "ALWAYS" + }, + "prompts": [ + { + "id": "Elicit.Slot.303899476312.795077103633", + "variations": [ + { + "type": "PlainText", + "value": "Eu nasci em Novembro. Em que mês você nasceu?" + }, + { + "type": "PlainText", + "value": "Qual o mês do seu nascimento?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.985837334781", + "variations": [ + { + "type": "PlainText", + "value": "Eu nasci no dia seis. Qual o dia do seu nascimento?" + } + ] + }, + { + "id": "Elicit.Slot.303899476312.27341833344", + "variations": [ + { + "type": "PlainText", + "value": "Eu nasci em dois mil e catorze, em que ano você nasceu?" + } + ] + } + ] + }, + "version": "4" + } \ No newline at end of file diff --git a/i18n/prompts.py b/i18n/prompts.py new file mode 100644 index 0000000..1e69284 --- /dev/null +++ b/i18n/prompts.py @@ -0,0 +1,14 @@ +# Alexa Prompts Language Constants + +WELCOME_MSG = "WELCOME_MSG" +WELCOME_REPROMPT_MSG = "WELCOME_REPROMPT_MSG" +WELCOME_BACK_MSG = "WELCOME_BACK_MSG" +WELCOME_BACK_MSG_plural = "WELCOME_BACK_MSG_plural" +HAPPY_BIRTHDAY_MSG = "HAPPY_BIRTHDAY_MSG" +HAPPY_BIRTHDAY_MSG_plural = "HAPPY_BIRTHDAY_MSG_plural" +REGISTER_BIRTHDAY_MSG = "REGISTER_BIRTHDAY_MSG" +HELP_MSG = "HELP_MSG" +GOODBYE_MSG = "GOODBYE_MSG" +REFLECTOR_MSG = "REFLECTOR_MSG" +ERROR_MSG = "ERROR_MSG" +ERROR_TIMEZONE_MSG = "ERROR_TIMEZONE_MSG" \ No newline at end of file diff --git a/i18n/skill.json b/i18n/skill.json index 6082ac6..dc10556 100644 --- a/i18n/skill.json +++ b/i18n/skill.json @@ -3,27 +3,51 @@ "publishingInformation": { "locales": { "en-US": { - "name": "Cake Walk" + "name": "cake walk" + }, + "en-AU": { + "name": "cake walk" + }, + "en-CA": { + "name": "cake walk" + }, + "en-GB": { + "name": "cake walk" + }, + "en-IN": { + "name": "cake walk" + }, + "pt-BR": { + "name": "feliz aniversário" + }, + "it-IT": { + "name": "buon compleanno" }, "fr-FR": { "name": "Joyeux Anniversaire" - }, + }, "fr-CA": { "name": "Bonne Fête" }, - "it-IT": { - "name": "Buon Compleanno" + "hi-IN": { + "name": "cake walk" }, "ja-JP": { "name": "ケークウォーク" }, - "en-IN": { - "name": "cake walk" + "de-DE": { + "name": "Herzlichen Glückwunsch" }, - "hi-IN": { - "name": "cake walk" + "es-ES": { + "name": "feliz cumpleaños" + }, + "es-MX": { + "name": "feliz cumpleaños" + }, + "es-US": { + "name": "feliz cumpleaños" } - }, + }, "isAvailableWorldwide": true, "testingInstructions": "Sample Testing Instructions.", "category": "EDUCATION_AND_REFERENCE",