volto-aemet 1.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.changelog.draft +3 -0
  2. package/.release-it.json +34 -0
  3. package/CHANGELOG.md +11 -0
  4. package/LICENSE +21 -0
  5. package/README.md +323 -0
  6. package/babel.config.js +17 -0
  7. package/locales/de/LC_MESSAGES/volto.po +83 -0
  8. package/locales/en/LC_MESSAGES/volto.po +83 -0
  9. package/locales/es/LC_MESSAGES/volto.po +90 -0
  10. package/locales/pt_BR/LC_MESSAGES/volto.po +88 -0
  11. package/locales/volto.pot +85 -0
  12. package/news/.gitkeep +0 -0
  13. package/package.json +47 -0
  14. package/public/.gitkeep +0 -0
  15. package/src/components/Aemet/Weather.js +289 -0
  16. package/src/components/Aemet/Weather.test.js +398 -0
  17. package/src/components/Aemet/WeatherCurrent.jsx +97 -0
  18. package/src/components/Aemet/WeatherCurrent.test.jsx +282 -0
  19. package/src/components/Aemet/index.js +9 -0
  20. package/src/components/Blocks/AemetWeatherCurrent/View.jsx +11 -0
  21. package/src/components/Blocks/AemetWeatherForecast/Edit.jsx +72 -0
  22. package/src/components/Blocks/AemetWeatherForecast/View.jsx +32 -0
  23. package/src/components/Blocks/AemetWeatherForecast/messages.js +36 -0
  24. package/src/components/Blocks/AemetWeatherForecast/schema.js +37 -0
  25. package/src/config/blocks.ts +70 -0
  26. package/src/config/settings.ts +16 -0
  27. package/src/icons/aemet-logo.svg +311 -0
  28. package/src/icons/weather/temps/11.png +0 -0
  29. package/src/icons/weather/temps/11n.png +0 -0
  30. package/src/icons/weather/temps/12.png +0 -0
  31. package/src/icons/weather/temps/12n.png +0 -0
  32. package/src/icons/weather/temps/13.png +0 -0
  33. package/src/icons/weather/temps/13n.png +0 -0
  34. package/src/icons/weather/temps/14.png +0 -0
  35. package/src/icons/weather/temps/14n.png +0 -0
  36. package/src/icons/weather/temps/15.png +0 -0
  37. package/src/icons/weather/temps/15n.png +0 -0
  38. package/src/icons/weather/temps/16.png +0 -0
  39. package/src/icons/weather/temps/16n.png +0 -0
  40. package/src/icons/weather/temps/17.png +0 -0
  41. package/src/icons/weather/temps/17n.png +0 -0
  42. package/src/icons/weather/temps/23.png +0 -0
  43. package/src/icons/weather/temps/23n.png +0 -0
  44. package/src/icons/weather/temps/24.png +0 -0
  45. package/src/icons/weather/temps/24n.png +0 -0
  46. package/src/icons/weather/temps/25.png +0 -0
  47. package/src/icons/weather/temps/25n.png +0 -0
  48. package/src/icons/weather/temps/26.png +0 -0
  49. package/src/icons/weather/temps/26n.png +0 -0
  50. package/src/icons/weather/temps/33.png +0 -0
  51. package/src/icons/weather/temps/33n.png +0 -0
  52. package/src/icons/weather/temps/34.png +0 -0
  53. package/src/icons/weather/temps/34n.png +0 -0
  54. package/src/icons/weather/temps/35.png +0 -0
  55. package/src/icons/weather/temps/35n.png +0 -0
  56. package/src/icons/weather/temps/36.png +0 -0
  57. package/src/icons/weather/temps/36n.png +0 -0
  58. package/src/icons/weather/temps/43.png +0 -0
  59. package/src/icons/weather/temps/43n.png +0 -0
  60. package/src/icons/weather/temps/44.png +0 -0
  61. package/src/icons/weather/temps/44n.png +0 -0
  62. package/src/icons/weather/temps/45.png +0 -0
  63. package/src/icons/weather/temps/45n.png +0 -0
  64. package/src/icons/weather/temps/46.png +0 -0
  65. package/src/icons/weather/temps/46n.png +0 -0
  66. package/src/icons/weather/temps/51.png +0 -0
  67. package/src/icons/weather/temps/51n.png +0 -0
  68. package/src/icons/weather/temps/52.png +0 -0
  69. package/src/icons/weather/temps/52n.png +0 -0
  70. package/src/icons/weather/temps/53.png +0 -0
  71. package/src/icons/weather/temps/54.png +0 -0
  72. package/src/icons/weather/temps/54n.png +0 -0
  73. package/src/icons/weather/temps/61.png +0 -0
  74. package/src/icons/weather/temps/61n.png +0 -0
  75. package/src/icons/weather/temps/62.png +0 -0
  76. package/src/icons/weather/temps/62n.png +0 -0
  77. package/src/icons/weather/temps/63.png +0 -0
  78. package/src/icons/weather/temps/63n.png +0 -0
  79. package/src/icons/weather/temps/64.png +0 -0
  80. package/src/icons/weather/temps/64n.png +0 -0
  81. package/src/icons/weather/temps/71.png +0 -0
  82. package/src/icons/weather/temps/71n.png +0 -0
  83. package/src/icons/weather/temps/72.png +0 -0
  84. package/src/icons/weather/temps/72n.png +0 -0
  85. package/src/icons/weather/temps/73.png +0 -0
  86. package/src/icons/weather/temps/74.png +0 -0
  87. package/src/index.ts +24 -0
  88. package/src/theme/components/_weather_current.scss +69 -0
  89. package/src/theme/main.scss +3 -0
  90. package/towncrier.toml +33 -0
  91. package/tsconfig.json +30 -0
