diff --git a/README.md b/README.md
index 3789bc3..c032c47 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,41 @@
-# payment_razorpay
+# Razorpay
+## Implementation details
+
+### Supported features
+
+- Direct payment flow
+- Tokenization
+- Manual capture
+- Partial refunds
+- Several payment methods such as debit/credit cards, netbanking, UPI, and
+ [others](https://razorpay.com/docs/payments/payment-methods/).
+- [Webhook](https://razorpay.com/docs/webhooks).
+
+### API and gateway
+
+We choose to integrate with
+[Razorpay Recurring Payments](https://razorpay.com/docs/api/payments/recurring-payments/), which is
+more complex to handle than
+[Razorpay Hosted Checkout](https://razorpay.com/docs/payments/payment-gateway/web-integration/hosted)
+because it works as a direct payment flow, because it allows for tokenization. The other gateways
+were ruled out; see the original task's dev notes for the details on the other gateways.
+
+The version of the API implemented by this module is v1.
+
+## Module history
+
+- The first version of the module was specified in task
+ [2800823](https://www.odoo.com/web#id=2800823&model=project.task) and merged with PR
+ odoo/odoo#92848 in `saas-15.5`.
+- The API was changed to the Recurring Payments API to support tokenization with PR odoo/odoo#143525
+ in `17.0`.
+
+## Testing instructions
+
+- The partner's phone number must be a valid Indian phone number. Example: +911234567890
+- The partner's country must be India and the payment currency INR to enable India-based payment
+ methods.
+
+See https://razorpay.com/docs/payments/payments/test-card-upi-details/ and
+https://razorpay.com/docs/payments/payments/test-upi-details/ for the list of test payment details.
diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..488a98c
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,14 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import controllers
+from . import models
+
+from odoo.addons.payment import setup_provider, reset_payment_provider
+
+
+def post_init_hook(env):
+ setup_provider(env, 'razorpay')
+
+
+def uninstall_hook(env):
+ reset_payment_provider(env, 'razorpay')
diff --git a/__manifest__.py b/__manifest__.py
new file mode 100644
index 0000000..2a4f761
--- /dev/null
+++ b/__manifest__.py
@@ -0,0 +1,24 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+{
+ 'name': "Payment Provider: Razorpay",
+ 'version': '1.0',
+ 'category': 'Accounting/Payment Providers',
+ 'sequence': 350,
+ 'summary': "A payment provider covering India.",
+ 'depends': ['payment'],
+ 'data': [
+ 'views/payment_provider_views.xml',
+ 'views/payment_razorpay_templates.xml',
+
+ 'data/payment_provider_data.xml', # Depends on views/payment_razorpay_templates.xml
+ ],
+ 'assets': {
+ 'web.assets_frontend': [
+ 'payment_razorpay/static/src/js/payment_form.js',
+ ],
+ },
+ 'post_init_hook': 'post_init_hook',
+ 'uninstall_hook': 'uninstall_hook',
+ 'license': 'LGPL-3',
+}
diff --git a/const.py b/const.py
new file mode 100644
index 0000000..443e6ae
--- /dev/null
+++ b/const.py
@@ -0,0 +1,136 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+# The currencies supported by Razorpay, in ISO 4217 format. Last updated on May 26, 2021.
+# See https://razorpay.com/docs/payments/payments/international-payments/#supported-currencies.
+# Last seen online: 16 November 2022.
+SUPPORTED_CURRENCIES = [
+ 'AED',
+ 'ALL',
+ 'AMD',
+ 'ARS',
+ 'AUD',
+ 'AWG',
+ 'BBD',
+ 'BDT',
+ 'BMD',
+ 'BND',
+ 'BOB',
+ 'BSD',
+ 'BWP',
+ 'BZD',
+ 'CAD',
+ 'CHF',
+ 'CNY',
+ 'COP',
+ 'CRC',
+ 'CUP',
+ 'CZK',
+ 'DKK',
+ 'DOP',
+ 'DZD',
+ 'EGP',
+ 'ETB',
+ 'EUR',
+ 'FJD',
+ 'GBP',
+ 'GHS',
+ 'GIP',
+ 'GMD',
+ 'GTQ',
+ 'GYD',
+ 'HKD',
+ 'HNL',
+ 'HRK',
+ 'HTG',
+ 'HUF',
+ 'IDR',
+ 'ILS',
+ 'INR',
+ 'JMD',
+ 'KES',
+ 'KGS',
+ 'KHR',
+ 'KYD',
+ 'KZT',
+ 'LAK',
+ 'LKR',
+ 'LRD',
+ 'LSL',
+ 'MAD',
+ 'MDL',
+ 'MKD',
+ 'MMK',
+ 'MNT',
+ 'MOP',
+ 'MUR',
+ 'MVR',
+ 'MWK',
+ 'MXN',
+ 'MYR',
+ 'NAD',
+ 'NGN',
+ 'NIO',
+ 'NOK',
+ 'NPR',
+ 'NZD',
+ 'PEN',
+ 'PGK',
+ 'PHP',
+ 'PKR',
+ 'QAR',
+ 'RUB',
+ 'SAR',
+ 'SCR',
+ 'SEK',
+ 'SGD',
+ 'SLL',
+ 'SOS',
+ 'SSP',
+ 'SVC',
+ 'SZL',
+ 'THB',
+ 'TTD',
+ 'TZS',
+ 'USD',
+ 'UYU',
+ 'UZS',
+ 'YER',
+ 'ZAR',
+]
+
+# The codes of the payment methods to activate when Razorpay is activated.
+DEFAULT_PAYMENT_METHODS_CODES = [
+ # Primary payment methods.
+ 'card',
+ 'netbanking',
+ 'upi',
+ # Brand payment methods.
+ 'visa',
+ 'mastercard',
+ 'amex',
+ 'discover',
+]
+
+# The maximum amount in INR that can be paid through an eMandate.
+MANDATE_MAX_AMOUNT = {
+ 'card': 1000000,
+ 'upi': 100000,
+}
+
+# Mapping of transaction states to Razorpay's payment statuses.
+# See https://razorpay.com/docs/payments/payments#payment-life-cycle.
+PAYMENT_STATUS_MAPPING = {
+ 'pending': ('created', 'pending'),
+ 'authorized': ('authorized',),
+ 'done': ('captured', 'refunded', 'processed'), # refunded is included to discard refunded txs.
+ 'error': ('failed',),
+}
+
+# Events that are handled by the webhook.
+HANDLED_WEBHOOK_EVENTS = [
+ 'payment.authorized',
+ 'payment.captured',
+ 'payment.failed',
+ 'refund.failed',
+ 'refund.processed',
+]
diff --git a/controllers/__init__.py b/controllers/__init__.py
new file mode 100644
index 0000000..80ee4da
--- /dev/null
+++ b/controllers/__init__.py
@@ -0,0 +1,3 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import main
diff --git a/controllers/main.py b/controllers/main.py
new file mode 100644
index 0000000..67b9f2b
--- /dev/null
+++ b/controllers/main.py
@@ -0,0 +1,89 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import hmac
+import logging
+import pprint
+
+from werkzeug.exceptions import Forbidden
+
+from odoo import http
+from odoo.exceptions import ValidationError
+from odoo.http import request
+
+from odoo.addons.payment_razorpay.const import HANDLED_WEBHOOK_EVENTS
+
+
+_logger = logging.getLogger(__name__)
+
+
+class RazorpayController(http.Controller):
+ _return_url = '/payment/razorpay/return'
+ _webhook_url = '/payment/razorpay/webhook'
+
+ @http.route(
+ _return_url, type='http', auth='public', methods=['GET', 'POST'], csrf=False,
+ save_session=False
+ )
+ def razorpay_return_from_checkout(self, reference, **data):
+ # TODO: Remove me in master
+ return request.redirect('/payment/status')
+
+ @http.route(_webhook_url, type='http', methods=['POST'], auth='public', csrf=False)
+ def razorpay_webhook(self):
+ """ Process the notification data sent by Razorpay to the webhook.
+
+ :return: An empty string to acknowledge the notification.
+ :rtype: str
+ """
+ data = request.get_json_data()
+ _logger.info("Notification received from Razorpay with data:\n%s", pprint.pformat(data))
+
+ event_type = data['event']
+ if event_type in HANDLED_WEBHOOK_EVENTS:
+ entity_type = 'payment' if 'payment' in event_type else 'refund'
+ try:
+ entity_data = data['payload'].get(entity_type, {}).get('entity', {})
+ entity_data.update(entity_type=entity_type)
+
+ # Check the integrity of the event.
+ received_signature = request.httprequest.headers.get('X-Razorpay-Signature')
+ tx_sudo = request.env['payment.transaction'].sudo()._get_tx_from_notification_data(
+ 'razorpay', entity_data
+ )
+ self._verify_notification_signature(
+ request.httprequest.data, received_signature, tx_sudo, is_redirect=False
+ )
+
+ # Handle the notification data.
+ tx_sudo._handle_notification_data('razorpay', entity_data)
+ except ValidationError: # Acknowledge the notification to avoid getting spammed.
+ _logger.exception("Unable to handle the notification data; skipping to acknowledge")
+ return request.make_json_response('')
+
+ @staticmethod
+ def _verify_notification_signature(
+ notification_data, received_signature, tx_sudo, is_redirect=True
+ ): # TODO in master: remove the `is_redirect` parameter.
+ """ Check that the received signature matches the expected one.
+
+ :param dict|bytes notification_data: The notification data.
+ :param str received_signature: The signature to compare with the expected signature.
+ :param recordset tx_sudo: The sudoed transaction referenced by the notification data, as a
+ `payment.transaction` record
+ :param bool is_redirect: Whether the notification data should be treated as redirect data
+ or as coming from a webhook notification.
+ :return: None
+ :raise :class:`werkzeug.exceptions.Forbidden`: If the signatures don't match.
+ """
+ # Check for the received signature.
+ if not received_signature:
+ _logger.warning("Received notification with missing signature.")
+ raise Forbidden()
+
+ # Compare the received signature with the expected signature.
+ expected_signature = tx_sudo.provider_id._razorpay_calculate_signature(
+ notification_data, is_redirect=is_redirect
+ )
+ if not hmac.compare_digest(received_signature, expected_signature):
+ _logger.warning("Received notification with invalid signature.")
+ raise Forbidden()
diff --git a/data/neutralize.sql b/data/neutralize.sql
new file mode 100644
index 0000000..de73329
--- /dev/null
+++ b/data/neutralize.sql
@@ -0,0 +1,5 @@
+-- disable razorpay payment provider
+UPDATE payment_provider
+ SET razorpay_key_id = NULL,
+ razorpay_key_secret = NULL,
+ razorpay_webhook_secret = NULL;
diff --git a/data/payment_provider_data.xml b/data/payment_provider_data.xml
new file mode 100644
index 0000000..1562a6e
--- /dev/null
+++ b/data/payment_provider_data.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ razorpay
+
+
+
+
diff --git a/i18n/ar.po b/i18n/ar.po
new file mode 100644
index 0000000..d9e23ec
--- /dev/null
+++ b/i18n/ar.po
@@ -0,0 +1,195 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Malaz Abuidris , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Malaz Abuidris , 2024\n"
+"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" قم بتمكين خاصية المدفوعات المتكررة في Razorpay "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "حدث خطأ أثناء معالجة هذا الدفع. يرجى المحاولة مجدداً. "
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "رمز "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "تعذر إنشاء الاتصال بالواجهة البرمجية للتطبيق. "
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "معرّف المفتاح "
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "سر المفتاح "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "لم يتم العثور على معاملة تطابق المرجع %s. "
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "مزود الدفع "
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "معاملة الدفع "
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "فشلت معالجة عملية الدفع "
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "معرّف مفتاح Razorpay "
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "سر مفتاح Razorpay "
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "سر Webhook لـ Razorpay "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "لقد أعطى Razorpay المعلومات التالية: '%s' "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "تم استلام البيانات مع حالة غير صالحة: %s "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "تم استلام البيانات دون معرّف الكيان. "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "تم استلام البيانات دون مرجع. "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "تم استلام البيانات دون حالة. "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "تم استلام بيانات استرداد أموال غير مكتملة. "
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "المهمة: إزالة من النسخة الرئيسية "
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "المفتاح مُستخدم فقط لتعريف الحساب مع Razorpay. "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "رقم الهاتف غير صالح. "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "رقم الهاتف غير موجود. "
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "الكود التقني لمزود الدفع هذا. "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "المعاملة غير مرتبطة برمز. "
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"لا يمكن إبطال المعاملات التي تمت معالجتها بواسطة Razorpay يدوياً من أودو. "
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "سر Webhook "
diff --git a/i18n/bg.po b/i18n/bg.po
new file mode 100644
index 0000000..9d2fb86
--- /dev/null
+++ b/i18n/bg.po
@@ -0,0 +1,188 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# aleksandar ivanov, 2023
+# Maria Boyadjieva , 2023
+# Turhan Aydin , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Turhan Aydin , 2024\n"
+"Language-Team: Bulgarian (https://app.transifex.com/odoo/teams/41243/bg/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: bg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Код"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Неуспешно установяване на връзката с API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Не е открита транзакция, съответстваща с референция %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Доставчик на разплащания"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Платежна транзакция"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Получени данни с липсваща референция."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/ca.po b/i18n/ca.po
new file mode 100644
index 0000000..9ea79a3
--- /dev/null
+++ b/i18n/ca.po
@@ -0,0 +1,197 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Martin Trigaux, 2023
+# Guspy12, 2023
+# RGB Consulting , 2023
+# Ivan Espinola, 2023
+# marcescu, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: marcescu, 2024\n"
+"Language-Team: Catalan (https://app.transifex.com/odoo/teams/41243/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"S'ha produït un error durant el processament del seu pagament. Si us plau, "
+"intenti'l de nou."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Codi"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "No s'ha pogut establir la connexió a l'API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "No s'ha trobat cap transacció que coincideixi amb la referència %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Proveïdor de pagament"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transacció de pagament"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "El codi tècnic d'aquest proveïdor de pagaments."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "La transacció no està enllaçada a un token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/cs.po b/i18n/cs.po
new file mode 100644
index 0000000..6bd4a98
--- /dev/null
+++ b/i18n/cs.po
@@ -0,0 +1,192 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Ivana Bartonkova, 2023
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Czech (https://app.transifex.com/odoo/teams/41243/cs/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: cs\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kód"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Nepodařilo se navázat spojení s rozhraním API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Nebyla nalezena žádná transakce odpovídající odkazu %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Poskytovatel platby"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Platební transakce"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "Transakce není spojena s tokenem."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/da.po b/i18n/da.po
new file mode 100644
index 0000000..448b6e9
--- /dev/null
+++ b/i18n/da.po
@@ -0,0 +1,192 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# lhmflexerp , 2023
+# Martin Trigaux, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2023\n"
+"Language-Team: Danish (https://app.transifex.com/odoo/teams/41243/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kode"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Betalingsudbyder"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Betalingstransaktion"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/de.po b/i18n/de.po
new file mode 100644
index 0000000..0240095
--- /dev/null
+++ b/i18n/de.po
@@ -0,0 +1,200 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Larissa Manderfeld, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Larissa Manderfeld, 2024\n"
+"Language-Team: German (https://app.transifex.com/odoo/teams/41243/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Wiederkehrende Zahlungen mit Razorpay aktivieren"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"Bei der Bearbeitung dieser Zahlung ist ein Fehler aufgetreten. Bitte "
+"versuchen Sie es erneut."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Code"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Verbindung mit API konnte nicht hergestellt werden."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "Schlüssel-ID"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Schlüssel-Geheimnis"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Keine Transaktion gefunden, die der Referenz %s entspricht."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Zahlungsanbieter"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Zahlungstransaktion"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Zahlungsverarbeitung fehlgeschlagen"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Schlüssel-ID von Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Schlüssel-Geheimnis von Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Webhook-Geheimnis von Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay gab uns folgende Informationen: „%s“"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Erhaltene Daten mit ungültigem Status: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Erhaltene Daten mit fehlendem Einrichtungs-ID."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Erhaltene Daten mit fehlender Referenz."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Erhaltene Daten mit fehlendem Status."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Unvollständige Erstattungsdaten erhalten."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "TO DO: in Master entfernen"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+"Der Schlüssel, der ausschließlich zur Identifizierung des Kontos bei "
+"Razorpay verwendet wird."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "Die Telefonnummer ist ungültig."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Die Telefonnummer fehlt."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Der technische Code dieses Zahlungsanbieters."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "Die Transaktion ist nicht mit einem Token verknüpft."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"Transaktionen, die von Razorpay verarbeitet werden, können in Odoo nicht "
+"manuell storniert werden."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Webhook-Geheimnis"
diff --git a/i18n/es.po b/i18n/es.po
new file mode 100644
index 0000000..158df45
--- /dev/null
+++ b/i18n/es.po
@@ -0,0 +1,199 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Larissa Manderfeld, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Larissa Manderfeld, 2024\n"
+"Language-Team: Spanish (https://app.transifex.com/odoo/teams/41243/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Habilitar pagos recurrentes en Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"Ocurrió un error durante el procesamiento de su pago. Por favor, inténtelo "
+"de nuevo."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Código"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "No se ha podido establecer la conexión con el API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "ID de la clave"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Secreto de la clave"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+"No se ha encontrado ninguna transacción que coincida con la referencia %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Proveedor de pago"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transacción de pago"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Error al procesar el pago"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "ID de la clave de Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Secreto de la clave de Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Secreto del webhook de Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay nos dio la siguiente información: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Se recibió la información con un estado no válido: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Datos recibidos sin el ID de entidad."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Datos recibidos con referencia perdida."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Datos recibidos con estado faltante."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Se recibió información incompleta sobre los reembolsos."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "Por hacer: eliminar en el master"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "La clave que se utiliza solo para identificar la cuenta con Razorpay."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "El número de teléfono no es válido."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Falta el número telefónico."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "El código técnico de este proveedor de pagos."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "La transacción no está vinculada a un token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"Las transacciones procesadas por Razorpay no se pueden anular manualmente "
+"desde Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Secreto de Webhook"
diff --git a/i18n/es_419.po b/i18n/es_419.po
new file mode 100644
index 0000000..f53e495
--- /dev/null
+++ b/i18n/es_419.po
@@ -0,0 +1,197 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Fernanda Alvarez, 2024
+# Wil Odoo, 2024
+# Lucia Pacheco, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Lucia Pacheco, 2024\n"
+"Language-Team: Spanish (Latin America) (https://app.transifex.com/odoo/teams/41243/es_419/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_419\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Habilitar pagos recurrentes en Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "Ocurrió un error al procesar su pago. Inténtelo de nuevo."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Código"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "No se pudo establecer la conexión con la API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "ID de la clave"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Secreto de la clave"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "No se encontró ninguna transacción que coincida con la referencia %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Proveedor de pago"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transacción de pago"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Error al procesar el pago"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "ID de la clave de Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Secreto de la clave de Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Secreto del webhook de Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay nos dio la siguiente información: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Se recibió la información con un estado que no es válido: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Se recibió información sin el ID de entidad."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Se recibió información sin referencias."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Se recibió información en la que falta un estado."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Se recibió información incompleta sobre los reembolsos."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "Por hacer: eliminar en el master"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "La clave que se utiliza solo para identificar la cuenta con Razorpay."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "El número de teléfono no es válido."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Falta el número telefónico."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "El código técnico de este proveedor de pagos."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "La transacción no está vinculada a un token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"Las transacciones que se procesen con Razorpay no se pueden anular de manera"
+" manual desde Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Secreto de Webhook"
diff --git a/i18n/et.po b/i18n/et.po
new file mode 100644
index 0000000..9614586
--- /dev/null
+++ b/i18n/et.po
@@ -0,0 +1,194 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Martin Trigaux, 2023
+# Leaanika Randmets, 2023
+# Marek Pontus, 2023
+# Anna, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Anna, 2024\n"
+"Language-Team: Estonian (https://app.transifex.com/odoo/teams/41243/et/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: et\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kood"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Could not establish the connection to the API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Makseteenuse pakkuja"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Maksetehing"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Makse töötlemine ebaõnnestus"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Antud makseteenuse pakkuja tehniline kood."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/fa.po b/i18n/fa.po
new file mode 100644
index 0000000..4137660
--- /dev/null
+++ b/i18n/fa.po
@@ -0,0 +1,161 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# odooers ir, 2023
+# Martin Trigaux, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2023\n"
+"Language-Team: Persian (https://app.transifex.com/odoo/teams/41243/fa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fa\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "کد"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "سرویس دهنده پرداخت"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "تراکنش پرداخت"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid ""
+"The communication with the API failed. Razorpay gave us the following "
+"information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/fi.po b/i18n/fi.po
new file mode 100644
index 0000000..63fb518
--- /dev/null
+++ b/i18n/fi.po
@@ -0,0 +1,191 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Veikko Väätäjä , 2023
+# Jarmo Kortetjärvi , 2023
+# Ossi Mantylahti , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Ossi Mantylahti , 2024\n"
+"Language-Team: Finnish (https://app.transifex.com/odoo/teams/41243/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Ota toistuvat maksut käyttöön Razorpayn palvelussa"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "Maksun käsittelyssä tapahtui virhe. Yritä uudelleen."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Koodi"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Yhteyttä API:han ei saatu muodostettua."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "Avain Id"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Avainsalaisuus"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Viitettä %s vastaavaa tapahtumaa ei löytynyt."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Maksupalveluntarjoaja"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Maksutapahtuma"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Maksun käsittely epäonnistui"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Razorpay Key Id"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Razorpay salainen avain"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Razorpay Webhook salaisuus"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay antoi seuraavat tiedot: \"%s\""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Vastaanotettu data, jonka tila on virheellinen: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Vastaanotetut tiedot, joista puuttuu entiteetin tunniste."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Vastaanotetut tiedot, joista puuttuu viite."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Vastaanotetut tiedot, joiden tila puuttuu."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Saatu epätäydelliset tukitiedot."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "Avain, jota käytetään ainoastaan Razorpay-tilin tunnistamiseen."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "Puhelinnumero on virheellinen."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Puhelinnumero puuttuu."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Tämän maksupalveluntarjoajan tekninen koodi."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "Transaktio ei ole sidottu valtuutuskoodiin."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"Razorpayn käsittelemiä tapahtumia ei voi mitätöidä manuaalisesti Odoosta."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Webhookin salaisuus"
diff --git a/i18n/fr.po b/i18n/fr.po
new file mode 100644
index 0000000..23d68e0
--- /dev/null
+++ b/i18n/fr.po
@@ -0,0 +1,198 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Jolien De Paepe, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Jolien De Paepe, 2024\n"
+"Language-Team: French (https://app.transifex.com/odoo/teams/41243/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fr\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Activer les paiements récurrents sur Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"Une erreur est survenue lors du traitement de votre paiement. Veuillez "
+"réessayer."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Code"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Impossible d'établir la connexion avec l'API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "ID clé"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Clé secrète"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Aucune transaction ne correspond à la référence %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Fournisseur de paiement"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transaction de paiement"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Échec du traitement du paiement"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "ID clé Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Clé secrète Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Secret webhook Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay nous a fourni les informations suivantes : '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Données reçues avec statut invalide : %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Données reçues avec identifiant d'identité manquant."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Données reçues avec référence manquante."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Données reçues avec statut manquant."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Réception de données incomplètes relatives au remboursement."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "A FAIRE : supprimer dans master"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "La clé uniquement utilisée pour identifier le compte avec Razorpay."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "Le numéro de téléphone est invalide."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Le numéro de téléphone est manquant."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Le code technique de ce fournisseur de paiement."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "La transaction n'est pas liée à un jeton."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"Les transactions traitées par Razorpay ne peuvent pas être annulées "
+"manuellement depuis Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Secret webhook"
diff --git a/i18n/he.po b/i18n/he.po
new file mode 100644
index 0000000..bec70a2
--- /dev/null
+++ b/i18n/he.po
@@ -0,0 +1,188 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Martin Trigaux, 2023
+# Ha Ketem , 2023
+# ExcaliberX , 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: ExcaliberX , 2023\n"
+"Language-Team: Hebrew (https://app.transifex.com/odoo/teams/41243/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: he\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "קוד"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "לא הצלחנו להתחבר ל-API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "לא נמצאה עסקה המתאימה למספר האסמכתא %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "עסקת תשלום"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/hu.po b/i18n/hu.po
new file mode 100644
index 0000000..6f33a53
--- /dev/null
+++ b/i18n/hu.po
@@ -0,0 +1,161 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# gezza , 2023
+# Martin Trigaux, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2023\n"
+"Language-Team: Hungarian (https://app.transifex.com/odoo/teams/41243/hu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kód"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Fizetési szolgáltató"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Fizetési tranzakció"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid ""
+"The communication with the API failed. Razorpay gave us the following "
+"information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/id.po b/i18n/id.po
new file mode 100644
index 0000000..e1b692f
--- /dev/null
+++ b/i18n/id.po
@@ -0,0 +1,196 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Abe Manyo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Abe Manyo, 2024\n"
+"Language-Team: Indonesian (https://app.transifex.com/odoo/teams/41243/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Aktifkan pembayaran berulang pada Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "Terjadi error pada pemrosesan pembayaran Anda. Silakan coba lagi."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kode"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Tidak dapat membuat hubungan ke API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "Key Id"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Key Secret"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Tidak ada transaksi dengan referensi %s yang cocok."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Penyedia Pembayaran"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transaksi Tagihan"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Pemrosesan pembayaran gagal"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Razorpay Key Id"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Razorpay Key Secret"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Razorpay Webhook Secret"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay memberikan kami informasi berikut: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Menerima data dengan status tidak valid: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Menerima data tanpa entity id."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Menerima data dengan referensi yang kurang lengkap."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Menerima data tanpa status."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Menerima data refund yang tidak lengkap."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "TODO: hapus di master"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "Key yang hanya digunakan untuk mengidentifikasi akun dengan Razorpay."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "Nomor telepon tidak valid"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Kurang nomor telepon."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Kode teknis penyedia pembayaran ini."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "Transaksi ini tidak terhubung ke token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"Transaksi yang diproses oleh Razorpay tidak dapat dibatalkan secara manual "
+"dari Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Webhook Secret"
diff --git a/i18n/it.po b/i18n/it.po
new file mode 100644
index 0000000..4b68076
--- /dev/null
+++ b/i18n/it.po
@@ -0,0 +1,199 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Marianna Ciofani, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Marianna Ciofani, 2024\n"
+"Language-Team: Italian (https://app.transifex.com/odoo/teams/41243/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: it\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Abilita pagamenti ricorrenti con Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"Si è verificato un errore durante l'elaborazione di questo pagamento. "
+"Riprovalo più tardi."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Codice"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Impossibile stabilire la connessione all'API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "ID chiave"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Chiave segreta"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Nessuna transazione trovata corrispondente al riferimento %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Fornitore di pagamenti"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transazione di pagamento"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Elaborazione del pagamento non riuscita"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "ID chiave Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Chiave segreta Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Secret Webhook Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay ha fornito le seguenti informazioni: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Dati ricevuti con stato non valido: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Dati ricevuti con ID entità mancante."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Dati ricevuti privi di riferimento,"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Dati ricevuti privi di stato."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Dati di rimborso ricevuti non completi."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "TODO: elimina in master"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+"La chiave utilizzata esclusivamente per identificare il conto con Razorpay."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "Il numero di telefono non è valido."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Il numero di telefono non è presente."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Codice tecnico del fornitore di pagamenti."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "La transazione non è legata a un token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"Le operazioni elaborate da Razorpay non possono essere annullate manualmente"
+" da Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Segreto Webhook"
diff --git a/i18n/ja.po b/i18n/ja.po
new file mode 100644
index 0000000..40aa0ce
--- /dev/null
+++ b/i18n/ja.po
@@ -0,0 +1,194 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Junko Augias, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Junko Augias, 2024\n"
+"Language-Team: Japanese (https://app.transifex.com/odoo/teams/41243/ja/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ja\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Razorpayでの定期支払を有効にする"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "支払処理中にエラーが発生しました。再度試して下さい。"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "コード"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "APIへの接続を確立できませんでした。"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "キーID"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "キーシークレット"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "参照に一致する取引が見つかりません%s。"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "決済プロバイダー"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "決済トランザクション"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "支払処理に失敗しました"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "RazorpayキーID"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Razorpayキーシークレット"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Razorpay Webhookシークレット"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpayが以下の情報を提供しています: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "無効なステータスの受信データ: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "エンティティID が不明なデータを受信しました。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "参照が欠落しているデータを受信しました。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "ステータスが不明なデータを受信しました。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "不完全な返金データを受信しました。"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "TODO: マスターで削除"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "Razorpayのアカウントを識別するためにのみ使用されるキー"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "電話番号が無効です。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "電話番号がありません。"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "この決済プロバイダーのテクニカルコード。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "取引はトークンにリンクしていません。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr "Razorpayで処理された取引は、Odooから手動で無効にすることはできません。"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Webhookシークレット"
diff --git a/i18n/ko.po b/i18n/ko.po
new file mode 100644
index 0000000..1b08251
--- /dev/null
+++ b/i18n/ko.po
@@ -0,0 +1,190 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Daye Jeong, 2024
+# Wil Odoo, 2024
+# Sarah Park, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Sarah Park, 2024\n"
+"Language-Team: Korean (https://app.transifex.com/odoo/teams/41243/ko/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ko\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Razorpay 정기 결제 활성화"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "결제를 처리하는 중 오류가 발생했습니다. 다시 시도해 주세요."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "코드"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "API 연결을 설정할 수 없습니다."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "키 Id"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "보안 키"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "%s 참조와 일치하는 거래 항목이 없습니다."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "결제대행업체"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "지불 거래"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "결제 프로세스 실패"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Razorpay 키 Id"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Razorpay 보안 키"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Razorpay Webhook 보안"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay에서 제공한 정보는 다음과 같습니다: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "잘못된 상태의 데이터를 수신했습니다: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "entity id가 없이 수신된 데이터입니다."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "참조가 누락된 데이터가 수신되었습니다."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "누락된 상태의 데이터가 수신되었습니다."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "불완전한 환불 데이터가 수신되었습니다."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "Razorpay에서 계정을 식별하는 데 사용되는 키입니다."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "유효하지 않은 전화번호입니다."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "전화번호가 누락되었습니다."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "이 결제대행업체의 기술 코드입니다."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "거래가 토큰에 연결되어 있지 않습니다."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr "Razorpay에서 처리한 거래 내역은 Odoo에서 수동으로 취소할 수 없습니다."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Webhook 보안"
diff --git a/i18n/lt.po b/i18n/lt.po
new file mode 100644
index 0000000..22bbf9e
--- /dev/null
+++ b/i18n/lt.po
@@ -0,0 +1,161 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Martin Trigaux, 2023
+# Linas Versada , 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Linas Versada , 2023\n"
+"Language-Team: Lithuanian (https://app.transifex.com/odoo/teams/41243/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lt\n"
+"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kodas"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Mokėjimo operacija"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid ""
+"The communication with the API failed. Razorpay gave us the following "
+"information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/lv.po b/i18n/lv.po
new file mode 100644
index 0000000..6f135f5
--- /dev/null
+++ b/i18n/lv.po
@@ -0,0 +1,162 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Arnis Putniņš , 2023
+# Armīns Jeltajevs , 2023
+# Martin Trigaux, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2023\n"
+"Language-Team: Latvian (https://app.transifex.com/odoo/teams/41243/lv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lv\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kods"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Maksājumu sniedzējs"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Maksājuma darījums"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid ""
+"The communication with the API failed. Razorpay gave us the following "
+"information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/nl.po b/i18n/nl.po
new file mode 100644
index 0000000..0006e93
--- /dev/null
+++ b/i18n/nl.po
@@ -0,0 +1,200 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Jolien De Paepe, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Jolien De Paepe, 2024\n"
+"Language-Team: Dutch (https://app.transifex.com/odoo/teams/41243/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Schakel terugkerende betalingen in op Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"Er is een fout opgetreden tijdens de verwerking van je betaling. Probeer het"
+" opnieuw."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Code"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Kan geen verbinding maken met de API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "Sleutel ID"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Sleutel geheim"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Geen transactie gevonden die overeenkomt met referentie %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Betaalprovider"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Betalingstransactie"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Betalingsverwerking mislukt"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Sleutel ID Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Sleutel geheim Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Webhook geheim Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay gaf ons de volgende informatie: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Gegevens ontvangen met ongeldige status: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Gegevens ontvangen met ontbrekend entiteitsid."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Gegevens ontvangen met ontbrekende referentie."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Gegevens ontvangen met ontbrekende status."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Onvolledige terugbetalingsgegevens ontvangen."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "TODO: verwijderen in master"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+"De sleutel die uitsluitend wordt gebruikt om het account bij Razorpay te "
+"identificeren."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "Het telefoonnummer is ongeldig."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Het telefoonnummer ontbreekt."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "De technische code van deze betaalprovider."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "De transactie is niet gekoppeld aan een token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"De door Razorpay behandelde transacties kunnen niet handmatig ongedaan "
+"worden gemaakt vanuit Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Webhook geheim"
diff --git a/i18n/payment_razorpay.pot b/i18n/payment_razorpay.pot
new file mode 100644
index 0000000..8f94795
--- /dev/null
+++ b/i18n/payment_razorpay.pot
@@ -0,0 +1,182 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-12-22 15:54+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/pl.po b/i18n/pl.po
new file mode 100644
index 0000000..d7943bb
--- /dev/null
+++ b/i18n/pl.po
@@ -0,0 +1,192 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Anita Kosobucka, 2024
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Polish (https://app.transifex.com/odoo/teams/41243/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pl\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "Wystąpił błąd podczas przetwarzania płatności. Spróbuj ponownie."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kod"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Nie można nawiązać połączenia z interfejsem API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Nie znaleziono transakcji pasującej do referencji %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Dostawca Płatności"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transakcja płatności"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Przetwarzanie płatności nie powiodło się"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Kod techniczny tego dostawcy usług płatniczych."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "Transakcja nie jest powiązana z tokenem."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/pt.po b/i18n/pt.po
new file mode 100644
index 0000000..5973aa4
--- /dev/null
+++ b/i18n/pt.po
@@ -0,0 +1,191 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Portuguese (https://app.transifex.com/odoo/teams/41243/pt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Código"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transação de Pagamento"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po
new file mode 100644
index 0000000..07def6d
--- /dev/null
+++ b/i18n/pt_BR.po
@@ -0,0 +1,197 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Maitê Dietze, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Maitê Dietze, 2024\n"
+"Language-Team: Portuguese (Brazil) (https://app.transifex.com/odoo/teams/41243/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+"Habilitar pagamentos recorrentes no Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"Houve um erro durante o processamento do seu pagamento. Tente novamente."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Código"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Não foi possível estabelecer a conexão com a API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "ID da chave"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Segredo da chave"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Nenhuma transação encontrada com a referência %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Provedor de serviços de pagamento"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transação de pagamento"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Falha no processamento do pagamento"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "ID da chave do Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Segredo da chave do Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Segredo do webhook do Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "O Razorpay nos forneceu as seguintes informações: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Dados recebidos com status inválido: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Dados recebidos com ID de entidade ausente."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Dados recebidos com referência ausente."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Dados recebidos com status ausente."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Recebeu dados de reembolso incompletos."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "TODO: remover no mestre"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "A chave usada exclusivamente para identificar a conta no Razorpay."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "O número de telefone é inválido."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "O número de telefone está faltando."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "O código técnico deste provedor de pagamento."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "A transação não está vinculada a um token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"As transações processadas pelo Razorpay não podem ser anuladas manualmente "
+"no Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Segredo do webhook"
diff --git a/i18n/ru.po b/i18n/ru.po
new file mode 100644
index 0000000..70515ec
--- /dev/null
+++ b/i18n/ru.po
@@ -0,0 +1,194 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Martin Trigaux, 2023
+# ILMIR , 2024
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Russian (https://app.transifex.com/odoo/teams/41243/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ru\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" Включите повторяющиеся платежи на Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"Во время обработки вашего платежа произошла ошибка. Пожалуйста, попробуйте "
+"еще раз."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Код"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Не удалось установить соединение с API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "Идентификатор ключа"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Секрет ключа API"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Не найдено ни одной транзакции, соответствующей ссылке %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Поставщик платежей"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "платеж"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Обработка платежа не удалась"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Идентификатор ключа Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Секрет ключа Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Razorpay Webhook Secret"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay предоставил нам следующую информацию: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Получены данные со статусом недействительный: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Получены данные с отсутствующим идентификатором сущности."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Получены данные с отсутствующей ссылкой."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Получены данные со статусом Отсутствует."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Получение неполных данных о возмещении."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "Ключ, используемый исключительно для идентификации счета в Razorpay."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "Номер телефона недействителен."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Номер телефона отсутствует."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Технический код данного провайдера платежей."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "Транзакция не привязана к токену."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"Транзакции, обработанные Razorpay, не могут быть вручную аннулированы из "
+"Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Секрет вебхука"
diff --git a/i18n/sk.po b/i18n/sk.po
new file mode 100644
index 0000000..812012b
--- /dev/null
+++ b/i18n/sk.po
@@ -0,0 +1,191 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Slovak (https://app.transifex.com/odoo/teams/41243/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sk\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kód"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Platobná transakcia"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/sl.po b/i18n/sl.po
new file mode 100644
index 0000000..96b606e
--- /dev/null
+++ b/i18n/sl.po
@@ -0,0 +1,192 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Tomaž Jug , 2023
+# Martin Trigaux, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2023\n"
+"Language-Team: Slovenian (https://app.transifex.com/odoo/teams/41243/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Oznaka"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Ponudnik plačil"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Plačilna transakcija"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/sr.po b/i18n/sr.po
new file mode 100644
index 0000000..fb2c59c
--- /dev/null
+++ b/i18n/sr.po
@@ -0,0 +1,188 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Martin Trigaux, 2023
+# Dragan Vukosavljevic , 2023
+# コフスタジオ, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: コフスタジオ, 2024\n"
+"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kod"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Could not establish the connection to the API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "No transaction found matching reference %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Provajder plaćanja"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Transakcija plaćanja"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "The technical code of this payment provider."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "The transaction is not linked to a token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/sv.po b/i18n/sv.po
new file mode 100644
index 0000000..88b0dc1
--- /dev/null
+++ b/i18n/sv.po
@@ -0,0 +1,194 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Martin Trigaux, 2023
+# Kim Asplund , 2023
+# Anders Wallenquist , 2023
+# Lasse L, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Lasse L, 2024\n"
+"Language-Team: Swedish (https://app.transifex.com/odoo/teams/41243/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kod"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Det gick inte att upprätta anslutningen till API:et."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Ingen transaktion hittades som matchar referensen %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Betalningsleverantör"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Betalningstransaktion"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Den tekniska koden för denna betalningsleverantör."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "Transaktionen är inte kopplad till en token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/th.po b/i18n/th.po
new file mode 100644
index 0000000..e0c2f1f
--- /dev/null
+++ b/i18n/th.po
@@ -0,0 +1,195 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2023
+# Rasareeyar Lappiam, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Rasareeyar Lappiam, 2024\n"
+"Language-Team: Thai (https://app.transifex.com/odoo/teams/41243/th/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: th\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" เปิดใช้งานการชำระเงินที่เกิดขึ้นประจำบน Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"เกิดข้อผิดพลาดระหว่างการประมวลผลการชำระเงินของคุณ กรุณาลองใหม่อีกครั้ง"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "โค้ด"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "ไม่สามารถสร้างการเชื่อมต่อกับ API ได้"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "คีย์ไอดี"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "คีย์ลับ"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "ไม่พบธุรกรรมที่ตรงกับการอ้างอิง %s"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "ผู้ให้บริการชำระเงิน"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "ธุรกรรมสำหรับการชำระเงิน"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "การประมวลผลการชำระเงินล้มเหลว"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Razorpay คีย์ไอดี"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Razorpay คีย์ลับ"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Razorpay เว็บฮุคลับ"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay ให้ข้อมูลต่อไปนี้กับเรา: '%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "ได้รับข้อมูลที่มีสถานะไม่ถูกต้อง: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "ได้รับข้อมูลโดยไม่มีไอดีเอนทิตี"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "ได้รับข้อมูลโดยไม่มีการอ้างอิง"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "ได้รับข้อมูลสถานะขาดหาย"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "ได้รับข้อมูลการคืนเงินไม่ครบถ้วน"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr "สิ่งที่ต้องทำ: ลบในต้นแบบ"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "คีย์ที่ใช้ในการระบุบัญชีกับ Razorpay เท่านั้น"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "หมายเลขโทรศัพท์ไม่ถูกต้อง"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "หมายเลขโทรศัพท์ขาดหาย"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "รหัสทางเทคนิคของผู้ให้บริการชำระเงินรายนี้"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "ธุรกรรมไม่ได้เชื่อมโยงกับโทเค็น"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr "ธุรกรรมที่ประมวลผลโดย Razorpay ไม่สามารถยกเลิกจาก Odoo ได้ด้วยตนเอง"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "เว็บฮุคลับ"
diff --git a/i18n/tr.po b/i18n/tr.po
new file mode 100644
index 0000000..6a08e72
--- /dev/null
+++ b/i18n/tr.po
@@ -0,0 +1,195 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Murat Kaplan , 2023
+# Ediz Duman , 2023
+# Martin Trigaux, 2023
+# Ertuğrul Güreş , 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Ertuğrul Güreş , 2024\n"
+"Language-Team: Turkish (https://app.transifex.com/odoo/teams/41243/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: tr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"Ödemenizin işlenmesi sırasında bir hata oluştu. Lütfen tekrar deneyin."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Kod"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "API bağlantısı kurulamadı."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Referans %s eşleşen bir işlem bulunamadı."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Ödeme Sağlayıcı"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Ödeme İşlemi"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Bu ödeme sağlayıcısının teknik kodu."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "İşlem bir belirteçle bağlantılı değildir."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr ""
diff --git a/i18n/uk.po b/i18n/uk.po
new file mode 100644
index 0000000..de16638
--- /dev/null
+++ b/i18n/uk.po
@@ -0,0 +1,194 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Alina Lisnenko , 2023
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Ukrainian (https://app.transifex.com/odoo/teams/41243/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: uk\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "Виникла помилка під час оброблення вашого платежу. Спробуйте ще раз."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Код"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Не вдалося встановити з’єднання з API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "Id ключа"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Секретний ключ"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Не знайдено жодної транзакції, що відповідає референсу %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Провайдер платежу"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Платіжна операція"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Id ключа Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Секретний ключ Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Секрет Webhook Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Отримані дані з недійсним статусом: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Отримано дані з відсутнім id об’єкта."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Дані отримані без референса."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Отримані дані з відсутнім статусом."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Отримано неповні дані про відшкодування."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr ""
+"Ключ, який використовується виключно для ідентифікації облікового запису в "
+"Razorpay."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Відсутній номер телефону."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Технічний код цього провайдера платежу."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "Транзакція не зв'язана з токеном."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr "Транзакції, оброблені Razorpay, не можна вручну анулювати в Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Секрет Webhook"
diff --git a/i18n/vi.po b/i18n/vi.po
new file mode 100644
index 0000000..663e8ce
--- /dev/null
+++ b/i18n/vi.po
@@ -0,0 +1,196 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Thi Huong Nguyen, 2024
+# Wil Odoo, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Vietnamese (https://app.transifex.com/odoo/teams/41243/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr ""
+"Đã xảy ra lỗi trong quá trình xử lý khoản thanh toán của bạn. Vui lòng thử "
+"lại."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "Mã"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "Không thể thiết lập kết nối với API."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "ID mã khoá"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "Mã khoá bí mật"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "Không tìm thấy giao dịch nào khớp với mã %s."
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "Nhà cung cấp dịch vụ thanh toán"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "Giao dịch thanh toán"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "Xử lý thanh toán không thành công"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Razorpay ID mã khoá"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Mã khoá bí mật Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Mật khẩu Webhook Razorpay"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "Dữ liệu đã nhận với trạng thái không hợp lệ: %s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "Dữ liệu đã nhận bị thiếu ID thực thể."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "Dữ liệu đã nhận bị thiếu mã."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "Dữ liệu đã nhận bị thiếu trạng thái."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "Dữ liệu hoàn tiền không đầy đủ đã nhận."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.redirect_form
+msgid "TODO: remove in master"
+msgstr ""
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "Mã khoá chỉ được sử dụng để xác định tài khoản với Razorpay."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr ""
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "Số điện thoại bị thiếu."
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "Mã kỹ thuật của nhà cung cấp dịch vụ thanh toán này."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "Giao dịch không được liên kết với token."
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr ""
+"Không thể vô hiệu hóa thủ công các giao dịch được xử lý bởi Razorpay khỏi "
+"Odoo."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Mật khẩu Webhook"
diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po
new file mode 100644
index 0000000..0019710
--- /dev/null
+++ b/i18n/zh_CN.po
@@ -0,0 +1,191 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2024
+# Wil Odoo, 2024
+# Chloe Wang, 2024
+# 湘子 南 <1360857908@qq.com>, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: 湘子 南 <1360857908@qq.com>, 2024\n"
+"Language-Team: Chinese (China) (https://app.transifex.com/odoo/teams/41243/zh_CN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" 在 Razorpay 启用循环支付"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "在处理您的付款过程中发生了一个错误。请再试一次。"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "代码"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "无法建立与API的连接。"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "密钥 ID"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "密钥"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "没有发现与参考文献%s相匹配的交易。"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "支付提供商"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "支付交易"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "付款处理失败"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Razorpay 密钥 ID"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Razorpay 密钥"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Razorpay Webhook 密钥"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay 给出了以下信息:'%s'"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "接收到的数据状态无效:%s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "收到的数据缺少实体 ID。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "收到的数据缺少参考编号。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "收到的数据中缺少状态。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "收到不完整的退款数据。"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "用于识别 Razorpay 账户的唯一密钥。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "电话号码无效。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "电话号码遗失。"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "该支付提供商的技术代码。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "该交易没有与令牌挂钩。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr "由 Razorpay 处理的交易无法在 ERP 中手动取消."
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "Webhook 密钥"
diff --git a/i18n/zh_TW.po b/i18n/zh_TW.po
new file mode 100644
index 0000000..fc536cf
--- /dev/null
+++ b/i18n/zh_TW.po
@@ -0,0 +1,189 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * payment_razorpay
+#
+# Translators:
+# Wil Odoo, 2024
+# Tony Ng, 2024
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0+e\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-12-22 15:54+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Tony Ng, 2024\n"
+"Language-Team: Chinese (Taiwan) (https://app.transifex.com/odoo/teams/41243/zh_TW/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid ""
+"\n"
+" Enable recurring payments on Razorpay"
+msgstr ""
+"\n"
+" 在 Razorpay 上啟用經常付款"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid ""
+"An error occurred during the processing of your payment. Please try again."
+msgstr "處理付款過程中發生錯誤,請再試一次。"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__code
+msgid "Code"
+msgstr "程式碼"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Could not establish the connection to the API."
+msgstr "無法建立與 API 的連線。"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Id"
+msgstr "密鑰識別碼"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Key Secret"
+msgstr "密鑰秘密"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "No transaction found matching reference %s."
+msgstr "沒有找到匹配參考 %s 的交易。"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_provider
+msgid "Payment Provider"
+msgstr "支付提供商"
+
+#. module: payment_razorpay
+#: model:ir.model,name:payment_razorpay.model_payment_transaction
+msgid "Payment Transaction"
+msgstr "付款交易"
+
+#. module: payment_razorpay
+#. odoo-javascript
+#: code:addons/payment_razorpay/static/src/js/payment_form.js:0
+#, python-format
+msgid "Payment processing failed"
+msgstr "付款處理失敗"
+
+#. module: payment_razorpay
+#: model:ir.model.fields.selection,name:payment_razorpay.selection__payment_provider__code__razorpay
+msgid "Razorpay"
+msgstr "Razorpay"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "Razorpay Key Id"
+msgstr "Razorpay 密鑰識別碼"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_key_secret
+msgid "Razorpay Key Secret"
+msgstr "Razorpay 密鑰秘密"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,field_description:payment_razorpay.field_payment_provider__razorpay_webhook_secret
+msgid "Razorpay Webhook Secret"
+msgstr "Razorpay 網絡鈎子秘密"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_provider.py:0
+#, python-format
+msgid "Razorpay gave us the following information: '%s'"
+msgstr "Razorpay 提供以下資訊:%s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with invalid status: %s"
+msgstr "收到數據的狀態無效:%s"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing entity id."
+msgstr "收到的數據缺漏實體識別碼。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing reference."
+msgstr "收到的數據缺漏參考編號。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received data with missing status."
+msgstr "收到的數據缺漏狀態。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Received incomplete refund data."
+msgstr "收到不完整的退款數據。"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__razorpay_key_id
+msgid "The key solely used to identify the account with Razorpay."
+msgstr "用於識別Razorpay賬戶的唯一密鑰。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is invalid."
+msgstr "電話號碼無效。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The phone number is missing."
+msgstr "電話號碼缺漏。"
+
+#. module: payment_razorpay
+#: model:ir.model.fields,help:payment_razorpay.field_payment_provider__code
+msgid "The technical code of this payment provider."
+msgstr "此付款服務商的技術代碼。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "The transaction is not linked to a token."
+msgstr "交易未有連結至代碼。"
+
+#. module: payment_razorpay
+#. odoo-python
+#: code:addons/payment_razorpay/models/payment_transaction.py:0
+#, python-format
+msgid "Transactions processed by Razorpay can't be manually voided from Odoo."
+msgstr "由 Razorpay 處理的交易無法在 Odoo 中手動取消。"
+
+#. module: payment_razorpay
+#: model_terms:ir.ui.view,arch_db:payment_razorpay.payment_provider_form_razorpay
+msgid "Webhook Secret"
+msgstr "網絡鈎子秘密"
diff --git a/models/__init__.py b/models/__init__.py
new file mode 100644
index 0000000..08dfb8a
--- /dev/null
+++ b/models/__init__.py
@@ -0,0 +1,4 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import payment_provider
+from . import payment_transaction
diff --git a/models/payment_provider.py b/models/payment_provider.py
new file mode 100644
index 0000000..120a2cd
--- /dev/null
+++ b/models/payment_provider.py
@@ -0,0 +1,141 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import hashlib
+import hmac
+import logging
+import pprint
+
+import requests
+from werkzeug.urls import url_join
+
+from odoo import _, fields, models
+from odoo.exceptions import ValidationError
+
+from odoo.addons.payment_razorpay import const
+
+
+_logger = logging.getLogger(__name__)
+
+
+class PaymentProvider(models.Model):
+ _inherit = 'payment.provider'
+
+ code = fields.Selection(
+ selection_add=[('razorpay', "Razorpay")], ondelete={'razorpay': 'set default'}
+ )
+ razorpay_key_id = fields.Char(
+ string="Razorpay Key Id",
+ help="The key solely used to identify the account with Razorpay.",
+ required_if_provider='razorpay',
+ )
+ razorpay_key_secret = fields.Char(
+ string="Razorpay Key Secret",
+ required_if_provider='razorpay',
+ groups='base.group_system',
+ )
+ razorpay_webhook_secret = fields.Char(
+ string="Razorpay Webhook Secret",
+ required_if_provider='razorpay',
+ groups='base.group_system',
+ )
+
+ #=== COMPUTE METHODS ===#
+
+ def _compute_feature_support_fields(self):
+ """ Override of `payment` to enable additional features. """
+ super()._compute_feature_support_fields()
+ self.filtered(lambda p: p.code == 'razorpay').update({
+ 'support_manual_capture': 'full_only',
+ 'support_refund': 'partial',
+ 'support_tokenization': True,
+ })
+
+ # === BUSINESS METHODS ===#
+
+ def _get_supported_currencies(self):
+ """ Override of `payment` to return the supported currencies. """
+ supported_currencies = super()._get_supported_currencies()
+ if self.code == 'razorpay':
+ supported_currencies = supported_currencies.filtered(
+ lambda c: c.name in const.SUPPORTED_CURRENCIES
+ )
+ return supported_currencies
+
+ def _razorpay_make_request(self, endpoint, payload=None, method='POST'):
+ """ Make a request to Razorpay API at the specified endpoint.
+
+ Note: self.ensure_one()
+
+ :param str endpoint: The endpoint to be reached by the request.
+ :param dict payload: The payload of the request.
+ :param str method: The HTTP method of the request.
+ :return The JSON-formatted content of the response.
+ :rtype: dict
+ :raise ValidationError: If an HTTP error occurs.
+ """
+ self.ensure_one()
+
+ url = url_join('https://api.razorpay.com/v1/', endpoint)
+ auth = (self.razorpay_key_id, self.razorpay_key_secret)
+ try:
+ if method == 'GET':
+ response = requests.get(url, params=payload, auth=auth, timeout=10)
+ else:
+ response = requests.post(url, json=payload, auth=auth, timeout=10)
+ try:
+ response.raise_for_status()
+ except requests.exceptions.HTTPError:
+ _logger.exception(
+ "Invalid API request at %s with data:\n%s", url, pprint.pformat(payload),
+ )
+ raise ValidationError("Razorpay: " + _(
+ "Razorpay gave us the following information: '%s'",
+ response.json().get('error', {}).get('description')
+ ))
+ except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
+ _logger.exception("Unable to reach endpoint at %s", url)
+ raise ValidationError(
+ "Razorpay: " + _("Could not establish the connection to the API.")
+ )
+ return response.json()
+
+ def _razorpay_calculate_signature(self, data, is_redirect=True):
+ """ Compute the signature for the request's data according to the Razorpay documentation.
+
+ See https://razorpay.com/docs/webhooks/validate-test#validate-webhooks and
+ https://razorpay.com/docs/payments/payment-gateway/web-integration/hosted/build-integration.
+
+ :param dict|bytes data: The data to sign.
+ :param bool is_redirect: Whether the data should be treated as redirect data or as coming
+ from a webhook notification.
+ :return: The calculated signature.
+ :rtype: str
+ """
+ if is_redirect:
+ secret = self.razorpay_key_secret
+ signing_string = f'{data["razorpay_order_id"]}|{data["razorpay_payment_id"]}'
+ return hmac.new(
+ secret.encode(), msg=signing_string.encode(), digestmod=hashlib.sha256
+ ).hexdigest()
+ else: # Notification data.
+ secret = self.razorpay_webhook_secret
+ return hmac.new(secret.encode(), msg=data, digestmod=hashlib.sha256).hexdigest()
+
+ def _get_default_payment_method_codes(self):
+ """ Override of `payment` to return the default payment method codes. """
+ default_codes = super()._get_default_payment_method_codes()
+ if self.code != 'razorpay':
+ return default_codes
+ return const.DEFAULT_PAYMENT_METHODS_CODES
+
+ def _get_validation_amount(self):
+ """ Override of `payment` to return the amount for Razorpay validation operations.
+
+ :return: The validation amount.
+ :rtype: float
+ """
+ res = super()._get_validation_amount()
+ if self.code != 'razorpay':
+ return res
+
+ return 1.0
diff --git a/models/payment_transaction.py b/models/payment_transaction.py
new file mode 100644
index 0000000..97cc27c
--- /dev/null
+++ b/models/payment_transaction.py
@@ -0,0 +1,464 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import logging
+import pprint
+import time
+from datetime import datetime
+
+from dateutil.relativedelta import relativedelta
+
+from odoo import _, api, models
+from odoo.exceptions import UserError, ValidationError
+
+from odoo.addons.payment import utils as payment_utils
+from odoo.addons.payment_razorpay import const
+
+
+_logger = logging.getLogger(__name__)
+
+
+class PaymentTransaction(models.Model):
+ _inherit = 'payment.transaction'
+
+ def _get_specific_processing_values(self, processing_values):
+ """ Override of `payment` to return razorpay-specific processing values.
+
+ Note: self.ensure_one() from `_get_processing_values`
+
+ :param dict processing_values: The generic and specific processing values of the
+ transaction.
+ :return: The provider-specific processing values.
+ :rtype: dict
+ """
+ res = super()._get_specific_processing_values(processing_values)
+ if self.provider_code != 'razorpay':
+ return res
+
+ customer_id = self._razorpay_create_customer()['id']
+ order_id = self._razorpay_create_order(customer_id)['id']
+ return {
+ 'razorpay_key_id': self.provider_id.razorpay_key_id,
+ 'razorpay_customer_id': customer_id,
+ 'is_tokenize_request': self.tokenize,
+ 'razorpay_order_id': order_id,
+ }
+
+ def _razorpay_create_customer(self):
+ """ Create and return a Customer object.
+
+ :return: The created Customer.
+ :rtype: dict
+ """
+ payload = {
+ 'name': self.partner_name,
+ 'email': self.partner_email,
+ 'contact': self._validate_phone_number(self.partner_phone),
+ 'fail_existing': '0', # Don't throw an error if the customer already exists.
+ }
+ _logger.info(
+ "Sending '/customers' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(payload)
+ )
+ customer_data = self.provider_id._razorpay_make_request('customers', payload=payload)
+ _logger.info(
+ "Response of '/customers' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(customer_data)
+ )
+ return customer_data
+
+ @api.model
+ def _validate_phone_number(self, phone):
+ """ Validate and format the phone number.
+
+ :param str phone: The phone number to validate.
+ :return str: The formatted phone number.
+ :raise ValidationError: If the phone number is missing or incorrect.
+ """
+ if not phone:
+ raise ValidationError("Razorpay: " + _("The phone number is missing."))
+
+ try:
+ phone = self._phone_format(
+ number=phone, country=self.partner_country_id, raise_exception=True
+ )
+ except Exception:
+ raise ValidationError("Razorpay: " + _("The phone number is invalid."))
+ return phone
+
+ def _razorpay_create_order(self, customer_id=None):
+ """ Create and return an Order object to initiate the payment.
+
+ :param str customer_id: The ID of the Customer object to assign to the Order for
+ non-subsequent payments.
+ :return: The created Order.
+ :rtype: dict
+ """
+ payload = self._razorpay_prepare_order_payload(customer_id=customer_id)
+ _logger.info(
+ "Sending '/orders' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(payload)
+ )
+ order_data = self.provider_id._razorpay_make_request('orders', payload=payload)
+ _logger.info(
+ "Response of '/orders' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(order_data)
+ )
+ return order_data
+
+ def _razorpay_prepare_order_payload(self, customer_id=None):
+ """ Prepare the payload for the order request based on the transaction values.
+
+ :param str customer_id: The ID of the Customer object to assign to the Order for
+ non-subsequent payments.
+ :return: The request payload.
+ :rtype: dict
+ """
+ converted_amount = payment_utils.to_minor_currency_units(self.amount, self.currency_id)
+ pm_code = (self.payment_method_id.primary_payment_method_id or self.payment_method_id).code
+ payload = {
+ 'amount': converted_amount,
+ 'currency': self.currency_id.name,
+ 'method': pm_code,
+ }
+ if self.operation in ['online_direct', 'validation']:
+ payload['customer_id'] = customer_id # Required for only non-subsequent payments.
+ if self.tokenize:
+ payload['token'] = {
+ 'max_amount': payment_utils.to_minor_currency_units(
+ self._razorpay_get_mandate_max_amount(), self.currency_id
+ ),
+ 'expire_at': time.mktime(
+ (datetime.today() + relativedelta(years=10)).timetuple()
+ ), # Don't expire the token before at least 10 years.
+ 'frequency': 'as_presented',
+ }
+ else: # 'online_token', 'offline'
+ # Required for only subsequent payments.
+ payload['payment_capture'] = not self.provider_id.capture_manually
+ if self.provider_id.capture_manually: # The related payment must be only authorized.
+ payload.update({
+ 'payment': {
+ 'capture': 'manual',
+ 'capture_options': {
+ 'manual_expiry_period': 7200, # The default value for this required option.
+ 'refund_speed': 'normal', # The default value for this required option.
+ }
+ },
+ })
+ return payload
+
+ def _razorpay_get_mandate_max_amount(self):
+ """ Return the eMandate's maximum amount to define.
+
+ :return: The eMandate's maximum amount.
+ :rtype: int
+ """
+ pm_code = (
+ self.payment_method_id.primary_payment_method_id or self.payment_method_id
+ ).code
+ pm_max_amount = const.MANDATE_MAX_AMOUNT.get(pm_code, 100000)
+ mandate_values = self._get_mandate_values() # The linked document's values.
+ if 'amount' in mandate_values and 'MRR' in mandate_values:
+ max_amount = min(
+ pm_max_amount, max(mandate_values['amount'] * 1.5, mandate_values['MRR'] * 5)
+ )
+ else:
+ max_amount = pm_max_amount
+ return max_amount
+
+ def _send_payment_request(self):
+ """ Override of `payment` to send a payment request to Razorpay.
+
+ Note: self.ensure_one()
+
+ :return: None
+ :raise UserError: If the transaction is not linked to a token.
+ """
+ super()._send_payment_request()
+ if self.provider_code != 'razorpay':
+ return
+
+ if not self.token_id:
+ raise UserError("Razorpay: " + _("The transaction is not linked to a token."))
+
+ try:
+ order_data = self._razorpay_create_order()
+ phone = self._validate_phone_number(self.partner_phone)
+ customer_id, token_id = self.token_id.provider_ref.split(',')
+ payload = {
+ 'email': self.partner_email,
+ 'contact': phone,
+ 'amount': order_data['amount'],
+ 'currency': self.currency_id.name,
+ 'order_id': order_data['id'],
+ 'customer_id': customer_id,
+ 'token': token_id,
+ 'description': self.reference,
+ 'recurring': '1',
+ }
+ _logger.info(
+ "Sending '/payments/create/recurring' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(payload)
+ )
+ recurring_payment_data = self.provider_id._razorpay_make_request(
+ 'payments/create/recurring', payload=payload
+ )
+ _logger.info(
+ "Response of '/payments/create/recurring' request for transaction with reference "
+ "%s:\n%s", self.reference, pprint.pformat(recurring_payment_data)
+ )
+ self._handle_notification_data('razorpay', recurring_payment_data)
+ except ValidationError as e:
+ if self.operation == 'offline':
+ self._set_error(str(e))
+ else:
+ raise
+
+ def _send_refund_request(self, amount_to_refund=None):
+ """ Override of `payment` to send a refund request to Razorpay.
+
+ Note: self.ensure_one()
+
+ :param float amount_to_refund: The amount to refund.
+ :return: The refund transaction created to process the refund request.
+ :rtype: recordset of `payment.transaction`
+ """
+ refund_tx = super()._send_refund_request(amount_to_refund=amount_to_refund)
+ if self.provider_code != 'razorpay':
+ return refund_tx
+
+ # Make the refund request to Razorpay.
+ converted_amount = payment_utils.to_minor_currency_units(
+ -refund_tx.amount, refund_tx.currency_id
+ ) # The amount is negative for refund transactions.
+ payload = {
+ 'amount': converted_amount,
+ 'notes': {
+ 'reference': refund_tx.reference, # Allow retrieving the ref. from webhook data.
+ },
+ }
+ _logger.info(
+ "Payload of '/payments//refund' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(payload)
+ )
+ response_content = refund_tx.provider_id._razorpay_make_request(
+ f'payments/{self.provider_reference}/refund', payload=payload
+ )
+ _logger.info(
+ "Response of '/payments//refund' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(response_content)
+ )
+ response_content.update(entity_type='refund')
+ refund_tx._handle_notification_data('razorpay', response_content)
+
+ return refund_tx
+
+ def _send_capture_request(self, amount_to_capture=None):
+ """ Override of `payment` to send a capture request to Razorpay. """
+ child_capture_tx = super()._send_capture_request(amount_to_capture=amount_to_capture)
+ if self.provider_code != 'razorpay':
+ return child_capture_tx
+
+ converted_amount = payment_utils.to_minor_currency_units(self.amount, self.currency_id)
+ payload = {'amount': converted_amount, 'currency': self.currency_id.name}
+ _logger.info(
+ "Payload of '/payments//capture' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(payload)
+ )
+ response_content = self.provider_id._razorpay_make_request(
+ f'payments/{self.provider_reference}/capture', payload=payload
+ )
+ _logger.info(
+ "Response of '/payments//capture' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(response_content)
+ )
+
+ # Handle the capture request response.
+ self._handle_notification_data('razorpay', response_content)
+
+ return child_capture_tx
+
+ def _send_void_request(self, amount_to_void=None):
+ """ Override of `payment` to explain that it is impossible to void a Razorpay transaction.
+ """
+ child_void_tx = super()._send_void_request(amount_to_void=amount_to_void)
+ if self.provider_code != 'razorpay':
+ return child_void_tx
+
+ raise UserError(_("Transactions processed by Razorpay can't be manually voided from Odoo."))
+
+ def _get_tx_from_notification_data(self, provider_code, notification_data):
+ """ Override of `payment` to find the transaction based on razorpay data.
+
+ :param str provider_code: The code of the provider that handled the transaction
+ :param dict notification_data: The normalized notification data sent by the provider
+ :return: The transaction if found
+ :rtype: recordset of `payment.transaction`
+ :raise: ValidationError if the data match no transaction
+ """
+ tx = super()._get_tx_from_notification_data(provider_code, notification_data)
+ if provider_code != 'razorpay' or len(tx) == 1:
+ return tx
+
+ entity_type = notification_data.get('entity_type', 'payment')
+ if entity_type == 'payment':
+ reference = notification_data.get('description')
+ if not reference:
+ raise ValidationError("Razorpay: " + _("Received data with missing reference."))
+ tx = self.search([('reference', '=', reference), ('provider_code', '=', 'razorpay')])
+ else: # 'refund'
+ reference = notification_data.get('notes', {}).get('reference')
+ if reference: # The refund was initiated from Odoo.
+ tx = self.search([('reference', '=', reference), ('provider_code', '=', 'razorpay')])
+ else: # The refund was initiated from Razorpay.
+ # Find the source transaction based on its provider reference.
+ source_tx = self.search([
+ ('provider_reference', '=', notification_data['payment_id']),
+ ('provider_code', '=', 'razorpay'),
+ ])
+ if source_tx:
+ # Manually create a refund transaction with a new reference.
+ tx = self._razorpay_create_refund_tx_from_notification_data(
+ source_tx, notification_data
+ )
+ else: # The refund was initiated for an unknown source transaction.
+ pass # Don't do anything with the refund notification.
+ if not tx:
+ raise ValidationError(
+ "Razorpay: " + _("No transaction found matching reference %s.", reference)
+ )
+
+ return tx
+
+ def _razorpay_create_refund_tx_from_notification_data(self, source_tx, notification_data):
+ """ Create a refund transaction based on Razorpay data.
+
+ :param recordset source_tx: The source transaction for which a refund is initiated, as a
+ `payment.transaction` recordset.
+ :param dict notification_data: The notification data sent by the provider.
+ :return: The newly created refund transaction.
+ :rtype: recordset of `payment.transaction`
+ :raise ValidationError: If inconsistent data were received.
+ """
+ refund_provider_reference = notification_data.get('id')
+ amount_to_refund = notification_data.get('amount')
+ if not refund_provider_reference or not amount_to_refund:
+ raise ValidationError("Razorpay: " + _("Received incomplete refund data."))
+
+ converted_amount = payment_utils.to_major_currency_units(
+ amount_to_refund, source_tx.currency_id
+ )
+ return source_tx._create_child_transaction(
+ converted_amount, is_refund=True, provider_reference=refund_provider_reference
+ )
+
+ def _process_notification_data(self, notification_data):
+ """ Override of `payment` to process the transaction based on Razorpay data.
+
+ Note: self.ensure_one()
+
+ :param dict notification_data: The notification data sent by the provider
+ :return: None
+ """
+ super()._process_notification_data(notification_data)
+ if self.provider_code != 'razorpay':
+ return
+
+ if 'id' in notification_data: # We have the full entity data (S2S request or webhook).
+ entity_data = notification_data
+ else: # The payment data are not complete (redirect from checkout).
+ # Fetch the full payment data.
+ entity_data = self.provider_id._razorpay_make_request(
+ f'payments/{notification_data["razorpay_payment_id"]}', method='GET'
+ )
+ _logger.info(
+ "Response of '/payments' request for transaction with reference %s:\n%s",
+ self.reference, pprint.pformat(entity_data)
+ )
+
+ # Update the provider reference.
+ entity_id = entity_data.get('id')
+ if not entity_id:
+ raise ValidationError("Razorpay: " + _("Received data with missing entity id."))
+ self.provider_reference = entity_id
+
+ # Update the payment method.
+ payment_method_type = entity_data.get('method', '')
+ if payment_method_type == 'card':
+ payment_method_type = entity_data.get('card', {}).get('network').lower()
+ payment_method = self.env['payment.method']._get_from_code(payment_method_type)
+ self.payment_method_id = payment_method or self.payment_method_id
+
+ # Update the payment state.
+ entity_status = entity_data.get('status')
+ if not entity_status:
+ raise ValidationError("Razorpay: " + _("Received data with missing status."))
+
+ if entity_status in const.PAYMENT_STATUS_MAPPING['pending']:
+ self._set_pending()
+ elif entity_status in const.PAYMENT_STATUS_MAPPING['authorized']:
+ if self.provider_id.capture_manually:
+ self._set_authorized()
+ elif entity_status in const.PAYMENT_STATUS_MAPPING['done']:
+ if self.tokenize:
+ self._razorpay_tokenize_from_notification_data(notification_data)
+ self._set_done()
+
+ # Immediately post-process the transaction if it is a refund, as the post-processing
+ # will not be triggered by a customer browsing the transaction from the portal.
+ if self.operation == 'refund':
+ self.env.ref('payment.cron_post_process_payment_tx')._trigger()
+ elif entity_status in const.PAYMENT_STATUS_MAPPING['error']:
+ _logger.warning(
+ "The transaction with reference %s underwent an error. Reason: %s",
+ self.reference, entity_data.get('error_description')
+ )
+ self._set_error(
+ _("An error occurred during the processing of your payment. Please try again.")
+ )
+ else: # Classify unsupported payment status as the `error` tx state.
+ _logger.warning(
+ "Received data for transaction with reference %s with invalid payment status: %s",
+ self.reference, entity_status
+ )
+ self._set_error(
+ "Razorpay: " + _("Received data with invalid status: %s", entity_status)
+ )
+
+ def _razorpay_tokenize_from_notification_data(self, notification_data):
+ """ Create a new token based on the notification data.
+
+ :param dict notification_data: The notification data built with Razorpay objects.
+ See `_process_notification_data`.
+ :return: None
+ """
+ pm_code = (self.payment_method_id.primary_payment_method_id or self.payment_method_id).code
+ if pm_code == 'card':
+ details = notification_data.get('card', {}).get('last4')
+ elif pm_code == 'upi':
+ temp_vpa = notification_data.get('vpa')
+ details = temp_vpa[temp_vpa.find('@') - 1:]
+ else:
+ details = pm_code
+
+ token = self.env['payment.token'].create({
+ 'provider_id': self.provider_id.id,
+ 'payment_method_id': self.payment_method_id.id,
+ 'payment_details': details,
+ 'partner_id': self.partner_id.id,
+ # Razorpay requires both the customer ID and the token ID which are extracted from here.
+ 'provider_ref': f'{notification_data["customer_id"]},{notification_data["token_id"]}',
+ })
+ self.write({
+ 'token_id': token,
+ 'tokenize': False,
+ })
+ _logger.info(
+ "Created token with id %(token_id)s for partner with id %(partner_id)s from "
+ "transaction with reference %(ref)s",
+ {
+ 'token_id': token.id,
+ 'partner_id': self.partner_id.id,
+ 'ref': self.reference,
+ },
+ )
diff --git a/static/description/icon.png b/static/description/icon.png
new file mode 100644
index 0000000..8ba957d
Binary files /dev/null and b/static/description/icon.png differ
diff --git a/static/description/icon.svg b/static/description/icon.svg
new file mode 100644
index 0000000..9955636
--- /dev/null
+++ b/static/description/icon.svg
@@ -0,0 +1 @@
+
diff --git a/static/src/js/payment_form.js b/static/src/js/payment_form.js
new file mode 100644
index 0000000..c09d2ad
--- /dev/null
+++ b/static/src/js/payment_form.js
@@ -0,0 +1,84 @@
+/** @odoo-module **/
+/* global Razorpay */
+
+import { _t } from "@web/core/l10n/translation";
+import { loadJS } from "@web/core/assets";
+import paymentForm from '@payment/js/payment_form';
+
+paymentForm.include({
+
+ // #=== DOM MANIPULATION ===#
+
+ /**
+ * Update the payment context to set the flow to 'direct'.
+ *
+ * @override method from @payment/js/payment_form
+ * @private
+ * @param {number} providerId - The id of the selected payment option's provider.
+ * @param {string} providerCode - The code of the selected payment option's provider.
+ * @param {number} paymentOptionId - The id of the selected payment option
+ * @param {string} paymentMethodCode - The code of the selected payment method, if any.
+ * @param {string} flow - The online payment flow of the selected payment option.
+ * @return {void}
+ */
+ async _prepareInlineForm(providerId, providerCode, paymentOptionId, paymentMethodCode, flow) {
+ if (providerCode !== 'razorpay') {
+ this._super(...arguments);
+ return;
+ }
+
+ if (flow === 'token') {
+ return; // No need to update the flow for tokens.
+ }
+
+ // Overwrite the flow of the select payment method.
+ this._setPaymentFlow('direct');
+ },
+
+ // #=== PAYMENT FLOW ===#
+
+ async _processDirectFlow(providerCode, paymentOptionId, paymentMethodCode, processingValues) {
+ if (providerCode !== 'razorpay') {
+ this._super(...arguments);
+ return;
+ }
+ const razorpayOptions = this._prepareRazorpayOptions(processingValues);
+ await loadJS('https://checkout.razorpay.com/v1/checkout.js');
+ const RazorpayJS = Razorpay(razorpayOptions);
+ RazorpayJS.open();
+ RazorpayJS.on('payment.failed', response => {
+ this._displayErrorDialog(_t("Payment processing failed"), response.error.description);
+ });
+ },
+
+ /**
+ * Prepare the options to init the RazorPay SDK Object.
+ *
+ * @param {object} processingValues - The processing values.
+ * @return {object}
+ */
+ _prepareRazorpayOptions(processingValues) {
+ return Object.assign({}, processingValues, {
+ 'key': processingValues['razorpay_key_id'],
+ 'order_id': processingValues['razorpay_order_id'],
+ 'customer_id': processingValues['razorpay_customer_id'],
+ 'description': processingValues['reference'],
+ 'recurring': processingValues['is_tokenize_request'] ? '1': '0',
+ 'handler': response => {
+ if (
+ response['razorpay_payment_id']
+ && response['razorpay_order_id']
+ && response['razorpay_signature']
+ ) { // The payment reached a final state; redirect to the status page.
+ window.location = '/payment/status';
+ }
+ },
+ 'modal': {
+ 'ondismiss': () => {
+ window.location.reload();
+ }
+ },
+ });
+ },
+
+});
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..4a36db0
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,6 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import common
+from . import test_payment_provider
+from . import test_payment_transaction
+from . import test_processing_flows
diff --git a/tests/common.py b/tests/common.py
new file mode 100644
index 0000000..4be7dcb
--- /dev/null
+++ b/tests/common.py
@@ -0,0 +1,54 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.addons.payment.tests.common import PaymentCommon
+from odoo.fields import Command
+
+
+class RazorpayCommon(PaymentCommon):
+
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+
+ cls.provider = cls._prepare_provider('razorpay', update_values={
+ 'razorpay_key_id': 'rzp_123',
+ 'razorpay_key_secret': 'Y63AyP9eL91',
+ 'razorpay_webhook_secret': 'coincoin_motherducker',
+ 'payment_method_ids': [Command.set([cls.env.ref('payment.payment_method_card').id])],
+ })
+
+ cls.razorpay_customer_id = 'cust_123'
+ cls.razorpay_token_id = 'token_404'
+
+ cls.payment_id = 'pay_123'
+ cls.refund_id = 'rfd_456'
+ cls.order_id = 'order_789'
+ cls.redirect_notification_data = {
+ 'razorpay_payment_id': cls.payment_id,
+ 'razorpay_order_id': cls.order_id,
+ 'razorpay_signature': 'dummy',
+ }
+ cls.payment_method_id = cls.provider.payment_method_ids[:1].id
+ cls.payment_data = {
+ 'id': cls.payment_id,
+ 'description': cls.reference,
+ 'status': 'captured',
+ }
+ cls.tokenize_payment_data = {
+ **cls.payment_data,
+ 'customer_id': cls.razorpay_customer_id,
+ 'token_id': cls.razorpay_token_id,
+ }
+ cls.refund_data = {
+ 'id': cls.refund_id,
+ 'payment_id': cls.payment_id,
+ 'amount': cls.amount,
+ }
+ cls.webhook_notification_data = {
+ 'event': 'payment.captured',
+ 'payload': {
+ 'payment': {
+ 'entity': cls.payment_data,
+ },
+ },
+ }
diff --git a/tests/test_payment_provider.py b/tests/test_payment_provider.py
new file mode 100644
index 0000000..92d30da
--- /dev/null
+++ b/tests/test_payment_provider.py
@@ -0,0 +1,26 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.tests import tagged
+
+from odoo.addons.payment_razorpay.tests.common import RazorpayCommon
+
+
+@tagged('post_install', '-at_install')
+class TestPaymentProvider(RazorpayCommon):
+
+ def test_incompatible_with_unsupported_currencies(self):
+ """ Test that Razorpay providers are filtered out from compatible providers when the
+ currency is not supported. """
+ compatible_providers = self.env['payment.provider']._get_compatible_providers(
+ self.company_id, self.partner.id, self.amount, currency_id=self.env.ref('base.AFN').id
+ )
+ self.assertNotIn(self.provider, compatible_providers)
+
+ def test_signature_calculation_for_redirect_data(self):
+ """ Test that the calculated signature matches the expected signature for redirect data. """
+ calculated_signature = self.provider._razorpay_calculate_signature(
+ self.redirect_notification_data, is_redirect=True
+ )
+ self.assertEqual(
+ calculated_signature, '437b72e4e87362a39951b44487cf698410b074afdbed19ec44fffd32d2f863f3'
+ )
diff --git a/tests/test_payment_transaction.py b/tests/test_payment_transaction.py
new file mode 100644
index 0000000..de38282
--- /dev/null
+++ b/tests/test_payment_transaction.py
@@ -0,0 +1,118 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import time
+
+from datetime import datetime
+from dateutil.relativedelta import relativedelta
+
+from unittest.mock import patch
+
+from odoo.exceptions import UserError
+from odoo.tests import tagged
+
+from odoo.addons.payment import utils as payment_utils
+from odoo.addons.payment_razorpay.tests.common import RazorpayCommon
+
+
+@tagged('post_install', '-at_install')
+class TestPaymentTransaction(RazorpayCommon):
+
+ def test_no_item_missing_from_order_request_payload(self):
+ """ Test that the request values are conform to the transaction fields. """
+ tx = self._create_transaction('redirect', operation='online_direct', payment_method_id=self.payment_method_id)
+ request_payload = tx._razorpay_prepare_order_payload(customer_id=self.razorpay_customer_id)
+ self.maxDiff = 10000 # Allow comparing large dicts.
+ converted_amount = payment_utils.to_minor_currency_units(tx.amount, tx.currency_id)
+ self.assertDictEqual(request_payload, {
+ 'amount': converted_amount,
+ 'currency': tx.currency_id.name,
+ 'customer_id': self.razorpay_customer_id,
+ 'method': 'card',
+ })
+
+ def test_void_is_not_supported(self):
+ """ Test that trying to void an authorized transaction raises an error. """
+ tx = self._create_transaction('redirect', state='authorized')
+ self.assertRaises(UserError, func=tx._send_void_request)
+
+ def test_get_tx_from_notification_data_returns_refund_tx(self):
+ """ Test that the refund transaction is returned if it exists when processing refund
+ notification data. """
+ refund_tx = self._create_transaction('redirect')
+ returned_tx = self.env['payment.transaction']._get_tx_from_notification_data(
+ 'razorpay', dict(self.refund_data, **{
+ 'entity_type': 'refund',
+ 'notes': {
+ 'reference': refund_tx.reference,
+ },
+ })
+ )
+ self.assertEqual(returned_tx, refund_tx)
+
+ def test_get_tx_from_notification_data_creates_refund_tx_when_missing(self):
+ """ Test that a refund transaction is created when processing refund notification data
+ without reference. """
+ source_tx = self._create_transaction(
+ 'redirect', state='done', provider_reference=self.payment_id
+ )
+ refund_tx = self.env['payment.transaction']._get_tx_from_notification_data(
+ 'razorpay', dict(self.refund_data, entity_type='refund')
+ )
+ self.assertTrue(
+ refund_tx,
+ msg="If no refund tx is found with the refund data, a refund tx should be created.",
+ )
+ self.assertNotEqual(refund_tx, source_tx)
+ self.assertEqual(refund_tx.source_transaction_id, source_tx)
+
+ def test_processing_notification_data_confirms_transaction(self):
+ """ Test that the transaction state is set to 'done' when the notification data indicate a
+ successful payment. """
+ tx = self._create_transaction('redirect')
+ with patch(
+ 'odoo.addons.payment_razorpay.models.payment_provider.PaymentProvider'
+ '._razorpay_make_request', return_value=self.payment_data
+ ):
+ tx._process_notification_data(self.payment_data)
+ self.assertEqual(tx.state, 'done')
+
+ def test_order_request_payload_for_tokenize_tx(self):
+ """ Test that order payload for tokenize tx is proper. """
+ tx = self._create_transaction('redirect', operation='online_direct', tokenize=True, payment_method_id=self.payment_method_id)
+ self.assertDictEqual(tx._get_specific_rendering_values(None), {}, "Should return empty dict of rendering values for tokenize transaction")
+
+ request_payload = tx._razorpay_prepare_order_payload(customer_id=self.razorpay_customer_id)
+ converted_amount = payment_utils.to_minor_currency_units(tx.amount, tx.currency_id)
+ token_expiry_date = datetime.today() + relativedelta(years=10)
+ token_expiry_timeslamp = time.mktime(token_expiry_date.timetuple())
+ self.assertDictEqual(request_payload, {
+ 'token': {
+ "expire_at": token_expiry_timeslamp,
+ "frequency": "as_presented",
+ 'max_amount': 100000000,
+ },
+ 'amount': converted_amount,
+ 'currency': tx.currency_id.name,
+ 'customer_id': self.razorpay_customer_id,
+ 'method': 'card',
+
+ })
+
+ def test_processing_notification_data_confirms_tokenize_transaction(self):
+ """ Test that the transaction state is set to 'done' when the notification data indicate a
+ successful payment. """
+ tx = self._create_transaction('redirect', tokenize=True, payment_method_id=self.payment_method_id)
+ tx._process_notification_data(self.tokenize_payment_data)
+ self.assertEqual(tx.state, 'done')
+
+ def test_token_creation_for_tokenize_transaction(self):
+ """ Test that the token is create on confirmation of tokenize transaction """
+ tx = self._create_transaction('redirect', tokenize=True, payment_method_id=self.payment_method_id)
+ tx._process_notification_data(self.tokenize_payment_data)
+ token = tx.token_id
+ self.assertTrue(token, "Should create token for tokenize transction")
+ self.assertFalse(tx.tokenize, "Trasection should be non tokenize after token creation")
+ self.assertEqual(
+ token.provider_ref, f"{self.tokenize_payment_data['customer_id']},{self.tokenize_payment_data['token_id']}",
+ "Should set proper values for provider_ref to get customer_id and token_id from that field"
+ )
diff --git a/tests/test_processing_flows.py b/tests/test_processing_flows.py
new file mode 100644
index 0000000..e84ea55
--- /dev/null
+++ b/tests/test_processing_flows.py
@@ -0,0 +1,107 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from unittest.mock import patch
+
+from werkzeug.exceptions import Forbidden
+
+from odoo.tests import tagged
+from odoo.tools import mute_logger
+
+from odoo.addons.payment.tests.http_common import PaymentHttpCommon
+from odoo.addons.payment_razorpay.controllers.main import RazorpayController
+from odoo.addons.payment_razorpay.tests.common import RazorpayCommon
+
+
+@tagged('post_install', '-at_install')
+class TestProcessingFlows(RazorpayCommon, PaymentHttpCommon):
+
+ @mute_logger('odoo.addons.payment_razorpay.controllers.main')
+ def test_webhook_notification_triggers_processing(self):
+ """ Test that receiving a valid webhook notification triggers the processing of the
+ notification data. """
+ self._create_transaction('direct')
+ url = self._build_url(RazorpayController._webhook_url)
+ with patch(
+ 'odoo.addons.payment_razorpay.controllers.main.RazorpayController.'
+ '_verify_notification_signature'
+ ), patch(
+ 'odoo.addons.payment.models.payment_transaction.PaymentTransaction'
+ '._handle_notification_data'
+ ) as handle_notification_data_mock:
+ self._make_json_request(url, data=self.webhook_notification_data)
+ self.assertEqual(handle_notification_data_mock.call_count, 1)
+
+ @mute_logger('odoo.addons.payment_razorpay.controllers.main')
+ def test_webhook_notification_triggers_processing_for_tokenize_transaction(self):
+ """ Test that receiving a valid webhook notification triggers the processing of the
+ notification data for tokenize transaction. """
+ self._create_transaction('redirect', tokenize=True, payment_method_id=self.payment_method_id)
+ url = self._build_url(RazorpayController._webhook_url)
+ with patch(
+ 'odoo.addons.payment_razorpay.controllers.main.RazorpayController.'
+ '_verify_notification_signature'
+ ), patch(
+ 'odoo.addons.payment.models.payment_transaction.PaymentTransaction'
+ '._handle_notification_data'
+ ) as handle_notification_data_mock:
+ self._make_json_request(url, data=self.webhook_notification_data)
+ self.assertEqual(handle_notification_data_mock.call_count, 1)
+
+ @mute_logger('odoo.addons.payment_razorpay.controllers.main')
+ def test_webhook_notification_triggers_signature_check(self):
+ """ Test that receiving a webhook notification triggers a signature check. """
+ self._create_transaction('redirect')
+ url = self._build_url(RazorpayController._webhook_url)
+ with patch(
+ 'odoo.addons.payment_razorpay.controllers.main.RazorpayController'
+ '._verify_notification_signature'
+ ) as signature_check_mock, patch(
+ 'odoo.addons.payment.models.payment_transaction.PaymentTransaction'
+ '._handle_notification_data'
+ ):
+ self._make_json_request(url, data=self.webhook_notification_data)
+ self.assertEqual(signature_check_mock.call_count, 1)
+
+ def test_accept_webhook_notification_with_valid_signature(self):
+ """ Test the verification of a webhook notification with a valid signature. """
+ tx = self._create_transaction('redirect')
+ with patch(
+ 'odoo.addons.payment_razorpay.models.payment_provider.PaymentProvider'
+ '._razorpay_calculate_signature', return_value='valid_signature'
+ ):
+ self._assert_does_not_raise(
+ Forbidden,
+ RazorpayController._verify_notification_signature,
+ self.webhook_notification_data,
+ 'valid_signature',
+ tx,
+ is_redirect=False,
+ )
+
+ @mute_logger('odoo.addons.payment_razorpay.controllers.main')
+ def test_reject_notification_with_missing_signature(self):
+ """ Test the verification of a notification with a missing signature. """
+ tx = self._create_transaction('redirect')
+ self.assertRaises(
+ Forbidden,
+ RazorpayController._verify_notification_signature,
+ self.webhook_notification_data,
+ None,
+ tx,
+ )
+
+ @mute_logger('odoo.addons.payment_razorpay.controllers.main')
+ def test_reject_notification_with_invalid_signature(self):
+ """ Test the verification of a notification with an invalid signature. """
+ tx = self._create_transaction('redirect')
+ with patch(
+ 'odoo.addons.payment_razorpay.models.payment_provider.PaymentProvider'
+ '._razorpay_calculate_signature', return_value='valid_signature'
+ ):
+ self.assertRaises(
+ Forbidden,
+ RazorpayController._verify_notification_signature,
+ self.webhook_notification_data,
+ 'bad_signature',
+ tx,
+ )
diff --git a/views/payment_provider_views.xml b/views/payment_provider_views.xml
new file mode 100644
index 0000000..225840c
--- /dev/null
+++ b/views/payment_provider_views.xml
@@ -0,0 +1,40 @@
+
+
+
+
+ Razorpay Provider Form
+ payment.provider
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/views/payment_razorpay_templates.xml b/views/payment_razorpay_templates.xml
new file mode 100644
index 0000000..9b2d530
--- /dev/null
+++ b/views/payment_razorpay_templates.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+