'current_conditions_intro':"Current conditions for {city}, {region}.",
'temperature':"The temperature is {val}{unit}.",
'conditions':"Conditions are {desc}{wind}.",
'wind_with_dir':", with winds from the {dir} at {val}{unit}",
'wind_no_dir':", with winds at {val}{unit}",
'forecast_intro':"Here is the forecast.",
'forecast_item':"{period}: {cond}.{temp}",
'no_alerts':"There are no active weather alerts.",
'active_alerts_count':"There are {count} active weather alerts. ",
'alert_issued':"A {title} was issued at {time}. ",
'alert_effect':"A {title} is in effect. ",
'alert_effective_from':"It is effective from {time}. ",
'alert_expires':"It expires at {time}. ",
'clear':"{callsign} Clear.",
'time_msg':"The time is {time}{tz}. Time provided by the {agency}.",
'automated_report':"This is the automated weather report for {city}, {region}. Break. [PAUSE]",
'please_advise':"Please be advised: {alerts} Break. [PAUSE]",
'system_status':"System status: Monitoring for {sev} level events and higher. Tone alerts active for {tone_sev} events and higher. Monitoring interval is {interval} minutes. Break. [PAUSE]",
'code_source':"A S L 3 underscore w x underscore announce is available on github and developed by N 7 X O B as non-commercial code provided for the benefit of the amateur radio community.",
'data_source_us':"Data provided by the National Weather Service and the National Institute of Standards and Technology.",
'data_source_ca':"Data provided by Environment Canada, National Research Council Canada, and the National Alert Aggregation and Dissemination System.",
'intro_cq':"CQ CQ CQ. This is {callsign} with the updated weather report.",
'intro_good_day':"Good day.",
'concludes':"This concludes the weather report for {city}. {callsign} Clear.",
'degrees':"degrees",
'degrees_celsius':"degrees celsius",
'mph':"miles per hour",
'kph':"kilometers per hour",
'high':" High",
'low':" Low",
# Test & Monitor Strings - (Simplified for brevity, can add more)
'test_preamble':"{callsign} Testing. The following is an alerting test of an automated alerting notification and message. Do not take any action as a result of the following message. Repeating - take no action - this is only a test. The test tones will follow in 10 seconds.",
'test_message':"This is a test message. This is a sample emergency test message. This is only a test. No action is required.",
'test_postamble':"{callsign} reminds you this was a test. Do not take action. Repeat - take no action. If this was an actual emergency, the preceding tone would be followed by specific information from official authorities on an imminent emergency that requires your immediate attention and possibly action to prevent loss of life, injury or property damage. This test is concluded.",
'monitor_online':"{callsign} Automatic Monitoring Online. Data provided by {source}. {nodes}Current location {city}. {time_msg} Active Alert Check Interval {interval} minutes. Dynamic Alert Check Interval {active} minutes.",
'interval_change_active':"{callsign} Notification. The monitoring interval is being changed to {interval} minutes due to active alerts in the area.",
'interval_change_normal':"{callsign} Notification. Active alerts have expired. The monitoring interval is being changed back to {interval} minutes."
},
'fr':{
'current_conditions_intro':"Conditions actuelles pour {city}, {region}.",
'temperature':"La température est de {val}{unit}.",
'conditions':"Les conditions sont {desc}{wind}.",
'wind_with_dir':", avec des vents du {dir} à {val}{unit}",
'wind_no_dir':", avec des vents à {val}{unit}",
'forecast_intro':"Voici les prévisions.",
'forecast_item':"{period}: {cond}.{temp}",
'no_alerts':"Il n'y a aucune alerte météo active.",
'active_alerts_count':"Il y a {count} alertes météo actives. ",
'alert_issued':"Une {title} a été émise à {time}. ",
'alert_effect':"Une {title} est en vigueur. ",
'alert_effective_from':"Elle est en vigueur à partir de {time}. ",
'alert_expires':"Elle expire à {time}. ",
'clear':"{callsign} Terminé.",
'time_msg':"Il est {time}{tz}. Heure fournie par {agency}.",
'automated_report':"Ceci est le rapport météo automatisé pour {city}, {region}. Pause. [PAUSE]",
'system_status':"État du système : Surveillance des événements de niveau {sev} et supérieurs. Alertes sonores actives pour les événements {tone_sev} et supérieurs. L'intervalle de surveillance est de {interval} minutes. Pause. [PAUSE]",
'code_source':"A S L 3 underscore w x underscore announce est disponible sur github et développé par N 7 X O B comme code non commercial fourni au bénéfice de la communauté radioamateur.",
'data_source_us':"Données fournies par le National Weather Service et le National Institute of Standards and Technology.",
'data_source_ca':"Données fournies par Environnement Canada, le Conseil national de recherches du Canada et le Système national d'agrégation et de diffusion des alertes.",
'intro_cq':"CQ CQ CQ. Ici {callsign} avec le rapport météo mis à jour.",
'intro_good_day':"Bonjour.",
'concludes':"Ceci conclut le rapport météo pour {city}. {callsign} Terminé.",
'degrees':"degrés",
'degrees_celsius':"degrés celsius",
'mph':"milles par heure",
'kph':"kilomètres par heure",
'high':" Maximum",
'low':" Minimum",
# Test & Monitor Strings (French translations approx)
'test_preamble':"{callsign} Essai. Ceci est un test d'alerte d'un système de notification et de message automatisé. Ne prenez aucune mesure suite au message suivant. Je répète - ne prenez aucune mesure - ceci n'est qu'un test. Les tonalités d'essai suivront dans 10 secondes.",
'test_message':"Ceci est un message de test. Ceci est un exemple de message d'urgence. Ceci n'est qu'un test. Aucune action n'est requise.",
'test_postamble':"{callsign} vous rappelle que ceci était un test. Ne prenez aucune mesure. Je répète - ne prenez aucune mesure. S'il s'agissait d'une urgence réelle, la tonalité précédente aurait été suivie d'informations spécifiques des autorités officielles sur une urgence imminente nécessitant votre attention immédiate et éventuellement une action pour prévenir la perte de vie, des blessures ou des dommages matériels. Ce test est terminé.",
'monitor_online':"{callsign} Surveillance automatique en ligne. Données fournies par {source}. {nodes}Emplacement actuel {city}. {time_msg} Intervalle de vérification des alertes actives {interval} minutes. Intervalle de vérification dynamique {active} minutes.",
'interval_change_active':"{callsign} Notification. L'intervalle de surveillance est modifié à {interval} minutes en raison d'alertes actives dans la région.",
'interval_change_normal':"{callsign} Notification. Les alertes actives ont expiré. L'intervalle de surveillance revient à {interval} minutes."
# French Directions (TODO: Complete list or keep EN for now if simple)
# For now, simplistic approach: if lang is FR, we might need a separate map or just rely on EN abbreviations being understood or adding translation map.
# Let's add basic map for FR if needed, or just let it pass for now.
ifdirectionanddirectionindirs:
direction=dirs[direction]
# Wind Speed Logic
speed_val=int(current.wind_speed)
speed_unit="kilometers per hour"
speed_unit=self._get_str('kph')
ifis_us:
speed_val=int(current.wind_speed*0.621371)
speed_unit="miles per hour"
speed_unit=self._get_str('mph')
ifdirection:
wind=f", with winds from the {direction} at {speed_val}{speed_unit}"
parts.append(f"System status: Monitoring for {sev} level events and higher. Tone alerts active for {tone_sev} events and higher. Monitoring interval is {interval} minutes. Break. [PAUSE]")
parts.append("A S L 3 underscore w x underscore announce is available on github and developed by N 7 X O B as non-commercial code provided for the benefit of the amateur radio community.")
parts.append(self._get_str('code_source'))
# Agency Credits
ifloc.country_code=='US':
parts.append("Data provided by the National Weather Service and the National Institute of Standards and Technology.")
parts.append(self._get_str('data_source_us'))
elifloc.country_code=='CA':
parts.append("Data provided by Environment Canada, National Research Council Canada, and the National Alert Aggregation and Dissemination System.")
parts.append(self._get_str('data_source_ca'))
parts.append("Break. [PAUSE]")
# Outro
parts.append(f"This concludes the weather report for {loc.city}. {full_callsign} Clear.")
returnf"{callsign} Notification. The monitoring interval is being changed to {interval_mins} minute{'s'ifinterval_mins!=1else''} due to active alerts in the area."