From 5b2bafe5ee8e425c5e3983e32429db66827d8105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sch=C3=A4fer?= Date: Thu, 2 May 2019 23:50:16 +0200 Subject: [PATCH] add german translation --- README.md | 1 + action-owm.py | 2 +- snipsowm/feedback/sentence_generator.py | 23 ++- snipsowm/sentence_generator.py | 24 ++- snipsowm/snips.py | 159 ++++++++++++------ snipsowm/weather_condition.py | 11 ++ .../feedback_test/sentence_generator_test.py | 9 +- 7 files changed, 167 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index 1ea9cd3..2448f6c 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ To have the skills properly working, you **need** to generate locales for your l - 🇺🇸 `en_US` - 🇫🇷 `fr_FR` - 🇪🇸 `es_ES` +- 🇩🇪 `de_DE` You can generate them with `sudo raspi-config`. Going in the `Localisation Options` submenu, then in the `Change Locale` submenu, and selecting the locales you want to support. For instance, select `en_US UTF-8` if you want support for English. diff --git a/action-owm.py b/action-owm.py index 22c4be2..3d20fbb 100755 --- a/action-owm.py +++ b/action-owm.py @@ -188,7 +188,7 @@ def searchWeatherForecastItem(hermes, intent_message): if skill_locale == u"": print "No locale information is found!" - print "Please edit 'config.ini' file, give either en_US, fr_FR or es_ES refering to the language of your assistant" + print "Please edit 'config.ini' file, give either en_US, fr_FR, de_DE or es_ES refering to the language of your assistant" sys.exit(1) skill = SnipsOWM(config["secret"]["api_key"], diff --git a/snipsowm/feedback/sentence_generator.py b/snipsowm/feedback/sentence_generator.py index 68096d1..e19d9a7 100644 --- a/snipsowm/feedback/sentence_generator.py +++ b/snipsowm/feedback/sentence_generator.py @@ -17,7 +17,8 @@ def generate_error_sentence(self): error_sentences = { "en_US": "An error occured when trying to retrieve the weather, please try again", "fr_FR": "Désolé, il y a eu une erreur lors de la récupération des données météo. Veuillez réessayer", - "es_ES": "Ha ocurrido un error obteniendo la información meteorológica, por favor inténtalo de nuevo" + "es_ES": "Ha ocurrido un error obteniendo la información meteorológica, por favor inténtalo de nuevo", + "de_DE": "Beim abrufen des Wetters ist ein Fehler aufgetreten, bitte versuche es erneut" } return error_sentences[self.locale] @@ -32,6 +33,7 @@ def generate_error_locale_sentence(self): "en_US": "An error occured. Your system doesn't have the correct locale installed. Please refer to the documentation. ", "fr_FR": "Désolé, il y a eu une erreur. Votre système n'a pas la locale correcte installée. Veuillez consulter la documentation pour plus de détails.", "es_ES": "Ha ocurrido un error. Parece que el sistema no tiene instalado el paquete de idioma correcto ('locale'). Consula la documentación para más detalles." + "de_DE": "Ein Fehler ist aufgetreten. Es ist die falsche Sprache konfiguriert. Wirf einen Blick in die Dokumentation" } return error_sentences[self.locale] @@ -41,6 +43,7 @@ def generate_api_key_error_sentence(self): "en_US": "The API key you provided is invalid, check your config.ini", "fr_FR": "La clé API fournie est incorrecte, vérifiez le fichier config.ini", "es_ES": "La clave de la API proporcionada no es válida, por favor comprueba tu fichero config.ini" + "de_DE": "Der API Schlüssel, den du bereitgestellt hast, ist nicht gültig. Überprüfe deine config.ini" } return error_sentences[self.locale] @@ -80,6 +83,11 @@ def generate_sentence_introduction(self, tone): AnswerSentenceGenerator.SentenceTone.NEGATIVE: "No,", AnswerSentenceGenerator.SentenceTone.NEUTRAL: "" } + "de_DE": { + AnswerSentenceGenerator.SentenceTone.POSITIVE: "Ja,", + AnswerSentenceGenerator.SentenceTone.NEGATIVE: "Nein,", + AnswerSentenceGenerator.SentenceTone.NEUTRAL: "" + } } sentence_beginning = sentence_beginnings[self.locale][tone] @@ -149,6 +157,13 @@ def generate_sentence_locality(self, POI=None, Locality=None, Region=None, Count else: return "" + if self.locale == "de_DE": + if POI or Locality or Region or Country: + locality = filter(lambda x: x is not None, [POI, Locality, Region, Country])[0] + return "in {}".format(locality) + else: + return "" + else: return "" @@ -243,7 +258,8 @@ def generate_temperature_sentence(self, error_sentences = { "en_US": "I couldn't fetch the right data for the specified place and date", "fr_FR": "Je n'ai pas pu récupérer les prévisions de température pour cet endroit et ces dates", - "es_ES": "No he podido encontrar información meteorológica para el lugar y la fecha especificados" + "es_ES": "No he podido encontrar información meteorológica para el lugar y la fecha especificados", + "de_DE": "Ich konnte die richtigen Daten für den angegebenen Ort und dem Datum nicht herunterladen" } if (temperature is None): @@ -252,7 +268,8 @@ def generate_temperature_sentence(self, sentence_introductions = { "en_US": ["The temperature will be {} degrees"], "fr_FR": ["La température sera de {} degrés", "Il fera {} degrés"], - "es_ES": ["La temperatura será de {} grados", "Habrá {} grados"] + "es_ES": ["La temperatura será de {} grados", "Habrá {} grados"], + "de_DE": ["Die Temperatur wird {} Grad betragen", "Es wird {} Grad haben"] } introduction = random.choice(sentence_introductions[self.locale]).format(temperature) diff --git a/snipsowm/sentence_generator.py b/snipsowm/sentence_generator.py index c5e30ad..e7251b4 100644 --- a/snipsowm/sentence_generator.py +++ b/snipsowm/sentence_generator.py @@ -78,6 +78,11 @@ def generate_sentence_introduction(self, tone): SentenceTone.NEGATIVE: "No,", SentenceTone.NEUTRAL: "" } + "de_DE": { + SentenceTone.POSITIVE: "Ja,", + SentenceTone.NEGATIVE: "Nein,", + SentenceTone.NEUTRAL: "" + } } sentence_beginning = sentence_beginnings[self.locale][tone] @@ -147,6 +152,13 @@ def generate_sentence_locality(self, POI=None, Locality=None, Region=None, Count else: return "" + if self.locale == "de_DE": + if POI or Locality or Region or Country: + locality = filter(lambda x: x is not None, [POI, Locality, Region, Country])[0] + return "in {}".format(locality) + else: + return "" + else: return "" @@ -236,7 +248,8 @@ def generate_temperature_sentence(self, error_sentences = { "en_US": "I couldn't fetch the right data for the specified place and date", "fr_FR": "Je n'ai pas pu récupérer les prévisions de température pour cet endroit et ces dates", - "es_ES": "No he podido encontrar información meteorológica para el lugar y la fecha especificados" + "es_ES": "No he podido encontrar información meteorológica para el lugar y la fecha especificados", + "de_DE": "Ich konnte die richtigen Daten für den angegebenen Ort und dem Datum nicht herunterladen" } if (temperature is None): @@ -245,7 +258,8 @@ def generate_temperature_sentence(self, sentence_introductions = { "en_US": ["The temperature will be {} degrees"], "fr_FR": ["La température sera de {} degrés", "Il fera {} degrés"], - "es_ES": ["La temperatura será de {} grados", "Habrá {} grados"] + "es_ES": ["La temperatura será de {} grados", "Habrá {} grados"], + "de_DE": ["Die Temperatur wird {} Grad betragen", "Es wird {} Grad haben"] } introduction = random.choice(sentence_introductions[self.locale]).format(temperature) @@ -261,7 +275,8 @@ def generate_error_sentence(self): error_sentences = { "en_US": "An error occured when trying to retrieve the weather, please try again", "fr_FR": "Désolé, il y a eu une erreur lors de la récupération des données météo. Veuillez réessayer", - "es_ES": "Ha ocurrido un error obteniendo la información climática, por favor inténtalo de nuevo" + "es_ES": "Ha ocurrido un error obteniendo la información climática, por favor inténtalo de nuevo", + "de_DE": "Beim abrufen des Wetters ist ein Fehler aufgetreten, bitte versuche es erneut" } return error_sentences[self.locale] @@ -270,6 +285,7 @@ def generate_api_key_error_sentence(self): error_sentences = { "en_US": "The API key you provided is invalid, check your config.ini", "fr_FR": "La clé API fournie est incorrecte, vérifiez le fichier config.ini", - "es_ES": "La clave de la API es incorrecta, por favor verifica tu fichero config.ini" + "es_ES": "La clave de la API es incorrecta, por favor verifica tu fichero config.ini", + "de_DE": "Der API Schlüssel, den du bereitgestellt hast, ist nicht gültig. Überprüfe deine config.ini" } return error_sentences[self.locale] \ No newline at end of file diff --git a/snipsowm/snips.py b/snipsowm/snips.py index a5f2c2a..fdb8854 100644 --- a/snipsowm/snips.py +++ b/snipsowm/snips.py @@ -62,262 +62,315 @@ class SnipsWeatherConditions(Enum): SnipsWeatherConditions.HUMID: { 'fr_FR': [u'humide'], 'en_US': [u'humid'], - 'es_ES': [u'húmedo'] + 'es_ES': [u'húmedo'], + 'de_DE': [u'feucht'] }, SnipsWeatherConditions.BLIZZARD: { 'fr_FR': [u'blizzard'], 'en_US': [u'blizzard'], - 'es_ES': [u'ventisca'] + 'es_ES': [u'ventisca'], + 'de_DE': [u'Schneesturm'] }, SnipsWeatherConditions.SNOWFALL: { 'fr_FR': [u'chutes de neige'], 'en_US': [u'snowfall'], - 'es_ES': [u'nieve'] + 'es_ES': [u'nieve'], + 'de_DE': [u'Schneefall'] }, SnipsWeatherConditions.WINDY: { 'fr_FR': [u'venteux'], 'en_US': [u'windy'], - 'es_ES': [u'viento'] + 'es_ES': [u'viento'], + 'de_DE': [u'windig'] }, SnipsWeatherConditions.CLOUD: { 'fr_FR': [u'nuage', u'nuages'], 'en_US': [u'cloud', u'clouds'], - 'es_ES': [u'nuboso'] + 'es_ES': [u'nuboso'], + 'de_DE': [u'wolkig', u'bewölkt'] }, SnipsWeatherConditions.RAINY: { 'fr_FR': [u'pluvieux'], 'en_US': [u'rainy'], - 'es_ES': [u'lluvioso'] + 'es_ES': [u'lluvioso'], + 'de_DE': [u'regnerisch'] }, SnipsWeatherConditions.STORMY: { 'fr_FR': [u'orageux'], 'en_US': [u'stormy'], - 'es_ES': [u'tormentoso'] + 'es_ES': [u'tormentoso'], + 'de_DE': [u'stürmisch'] }, SnipsWeatherConditions.SUN: { 'fr_FR': [u'soleil'], 'en_US': [u'sun'], - 'es_ES': [u'soleado'] + 'es_ES': [u'soleado'], + 'de_DE': [u'Sonne'] }, SnipsWeatherConditions.SNOW: { 'fr_FR': [u'neige', u'neiger', u'neigera'], 'en_US': [u'snow'], - 'es_ES': [u'nieve'] + 'es_ES': [u'nieve'], + 'de_DE': [u'Schnee'] }, SnipsWeatherConditions.FOG: { 'fr_FR': [u'brouillard'], 'en_US': [u'fog'], - 'es_ES': [u'niebla'] + 'es_ES': [u'niebla'], + 'de_DE': [u'Nebel'] }, SnipsWeatherConditions.DEPRESSION: { 'fr_FR': [u'dépression'], 'en_US': [u'depression'], - 'es_ES': [u'depresión'] + 'es_ES': [u'depresión'], + 'de_DE': [u'Tief'] }, SnipsWeatherConditions.STORM: { 'fr_FR': [u'tempête'], 'en_US': [u'storm'], - 'es_ES': [u'tormenta'] + 'es_ES': [u'tormenta'], + 'de_DE': [u'Sturm'] }, SnipsWeatherConditions.RAINFALL: { 'fr_FR': [u'précipitations'], 'en_US': [u'rainfall'], - 'es_ES': [u'precipitaciones'] + 'es_ES': [u'precipitaciones'], + 'de_DE': [u'Niederschlag'] }, SnipsWeatherConditions.SNOWY: { 'fr_FR': [u'neigeux'], 'en_US': [u'snowy'], - 'es_ES': [u'nevada'] + 'es_ES': [u'nevada'], + 'de_DE': [u'verschneit'] }, SnipsWeatherConditions.SUNNY: { 'fr_FR': [u'ensoleillé'], 'en_US': [u'sunny'], - 'es_ES': [u'soleado'] + 'es_ES': [u'soleado'], + 'de_DE': [u'sonnig'] }, SnipsWeatherConditions.RAIN: { 'fr_FR': [u'pluie'], 'en_US': [u'rain'], - 'es_ES': [u'lluvia'] + 'es_ES': [u'lluvia'], + 'de_DE': [u'Regen'] }, SnipsWeatherConditions.HAIL: { 'fr_FR': [u'grêle'], 'en_US': [u'hail'], - 'es_ES': [u'granizo'] + 'es_ES': [u'granizo'], + 'de_DE': [u'Hagel'] }, SnipsWeatherConditions.FOGGY: { 'fr_FR': [u'brumeux'], 'en_US': [u'foggy'], - 'es_ES': [u'nebuloso'] + 'es_ES': [u'nebuloso'], + 'de_DE': [u'neblig'] }, SnipsWeatherConditions.OVERCAST: { 'fr_FR': [u'couvert'], 'en_US': [u'overcast'], - 'es_ES': [u'cubierto'] + 'es_ES': [u'cubierto'], + 'de_DE': [u'bewölkt'] }, SnipsWeatherConditions.CLOUDY: { 'fr_FR': [u'nuageux'], 'en_US': [u'cloudy'], - 'es_ES': [u'nublado'] + 'es_ES': [u'nublado'], + 'de_DE': [u'wolkig'] }, SnipsWeatherConditions.HUMIDITY: { 'fr_FR': [u'humidité'], 'en_US': [u'humidity'], - 'es_ES': [u'humedad'] + 'es_ES': [u'humedad'], + 'de_DE': [u'Luftfeuchtigkeit'] }, SnipsWeatherConditions.SNOWSTORM: { 'fr_FR': [u'tempête de neige'], 'en_US': [u'snowstorm'], - 'es_ES': [u'tormenta de nieve'] + 'es_ES': [u'tormenta de nieve'], + 'de_DE': [u'Schneesturm'] }, SnipsWeatherConditions.WIND: { 'fr_FR': [u'vent'], 'en_US': [u'wind'], - 'es_ES': [u'viento'] + 'es_ES': [u'viento'], + 'de_DE': [u'Wind'] }, SnipsWeatherConditions.TRENCH_COAT: { 'fr_FR': [u'trench'], 'en_US': [u'trench coat'], - 'es_ES': [u'gabardina'] + 'es_ES': [u'gabardina'], + 'de_DE': [u'Regenmantel'] }, SnipsWeatherConditions.PARKA: { 'fr_FR': [u'parka'], 'en_US': [u'parka'], - 'es_ES': [u'anorak'] + 'es_ES': [u'anorak'], + 'de_DE': [u'Anorak'] }, SnipsWeatherConditions.CARDIGAN: { 'fr_FR': [u'cardigan'], 'en_US': [u'cardigan'], - 'es_ES': [u'chaqueta'] + 'es_ES': [u'chaqueta'], + 'de_DE': [u'Strickjacke'] }, SnipsWeatherConditions.SUMMER_CLOTHING: { 'fr_FR': [u'légé'], 'en_US': [u'summer clothing'], - 'es_ES': [u'ropa de verano'] + 'es_ES': [u'ropa de verano'], + 'de_DE': [u'Sommerkleidung'] }, SnipsWeatherConditions.GAMP: { 'fr_FR': [u'parapluie'], 'en_US': [u'gamp'], - 'es_ES': [u'paraguas'] + 'es_ES': [u'paraguas'], + 'de_DE': [u'Regenschirm'] }, SnipsWeatherConditions.BROLLY: { 'fr_FR': [u'parapluie'], 'en_US': [u'brolly'], - 'es_ES': [u'paraguas'] + 'es_ES': [u'paraguas'], + 'de_DE': [u'Regenschirm'] }, SnipsWeatherConditions.SUNSHADE: { 'fr_FR': [u'parasol'], 'en_US': [u'sunshade'], - 'es_ES': [u'sombrilla'] + 'es_ES': [u'sombrilla'], + 'de_DE': [u'Sonnenschirm'] }, SnipsWeatherConditions.PARASOL: { 'fr_FR': [u'parasol'], 'en_US': [u'parasol'], - 'es_ES': [u'sombrilla'] + 'es_ES': [u'sombrilla'], + 'de_DE': [u'Sonnenshirm'] }, SnipsWeatherConditions.UMBRELLA: { 'fr_FR': [u'parapluie'], 'en_US': [u'umbrella'], - 'es_ES': [u'paraguas'] + 'es_ES': [u'paraguas'], + 'de_DE': [u'Schirm'] }, SnipsWeatherConditions.OPEN_TOED_SHOES: { 'fr_FR': [u'sandales'], 'en_US': [u'open toed shoes'], - 'es_ES': [u'sandalias'] + 'es_ES': [u'sandalias'], + 'de_DE': [u'Sandalen'] }, SnipsWeatherConditions.SHORTS: { 'fr_FR': [u'short'], 'en_US': [u'shorts'], - 'es_ES': [u'pantalones cortos'] + 'es_ES': [u'pantalones cortos'], + 'de_DE': [u'kurze Hose'] }, SnipsWeatherConditions.SKIRT: { 'fr_FR': [u'jupe'], 'en_US': [u'skirt'], - 'es_ES': [u'falda'] + 'es_ES': [u'falda'], + 'de_DE': [u'Rock'] }, SnipsWeatherConditions.WARM_JUMPER: { 'fr_FR': [u'jupe courte'], 'en_US': [u'warm jumper'], - 'es_ES': [u'jersey cálido'] + 'es_ES': [u'jersey cálido'], + 'de_DE': [u'warmen Pulli'] }, SnipsWeatherConditions.WARM_SOCKS: { 'fr_FR': [u'chausettes chaudes'], 'en_US': [u'warm socks'], - 'es_ES': [u'calcetines cálidos'] + 'es_ES': [u'calcetines cálidos'], + 'de_DE': [u'warme Socken'] }, SnipsWeatherConditions.WARM_SWEATER: { 'fr_FR': [u'pull'], 'en_US': [u'warm sweater'], - 'es_ES': [u'jersey cálido'] + 'es_ES': [u'jersey cálido'], + 'de_DE': [u'warmen Pullover'] }, SnipsWeatherConditions.SCARF: { 'fr_FR': [u'écharpe'], 'en_US': [u'scarf'], - 'es_ES': [u'bufanda'] + 'es_ES': [u'bufanda'], + 'de_DE': [u'Schal'] }, SnipsWeatherConditions.STRAW_HAT: { 'fr_FR': [u'chapeau de paille'], 'en_US': [u'straw hat'], - 'es_ES': [u'sombero de paja'] + 'es_ES': [u'sombero de paja'], + 'de_DE': [u'Strohhut'] }, SnipsWeatherConditions.HAT: { 'fr_FR': [u'chapeau'], 'en_US': [u'hat'], - 'es_ES': [u'sombrero'] + 'es_ES': [u'sombrero'], + 'de_DE': [u'Hut'] }, SnipsWeatherConditions.SUNBLOCK: { 'fr_FR': [u'crème solaire'], 'en_US': [u'sunblock'], - 'es_ES': [u'crema solar'] + 'es_ES': [u'crema solar'], + 'de_DE': [u'Sonnencreme'] }, SnipsWeatherConditions.SUNSCREEN: { 'fr_FR': [u'écran solaire'], 'en_US': [u'sunscreen'], - 'es_ES': [u'protector solar'] + 'es_ES': [u'protector solar'], + 'de_DE': [u'Sonnencreme'] }, SnipsWeatherConditions.SUN_CREAM: { 'fr_FR': [u'crème solaire'], 'en_US': [u'sun cream'], - 'es_ES': [u'crema solar'] + 'es_ES': [u'crema solar'], + 'de_DE': [u'Sonnencreme'] }, SnipsWeatherConditions.WOOLEN_SWEATER: { 'fr_FR': [u'pull en laine'], 'en_US': [u'woolen sweater'], - 'es_ES': [u'jersey de lana'] + 'es_ES': [u'jersey de lana'], + 'de_DE': [u'Wollpullover'] }, SnipsWeatherConditions.WOOLEN_JUMPER: { 'fr_FR': [u'pull en laine'], 'en_US': [u'woolen jumper'], - 'es_ES': [u'jersey de lana'] + 'es_ES': [u'jersey de lana'], + 'de_DE': [u'Wollpullover'] }, SnipsWeatherConditions.WOOLEN_TIGHTS: { 'fr_FR': [u'collants en laine'], 'en_US': [u'woolen tights'], - 'es_ES': [u'medias de lana'] + 'es_ES': [u'medias de lana'], + 'de_DE': [u'Wollstrumpfhose'] }, SnipsWeatherConditions.SLEEVELESS_SUNDRESS: { 'fr_FR': [u'robe d\'été'], 'en_US': [u'sleeveless sundress'], - 'es_ES': [u'vestido sin mangas'] + 'es_ES': [u'vestido sin mangas'], + 'de_DE': [u'ärmelloses Sommerkleid'] }, SnipsWeatherConditions.SUNDRESS: { 'fr_FR': [u'robe d\'été'], 'en_US': [u'sundress'], - 'es_ES': [u'vestido de verano'] + 'es_ES': [u'vestido de verano'], + 'de_DE': [u'Sommerkleid'] }, SnipsWeatherConditions.CHUNKY_SWEATER: { 'fr_FR': [u'gros pull'], 'en_US': [u'chunky sweater'], - 'es_ES': [u'jersey grueso'] + 'es_ES': [u'jersey grueso'], + 'de_DE': [u'dicken Pullover'] }, SnipsWeatherConditions.SUNGLASSES: { 'fr_FR': [u'lunettes de soleil'], 'en_US': [u'sunglasses'], - 'es_ES': [u'gafas de sol'] + 'es_ES': [u'gafas de sol'], + 'de_DE': [u'Sonnenbrille'] }, SnipsWeatherConditions.RAINCOAT: { 'fr_FR': [u'manteau pour la pluie'], 'en_US': [u'raincoat'], - 'es_ES': [u'impermeable'] + 'es_ES': [u'impermeable'], + 'de_DE': [u'Regenmantel'] }, SnipsWeatherConditions.WOOLEN_SOCKS: { 'fr_FR': [u'chaussettes en laine'], 'en_US': [u'woolen socks'], - 'es_ES': [u'calcetines de lana'] + 'es_ES': [u'calcetines de lana'], + 'de_DE': [u'Wollsocken'] } } diff --git a/snipsowm/weather_condition.py b/snipsowm/weather_condition.py index ebc3743..1d77b88 100644 --- a/snipsowm/weather_condition.py +++ b/snipsowm/weather_condition.py @@ -20,56 +20,67 @@ def __init__(self, key): "en_US": ["Thunderstorms are expected", "expect thunderstorms"], "fr_FR": ["de l'orage et des éclair sont prévus"], "es_ES": ["Se esperan tormentas"], + "de_DE": ["Es werden Gewitter erwartet", "Es ist mit Gewitter zu rechnen"], }, WeatherConditions.DRIZZLE: { "en_US": ["drizzle are expected", "expect drizzle"], "fr_FR": ["prévoir de la bruine"], "es_ES": ["Se espera granizo"], + "de_DE": ["Es wird Nieselregen erwartet", "Es ist mit Nieselregen zu rechnen"], }, WeatherConditions.RAIN: { "en_US": ["rain is expected", "it's going to be rainy", "expect rain"], "fr_FR": ["il va pleuvoir", "il pleuvra", "le temps sera pluvieux"], "es_ES": ["Se esperan lluvias"], + "de_DE": ["Es wird Regen erwartet", "Es ist mit Regen zu rechnen"], }, WeatherConditions.SNOW: { "en_US": ["snow is expected", "it's going to snow", "expect snow"], "fr_FR": ["il neigera", "il va neiger", "le temps sera neigeux"], "es_ES": ["Se esperan nevadas"], + "de_DE": ["Es wird Schnee erwartet", "Es ist mit Schnee zu rechnen"], }, WeatherConditions.FOG: { "en_US": ["fog is expected", "it's going to be foggy", "expect fog"], "fr_FR": ["Il y aura du brouillard"], "es_ES": ["Se espera niebla"], + "de_DE": ["Es wird Nebel erwartet", "Es ist mit Nebel zu rechnen"], }, WeatherConditions.SUN: { "en_US": ["sun is expected", "it's going to be sunny", "the sun will shine"], "fr_FR": ["le temps sera ensoleillé"], "es_ES": ["Se espera sol", "El sol brillará"], + "de_DE": ["Es wird sonnig sein", "Es ist mit Sonne zu rechnen"], }, WeatherConditions.CLOUDS: { "en_US": ["it's going to be cloudy", "expect clouds"], "fr_FR": ["le temps sera nuageux"], "es_ES": ["Se esperan nubes", "El cielo estará nublado"], + "de_DE": ["Es wird wolkig sein", "Es ist mit bewölkung zu rechnen"], }, WeatherConditions.STORM: { "en_US": ["storms are expected", "it's going to be stormy", "expect storms"], "fr_FR": ["il y aura de l'orage"], "es_ES": ["Se esperan tormentas"], + "de_DE": ["Es wird Sturm erwartet", "Es ist mit Sturm zu rechnen"], }, WeatherConditions.HUMID: { "en_US": ["humidity is expected", "it's going to be humid"], "fr_FR": ["le temps sera humide"], "es_ES": ["La humedad será elevada"], + "de_DE": ["Es kann mit Nässe gerechnet werden"], }, WeatherConditions.WIND: { "en_US": ["wind is expected", "it's going to be windy", "expect wind"], "fr_FR": ["s'attendre à du vent"], "es_ES": ["Se espera un tiempo ventoso"], + "de_DE": ["Es wird windig", "Es kann mit Wind gerechnet werden"], }, WeatherConditions.UNKNOWN: { "en_US": ["I don't know how to describe the weather"], "fr_FR": ["Je ne peux pas décrire la météo"], "es_ES": ["No puedo decirte el tiempo que hará"], + "de_DE": ["Ich weis nicht wie ich das Wetter beschreiben soll"], }, } diff --git a/tests/feedback_test/sentence_generator_test.py b/tests/feedback_test/sentence_generator_test.py index 063cbd7..ac32e1d 100644 --- a/tests/feedback_test/sentence_generator_test.py +++ b/tests/feedback_test/sentence_generator_test.py @@ -32,4 +32,11 @@ def setUp(self): self.generator = sentence_generator.AnswerSentenceGenerator(locale="fr_FR") def test_sentence_generation_locality_empty(self): - self.assertEquals(len(self.generator.generate_sentence_locality()), 0) \ No newline at end of file + self.assertEquals(len(self.generator.generate_sentence_locality()), 0) + +class TestGermanAnswerSentenceGenerator(TestCase): + def setUp(self): + self.generator = sentence_generator.AnswerSentenceGenerator(locale="de_DE") + + def test_sentence_generation_locality_empty(self): + self.assertEquals(len(self.generator.generate_sentence_locality()), 0)