diff --git a/src/lib/i18n/locales/es.json b/src/lib/i18n/locales/es.json
new file mode 100644
index 0000000..3870b95
--- /dev/null
+++ b/src/lib/i18n/locales/es.json
@@ -0,0 +1,142 @@
+{
+ "generic": {
+ "error": "Error",
+ "ok": "Ok",
+ "confirm": "Confirmar",
+ "pleaseWait": "Aguarde por favor, podría tardar un rato.",
+ "loading": "Cargando"
+ },
+ "main": {
+ "title": "Posiciones de los vehículos",
+ "infobar": {
+ "lastRefreshed": "Última actualización hace {value} segundos.",
+ "fetching": "Actualizando...",
+ "error": "Fallo al cargar el canal GTFS en tiempo real."
+ }
+ },
+ "map": {
+ "errors": {
+ "failedToGeneratePopupContent": "Fallo al generar el contenido de la ventana emergente."
+ },
+ "vehiclePopup": {
+ "routeType": {
+ "tram": "Tranvía",
+ "subway": "Metro",
+ "train": "Tren",
+ "bus": "Bus",
+ "ferry": "Ferry",
+ "cableTram": "Tranvía por cable",
+ "cableCar": "Coche por cable",
+ "funicular": "Funicular",
+ "trolleybus": "Trolebus",
+ "monorail": "Monorail"
+ },
+ "errors": {
+ "timeout": "Fallo al cargar a tiempo el contenido del cuadro emergente.",
+ "noPosition": "Sin información sobre la posición de este vehículo.",
+ "unknownTrip": "Ruta desconocida. ¿Crees que deberías actualizar los datos GTFS estáticos?",
+ "unknownRoute": "Sin información de la ruta.¿Sería de ayuda actualizar los datos GTFS estáticos"
+ }
+ },
+ "stopTimesDialog": {
+ "title": "Horario",
+ "stop": "Parada",
+ "departureTime": "Hora de salida",
+ "unknownStop": "Parada desconocida",
+ "errors": {
+ "failedToLoad": "Fallo al cargar el horario"
+ }
+ }
+ },
+ "onboarding": {
+ "title": "Bienvenida! 👋",
+ "text": "Bienvenida a FindMyBus!
Esta app te permite ver los vehículos de transporte público en tiempo real en un mapa. Para ello, la app utiliza el canal GTFS que muchas empresas de transporte en todo el mundo utilizan. Comprueba si tu empresa de transporte local también utiliza este canal y si es así escribe aquí abajo la URL del canal estático y en tiempo real. Si tu agencia proporciona varios canales en tiempo real, selecciona el que incluya los datos de posición de los vehículos.
Ten en cuenta que FindMyBus actualmente sólo es compatible con la versión 2.0 de la especificación GTFS pero también presupone algunos contenidos del canal GTFS. Aún así, no hemos encontrado problemas al realizar las pruebas de la aplicación con varias empresas de transporte.
FindMyBus es código abierto y hecha con ❤️.",
+ "settings": "Configuración inicial",
+ "finishButton": "Vamos!"
+ },
+ "forceStaticGtfsUpdate": {
+ "title": "Se requiere actualizar los datos GTFS estáticos",
+ "text": "Desafortunadamente, la versión guardada de los datos GTFS estáticos deben actualizarse. Probablemente se deba a una actualización de la app que requiere un formato diferente de los datos.
Por favor, pulsa en el botón inferior para actualizar. Ten en cuenta que esto usará más datos de los que la app consume habitualmente."
+ },
+ "settings": {
+ "title": "Configuración",
+ "gtfsFeed": "Canal GTFS",
+ "staticGtfsFeedSetting": {
+ "label": "URL del canal GTFS estático",
+ "set": "Configurar la URL del canal GTFS estático",
+ "refresh": "Actualizar datos del canal GTFS estático",
+ "dialog": {
+ "title": "Obteniendo y procesando los datos",
+ "errors": {
+ "failed": "Ha fallado la obtención de los datos GTFS estáticos. Comprueba que has proporcionado una URL válida y que tienes conexión a internet."
+ }
+ }
+ },
+ "realtimeGtfsFeedSetting": {
+ "label": "URL del canal GTFS en tiempo real",
+ "set": "Configurar la URL del canal GTFS en tiempo real",
+ "dialog": {
+ "title": "Validando el canal",
+ "errors": {
+ "failed": "Ha fallado la obtención de datos del canal GTFS en tiempo real. Comprueba que has proporcionado una URL válida y que tienes conexión a internet."
+ }
+ }
+ },
+ "realtimeGtfsUpdateIntervalSetting": {
+ "label": "Actualizar datos del canal GTFS en tiempo real cada {value} segundos."
+ },
+ "visual": "Ajustes",
+ "languageSettingSetting": {
+ "label": "Idioma"
+ },
+ "speedUnitsSetting": {
+ "label": "Unidades de velocidad",
+ "kilometersPerHour": "kilómetros por hora",
+ "milesPerHour": "millas por hora",
+ "metersPerSecond": "metros por segundo",
+ "knots": "nudos",
+ "feetPerDay": "pies por día"
+ },
+ "timeFormatSetting": {
+ "label": "Formato de la hora",
+ "12hour": "formato de 12-horas (01:00 PM)",
+ "24hour": "formato de 24-horas (13:00)"
+ },
+ "darkModeSetting": {
+ "label": "Modo oscuro",
+ "on": "On",
+ "off": "Off",
+ "system": "Sistema"
+ },
+ "themeSetting": {
+ "label": "Decorado",
+ "ios": "iPhone",
+ "material": "Android"
+ },
+ "showVehicleMarkerLabelsSetting": {
+ "label": "Mostrar etiquetas de texto del vehículo en el mapa"
+ },
+ "vehicleMarkerBackgroundBrightnessSetting": {
+ "label": "Brillo del fondo del marcador del vehículo ({value}%)"
+ },
+ "mapSourceUrl": {
+ "label": "URL de origen del mapa (para usuarias expertas)",
+ "set": "Establecer propia",
+ "reset": "Restablecer la original"
+ }
+ },
+ "about": {
+ "title": "Acerca de la app",
+ "links": {
+ "myHomepage": "Mira otros trabajos míos",
+ "sourceCode": "Código fuente"
+ },
+ "version": "Versión: {value}"
+ },
+ "dependencyAcknowledgments": {
+ "title": "Reconocimiento de dependencias",
+ "version": "Versión: {value}",
+ "license": "Licencia: {value}",
+ "more": "Más"
+ }
+}
diff --git a/src/lib/i18n/locales/gl.json b/src/lib/i18n/locales/gl.json
new file mode 100644
index 0000000..262248a
--- /dev/null
+++ b/src/lib/i18n/locales/gl.json
@@ -0,0 +1,142 @@
+{
+ "generic": {
+ "error": "Erro",
+ "ok": "Ok",
+ "confirm": "Confirmar",
+ "pleaseWait": "Agarda, podería levarlle un tempo.",
+ "loading": "Cargando"
+ },
+ "main": {
+ "title": "Posicións do vehículo",
+ "infobar": {
+ "lastRefreshed": "Última actualización hai {value} segundos.",
+ "fetching": "Actualizando...",
+ "error": "Fallo ao cargar a canle GTFS en tempo real."
+ }
+ },
+ "map": {
+ "errors": {
+ "failedToGeneratePopupContent": "Fallo ao cargar o contido da xanela emerxente."
+ },
+ "vehiclePopup": {
+ "routeType": {
+ "tram": "Tranvía",
+ "subway": "Metro",
+ "train": "Tren",
+ "bus": "Bus",
+ "ferry": "Ferry",
+ "cableTram": "Tranvía de cable",
+ "cableCar": "Coche de cable",
+ "funicular": "Funicular",
+ "trolleybus": "Trelebús",
+ "monorail": "Monorail"
+ },
+ "errors": {
+ "timeout": "Fallou a carga a tempo do contido do cadro.",
+ "noPosition": "Non hai información da posición deste vehículo.",
+ "unknownTrip": "Ruta descoñecida. Habería que actualizar os datos GTSF estáticos?",
+ "unknownRoute": "Sen información sobre a ruta. Habería que actualizar os datos GTFS estáticos?"
+ }
+ },
+ "stopTimesDialog": {
+ "title": "Horario",
+ "stop": "Parada",
+ "departureTime": "Hora de saída",
+ "unknownStop": "Parada descoñecida",
+ "errors": {
+ "failedToLoad": "Fallo ao cargar o horario"
+ }
+ }
+ },
+ "onboarding": {
+ "title": "Benvida! 👋",
+ "text": "Benvida a FindMyBus!
Esta app permíteche ver nun mapa os vehículos do transporte público en tempo real. Para conseguilo, a app precisa unha canle GTFS que proporcionan moitas empresas de transporte en todo o mundo. Comproba se a túa empresa local de transporte tamén proporciona esta canle e engade aquí embaixo tanto a canle GTFS estática como a GTFS en tempo real. Se a túa empresa proporciona varias canles en tempo real elixe a que inclúe os datos da posición dos vehículos.
Ten en conta que FindMyBus só e compatible coa versión 2.0 da especificación GTFS pero tamén presupón algúns datos da canle GTFS. Emporiso, nas probas que fixemos coa app con varias empresas de transporte, non atopamos incidencias.
FindMyBus é de código aberto e feita con ❤️.",
+ "settings": "Configuración inicial",
+ "finishButton": "Imos!"
+ },
+ "forceStaticGtfsUpdate": {
+ "title": "Hai que actualizar os datos GTFS estáticos",
+ "text": "Desgraciadamente a versión gardada dos datos GTFS estáticos é antiga e hai que actualizala. Probablemente se deba a unha actualización da app que precisa os datos nun formato diferente ao gardado.
Preme no botón de actualización inferior. Ten en conta que se van a usar máis datos dos que a app consume habitualmente."
+ },
+ "settings": {
+ "title": "Axustes",
+ "gtfsFeed": "Canle GTFS",
+ "staticGtfsFeedSetting": {
+ "label": "URL da canle GTFS estática",
+ "set": "Establecer URL da canle GTFS estática",
+ "refresh": "Actualizar datos GTFS estáticos",
+ "dialog": {
+ "title": "Obtendo e procesando os datos",
+ "errors": {
+ "failed": "Fallou a obtención dos datos GTFS estáticos. Comproba que o URL da canle GTFS é válido e tes conexión activa a internet."
+ }
+ }
+ },
+ "realtimeGtfsFeedSetting": {
+ "label": "URL da canle GTFS en tempo real",
+ "set": "Establecer URL da canle GTFS en tempo real",
+ "dialog": {
+ "title": "Validando a canle",
+ "errors": {
+ "failed": "Fallou a obtención dos datos GTFS en tempo real. Comproba que o URL da canle GTFS é válido e tes conexión activa a internet.."
+ }
+ }
+ },
+ "realtimeGtfsUpdateIntervalSetting": {
+ "label": "Actualizar canle GTFS en tempo real cada {value} segundos."
+ },
+ "visual": "Axustes",
+ "languageSettingSetting": {
+ "label": "Idioma"
+ },
+ "speedUnitsSetting": {
+ "label": "Velocidade",
+ "kilometersPerHour": "quilómetros por hora",
+ "milesPerHour": "millas por hora",
+ "metersPerSecond": "metros por segundo",
+ "knots": "nós",
+ "feetPerDay": "pés por día"
+ },
+ "timeFormatSetting": {
+ "label": "Formato da hora",
+ "12hour": "formato de 12-horas (01:00 PM)",
+ "24hour": "formato de 24-horas (13:00)"
+ },
+ "darkModeSetting": {
+ "label": "Modo escuro",
+ "on": "On",
+ "off": "Off",
+ "system": "Sistema"
+ },
+ "themeSetting": {
+ "label": "Decorado",
+ "ios": "iPhone",
+ "material": "Android"
+ },
+ "showVehicleMarkerLabelsSetting": {
+ "label": "Mostrar etiquetas de texto do vehículo no mapa"
+ },
+ "vehicleMarkerBackgroundBrightnessSetting": {
+ "label": "Brillo do fondo do marcador do vehículo ({value}%)"
+ },
+ "mapSourceUrl": {
+ "label": "URL da orixe do mapa (usuarias expertas)",
+ "set": "Establecer persoal",
+ "reset": "Restablecer por defecto"
+ }
+ },
+ "about": {
+ "title": "Sobre a app",
+ "links": {
+ "myHomepage": "Outros traballos meus",
+ "sourceCode": "Código fonte"
+ },
+ "version": "Versión: {value}"
+ },
+ "dependencyAcknowledgments": {
+ "title": "Recoñecementos software alleo",
+ "version": "Versión: {value}",
+ "license": "Licenza: {value}",
+ "more": "Máis"
+ }
+}