| Component | Approved | Translated | Unreviewed | Unfinished | Unfinished words | Unfinished characters | Untranslated | Checks | Suggestions | Comments | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| account BSD-2-Clause | 1% | 99% | 2,917 | 2 | 5 | 29 | 1 | 74 | 0 | 0 | |
| account_3way_match BSD-2-Clause | 0% | 16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_accountant BSD-2-Clause | 1% | 99% | 474 | 1 | 1 | 6 | 0 | 3 | 0 | 0 | |
| account_accountant_batch_payment BSD-2-Clause | 0% | 38 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_accountant_check_printing BSD-2-Clause | 0% | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_accountant_fleet BSD-2-Clause | 0% | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_add_gln BSD-2-Clause | 33% | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_asset BSD-2-Clause | 1% | 100% | 317 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | |
| account_asset_fleet BSD-2-Clause | 0% | 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_auto_transfer BSD-2-Clause | 0% | 100% | 78 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | |
| account_avatax BSD-2-Clause | 0% | 117 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_avatax_geolocalize BSD-2-Clause | 0% | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_avatax_sale BSD-2-Clause | 0% | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_avatax_stock BSD-2-Clause | 0% | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_bank_statement_extract BSD-2-Clause | 0% | 100% | 37 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_bank_statement_import BSD-2-Clause | 0% | 100% | 27 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_bank_statement_import_camt BSD-2-Clause | 1% | 315 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_bank_statement_import_csv BSD-2-Clause | 0% | 7 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_bank_statement_import_ofx BSD-2-Clause | 0% | 100% | 3 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_bank_statement_import_qif BSD-2-Clause | 0% | 9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_base_import BSD-2-Clause | 0% | 74 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_batch_payment BSD-2-Clause | 0% | 100% | 166 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | |
| account_budget BSD-2-Clause | 1% | 100% | 129 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | |
| account_check_printing BSD-2-Clause | 1% | 100% | 64 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_debit_note BSD-2-Clause | 0% | 100% | 34 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_disallowed_expenses BSD-2-Clause | 0% | 38 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_disallowed_expenses_fleet BSD-2-Clause | 0% | 100% | 23 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | |
| account_edi BSD-2-Clause | 0% | 100% | 73 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | |
| account_edi_proxy_client BSD-2-Clause | 0% | 100% | 33 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | |
| account_edi_ubl_cii BSD-2-Clause | 1% | 93% | 177 | 13 | 55 | 388 | 5 | 2 | 0 | 0 | |
| account_edi_ubl_cii_tax_extension BSD-2-Clause | 1% | 73% | 75 | 28 | 530 | 2,935 | 28 | 3 | 0 | 0 | |
| account_external_tax BSD-2-Clause | 0% | 100% | 8 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_fleet BSD-2-Clause | 0% | 20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_followup BSD-2-Clause | 1% | 100% | 152 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | |
| account_inter_company_rules BSD-2-Clause | 0% | 17 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_intrastat BSD-2-Clause | 1% | 100% | 115 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_intrastat_services BSD-2-Clause | 0% | 21 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_invoice_extract BSD-2-Clause | 0% | 100% | 72 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_invoice_extract_purchase BSD-2-Clause | 0% | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_iso20022 BSD-2-Clause | 0% | 100% | 66 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | |
| account_loans BSD-2-Clause | 0% | 163 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_no_followup BSD-2-Clause | 0% | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_online_payment BSD-2-Clause | 0% | 96% | 24 | 1 | 13 | 65 | 1 | 0 | 0 | 0 | |
| account_online_synchronization BSD-2-Clause | 1% | 100% | 216 | 0 | 0 | 0 | 0 | 6 | 0 | 0 | |
| account_payment BSD-2-Clause | 0% | 100% | 128 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_peppol BSD-2-Clause | 1% | 97% | 214 | 5 | 50 | 310 | 4 | 2 | 0 | 0 | |
| account_peppol_selfbilling BSD-2-Clause | 5% | 88% | 15 | 2 | 33 | 205 | 2 | 0 | 0 | 0 | |
| account_qr_code_emv BSD-2-Clause | 0% | 100% | 15 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_qr_code_sepa BSD-2-Clause | 0% | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_reports BSD-2-Clause | 1% | 99% | 722 | 1 | 8 | 43 | 1 | 10 | 0 | 0 | |
| account_reports_cash_basis BSD-2-Clause | 0% | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_saft BSD-2-Clause | 0% | 16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_saft_import BSD-2-Clause | 0% | 23 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_sepa_direct_debit BSD-2-Clause | 2% | 100% | 269 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | |
| account_tax_python BSD-2-Clause | 12% | 100% | 7 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| account_update_tax_tags BSD-2-Clause | 0% | 17 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| account_winbooks_import BSD-2-Clause | 0% | 100% | 37 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | |
| accountant BSD-2-Clause | 0% | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| agriculture_shop BSD-2-Clause | 1% | 100% | 172 | 0 | 0 | 0 | 0 | 13 | 0 | 0 | |
| analytic BSD-2-Clause | 0% | 98% | 161 | 2 | 6 | 37 | 0 | 2 | 0 | 0 | |
| analytic_enterprise BSD-2-Clause | 0% | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| appointment BSD-2-Clause | 1% | 99% | 600 | 2 | 652 | 10,628 | 0 | 20 | 0 | 0 | |
| appointment_account_payment BSD-2-Clause | 1% | 100% | 87 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | |
| appointment_crm BSD-2-Clause | 0% | 13 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| appointment_google_calendar BSD-2-Clause | 0% | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| appointment_google_reserve BSD-2-Clause | 0% | 100% | 77 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | |
| appointment_hr BSD-2-Clause | 0% | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| appointment_hr_recruitment BSD-2-Clause | 0% | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| appointment_microsoft_calendar BSD-2-Clause | 0% | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| appointment_sms BSD-2-Clause | 0% | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| approvals BSD-2-Clause | 1% | 99% | 247 | 1 | 5 | 33 | 1 | 3 | 0 | 0 | |
| approvals_purchase BSD-2-Clause | 0% | 100% | 24 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| approvals_purchase_stock BSD-2-Clause | 0% | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| architects BSD-2-Clause | 0% | 74 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| art_craft BSD-2-Clause | 0% | 100% | 183 | 0 | 0 | 0 | 0 | 16 | 0 | 0 | |
| attachment_indexation BSD-2-Clause | 0% | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| auth_ldap BSD-2-Clause | 2% | 100% | 36 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | |
| auth_oauth BSD-2-Clause | 0% | 44 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| auth_passkey BSD-2-Clause | 0% | 39 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| auth_password_policy BSD-2-Clause | 0% | 10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| auth_password_policy_portal BSD-2-Clause | 0% | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| auth_password_policy_signup BSD-2-Clause | 0% | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| auth_signup BSD-2-Clause | 2% | 100% | 95 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | |
| auth_totp BSD-2-Clause | 0% | 62 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| auth_totp_mail BSD-2-Clause | 0% | 21 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| auth_totp_mail_enforce BSD-2-Clause | 0% | 100% | 31 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | |
| auth_totp_portal BSD-2-Clause | 0% | 14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| automobile BSD-2-Clause | 0% | 92% | 53 | 4 | 37 | 234 | 4 | 1 | 0 | 0 | |
| bakery BSD-2-Clause | 1% | 100% | 107 | 0 | 0 | 0 | 0 | 4 | 0 | 0 | |
| bar_industry BSD-2-Clause | 1% | 100% | 87 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | |
| barcodes BSD-2-Clause | 0% | 100% | 57 | 0 | 0 | 0 | 0 | 2 | 0 | 0 | |
| barcodes_gs1_nomenclature BSD-2-Clause | 0% | 38 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| base BSD-2-Clause | 1% | 98% | 6,081 | 120 | 1,407 | 9,562 | 120 | 197 | 0 | 0 | |
| base_address_extended BSD-2-Clause | 0% | 29 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| base_automation BSD-2-Clause | 0% | 100% | 170 | 0 | 0 | 0 | 0 | 5 | 0 | 0 | |
| base_automation_hr_contract BSD-2-Clause | 0% | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| base_geolocalize BSD-2-Clause | 0% | 34 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| base_iban BSD-2-Clause | 0% | 8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| base_import BSD-2-Clause | 0% | 100% | 150 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | |
| base_import_module BSD-2-Clause | 0% | 100% | 50 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | |
Summary
| Project website | www.odoo.com | |
|---|---|---|
| Project reviewers41 |
|
|
| Language | Spanish | |
| Language code | es | |
| Text direction | Left to right | |
| Case sensitivity | Case-sensitive | |
| Number of speakers | 507,599,381 | |
03/25/2026
String statistics
| Strings percent | Hosted strings | Words percent | Hosted words | Characters percent | Hosted characters | |
|---|---|---|---|---|---|---|
| Total | 92,938 | 548,232 | 3,949,473 | |||
| Approved | 1% | 279 | 1% | 9,155 | 3% | 133,937 |
| Waiting for review | 99% | 92,366 | 97% | 534,640 | 95% | 3,774,137 |
| Translated | 99% | 92,645 | 99% | 543,795 | 98% | 3,908,074 |
| Needs editing | 1% | 44 | 1% | 1,093 | 1% | 14,960 |
| Read-only | 0% | 0 | 0% | 0 | 0% | 0 |
| Failing checks | 2% | 2,607 | 6% | 35,903 | 6% | 258,734 |
| Strings with suggestions | 0% | 0 | 0% | 0 | 0% | 0 |
| Untranslated strings | 1% | 249 | 1% | 3,344 | 1% | 26,439 |
Quick numbers
and previous 30 days
Trends of last 30 days
+1%
Hosted words
+100%
+1%
Hosted strings
+100%
−1%
Translated
+99%
—
Contributors
+100%
|
Translation approved |
|
|
Translation added |
|
|
Translation approved |
|
|
Translation changed |
|
|
Translation added |
|
|
Contributor joined |
Contributor joined
03/24/2026
|
|
Automatically translated |
|
|
Translation approved |
|
|
Translation changed |
|
|
Translation approved |
|
<t t-set="colors" t-value="{'needsAction': 'grey', 'accepted': 'green', 'tentative': '#FFFF00', 'declined': 'red'}"/>
<t t-set="customer" t-value=" object.event_id.find_partner_customer()"/>
<t t-set="target_responsible" t-value="object.partner_id == object.event_id.partner_id"/>
<t t-set="target_customer" t-value="object.partner_id == customer"/>
<t t-set="recurrent" t-value="object.recurrence_id and not ctx.get('calendar_template_ignore_recurrence')"/>
<p>
Hello <t t-out="object.common_name or ''">Wood Corner</t>,<br/><br/>
<t t-if="not target_responsible">
<t t-if="not object.event_id.user_id.active">
You have been invited by Customer to the <strong t-out="object.event_id.name or ''">Follow-up for Project proposal</strong> meeting.
</t>
<t t-else="">
<t t-out="object.event_id.user_id.partner_id.name or ''">Colleen Diaz</t> invited you for the <strong t-out="object.event_id.name or ''">Follow-up for Project proposal</strong> meeting.
</t>
</t>
<t t-else="">
Your meeting <strong t-out="object.event_id.name or ''">Follow-up for Project proposal</strong> has been booked.
</t>
</p>
<div style="text-align: center; padding: 16px 0px 16px 0px;">
<a t-attf-href="/calendar/meeting/view?token={{object.access_token}}&id={{object.event_id.id}}" style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">View</a>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tr>
<td width="130px;" style="min-width: 130px;">
<div style="border-top-start-radius: 3px; border-top-end-radius: 3px; font-size: 12px; border-collapse: separate; text-align: center; font-weight: bold; color: #ffffff; min-height: 18px; background-color: #875A7B; border: 1px solid #875A7B;">
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='EEEE', lang_code=object.env.lang) or ''">Tuesday</t>
</div>
<div style="font-size: 48px; min-height: auto; font-weight: bold; text-align: center; color: #5F5F5F; background-color: #F8F8F8; border: 1px solid #875A7B;">
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='d', lang_code=object.env.lang) or ''">4</t>
</div>
<div style="font-size: 12px; text-align: center; font-weight: bold; color: #ffffff; background-color: #875A7B;">
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='MMMM y', lang_code=object.env.lang) or ''">May 2021</t>
</div>
<div style="border-collapse: separate; color: #5F5F5F; text-align: center; font-size: 12px; border-bottom-end-radius: 3px; font-weight: bold ; border: 1px solid #875A7B; border-bottom-start-radius: 3px;">
<t t-if="not object.event_id.allday">
<div>
<t t-out="format_time(time=object.event_id.start, tz=object.mail_tz, time_format='short', lang_code=object.env.lang) or ''">11:00 AM</t>
</div>
<t t-if="object.mail_tz">
<div style="font-size: 10px; font-weight: normal">
(<t t-out="object.mail_tz or ''">Europe/Brussels</t>)
</div>
</t>
</t>
</div>
</td>
<td width="20px;"/>
<td style="padding-top: 5px;">
<p><strong>Details of the event</strong></p>
<ul>
<t t-if="object.event_id.location">
<li>Location: <t t-out="object.event_id.location or ''">Bruxelles</t>
<a target="_blank" t-if="not is_online or is_online and object.event_id.location != object.event_id.appointment_type_id.location_id.name" t-attf-href="http://maps.google.com/maps?oi=map&q={{object.event_id.location}}">(View Map)</a>
</li>
</t>
<t t-if="recurrent">
<li>When: <t t-out="object.recurrence_id.get_recurrence_name()">Every 1 Weeks, for 3 events</t></li>
</t>
<t t-if="not object.event_id.allday and object.event_id.duration">
<li>Duration: <t t-out="('%dH%02d' % (object.event_id.duration,round(object.event_id.duration*60)%60)) or ''">0H30</t></li>
</t>
<li>Attendees
<ul>
<li t-foreach="object.event_id.attendee_ids" t-as="attendee">
<div t-attf-style="display: inline-block; border-radius: 50%; width: 10px; height: 10px; background:{{ colors.get(attendee.state) or 'white' }};"> </div>
<t t-if="attendee.common_name != object.common_name">
<span style="margin-left:5px" t-out="attendee.common_name or ''">Mitchell Admin</span>
</t>
<t t-else="">
<span style="margin-left:5px">You</span>
</t>
</li>
</ul></li>
<t t-if="object.event_id.videocall_location">
<li>
How to Join:
<t t-if="object.get_base_url() in object.event_id.videocall_location"> Join with Odoo Discuss</t>
<t t-else=""> Join at</t><br/>
<a t-att-href="object.event_id.videocall_location" target="_blank" t-out="object.event_id.videocall_location or ''">www.mycompany.com/calendar/join_videocall/xyz</a>
</li>
</t>
<t t-if="not is_html_empty(object.event_id.description)">
<li>Description of the event:
<t t-out="object.event_id.description">Internal meeting for discussion for new pricing for product and services.</t></li>
</t>
</ul>
</td>
</tr></table>
<br/>
Thank you,
<t t-if="object.event_id.user_id.signature" data-o-mail-quote-container="1">
<br/>
<t t-out="object.event_id.user_id.signature or ''" data-o-mail-quote="1">--<br data-o-mail-quote="1"/>Mitchell Admin</t>
</t>
</div>
<t t-set="colors" t-value="{'needsAction': 'grey', 'accepted': 'green', 'tentative': '#FFFF00', 'declined': 'red'}"/>
<t t-set="customer" t-value=" object.event_id.find_partner_customer()"/>
<t t-set="target_responsible" t-value="object.partner_id == object.event_id.partner_id"/>
<t t-set="target_customer" t-value="object.partner_id == customer"/>
<t t-set="recurrent" t-value="object.recurrence_id and not ctx.get('calendar_template_ignore_recurrence')"/>
<p>
Hola, <t t-out="object.common_name or ''">Wood Corner</t>:<br/><br/>
<t t-if="not target_responsible">
<t t-if="not object.event_id.user_id.active">
El cliente le ha invitado a la siguiente reunión: <strong t-out="object.event_id.name or ''">Seguimiento de la propuesta del proyecto</strong>.
</t>
<t t-else="">
<t t-out="object.event_id.user_id.partner_id.name or ''">Colleen Diaz</t> le ha invitado a la reunión <strong t-out="object.event_id.name or ''">Seguimiento de la propuesta del proyecto</strong>.
</t>
</t>
<t t-else="">
La reunión <strong t-out="object.event_id.name or ''">Seguimiento de la propuesta del proyecto</strong> se ha agendado.
</t>
</p>
<div style="text-align: center; padding: 16px 0px 16px 0px;">
<a t-attf-href="/calendar/meeting/view?token={{object.access_token}}&id={{object.event_id.id}}" style="padding: 5px 10px; color: #FFFFFF; text-decoration: none; background-color: #875A7B; border: 1px solid #875A7B; border-radius: 3px">Ver</a>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tr>
<td width="130px;" style="min-width: 130px;">
<div style="border-top-start-radius: 3px; border-top-end-radius: 3px; font-size: 12px; border-collapse: separate; text-align: center; font-weight: bold; color: #ffffff; min-height: 18px; background-color: #875A7B; border: 1px solid #875A7B;">
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='EEEE', lang_code=object.env.lang) or ''">martes</t>
</div>
<div style="font-size: 48px; min-height: auto; font-weight: bold; text-align: center; color: #5F5F5F; background-color: #F8F8F8; border: 1px solid #875A7B;">
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='d', lang_code=object.env.lang) or ''">4</t>
</div>
<div style="font-size: 12px; text-align: center; font-weight: bold; color: #ffffff; background-color: #875A7B;">
<t t-out="format_datetime(dt=object.event_id.start, tz=object.mail_tz if not object.event_id.allday else None, dt_format='MMMM y', lang_code=object.env.lang) or ''">de mayo de 2021</t>
</div>
<div style="border-collapse: separate; color: #5F5F5F; text-align: center; font-size: 12px; border-bottom-end-radius: 3px; font-weight: bold ; border: 1px solid #875A7B; border-bottom-start-radius: 3px;">
<t t-if="not object.event_id.allday">
<div>
<t t-out="format_time(time=object.event_id.start, tz=object.mail_tz, time_format='short', lang_code=object.env.lang) or ''">11:00 h</t>
</div>
<t t-if="object.mail_tz">
<div style="font-size: 10px; font-weight: normal">
(<t t-out="object.mail_tz or ''">Europa/Bruselas</t>)
</div>
</t>
</t>
</div>
</td>
<td width="20px;"/>
<td style="padding-top: 5px;">
<p><strong>Detalles del evento</strong></p>
<ul>
<t t-if="object.event_id.location">
<li>Ubicación: <t t-out="object.event_id.location or ''">Bruselas</t>
<a target="_blank" t-if="not is_online or is_online and object.event_id.location != object.event_id.appointment_type_id.location_id.name" t-attf-href="http://maps.google.com/maps?oi=map&q={{object.event_id.location}}">(Ver en el mapa)</a>
</li>
</t>
<t t-if="recurrent">
<li>¿Cuándo?: <t t-out="object.recurrence_id.get_recurrence_name()">semanalmente, 3 eventos</t></li>
</t>
<t t-if="not object.event_id.allday and object.event_id.duration">
<li>Duración: <t t-out="('%dH%02d' % (object.event_id.duration,round(object.event_id.duration*60)%60)) or ''">0 h 30 min</t></li>
</t>
<li>Participantes
<ul>
<li t-foreach="object.event_id.attendee_ids" t-as="attendee">
<div t-attf-style="display: inline-block; border-radius: 50%; width: 10px; height: 10px; background:{{ colors.get(attendee.state) or 'white' }};"> </div>
<t t-if="attendee.common_name != object.common_name">
<span style="margin-left:5px" t-out="attendee.common_name or ''">Mitchell Admin</span>
</t>
<t t-else="">
<span style="margin-left:5px">Usted</span>
</t>
</li>
</ul></li>
<t t-if="object.event_id.videocall_location">
<li>
Cómo unirse:
<t t-if="object.get_base_url() in object.event_id.videocall_location"> Unirse con Conversaciones de Odoo</t>
<t t-else=""> Unirse a través de</t><br/>
<a t-att-href="object.event_id.videocall_location" target="_blank" t-out="object.event_id.videocall_location or ''">www.mycompany.com/calendar/join_videocall/xyz</a>
</li>
</t>
<t t-if="not is_html_empty(object.event_id.description)">
<li>Descripción del evento:
<t t-out="object.event_id.description">Reunión interna para hablar de los nuevos precios de los productos y servicios.</t></li>
</t>
</ul>
</td>
</tr></table>
<br/>
Gracias,
<t t-if="object.event_id.user_id.signature" data-o-mail-quote-container="1">
<br/>
<t t-out="object.event_id.user_id.signature or ''" data-o-mail-quote="1">--<br data-o-mail-quote="1"/>Mitchell Admin</t>
</t>
</div>