@@ -0,0 +1,3 @@
1
+ ## 1.0.0-alpha.0 (2026-07-20)
2
+
3
+
@@ -0,0 +1,34 @@
1
+ {
2
+ "plugins": {
3
+ "../../core/packages/scripts/prepublish.js": {}
4
+ },
5
+ "hooks": {
6
+ "after:bump": [
7
+ "pipx run towncrier build --draft --yes --version ${version} > .changelog.draft",
8
+ "pipx run towncrier build --yes --version ${version}",
9
+ "cp ../../README.md ./ && cp CHANGELOG.md ../../CHANGELOG.md",
10
+ "python3 -c 'import json; data = json.load(open(\"../../package.json\")); data[\"version\"] = \"${version}\"; json.dump(data, open(\"../../package.json\", \"w\"), indent=2)'",
11
+ "git add ../../CHANGELOG.md ../../package.json"
12
+ ],
13
+ "after:release": [
14
+ "bash -c 'source ../../.env && curl -X POST -H \"Authorization: token $GITHUB_TOKEN\" -H \"Accept: application/vnd.github.v3+json\" https://api.github.com/repos/collective/volto-aemet/releases -d \"{\\\"tag_name\\\":\\\"${version}\\\",\\\"name\\\":\\\"${version}\\\",\\\"body\\\":\\\"$(cat ../../.changelog.draft | sed \\\"s/\\\"/\\\\\\\\\\\"/g\\\" | sed \\\":a;N;$!ba;s/\\n/\\\\\\\\n/g\\\")\\\",\\\"prerelease\\\":${isPreRelease}}\"'",
15
+ "rm .changelog.draft README.md"
16
+ ]
17
+ },
18
+ "npm": {
19
+ "publish": true
20
+ },
21
+ "git": {
22
+ "changelog": "pipx run towncrier build --draft --yes --version 0.0.0",
23
+ "requireUpstream": false,
24
+ "requireCleanWorkingDir": false,
25
+ "commitMessage": "Release ${version}",
26
+ "tagName": "${version}",
27
+ "tagAnnotation": "Release ${version}"
28
+ },
29
+ "github": {
30
+ "release": true,
31
+ "releaseName": "${version}",
32
+ "releaseNotes": "cat .changelog.draft"
33
+ }
34
+ }
package/CHANGELOG.md ADDED
@@ -0,0 +1,11 @@
1
+ # Changelog
2
+
3
+ <!-- You should *NOT* be adding new change log entries to this file.
4
+ You should create a file in the news directory instead.
5
+ For helpful instructions, please see:
6
+ https://6.docs.plone.org/contributing/index.html?highlight=towncrier#change-log-entry
7
+ -->
8
+
9
+ <!-- towncrier release notes start -->
10
+
11
+ ## 1.0.0-alpha.0 (2026-07-20)
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025, 2026 Leonardo J. Caballero G.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,323 @@
1
+ # Volto AEMET Weather (volto-aemet)
2
+
3
+ [![npm](https://img.shields.io/npm/v/volto-aemet)](https://www.npmjs.com/package/volto-aemet)
4
+ [![](https://img.shields.io/badge/-Storybook-ff4785?logo=Storybook&logoColor=white&style=flat-square)](https://collective.github.io/volto-aemet/)
5
+ [![Code analysis checks](https://github.com/collective/volto-aemet/actions/workflows/code.yml/badge.svg)](https://github.com/collective/volto-aemet/actions/workflows/code.yml)
6
+ [![Unit tests](https://github.com/collective/volto-aemet/actions/workflows/unit.yml/badge.svg)](https://github.com/collective/volto-aemet/actions/workflows/unit.yml)
7
+
8
+ <a href="https://www.aemet.es/" title="Agencia Estatal de Meteorología - AEMET. Gobierno de España" target="_blank">
9
+ <img width="400" alt="Agencia Estatal de Meteorología - AEMET. Gobierno de España" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/_static/logo.svg">
10
+ </a>
11
+
12
+ A volto add-on that integrates AEMET service with Plone to report the weather forecast.
13
+
14
+ ## Features
15
+
16
+ - Add a new `AEMET Weather Current` Volto content block.
17
+
18
+ - Add a new `AEMET Weather Forecast` Volto content block.
19
+
20
+ - Add a new `AEMET Settings` Volto control panel.
21
+
22
+ - Add a new react component called `Weather`, that uses data from the AEMET service.
23
+
24
+ ## Screenshots
25
+
26
+ **AEMET Weather Current Volto content block**
27
+
28
+ <img width="720" alt="AEMET Settings" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/volto-content-block-aemet-weather-current.png">
29
+
30
+ ---
31
+
32
+ **AEMET Weather Forecast Volto content block**
33
+
34
+ <img width="720" alt="AEMET Settings" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/volto-content-block-aemet-weather-forecast.png">
35
+
36
+ ---
37
+
38
+ ## Backend integration
39
+
40
+ To use this product in Plone CMS, you needs to include the following add-on in your project: https://github.com/collective/collective.volto.aemet
41
+
42
+ ## Translations
43
+
44
+ This product has been translated into
45
+
46
+ - English
47
+
48
+ - Spanish
49
+
50
+ ## Installation
51
+
52
+ To install your project, you must choose the method appropriate to your version of Volto.
53
+
54
+
55
+ ### Volto 18 and later
56
+
57
+ Add `volto-aemet` to your `package.json`:
58
+
59
+ ```json
60
+ "addons": [
61
+ "volto-aemet": "*"
62
+ ]
63
+ ```
64
+
65
+ ```json
66
+ "dependencies": {
67
+ "volto-aemet": "*"
68
+ }
69
+ ```
70
+
71
+ #### Install from Github
72
+
73
+ If you trying to install from Github you need edit the `mrs.developer.json` file:
74
+
75
+ ```json
76
+ {
77
+ "volto-aemet": {
78
+ "develop": true,
79
+ "output": "./packages/",
80
+ "package": "volto-aemet",
81
+ "url": "git@github.com:collective/volto-aemet.git",
82
+ "https": "https://github.com/collective/volto-aemet.git",
83
+ "branch": "main"
84
+ }
85
+ }
86
+ ```
87
+
88
+ The `mrs.developer.json` is using by an NodeJS utility called `mrs.developer` that makes
89
+ it easy to work with NPM projects containing lots of packages, of which you only want to
90
+ develop some.
91
+
92
+ Also add `volto-aemet` to your `package.json`:
93
+
94
+ ```json
95
+ "addons": [
96
+ "volto-aemet": "*"
97
+ ]
98
+ ```
99
+
100
+ ```json
101
+ "dependencies": {
102
+ "volto-aemet": "workspace:*",
103
+ }
104
+ ```
105
+
106
+ ---
107
+ ### Volto 17 and earlier
108
+
109
+ Create a new Volto project (you can skip this step if you already have one):
110
+
111
+ ```
112
+ npm install -g yo @plone/generator-volto
113
+ yo @plone/volto my-volto-project --addon volto-aemet
114
+ cd my-volto-project
115
+ ```
116
+
117
+ Add `volto-aemet` to your package.json:
118
+
119
+ ```JSON
120
+ "addons": [
121
+ "volto-aemet"
122
+ ],
123
+
124
+ "dependencies": {
125
+ "volto-aemet": "*"
126
+ }
127
+ ```
128
+
129
+ Download and install the new add-on by running:
130
+
131
+ ```
132
+ yarn install
133
+ ```
134
+
135
+ Start volto with:
136
+
137
+ ```
138
+ yarn start
139
+ ```
140
+
141
+ ## Test installation
142
+
143
+ Visit http://localhost:3000/ in a browser, login, and check the awesome new features.
144
+
145
+ ## Use it
146
+
147
+ To use this add-on, go to the `Site setup`, next to the ``Add-on Configuration`` icon, as shown below:
148
+
149
+ <img width="290" alt="Add-on Configuration" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/addon-configuration-aemet-icon.png">
150
+
151
+ ---
152
+
153
+ This `AEMET Settings`, you can access the control panel, as shown below:
154
+
155
+ <img width="720" alt="AEMET Settings" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/aemet-settings.png">
156
+
157
+ In this control panel, you can configure the following fields:
158
+
159
+ - ``Location ID``, The Location ID of the AEMET service, for example '41091' to Sevilla location ID.
160
+
161
+ ---
162
+
163
+
164
+ ## Development
165
+
166
+ The development of this add-on is done in isolation using a new approach using pnpm workspaces and latest `mrs-developer` and other Volto core improvements.
167
+ For this reason, it only works with pnpm and Volto 18 (currently in alpha).
168
+
169
+
170
+ ### Prerequisites ✅
171
+
172
+ - An [operating system](https://6.docs.plone.org/install/create-project-cookieplone.html#prerequisites-for-installation) that runs all the requirements mentioned.
173
+ - [nvm](https://6.docs.plone.org/install/create-project-cookieplone.html#nvm)
174
+ - [Node.js and pnpm](https://6.docs.plone.org/install/create-project.html#node-js) 22
175
+ - [Make](https://6.docs.plone.org/install/create-project-cookieplone.html#make)
176
+ - [Git](https://6.docs.plone.org/install/create-project-cookieplone.html#git)
177
+ - [Docker](https://docs.docker.com/get-started/get-docker/) (optional)
178
+
179
+ ### Installation 🔧
180
+
181
+ 1. Clone this repository, then change your working directory.
182
+
183
+ ```shell
184
+ git clone git@github.com:collective/volto-aemet.git
185
+ cd volto-aemet
186
+ ```
187
+
188
+ 2. Install this code base.
189
+
190
+ ```shell
191
+ make install
192
+ ```
193
+
194
+
195
+ ### Make convenience commands
196
+
197
+ Run `make help` to list the available commands.
198
+
199
+ ```text
200
+ help Show this help
201
+ install Installs the add-on in a development environment
202
+ start Starts Volto, allowing reloading of the add-on during development
203
+ build Build a production bundle for distribution of the project with the add-on
204
+ i18n Sync i18n
205
+ ci-i18n Check if i18n is not synced
206
+ format Format codebase
207
+ lint Lint, or catch and remove problems, in code base
208
+ release Release the add-on on npmjs.org
209
+ release-dry-run Dry-run the release of the add-on on npmjs.org
210
+ test Run unit tests
211
+ ci-test Run unit tests in CI
212
+ backend-docker-start Starts a Docker-based backend for development
213
+ storybook-start Start Storybook server on port 6006
214
+ storybook-build Build Storybook
215
+ acceptance-frontend-dev-start Start acceptance frontend in development mode
216
+ acceptance-frontend-prod-start Start acceptance frontend in production mode
217
+ acceptance-backend-start Start backend acceptance server
218
+ ci-acceptance-backend-start Start backend acceptance server in headless mode for CI
219
+ acceptance-test Start Cypress in interactive mode
220
+ ci-acceptance-test Run cypress tests in headless mode for CI
221
+ ```
222
+
223
+ ### Development environment set up
224
+
225
+ Install package requirements.
226
+
227
+ ```shell
228
+ make install
229
+ ```
230
+
231
+ ### Start developing
232
+
233
+ Start the backend.
234
+
235
+ ```shell
236
+ make backend-docker-start
237
+ ```
238
+
239
+ In a separate terminal session, start the frontend.
240
+
241
+ ```shell
242
+ make start
243
+ ```
244
+
245
+ ### Lint code
246
+
247
+ Run ESlint, Prettier, and Stylelint in analyze mode.
248
+
249
+ ```shell
250
+ make lint
251
+ ```
252
+
253
+ ### Format code
254
+
255
+ Run ESlint, Prettier, and Stylelint in fix mode.
256
+
257
+ ```shell
258
+ make format
259
+ ```
260
+
261
+ ### i18n
262
+
263
+ Extract the i18n messages to locales.
264
+
265
+ ```shell
266
+ make i18n
267
+ ```
268
+
269
+ ### Unit tests
270
+
271
+ Run unit tests.
272
+
273
+ ```shell
274
+ make test
275
+ ```
276
+
277
+ ### Run Cypress tests
278
+
279
+ Run each of these steps in separate terminal sessions.
280
+
281
+ In the first session, start the frontend in development mode.
282
+
283
+ ```shell
284
+ make acceptance-frontend-dev-start
285
+ ```
286
+
287
+ In the second session, start the backend acceptance server.
288
+
289
+ ```shell
290
+ make acceptance-backend-start
291
+ ```
292
+
293
+ In the third session, start the Cypress interactive test runner.
294
+
295
+ ```shell
296
+ make acceptance-test
297
+ ```
298
+
299
+ ## Credits
300
+
301
+ Developed with the support of:
302
+
303
+ - [Agencia Estatal de Meteorología - AEMET. Gobierno de España](https://www.aemet.es/).
304
+
305
+ <img width="200" alt="IMD Logo" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/aemet-logo-blue.svg">
306
+
307
+ - [Instituto Municipal de Deportes - IMD, Seville City Council, Spain](https://imd.sevilla.org/).
308
+
309
+ <img width="200" alt="IMD Logo" src="https://raw.githubusercontent.com/collective/volto-aemet/refs/heads/main/docs/source/images/imd-ayto-logo.svg">
310
+
311
+ ### Acknowledgements 🙏
312
+
313
+ Generated using [Cookieplone (0.9.10)](https://github.com/plone/cookieplone) and [cookieplone-templates (eb40854)](https://github.com/plone/cookieplone-templates/commit/eb4085428af6261227bcb086ece110bbe5475d89) on 2025-11-06 19:31:17.502224. A special thanks to all contributors and supporters!
314
+
315
+ ## Authors
316
+
317
+ This product was developed by [Leonardo J. Caballero G.](https://github.com/macagua).
318
+
319
+ <img width="100" alt="Leonardo J. Caballero G." src="https://avatars.githubusercontent.com/u/185395?v=4&size=100">
320
+
321
+ ## License
322
+
323
+ The project is licensed under the MIT license.
@@ -0,0 +1,17 @@
1
+ module.exports = function (api) {
2
+ api.cache(true);
3
+ const presets = ['razzle'];
4
+ const plugins = [
5
+ [
6
+ 'react-intl', // React Intl extractor, required for the whole i18n infrastructure to work
7
+ {
8
+ messagesDir: './build/messages/',
9
+ },
10
+ ],
11
+ ];
12
+
13
+ return {
14
+ plugins,
15
+ presets,
16
+ };
17
+ };
@@ -0,0 +1,83 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: \n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: \n"
7
+ "Last-Translator: \n"
8
+ "Language: de\n"
9
+ "Language-Team: \n"
10
+ "Content-Type: \n"
11
+ "Content-Transfer-Encoding: \n"
12
+ "Plural-Forms: \n"
13
+
14
+ #. Default: "AEMET Weather Forecast"
15
+ #: components/Blocks/AemetWeatherForecast/messages
16
+ msgid "AEMET Weather Forecast"
17
+ msgstr ""
18
+
19
+ #. Default: "Default"
20
+ #: components/Blocks/AemetWeatherForecast/messages
21
+ msgid "Default"
22
+ msgstr ""
23
+
24
+ #. Default: "Location ID"
25
+ #: components/Blocks/AemetWeatherForecast/messages
26
+ msgid "Location ID"
27
+ msgstr ""
28
+
29
+ #. Default: "Province"
30
+ #: components/Blocks/AemetWeatherForecast/messages
31
+ msgid "Province"
32
+ msgstr ""
33
+
34
+ #. Default: "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
35
+ #: components/Blocks/AemetWeatherForecast/messages
36
+ msgid "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
37
+ msgstr ""
38
+
39
+ #. Default: "The name of the province of the location (in lowercase) of the AEMET service."
40
+ #: components/Blocks/AemetWeatherForecast/messages
41
+ msgid "The name of the province of the location (in lowercase) of the AEMET service."
42
+ msgstr ""
43
+
44
+ #. Default: "Current day"
45
+ #: components/Aemet/Weather
46
+ msgid "current_day"
47
+ msgstr ""
48
+
49
+ #. Default: "Current location"
50
+ #: components/Aemet/Weather
51
+ msgid "current_location"
52
+ msgstr ""
53
+
54
+ #. Default: "Current temperature"
55
+ #: components/Aemet/Weather
56
+ msgid "current_temperature"
57
+ msgstr ""
58
+
59
+ #. Default: "Current time"
60
+ #: components/Aemet/Weather
61
+ msgid "current_time"
62
+ msgstr ""
63
+
64
+ #. Default: "Loading weather forecast..."
65
+ #: components/Aemet/Weather
66
+ #: components/Aemet/WeatherCurrent
67
+ msgid "loading_weather_forecast"
68
+ msgstr ""
69
+
70
+ #. Default: "Minimum-Maximum"
71
+ #: components/Aemet/Weather
72
+ msgid "minimum_maximum"
73
+ msgstr ""
74
+
75
+ #. Default: "Not available"
76
+ #: components/Aemet/Weather
77
+ msgid "not_available"
78
+ msgstr ""
79
+
80
+ #. Default: "Weather description"
81
+ #: components/Aemet/Weather
82
+ msgid "weather_description"
83
+ msgstr ""
@@ -0,0 +1,83 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: \n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: \n"
6
+ "PO-Revision-Date: \n"
7
+ "Last-Translator: \n"
8
+ "Language: en\n"
9
+ "Language-Team: \n"
10
+ "Content-Type: \n"
11
+ "Content-Transfer-Encoding: \n"
12
+ "Plural-Forms: \n"
13
+
14
+ #. Default: "AEMET Weather Forecast"
15
+ #: components/Blocks/AemetWeatherForecast/messages
16
+ msgid "AEMET Weather Forecast"
17
+ msgstr ""
18
+
19
+ #. Default: "Default"
20
+ #: components/Blocks/AemetWeatherForecast/messages
21
+ msgid "Default"
22
+ msgstr ""
23
+
24
+ #. Default: "Location ID"
25
+ #: components/Blocks/AemetWeatherForecast/messages
26
+ msgid "Location ID"
27
+ msgstr ""
28
+
29
+ #. Default: "Province"
30
+ #: components/Blocks/AemetWeatherForecast/messages
31
+ msgid "Province"
32
+ msgstr ""
33
+
34
+ #. Default: "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
35
+ #: components/Blocks/AemetWeatherForecast/messages
36
+ msgid "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
37
+ msgstr ""
38
+
39
+ #. Default: "The name of the province of the location (in lowercase) of the AEMET service."
40
+ #: components/Blocks/AemetWeatherForecast/messages
41
+ msgid "The name of the province of the location (in lowercase) of the AEMET service."
42
+ msgstr ""
43
+
44
+ #. Default: "Current day"
45
+ #: components/Aemet/Weather
46
+ msgid "current_day"
47
+ msgstr ""
48
+
49
+ #. Default: "Current location"
50
+ #: components/Aemet/Weather
51
+ msgid "current_location"
52
+ msgstr ""
53
+
54
+ #. Default: "Current temperature"
55
+ #: components/Aemet/Weather
56
+ msgid "current_temperature"
57
+ msgstr ""
58
+
59
+ #. Default: "Current time"
60
+ #: components/Aemet/Weather
61
+ msgid "current_time"
62
+ msgstr ""
63
+
64
+ #. Default: "Loading weather forecast..."
65
+ #: components/Aemet/Weather
66
+ #: components/Aemet/WeatherCurrent
67
+ msgid "loading_weather_forecast"
68
+ msgstr ""
69
+
70
+ #. Default: "Minimum-Maximum"
71
+ #: components/Aemet/Weather
72
+ msgid "minimum_maximum"
73
+ msgstr ""
74
+
75
+ #. Default: "Not available"
76
+ #: components/Aemet/Weather
77
+ msgid "not_available"
78
+ msgstr ""
79
+
80
+ #. Default: "Weather description"
81
+ #: components/Aemet/Weather
82
+ msgid "weather_description"
83
+ msgstr ""
@@ -0,0 +1,90 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Plone\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2026-07-16 1:40-0400\n"
6
+ "PO-Revision-Date: 2026-07-19 14:29-0400\n"
7
+ "Last-Translator: Leonardo J. Caballero G. <leonardocaballero@gmail.com>\n"
8
+ "Language: es\n"
9
+ "Language-Team: ES <LL@li.org>\n"
10
+ "Content-Type: text/plain; charset=utf-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
13
+ "Preferred-Encodings: utf-8\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Language-Code: es\n"
16
+ "Language-Name: Español\n"
17
+ "Domain: volto\n"
18
+ "X-Is-Fallback-For: es-ar es-bo es-cl es-co es-cr es-do es-ec es-es es-sv es-gt es-hn es-mx es-ni es-pa es-py es-pe es-pr es-us es-uy es-ve\n"
19
+ "X-Generator: Poedit 2.2.1\n"
20
+
21
+ #. Default: "AEMET Weather Forecast"
22
+ #: components/Blocks/AemetWeatherForecast/messages
23
+ msgid "AEMET Weather Forecast"
24
+ msgstr "AEMET: Pronóstico del tiempo"
25
+
26
+ #. Default: "Default"
27
+ #: components/Blocks/AemetWeatherForecast/messages
28
+ msgid "Default"
29
+ msgstr "Predeterminado"
30
+
31
+ #. Default: "Location ID"
32
+ #: components/Blocks/AemetWeatherForecast/messages
33
+ msgid "Location ID"
34
+ msgstr "ID de ubicación"
35
+
36
+ #. Default: "Province"
37
+ #: components/Blocks/AemetWeatherForecast/messages
38
+ msgid "Province"
39
+ msgstr "Provincia"
40
+
41
+ #. Default: "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
42
+ #: components/Blocks/AemetWeatherForecast/messages
43
+ msgid "The Location ID of the AEMET service, for example '41091' to Sevilla location ID."
44
+ msgstr "El ID de ubicación del servicio AEMET, por ejemplo '41091' para la ubicación de Sevilla."
45
+
46
+ #. Default: "The name of the province of the location (in lowercase) of the AEMET service."
47
+ #: components/Blocks/AemetWeatherForecast/messages
48
+ msgid "The name of the province of the location (in lowercase) of the AEMET service."
49
+ msgstr "El nombre de la provincia en la que se encuentra (en minúsculas) el servicio de la AEMET."
50
+
51
+ #. Default: "Current day"
52
+ #: components/Aemet/Weather
53
+ msgid "current_day"
54
+ msgstr "Día actual"
55
+
56
+ #. Default: "Current location"
57
+ #: components/Aemet/Weather
58
+ msgid "current_location"
59
+ msgstr "Ubicación actual"
60
+
61
+ #. Default: "Current temperature"
62
+ #: components/Aemet/Weather
63
+ msgid "current_temperature"
64
+ msgstr "Temperatura actual"
65
+
66
+ #. Default: "Current time"
67
+ #: components/Aemet/Weather
68
+ msgid "current_time"
69
+ msgstr "Hora actual"
70
+
71
+ #. Default: "Loading weather forecast..."
72
+ #: components/Aemet/Weather
73
+ #: components/Aemet/WeatherCurrent
74
+ msgid "loading_weather_forecast"
75
+ msgstr "Cargando la previsión meteorológica..."
76
+
77
+ #. Default: "Minimum-Maximum"
78
+ #: components/Aemet/Weather
79
+ msgid "minimum_maximum"
80
+ msgstr "Mínimo-Máximo"
81
+
82
+ #. Default: "Not available"
83
+ #: components/Aemet/Weather
84
+ msgid "not_available"
85
+ msgstr "No disponible"
86
+
87
+ #. Default: "Weather description"
88
+ #: components/Aemet/Weather
89
+ msgid "weather_description"
90
+ msgstr "Descripción del clima"