| Strings Words Characters | |||
|---|---|---|---|
| 404 2,937 25,694 |
|
All strings | Browse Translate Zen |
| 1 198 2,892 |
|
Approved strings | Browse Translate Zen |
| 383 2,746 24,508 |
|
Translated strings | Browse Translate Zen |
| 382 2,548 21,616 |
|
Strings waiting for review | Browse Translate Zen |
| 21 191 1,186 |
|
Unfinished strings | Browse Translate Zen |
| 21 191 1,186 |
|
Untranslated strings | Browse Translate Zen |
| 6 67 409 |
|
Strings with any failing checks | Browse Translate Zen |
| 6 67 409 |
|
Translated strings with any failing checks | Browse Translate Zen |
| 5 64 393 |
|
Failing check: Mismatched full stop | Browse Translate Zen |
| 1 3 16 |
|
Failing check: Python format | Browse Translate Zen |
Summary
| Project website | www.odoo.com | |
|---|---|---|
| Project reviewers41 |
|
|
| Translation license | BSD 2-Clause "Simplified" License | |
| Translation process |
|
|
| File mask |
planning/i18n/*.po
|
|
| Translation file |
Download
planning/i18n/es.po
|
|
| Last change | March 10, 2026, 3:14 p.m. | |
| Last change made by | Noemi Pla Garcia (nopl) | |
| Language | Spanish | |
| Language code | es | |
| Text direction | Left to right | |
| Case sensitivity | Case-sensitive | |
| Number of speakers | 507,599,381 | |
| Number of plurals | 3 | |
| Plural type | One/many/other | |
| Plurals | One | 1 | Many | 1000000, 2000000 |
| Other | 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, … | |
| Plural formula |
(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0) ? 1 : 2)
|
|
03/10/2026
String statistics
| Strings percent | Hosted strings | Words percent | Hosted words | Characters percent | Hosted characters | |
|---|---|---|---|---|---|---|
| Total | 404 | 2,937 | 25,694 | |||
| Approved | 1% | 1 | 6% | 198 | 11% | 2,892 |
| Waiting for review | 94% | 382 | 86% | 2,548 | 84% | 21,616 |
| Translated | 94% | 383 | 93% | 2,746 | 95% | 24,508 |
| Needs editing | 0% | 0 | 0% | 0 | 0% | 0 |
| Read-only | 0% | 0 | 0% | 0 | 0% | 0 |
| Failing checks | 1% | 6 | 2% | 67 | 1% | 409 |
| Strings with suggestions | 0% | 0 | 0% | 0 | 0% | 0 |
| Untranslated strings | 5% | 21 | 6% | 191 | 4% | 1,186 |
Quick numbers
and previous 30 days
Trends of last 30 days
+1%
Hosted words
+100%
+1%
Hosted strings
+100%
−1%
Translated
+95%
—
Contributors
—
|
Translation approved |
|
|
Translation changed |
|
None
Resource updated |
The “
planning/i18n/es.po” file was changed.
02/28/2026
|
None
String added in the repository |
|
None
String added in the repository |
|
None
String added in the repository |
|
|
Changes committed |
Changes committed
01/13/2026
|
|
Translation changed |
|
|
Contributor joined |
Contributor joined
01/12/2026
|
None
Resource updated |
The “
planning/i18n/es.po” file was changed.
01/10/2026
|
| 404 | File in original format as translated in the repository | gettext PO file | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 404 | All strings, converted files enriched with comments; suitable for offline translation | CSV | gettext MO | gettext PO | TBX | TMX | XLIFF 1.1 with gettext extensions | XLIFF 1.1 | XLSX |
| 21 | Unfinished strings, converted files enriched with comments; suitable for offline translation | CSV | gettext MO | gettext PO | TBX | TMX | XLIFF 1.1 with gettext extensions | XLIFF 1.1 | XLSX |
None
.planning_mail_template_button {
padding: 5px 10px;
text-decoration: none;
border: 1px;
border-radius: 3px;
display: inline-block;
width: 190px;
text-align: center;
}
</style>
<body><div>
<p t-if="ctx.get('employee')">Dear <t t-out="ctx['employee'].name or ''">Anita Oliver</t>,</p>
<p t-else="">Hello,</p>
<br/>
<p t-if="ctx.get('start_datetime') and ctx.get('end_datetime')">
Your upcoming shifts from <t t-out="format_date(ctx['start_datetime'])">05-05-2021</t>
to <t t-out="format_date(ctx['end_datetime'])">05-11-2021</t> have been published.
</p>
<div style="display: flex; margin: 15px;">
<div t-if="ctx.get('planning_url')" style="margin-right: 15px;">
<a t-att-href="ctx['planning_url']" target="_blank" class="planning_mail_template_button" t-attf-style="color: {{object.company_id.email_primary_color or '#FFFFFF'}}; background-color: {{object.company_id.email_secondary_color or '#875A7B'}};">View Your Planning</a>
</div>
<div t-if="ctx.get('planning_url_ics')">
<a t-att-href="ctx['planning_url_ics']" target="_blank" class="planning_mail_template_button" style="color: #374151; background-color: #E7E9ED; border: solid #E7E9ED;">Add to Calendar</a>
</div>
</div>
<br/>
<p t-if="ctx.get('slot_unassigned') or (object.allow_self_unassign and object.self_unassign_days_before)">
<t t-if="ctx.get('slot_unassigned')">
We would also like to remind you that there are some open shifts available, and if you are interested and available, please assign yourself to those shifts.
</t>
<t t-if="object.allow_self_unassign and object.self_unassign_days_before">
If you are unable to work a shift that has been assigned to you, please unassign yourself within <t t-out="object.self_unassign_days_before or ''">5</t> day(s) before the start of the shift.
</t>
</p>
<p t-if="ctx.get('message')" t-out="ctx['message']"/>
<p t-if="object.allow_self_unassign">In case your current schedule doesn't suit you, we encourage you to reach out to your colleagues and request to switch shifts. They might be interested in exchanging shifts with you.</p>
</div>
</body>
.planning_mail_template_button {
padding: 5px 10px;
text-decoration: none;
border: 1px;
border-radius: 3px;
display: inline-block;
width: 190px;
text-align: center;
}
</style>
<body><div>
<p t-if="ctx.get('employee')">Estimada <t t-out="ctx['employee'].name or ''">Anita Oliver</t>:</p>
<p t-else="">Hola:</p>
<br/>
<p t-if="ctx.get('start_datetime') and ctx.get('end_datetime')">
Se han publicado sus próximos turnos de trabajo del <t t-out="format_date(ctx['start_datetime'])">05-05-2021</t>
al <t t-out="format_date(ctx['end_datetime'])">11-05-2021</t>.
</p>
<div style="display: flex; margin: 15px;">
<div t-if="ctx.get('planning_url')" style="margin-right: 15px;">
<a t-att-href="ctx['planning_url']" target="_blank" class="planning_mail_template_button" t-attf-style="color: {{object.company_id.email_primary_color or '#FFFFFF'}}; background-color: {{object.company_id.email_secondary_color or '#875A7B'}};">Ver horarios</a>
</div>
<div t-if="ctx.get('planning_url_ics')">
<a t-att-href="ctx['planning_url_ics']" target="_blank" class="planning_mail_template_button" style="color: #374151; background-color: #E7E9ED; border: solid #E7E9ED;">Añadir al calendario</a>
</div>
</div>
<br/>
<p t-if="ctx.get('slot_unassigned') or (object.allow_self_unassign and object.self_unassign_days_before)">
<t t-if="ctx.get('slot_unassigned')">
Queremos recordarle que hay algunos turnos de trabajo disponibles. Si está interesado/a, puede asignárselos usted mismo/a.
</t>
<t t-if="object.allow_self_unassign and object.self_unassign_days_before">
Si se le ha asignado un turno que no puede cubrir, por favor, cancele la asignación en un plazo de <t t-out="object.self_unassign_days_before or ''">5</t> días antes del inicio del turno de trabajo.
</t>
</p>
<p t-if="ctx.get('message')" t-out="ctx['message']"/>
<p t-if="object.allow_self_unassign">Si no puede cubrir este turno, le pedimos que contacte con alguno de sus compañeros para que puedan cambiárselo, en caso de que estén interesados.</p>
</div>
</body>