squashed commit

This commit is contained in:
hoangvv
2026-09-18 13:55:25 +07:00
commit 039c98d4d0
45882 changed files with 24235585 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import models
def uninstall_hook(env):
ICP = env['ir.config_parameter']
if ICP.get_param('cloud_storage_provider') == 'azure':
env['res.config.settings']._check_cloud_storage_uninstallable()
ICP.set_param('cloud_storage_provider', False)
ICP.search([('key', 'in', [
'cloud_storage_azure_container_name',
'cloud_storage_azure_account_name',
'cloud_storage_azure_tenant_id',
'cloud_storage_azure_client_id',
'cloud_storage_azure_client_secret',
])]).unlink()
@@ -0,0 +1,14 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
"name": "Cloud Storage Azure",
"summary": """Store chatter attachments in the Azure cloud""",
"category": "Technical Settings",
"version": "1.0",
"depends": ["cloud_storage"],
"data": [
"views/settings.xml",
],
"uninstall_hook": "uninstall_hook",
'license': 'LGPL-3',
}
@@ -0,0 +1,7 @@
DELETE
FROM ir_config_parameter
WHERE key IN ('cloud_storage_azure_account_name',
'cloud_storage_azure_container_name',
'cloud_storage_azure_tenant_id',
'cloud_storage_azure_client_id',
'cloud_storage_azure_client_secret')
+104
View File
@@ -0,0 +1,104 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Malaz Abuidris <msea@odoo.com>, 2024
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-10 12:44+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Arabic <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/ar/>\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \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 ? 4 : 5;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "مرفق"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "اسم حساب Azure "
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "معرّف عميل Azure "
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "سر عميل Azure "
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "مساحة التخزين السحابية لدى Azure "
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "اسم حاوية Azure "
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "اسم المستأجر لـ Azure "
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "مزود مساحة التخزين السحابية للمرفقات الجديدة "
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "تهيئة الإعدادات "
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "إبطال مفتاح تفويض مستخدم Azure المُخزّن مؤقتاً "
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"بعض مرفقات Azure قيد الاستخدام في الوقت الراهن. يٌرجى نقل مساحة التخزين "
"السحابية الخاصة بها قبل تعطيل هذا التطبيق "
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"لا يُسمح لسلسلة الاتصال بتنزيل الكتل من الحاوية.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"لا يُسمح لسلسلة الاتصال بتحميل الكتل إلى الحاوية.\n"
"%s"
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Jumshud Sultanov <cumshud@gmail.com>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Jumshud Sultanov <cumshud@gmail.com>, 2024\n"
"Language-Team: Azerbaijani (https://app.transifex.com/odoo/teams/41243/az/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: az\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Qoşma"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Parametrləri Konfiqurasiya edin"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+95
View File
@@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Petko Karamotchev, 2024
# KeyVillage, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: KeyVillage, 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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Прикачен файл"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Конфигурационни настройки"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+95
View File
@@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-25 09:49+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Bosnian <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/bs/>\n"
"Language: bs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \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"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Zakačka"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+98
View File
@@ -0,0 +1,98 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Martin Trigaux, 2024
# Óscar Fonseca <tecnico@pyming.com>, 2024
# "Noemi Pla Garcia (nopl)" <nopl@odoo.com>, 2025.
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-10 12:44+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Catalan <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/ca/>\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Adjunt"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nom del compte d'Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID del client d'Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Clau secreta del client d'Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Emmagatzematge al núvol d'Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Proveïdor d'emmagatzematge al núvol per als nous arxius adjunts"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Paràmetres de configuració"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
@@ -0,0 +1,90 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-26 08:55+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Příloha"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Konfigurační nastavení"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Martin Trigaux, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Martin Trigaux, 2024\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Vedhæftning"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Konfigurer opsætning"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+102
View File
@@ -0,0 +1,102 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Larissa Manderfeld, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Dateianhang"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Azure-Kontoname"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure-Client-ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure-Client-Geheimnis"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Azure-Cloud-Speicher"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azure-Containername"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure-Inhabername"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Anbieter von Cloud-Speichern für neue Anhänge"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Konfigurationseinstellungen"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
"Zwischengespeicherten Azure-Benutzerdelegationsschlüssel ungültig machen"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Einige Azure-Anhänge werden benutzt, bitte migrieren Sie deren Cloud-"
"Speicher, bevor Sie dieses Modul deaktivieren"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Die Verbindungszeichenkette darf keine Blobs (Binary Large Object) aus dem Container herunterladen.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Die Verbindungszeichenkette darf keine Blobs (Binary Large Object) in den Container hochladen.\n"
"%s"
+95
View File
@@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Martin Trigaux, 2024
# Alexandros Kapetanios <alexandros@gnugr.org>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Alexandros Kapetanios <alexandros@gnugr.org>, 2024\n"
"Language-Team: Greek (https://app.transifex.com/odoo/teams/41243/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: el\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Συνημμένο"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Ρυθμίσεις διαμόρφωσης"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+102
View File
@@ -0,0 +1,102 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Larissa Manderfeld, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Archivo adjunto"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nombre de la cuenta de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID de cliente de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Secreto de cliente de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Almacenamiento en la nube de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Nombre del contenedor de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID del propietario de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
"El proveedor de almacenamiento en la nube para los nuevos archivos adjuntos"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Ajustes de configuración"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Invalidar la clave de delegación de usuarios de Azure en caché"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Algunos archivos adjuntos de Azure están en uso, migre su almacenamiento en "
"la nube antes de deshabilitar este módulo. "
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"La cadena de conexión no tiene permitido descargar blobs del contenedor. \n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"La cadena de conexión no tiene permitido subir blobs al contenedor.\n"
"%s"
+106
View File
@@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Fernanda Alvarez, 2024
#
# "Fernanda Alvarez (mfar)" <mfar@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-13 16:24+0000\n"
"Last-Translator: \"Fernanda Alvarez (mfar)\" <mfar@odoo.com>\n"
"Language-Team: Spanish (Latin America) <https://translate.odoo.com/projects/"
"odoo-18/cloud_storage_azure/es_419/>\n"
"Language: es_419\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n != 0 && n % 1000000 == 0)"
" ? 1 : 2);\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Archivos adjuntos"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nombre de la cuenta de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID de cliente de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Secreto de cliente de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Almacenamiento en la nube de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Nombre del contenedor de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID de inquilino de Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
"Proveedor de almacenamiento en la nube para los nuevos archivos adjuntos"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Ajustes de configuración"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Invalidar la clave de delegación de usuarios de Azure en caché"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Algunos archivos adjuntos de Azure están en uso, migre su almacenamiento en "
"la nube antes de deshabilitar este módulo. "
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"La cadena de conexión no tiene permitido descargar blobs del contenedor. \n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"La cadena de conexión no tiene permitido subir blobs al contenedor. \n"
"%s"
+104
View File
@@ -0,0 +1,104 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Stevin Lilla, 2024
# Martin Trigaux, 2024
#
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-10 12:46+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Estonian <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/et/>\n"
"Language: et\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Manus"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Azure konto nimi"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure kliendi ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure kliendi salajane võti"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Azure pilvesalvestus"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azure konteineri nimi"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure üürniku ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Uute manuste pilvesalvestuse pakkuja"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Seadistused"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Kehtetuks tehtud vahemällu salvestatud Azurei kasutaja volituse võti"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Mõned Azuri manused on kasutuses, palun kolige enda pilvesalvestused enne "
"kui lülitate mooduli välja"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Ühendusstringil ei ole lubatud konteinerist blobe alla laadida.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Ühendusstringil ei ole lubatud konteinerisse blobe üles laadida.\n"
"%s"
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Tiffany Chang, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Tiffany Chang, 2025\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "پیوست"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "تنظیمات پیکربندی"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+102
View File
@@ -0,0 +1,102 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2024
# Martin Trigaux, 2024
# Jessica Jakara, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Jessica Jakara, 2025\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Liite"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Azure Tilin nimi"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure Asiakas ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure Asiakassalaisuus"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Azure Pilvitallennus"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azure Säiliön nimi"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure Vuokralaisen ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Pilvitallennuspalvelun tarjoaja uusille liitteille"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Asetukset"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Virheellinen välimuistissa oleva Azure-käyttäjän delegointiavain"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Joitakin Azure liitteitä on käytössä, ole hyvä ja siirrä niiden "
"pilvitallennustila ennen kuin poistat tämän moduulin käytöstä."
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Yhteysmerkkijono ei voi ladata blob-objekteja säiliöstä.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Yhteysmerkkijono ei voi ladata blob-objekteja säiliöön.\n"
"%s"
+101
View File
@@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Manon Rondou, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Manon Rondou, 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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Pièce jointe"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nom du compte Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID Client Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Secret Client Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Cloud Storage Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Nom du conteneur Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID Locataire Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Fournisseur Cloud Storage pour les nouvelles pièces jointes"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Paramètres de config"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Invalider la clé de délégation de l'utilisateur Azure mise en cache"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Certaines pièces jointes Azure sont en cours d'utilisation, veuillez migrer "
"leur stockage dans le cloud avant de désactiver ce module."
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"La chaîne de connexion ne permet pas de télécharger des blobs à partir du conteneur.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"La chaîne de connexion ne permet pas de télécharger des blobs vers le du conteneur.\n"
"%s"
+99
View File
@@ -0,0 +1,99 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Orel Nahmany, 2024
# Martin Trigaux, 2024
# or balmas, 2025
#
# or balmas <or@laylinetech.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-09-16 22:20+0000\n"
"Last-Translator: or balmas <or@laylinetech.com>\n"
"Language-Team: Hebrew <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/he/>\n"
"Language: he\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 2) ? 1 : 2);\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "קובץ מצורף"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "ספק אחסון בענן לקבצים מצורפים חדשים"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "הגדרות תצורה"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Ujjawal Pathak, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Ujjawal Pathak, 2025\n"
"Language-Team: Hindi (https://app.transifex.com/odoo/teams/41243/hi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: hi\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "अटैचमेंट"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "कॉन्फ़िगरेशन सेटिंग"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Bole <bole@dajmi5.com>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2024\n"
"Language-Team: Croatian (https://app.transifex.com/odoo/teams/41243/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: hr\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Prilog"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Konfiguracijske postavke"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+95
View File
@@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Martin Trigaux, 2024
# gezza <geza.nagy@oregional.hu>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: gezza <geza.nagy@oregional.hu>, 2024\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Melléklet"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Beállítások"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+101
View File
@@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Abe Manyo, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Lampiran"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nama Akun Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID Klien Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Secret KIien Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Cloud Storage Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Nama Container Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID Tenant Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Penyedia Cloud Storage untuk lampiran baru"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Pengaturan Konfig"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Membatalkan validasi Cached Azure User Delegation Key"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Beberapa lampiran Azure sedang digunakan, mohon migrasi cloud storage mereka"
" sebelum menonaktifkan modul ini"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Connection string tidak diizinkan untuk mengunduh blob dari container.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Connection string tidak diizinkan untuk mengunggah blob ke container.\n"
"%s"
+101
View File
@@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Marianna Ciofani, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Allegato"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nome Account Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID client Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Segreto client Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Archiviazione cloud Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Nome contenitore Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID tenant di Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Fornitore archiviazione cloud per nuovi allegati"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Impostazioni di configurazione"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Invalida chiave di delega utente Azure memorizzata nella cache"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Alcuni allegati Azure sono in uso, migra le archiviazioni cloud prima di "
"disattivare il modulo"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"La stringa di connessione non può scaricare blob dal contenitore.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"La stringa di connessione non può caricare blob nel contenitore.\n"
"%s"
+99
View File
@@ -0,0 +1,99 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Junko Augias, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "添付ファイル"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Azureアカウント名"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "AzureクライアントID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azureクライアントシークレット"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Azureクラウドストレージ"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azureコンテナ名"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "AzureテナントID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "新しい添付ファイルのためのクラウドストレージプロバイダ"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "コンフィグ設定"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "キャッシュされた Azure ユーザ委任キーの無効化"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr "使用中のAzure添付があります。このモジュールを無効にする前に、クラウドストレージを移行して下さい。"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"接続文字列は、コンテナから blob をダウンロードすることを許可されていません。\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"接続文字列は、コンテナへ blob をアップロードすることを許可されていません。\n"
"%s"
+95
View File
@@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Odoo Translation Bot <c3p@odoo.com>, 2025.
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-25 09:50+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Kabyle <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/kab/>\n"
"Language: kab\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Tasawit"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Sefrek aɣewwaṛ"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+95
View File
@@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Daye Jeong, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Daye Jeong, 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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "첨부 파일"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Azure 계정 이름"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure 클라이언트 ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure 클라이언트 시크릿"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Azure 클라우드 스토리지"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azure 컨테이너 이름"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure 테넌트 ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "새 첨부파일을 위한 클라우드 스토리지 제공업체"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "환경설정"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "캐시된 Azure 사용자 위임 키 무효화"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr "일부 Azure 첨부 파일이 현재 사용 중입니다. 이 모듈을 비활성화하기 전에 해당 클라우드 저장소를 마이그레이션하세요."
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr "연결 문자열에 컨테이너에서 Blob을 다운로드할 수 있는 권한이 없습니다. %s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr "연결 문자열에 컨테이너에서 Blob을 업로드할 수 있는 권한이 없습니다. %s"
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Raz Omer Hussein, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Raz Omer Hussein, 2025\n"
"Language-Team: Kurdish (https://app.transifex.com/odoo/teams/41243/ku/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ku\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "هاوپێچ"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Linas Versada <linaskrisiukenas@gmail.com>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Linas Versada <linaskrisiukenas@gmail.com>, 2024\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Prisegtukas"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Konfigūracijos nustatymai"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Armīns Jeltajevs <armins.jeltajevs@gmail.com>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Armīns Jeltajevs <armins.jeltajevs@gmail.com>, 2024\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Pielikums"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Konfigurācijas uzstādījumi"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Martin Trigaux, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Martin Trigaux, 2024\n"
"Language-Team: Mongolian (https://app.transifex.com/odoo/teams/41243/mn/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: mn\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Хавсралт"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Тохиргооны тохируулга"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-10 12:46+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Burmese <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/my/>\n"
"Language: my\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "ပူးတွဲ"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+95
View File
@@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Martin Trigaux, 2024
# Marius Stedjan <marius@stedjan.com>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Marius Stedjan <marius@stedjan.com>, 2024\n"
"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: nb\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Vedlegg"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Innstillinger"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+103
View File
@@ -0,0 +1,103 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Manon Rondou, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Manon Rondou, 2025\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Bijlage"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
"Azure Rekeningnaam\n"
" "
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure Client ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure Clientgeheim"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Cloudopslag Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azure Containernaam"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure Tenant-id"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Cloudopslagprovider voor nieuwe bijlagen"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Configuratie-instellingen"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Azure-gebruiker delegatiesleutel in de cache ongeldig maken"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Een aantal Azure-bijlagen zijn momenteel in gebruik. Migreer de bijbehorende"
" cloud-opslag alvorens je deze module uitschakelt."
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"De verbindingsstring mag geen blobs downloaden van de container.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"De verbindingsstring mag geen blobs uploaden naar de container.\n"
"%s"
+106
View File
@@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
#
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-10 12:44+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Polish <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/pl/>\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \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"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Załącznik"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nazwa konta Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID klienta Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Klucz klienta Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Przechowywanie w chmurze Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Nazwa kontenera Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure Tenant ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Dostawca przechowywania w chmurze dla nowych załączników"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Ustawienia konfiguracji"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
"Anuluj ważność klucza delegowania użytkownika Azure z pamięci podręcznej"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Niektóre załączniki Azure są w użyciu. Przed wyłączeniem tego modułu należy "
"przenieść ich pamięć w chmurze."
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Ciąg połączenia nie ma uprawnień do pobierania obiektów blob z kontenera.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Ciąg połączenia nie pozwala na przesyłanie obiektów blob do kontenera.\n"
"%s"
+105
View File
@@ -0,0 +1,105 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Rita Bastos, 2025
# Wil Odoo, 2025
#
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-10 12:44+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Portuguese <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/pt/>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : ((n != 0 && n % "
"1000000 == 0) ? 1 : 2);\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Anexo"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nome da conta do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID do cliente do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Segredo do cliente do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Armazenamento em nuvem do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Nome do contêiner do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID do locatário do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Provedor de armazenamento em nuvem para novos anexos"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Definições de Configuração"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Invalidar a chave de delegação de usuário do Azure em cache"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Alguns anexos do Azure estão em uso, migre seus armazenamentos em nuvem "
"antes de desativar este módulo"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"A string de conexão não tem permissão para baixar blobs do contêiner.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"A string de conexão não tem permissão para carregar blobs no contêiner.\n"
"%s"
+101
View File
@@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Maitê Dietze, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Anexo"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nome da conta do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID do cliente do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Segredo do cliente do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Armazenamento em nuvem do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Nome do contêiner do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID do locatário do Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Provedor de armazenamento em nuvem para novos anexos"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Configurações"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Invalidar a chave de delegação de usuário do Azure em cache"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Alguns anexos do Azure estão em uso, migre seus armazenamentos em nuvem "
"antes de desativar este módulo"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"A string de conexão não tem permissão para baixar blobs do contêiner.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"A string de conexão não tem permissão para carregar blobs no contêiner.\n"
"%s"
+101
View File
@@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Larisa_nexterp, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Larisa_nexterp, 2025\n"
"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: ro\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Atașament"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Nume cont Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID client Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Secret client Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Stocare în cloud Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Nume container Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID chiriaș Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Furnizor de stocare în cloud pentru atașamente noi"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Setări de configurare"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Invalidează cheia de delegare a utilizatorului Azure din cache"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Unele atașamente Azure sunt în uz, vă rugăm să migrați stocările lor în "
"cloud înainte de a dezactiva acest modul"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Șirul de conexiune nu are permisiunea de a descărca blob-uri din container.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Șirul de conexiune nu are permisiunea de a încărca blob-uri în container.\n"
"%s"
+105
View File
@@ -0,0 +1,105 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
#
# "Anastasiia Koroleva (koan)" <koan@odoo.com>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-10-20 06:22+0000\n"
"Last-Translator: \"Anastasiia Koroleva (koan)\" <koan@odoo.com>\n"
"Language-Team: Russian <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/ru/>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \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"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Вложение"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Имя аккаунта Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID клиента Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Секрет клиента Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Облачное хранилище Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Имя контейнера Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID клиента Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Провайдер облачного хранилища для новых вложений"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Параметры конфигурации"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Сбросить кэшированный ключ делегирования пользователя Azure"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Некоторые вложения Azure используются – перенесите их хранилища перед "
"отключением модуля"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Строка подключения не разрешает скачивать BLOB-объекты из контейнера.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Строка подключения не разрешает загружать BLOB-объекты в контейнер.\n"
"%s"
+94
View File
@@ -0,0 +1,94 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Wil Odoo, 2024\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Príloha"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Nastavenia konfigurácie"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+101
View File
@@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Aleš Pipan, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Aleš Pipan, 2025\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Priponka"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Ime računa Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID odjemalca Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Skrivnost odjemalca Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Shramba v oblaku Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Ime vsebnika Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID najemnika Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Ponudnik shrambe v oblaku za nove priloge"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Uredi nastavitve"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Razveljavi predpomnjeni ključ za pooblastitev uporabnikov Azure"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Nekatere priloge Azure so v uporabi, prosimo, preselite njihove shrambe v "
"oblaku, preden onemogočite ta modul."
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Povezovalnemu nizu ni dovoljeno prenašati blobov iz vsebnika.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Povezovalnemu nizu ni dovoljeno nalaganje blobov v vsebnik.\n"
"%s"
@@ -0,0 +1,95 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-10 12:45+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Serbian (Latin script) <https://translate.odoo.com/projects/"
"odoo-18/cloud_storage_azure/sr_Latn/>\n"
"Language: sr@latin\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \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"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Prilog"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Podešavanje konfiguracije"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
+103
View File
@@ -0,0 +1,103 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Chrille Hedberg <hedberg.chrille@gmail.com>, 2024
# Martin Trigaux, 2024
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-10 12:44+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Swedish <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/sv/>\n"
"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Bilaga"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Azure kontonamn"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure Client ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure klienthemlighet"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Azure Cloud Storage"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azure-containernamn"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure-klient-ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Molnlagringsleverantör för nya bilagor"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Inställningar"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Ogiltigförklara cachad Azure-användardelegeringsnyckel"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Vissa Azure-bilagor används, migrera deras molnlagringar innan du "
"inaktiverar den här modulen"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Anslutningssträngen får inte ladda ner blobbar från containern.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Anslutningssträngen får inte ladda upp blobbar från containern.\n"
"%s"
+101
View File
@@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Rasareeyar Lappiam, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "การแนบ"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "ที่เก็บข้อมูลบนคลาวด์ของ Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr ""
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "ผู้ให้บริการระบบ Cloud Storage สำหรับไฟล์แนบใหม่"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "ตั้งค่าการกำหนดค่า"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"สิ่งที่แนบมา Azure บางส่วนถูกใช้งานอยู่ "
"โปรดย้ายที่เก็บข้อมูลบนคลาวด์ก่อนปิดใช้งานโมดูลนี้"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"สตริงการเชื่อมต่อไม่ได้รับอนุญาตให้ดาวน์โหลด blobs จากคอนเทนเนอร์\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"สตริงการเชื่อมต่อไม่ได้รับอนุญาตให้อัพโหลด blobs ไปยังคอนเทนเนอร์\n"
"%s"
+104
View File
@@ -0,0 +1,104 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# emre oktem, 2024
# Martin Trigaux, 2024
#
# Weblate <noreply-mt-weblate@weblate.org>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-25 09:48+0000\n"
"Last-Translator: Weblate <noreply-mt-weblate@weblate.org>\n"
"Language-Team: Turkish <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/tr/>\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Ek"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Azure Hesap Adı"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure İstemci Kimliği"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure İstemci Sırrı"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Azure Bulut Depolama"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azure Kapsayıcı Adı"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure Tenant ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Yeni ekler için Bulut Depolama Sağlayıcısı"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Yapılandırma Ayarları"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Önbelleğe Alınmış Azure Kullanıcı Temsilci Anahtarını Geçersiz Kılma"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Bazı Azure ekleri kullanımdadır, lütfen bu modülü devre dışı bırakmadan önce "
"bulut depolarını geçirin"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Bağlantı dizesinin kapsayıcıdan blob indirmesine izin verilmiyor.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Bağlantı dizesinin kapsayıcıya blob yüklemesine izin verilmez.\n"
"%s"
+106
View File
@@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
#
# Alina Lisnenko <alina.lisnenko@erp.co.ua>, 2025.
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2025-11-21 15:43+0000\n"
"Last-Translator: Alina Lisnenko <alina.lisnenko@erp.co.ua>\n"
"Language-Team: Ukrainian <https://translate.odoo.com/projects/odoo-18/"
"cloud_storage_azure/uk/>\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \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"
"X-Generator: Weblate 5.12.2\n"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Прикріплення"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Імʼя облікового запису Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure Client ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure Client Secret"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Хмарне сховище Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Назва контейнера Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure Tenant ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Провайдер хмарного сховища для нових прикрпілень"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Налаштування"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "Визнати недійсним кешований ключ делегування користувача Azure"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Деякі вкладення Azure використовуються, будь ласка, перенесіть їхні хмарні "
"сховища, перш ніж вимикати цей модуль"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Рядку підключення не дозволено завантажувати блоби з контейнера.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Рядок підключення не має права завантажувати блоби до контейнера.\n"
"%s"
+102
View File
@@ -0,0 +1,102 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Thi Huong Nguyen, 2025
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Thi Huong Nguyen, 2025\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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "Tệp đính kèm"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Tên tài khoản Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "ID máy khách Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Mã bí mật của máy khách Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Lưu trữ đám mây Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Tên container Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "ID bên thuê Azure"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "Nhà cung cấp dịch vụ lưu trữ đám mây cho tệp đính kèm mới"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "Cài đặt cấu hình"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr ""
"Vô hiệu hóa Mã khóa ủy quyền người dùng Azure được lưu trong bộ nhớ đệm"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr ""
"Một số tệp đính kèm Azure đang được sử dụng, vui lòng di chuyển kho lưu trữ "
"đám mây của chúng trước khi tắt phân hệ này"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"Chuỗi kết nối không được phép tải xuống blob từ container.\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"Chuỗi kết nối không được phép tải blob lên container.\n"
"%s"
+100
View File
@@ -0,0 +1,100 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Chloe Wang, 2024
# Raymond Yu <cl_yu@hotmail.com>, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+0000\n"
"Last-Translator: Raymond Yu <cl_yu@hotmail.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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "附件"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Azure 账户名称"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure 客户端 ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure 客户端密钥"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Azure 云端储存空间"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azure 容器名称"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure 租户 ID"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "新附件的云存储提供商"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "配置设定"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "使缓存的 Azure 用户授权密钥失效"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr "某些 Azure 附件正在使用中,请在禁用此模块前迁移其云存储"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"不允许连接字符串从容器中下载 blob。\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"不允许连接字符串将 blob 上传到容器。\n"
"%s"
+99
View File
@@ -0,0 +1,99 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cloud_storage_azure
#
# Translators:
# Wil Odoo, 2024
# Tony Ng, 2024
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-09-26 08:55+0000\n"
"PO-Revision-Date: 2024-09-29 00:00+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: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_ir_attachment
msgid "Attachment"
msgstr "附件"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_account_name
msgid "Azure Account Name"
msgstr "Azure 帳戶名稱"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_id
msgid "Azure Client ID"
msgstr "Azure 客戶端識別碼"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_client_secret
msgid "Azure Client Secret"
msgstr "Azure 客戶端秘密"
#. module: cloud_storage_azure
#: model:ir.model.fields.selection,name:cloud_storage_azure.selection__res_config_settings__cloud_storage_provider__azure
msgid "Azure Cloud Storage"
msgstr "Azure 雲端儲存空間"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_container_name
msgid "Azure Container Name"
msgstr "Azure 容器名稱"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_tenant_id
msgid "Azure Tenant ID"
msgstr "Azure 租戶識別碼"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_provider
msgid "Cloud Storage Provider for new attachments"
msgstr "新附件的雲端儲存空間提供者"
#. module: cloud_storage_azure
#: model:ir.model,name:cloud_storage_azure.model_res_config_settings
msgid "Config Settings"
msgstr "配置設定"
#. module: cloud_storage_azure
#: model:ir.model.fields,field_description:cloud_storage_azure.field_res_config_settings__cloud_storage_azure_invalidate_user_delegation_key
msgid "Invalidate Cached Azure User Delegation Key"
msgstr "把已作快取處理的 Azure 使用者委託金鑰設為無效"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"Some Azure attachments are in use, please migrate their cloud storages "
"before disable this module"
msgstr "部份 Azure 附件正在使用中,停用此模組之前,請遷移它們的雲端儲存位置"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to download blobs from the container.\n"
"%s"
msgstr ""
"該連線字串不允許從容器下載 blob 儲存體。\n"
"%s"
#. module: cloud_storage_azure
#. odoo-python
#: code:addons/cloud_storage_azure/models/res_config_settings.py:0
msgid ""
"The connection string is not allowed to upload blobs to the container.\n"
"%s"
msgstr ""
"該連線字串不允許上載 blob 儲存體至容器。\n"
"%s"
@@ -0,0 +1,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import ir_attachment
from . import res_config_settings
@@ -0,0 +1,118 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import re
from datetime import datetime, timedelta, timezone
from urllib.parse import unquote, quote
from odoo import models
from odoo.exceptions import ValidationError
from ..utils.cloud_storage_azure_utils import generate_blob_sas, get_user_delegation_key, ClientAuthenticationError
CloudStorageAzureUserDelegationKeys = {} # {db_name: (config, user_delegation_key or exception)}
def get_cloud_storage_azure_user_delegation_key(env):
"""
Generate a UserDelegationKey used for generating SAS tokens.
The cached UserDelegationKey is refreshed every 6 days. If the account
information expires, a ClientAuthenticationError will also be cached to
prevent the server from repeatedly sending requests to the cloud
storage provider to get the user delegation key. Note that the cached
values are not invalidated when the ORM cache is invalidated. To
invalidate these cached values, you must update the cloud storage
configuration or the cloud_storage_azure_user_delegation_key_sequence.
:return: A valid and unexpired UserDelegationKey which is compatible
with azure.storage.blob.UserDelegationKey
"""
cached_config, cached_user_delegation_key = CloudStorageAzureUserDelegationKeys.get(env.registry.db_name, (None, None))
db_config = env['res.config.settings']._get_cloud_storage_configuration()
db_config.pop('container_name')
ICP = env['ir.config_parameter'].sudo()
db_config['sequence'] = int(ICP.get_param('cloud_storage_azure_user_delegation_key_sequence', 0))
if db_config == cached_config:
if isinstance(cached_user_delegation_key, Exception):
raise cached_user_delegation_key
if cached_user_delegation_key:
expiry = datetime.strptime(cached_user_delegation_key.signed_expiry, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc)
if expiry > datetime.now(timezone.utc) + timedelta(days=1):
return cached_user_delegation_key
key_start_time = datetime.now(timezone.utc)
key_expiry_time = key_start_time + timedelta(days=7)
try:
user_delegation_key = get_user_delegation_key(
tenant_id=db_config['tenant_id'],
client_id=db_config['client_id'],
client_secret=db_config['client_secret'],
account_name=db_config['account_name'],
key_start_time=key_start_time,
key_expiry_time=key_expiry_time,
)
CloudStorageAzureUserDelegationKeys[env.registry.db_name] = (db_config, user_delegation_key)
except ClientAuthenticationError as e:
ve = ValidationError(e)
CloudStorageAzureUserDelegationKeys[env.registry.db_name] = (db_config, ve)
raise ve
return user_delegation_key
class IrAttachment(models.Model):
_inherit = 'ir.attachment'
# https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-name-rules#microsoftstorage
_cloud_storage_azure_url_pattern = re.compile(
r'https://(?P<account_name>[a-z\d]{3,24})\.blob\.core\.windows\.net/(?P<container_name>[a-z\d][a-z\d-]{2,62})/(?P<blob_name>[^?]+)',
)
def _get_cloud_storage_azure_info(self):
match = self._cloud_storage_azure_url_pattern.fullmatch(self.url or '')
if not match:
raise ValidationError(f'"{self.url}" is not a valid Azure Blob Storage URL.')
return {
'account_name': match['account_name'],
'container_name': match['container_name'],
'blob_name': unquote(match['blob_name']),
}
def _generate_cloud_storage_azure_url(self, blob_name):
ICP = self.env['ir.config_parameter'].sudo()
account_name = ICP.get_param('cloud_storage_azure_account_name')
container_name = ICP.get_param('cloud_storage_azure_container_name')
return f"https://{account_name}.blob.core.windows.net/{container_name}/{quote(blob_name)}"
def _generate_cloud_storage_azure_sas_url(self, **kwargs):
token = generate_blob_sas(user_delegation_key=get_cloud_storage_azure_user_delegation_key(self.env), **kwargs)
return f"{self._generate_cloud_storage_azure_url(kwargs['blob_name'])}?{token}"
# OVERRIDES
def _generate_cloud_storage_url(self):
if self.env['ir.config_parameter'].sudo().get_param('cloud_storage_provider') != 'azure':
return super()._generate_cloud_storage_url()
blob_name = self._generate_cloud_storage_blob_name()
return self._generate_cloud_storage_azure_url(blob_name)
def _generate_cloud_storage_download_info(self):
if self.env['ir.config_parameter'].sudo().get_param('cloud_storage_provider') != 'azure':
return super()._generate_cloud_storage_download_info()
info = self._get_cloud_storage_azure_info()
expiry = datetime.now(timezone.utc) + timedelta(seconds=self._cloud_storage_download_url_time_to_expiry)
return {
'url': self._generate_cloud_storage_azure_sas_url(**info, permission='r', expiry=expiry, cache_control=f'private, max-age={self._cloud_storage_download_url_time_to_expiry}'),
'time_to_expiry': self._cloud_storage_download_url_time_to_expiry,
}
def _generate_cloud_storage_upload_info(self):
if self.env['ir.config_parameter'].sudo().get_param('cloud_storage_provider') != 'azure':
return super()._generate_cloud_storage_upload_info()
info = self._get_cloud_storage_azure_info()
expiry = datetime.now(timezone.utc) + timedelta(seconds=self._cloud_storage_upload_url_time_to_expiry)
url = self._generate_cloud_storage_azure_sas_url(**info, permission='c', expiry=expiry)
return {
'url': url,
'method': 'PUT',
'headers': {
'x-ms-blob-type': 'BlockBlob',
},
'response_status': 201,
}
@@ -0,0 +1,105 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import requests
from datetime import datetime, timedelta, timezone
from odoo import models, fields, _
from odoo.exceptions import ValidationError, UserError
class CloudStorageSettings(models.TransientModel):
"""
Instructions:
cloud_storage_azure_account_name, cloud_storage_azure_container_name:
if changed and old container names are still in use, you should
promise the current application registration has the permission
to access all old containers.
cloud_storage_azure_invalidate_user_delegation_key:
invalidate the cached value for
get_cloud_storage_azure_user_delegation_key
"""
_inherit = 'res.config.settings'
cloud_storage_provider = fields.Selection(selection_add=[('azure', 'Azure Cloud Storage')])
cloud_storage_azure_account_name = fields.Char(
string='Azure Account Name',
config_parameter='cloud_storage_azure_account_name')
cloud_storage_azure_container_name = fields.Char(
string='Azure Container Name',
config_parameter='cloud_storage_azure_container_name')
# Application Registry Info
cloud_storage_azure_tenant_id = fields.Char(
string='Azure Tenant ID',
config_parameter='cloud_storage_azure_tenant_id')
cloud_storage_azure_client_id = fields.Char(
string='Azure Client ID',
config_parameter='cloud_storage_azure_client_id')
cloud_storage_azure_client_secret = fields.Char(
string='Azure Client Secret',
config_parameter='cloud_storage_azure_client_secret')
cloud_storage_azure_invalidate_user_delegation_key = fields.Boolean(
string='Invalidate Cached Azure User Delegation Key',
)
def _get_cloud_storage_configuration(self):
ICP = self.env['ir.config_parameter'].sudo()
if ICP.get_param('cloud_storage_provider') != 'azure':
return super()._get_cloud_storage_configuration
configuration = {
'container_name': ICP.get_param('cloud_storage_azure_container_name'),
'account_name': ICP.get_param('cloud_storage_azure_account_name'),
'tenant_id': ICP.get_param('cloud_storage_azure_tenant_id'),
'client_id': ICP.get_param('cloud_storage_azure_client_id'),
'client_secret': ICP.get_param('cloud_storage_azure_client_secret'),
}
return configuration if all(configuration.values()) else {}
def _setup_cloud_storage_provider(self):
ICP = self.env['ir.config_parameter'].sudo()
if ICP.get_param('cloud_storage_provider') != 'azure':
return super()._setup_cloud_storage_provider()
blob_info = {
'account_name': ICP.get_param('cloud_storage_azure_account_name'),
'container_name': ICP.get_param('cloud_storage_azure_container_name'),
# use different blob names in case the credentials are allowed to
# overwrite an existing blob created by previous tests
'blob_name': f'0/{datetime.now(timezone.utc)}.txt',
}
# check blob create permission
upload_expiry = datetime.now(timezone.utc) + timedelta(seconds=self.env['ir.attachment']._cloud_storage_upload_url_time_to_expiry)
upload_url = self.env['ir.attachment']._generate_cloud_storage_azure_sas_url(**blob_info, permission='c', expiry=upload_expiry)
upload_response = requests.put(upload_url, data=b'', headers={'x-ms-blob-type': 'BlockBlob'}, timeout=5)
if upload_response.status_code != 201:
raise ValidationError(_('The connection string is not allowed to upload blobs to the container.\n%s', str(upload_response.text)))
# check blob read permission
download_expiry = datetime.now(timezone.utc) + timedelta(seconds=self.env['ir.attachment']._cloud_storage_download_url_time_to_expiry)
download_url = self.env['ir.attachment']._generate_cloud_storage_azure_sas_url(**blob_info, permission='r', expiry=download_expiry)
download_response = requests.get(download_url, timeout=5)
if download_response.status_code != 200:
raise ValidationError(_('The connection string is not allowed to download blobs from the container.\n%s', str(download_response.text)))
def _check_cloud_storage_uninstallable(self):
if self.env['ir.config_parameter'].get_param('cloud_storage_provider') != 'azure':
return super()._check_cloud_storage_uninstallable()
cr = self.env.cr
cr.execute(
"""
SELECT 1
FROM ir_attachment
WHERE type = 'cloud_storage'
AND url LIKE 'https://%.blob.core.windows.net/%'
LIMIT 1
""",
)
if cr.fetchone():
raise UserError(_('Some Azure attachments are in use, please migrate their cloud storages before disable this module'))
def set_values(self):
super().set_values()
if self.cloud_storage_azure_invalidate_user_delegation_key:
ICP = self.env['ir.config_parameter']
old_seq = int(ICP.get_param('cloud_storage_azure_user_delegation_key_sequence', 0))
ICP.set_param('cloud_storage_azure_user_delegation_key_sequence', old_seq + 1)
@@ -0,0 +1,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import test_cloud_storage_azure
from . import test_cloud_storage_azure_attachment_controller
@@ -0,0 +1,351 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
import requests
from datetime import datetime, timezone, timedelta
from requests import Response
from unittest.mock import patch
import base64
from odoo.addons.mail.tests.common import MockEmail
from odoo.tests.common import TransactionCase
from odoo.tests import Form
from odoo.exceptions import ValidationError, UserError
from ..utils.cloud_storage_azure_utils import UserDelegationKey
from .. import uninstall_hook
from ..models.ir_attachment import CloudStorageAzureUserDelegationKeys, get_cloud_storage_azure_user_delegation_key
class TestCloudStorageAzureCommon(TransactionCase):
def setUp(self):
super().setUp()
self.DUMMY_AZURE_ACCOUNT_NAME = 'accountname'
self.DUMMY_AZURE_TENANT_ID = 'tenantid'
self.DUMMY_AZURE_CLIENT_ID = 'clientid'
self.DUMMY_AZURE_CLIENT_SECRET = 'secret'
self.container_name = 'container-name'
self.env['ir.config_parameter'].set_param('cloud_storage_provider', 'azure')
self.env['ir.config_parameter'].set_param('cloud_storage_azure_account_name', self.DUMMY_AZURE_ACCOUNT_NAME)
self.env['ir.config_parameter'].set_param('cloud_storage_azure_tenant_id', self.DUMMY_AZURE_TENANT_ID)
self.env['ir.config_parameter'].set_param('cloud_storage_azure_client_id', self.DUMMY_AZURE_CLIENT_ID)
self.env['ir.config_parameter'].set_param('cloud_storage_azure_client_secret', self.DUMMY_AZURE_CLIENT_SECRET)
self.env['ir.config_parameter'].set_param('cloud_storage_azure_container_name', self.container_name)
self.DUMMY_USER_DELEGATION_KEY = UserDelegationKey()
self.DUMMY_USER_DELEGATION_KEY.signed_oid = 'signed_oid'
self.DUMMY_USER_DELEGATION_KEY.signed_tid = 'signed_tid'
self.DUMMY_USER_DELEGATION_KEY.signed_start = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
self.DUMMY_USER_DELEGATION_KEY.signed_expiry = (datetime.now(timezone.utc) + timedelta(days=7)).strftime('%Y-%m-%dT%H:%M:%SZ')
self.DUMMY_USER_DELEGATION_KEY.signed_service = 'b'
self.DUMMY_USER_DELEGATION_KEY.signed_version = '2023-11-03'
self.DUMMY_USER_DELEGATION_KEY.value = 'KEHG9q+1y6XGLHkDNv3pR2DhmbOfxeTf5KAJ5/ssNpU='
self.DUMMY_USER_DELEGATION_KEY_XML = bytes(f"""<?xml version="1.0" encoding="utf-8"?>
<UserDelegationKey>
<SignedOid>{self.DUMMY_USER_DELEGATION_KEY.signed_oid}</SignedOid>
<SignedTid>{self.DUMMY_USER_DELEGATION_KEY.signed_tid}</SignedTid>
<SignedStart>{self.DUMMY_USER_DELEGATION_KEY.signed_start}</SignedStart>
<SignedExpiry>{self.DUMMY_USER_DELEGATION_KEY.signed_expiry}</SignedExpiry>
<SignedService>{self.DUMMY_USER_DELEGATION_KEY.signed_service}</SignedService>
<SignedVersion>{self.DUMMY_USER_DELEGATION_KEY.signed_version}</SignedVersion>
<Value>{self.DUMMY_USER_DELEGATION_KEY.value}</Value>
</UserDelegationKey>""", 'utf-8')
CloudStorageAzureUserDelegationKeys.clear()
class TestCloudStorageAzure(TestCloudStorageAzureCommon, MockEmail):
def test_get_user_delegation_key_success(self):
request_num = 0
def post(url, **kwargs):
nonlocal request_num
request_num += 1
response = Response()
if url.startswith('https://login.microsoftonline.com'):
response.status_code = 200
response._content = bytes(json.dumps({'access_token': 'xxx'}), 'utf-8')
if 'blob.core.windows.net' in url:
response.status_code = 200
response._content = self.DUMMY_USER_DELEGATION_KEY_XML
return response
with patch('odoo.addons.cloud_storage_azure.utils.cloud_storage_azure_utils.requests.post', post):
get_cloud_storage_azure_user_delegation_key(self.env)
self.assertEqual(request_num, 2, '2 requests to create new user_delegation_key')
self.env.invalidate_all()
get_cloud_storage_azure_user_delegation_key(self.env)
self.assertEqual(request_num, 2, 'user_delegation_key should be reused if configuration is not changed')
self.env.registry.clear_cache()
get_cloud_storage_azure_user_delegation_key(self.env)
self.assertEqual(request_num, 2, 'user_delegation_key should be reused if configuration is not changed')
self.env['ir.config_parameter'].set_param('cloud_storage_azure_account_name', 'newaccountname2')
self.env.registry.clear_cache()
get_cloud_storage_azure_user_delegation_key(self.env)
self.assertEqual(request_num, 4, '2 requests to create new user_delegation_key when the configuration is changed')
def test_get_user_delegation_key_wrong_info(self):
request_num = 0
def post(url, **kwargs):
nonlocal request_num
request_num += 1
response = Response()
if url.startswith('https://login.microsoftonline.com'):
response.status_code = 400 # bad request because of missing tenant_id and client_id are wrong
if 'blob.core.windows.net' in url:
response.status_code = 200
response._content = self.DUMMY_USER_DELEGATION_KEY_XML
return response
with patch('odoo.addons.cloud_storage_azure.utils.cloud_storage_azure_utils.requests.post', post), \
self.assertRaises(ValidationError):
get_cloud_storage_azure_user_delegation_key(self.env)
self.assertEqual(request_num, 1, '1 request to validate the validity of the client id and tenant id')
with patch('odoo.addons.cloud_storage_azure.utils.cloud_storage_azure_utils.requests.post', post), \
self.assertRaises(ValidationError):
get_cloud_storage_azure_user_delegation_key(self.env)
self.assertEqual(request_num, 2, '1 request to validate the validity of the client id and tenant id')
def test_get_user_delegation_key_wrong_secret(self):
request_num = 0
def post(url, **kwargs):
nonlocal request_num
request_num += 1
response = Response()
if url.startswith('https://login.microsoftonline.com'):
response.status_code = 401 # forbidden because the secret is wrong
if 'blob.core.windows.net' in url:
response.status_code = 200
response._content = self.DUMMY_USER_DELEGATION_KEY_XML
return response
with patch('odoo.addons.cloud_storage_azure.utils.cloud_storage_azure_utils.requests.post', post), \
self.assertRaises(ValidationError):
get_cloud_storage_azure_user_delegation_key(self.env)
self.assertEqual(request_num, 1, '1 request to validate the validity of the secret')
with patch('odoo.addons.cloud_storage_azure.utils.cloud_storage_azure_utils.requests.post', post), \
self.assertRaises(ValidationError):
get_cloud_storage_azure_user_delegation_key(self.env)
self.assertEqual(request_num, 1, '401 response should be cached in case the secret is expired')
def test_get_user_delegation_key_wrong_account(self):
def post(url, **kwargs):
response = Response()
if url.startswith('https://login.microsoftonline.com'):
response.status_code = 200
response._content = bytes(json.dumps({'access_token': 'xxx'}), 'utf-8')
if 'blob.core.windows.net' in url:
raise requests.exceptions.ConnectionError() # account_name wrong: domain https://accountname.blob.core.windows.net doesn't exist
return response
with patch('odoo.addons.cloud_storage_azure.utils.cloud_storage_azure_utils.requests.post', post), \
self.assertRaises(ValidationError):
get_cloud_storage_azure_user_delegation_key(self.env)
def test_generate_sas_url(self):
with patch('odoo.addons.cloud_storage_azure.models.ir_attachment.get_cloud_storage_azure_user_delegation_key', return_value=self.DUMMY_USER_DELEGATION_KEY):
# create test cloud attachment like route "/mail/attachment/upload"
# with dummy binary
attachment = self.env['ir.attachment'].create([{
'name': 'test.txt',
'mimetype': 'text/plain',
'datas': b'',
}])
attachment._post_add_create(cloud_storage=True)
attachment._generate_cloud_storage_upload_info()
attachment._generate_cloud_storage_download_info()
def test_azure_url_validation(self):
file_name = 'test.txt'
def mk_url(account_name='admin', container_name='odoo-container'):
return f'https://{account_name}.blob.core.windows.net/{container_name}/{file_name}'
attachment = self.env['ir.attachment'].create([{
'name': file_name,
'mimetype': 'text/plain',
'datas': b'',
'type': 'cloud_storage',
'url': mk_url(self.DUMMY_AZURE_ACCOUNT_NAME, self.container_name),
}])
self.assertDictEqual(attachment._get_cloud_storage_azure_info(), {
'account_name': self.DUMMY_AZURE_ACCOUNT_NAME,
'container_name': self.container_name,
'blob_name': file_name,
})
attachment.url = mk_url(account_name='admin4lyfe', container_name='1-c-o-n-t-a-i-n-e-r')
self.assertDictEqual(attachment._get_cloud_storage_azure_info(), {
'account_name': 'admin4lyfe',
'container_name': '1-c-o-n-t-a-i-n-e-r',
'blob_name': file_name,
})
# Invalid account names
with self.assertRaises(ValidationError):
attachment.url = mk_url(account_name='LOWERCASEONLY')
attachment._get_cloud_storage_azure_info()
with self.assertRaises(ValidationError):
attachment.url = mk_url(account_name='no-hyphens')
attachment._get_cloud_storage_azure_info()
with self.assertRaises(ValidationError):
attachment.url = mk_url(account_name='no_underscores')
attachment._get_cloud_storage_azure_info()
# Invalid container names
with self.assertRaises(ValidationError):
attachment.url = mk_url(container_name='LOWERCASEONLY')
attachment._get_cloud_storage_azure_info()
with self.assertRaises(ValidationError):
attachment.url = mk_url(container_name='-no-starting-hyphens')
attachment._get_cloud_storage_azure_info()
with self.assertRaises(ValidationError):
attachment.url = mk_url(container_name='no_underscores')
attachment._get_cloud_storage_azure_info()
def test_cloud_storage_attachments(self):
"""Cloud attachments should be converted to links in outgoing emails."""
thread_model = self.env["res.partner"].create({"name": "Cloud Test Partner", "email": "cloud@test.com"})
cloud_attachment = self.env["ir.attachment"].create({
"name": "cloud_attachment.txt",
"type": "cloud_storage",
"url": "https://storage.googleapis.com/fakebucket/cloud_attachment.txt",
"res_model": "res.partner",
"res_id": thread_model.id,
"mimetype": "text/plain",
})
# A cloud attachment sent to a multiple partners -> attachment should be included as link in each
partners = self.env["res.partner"].create([
{"name": "Partner A", "email": "a@test.com"},
{"name": "Partner B", "email": "b@test.com"},
])
composer_form = Form(self.env["mail.compose.message"].with_context(
default_model="res.partner",
default_res_ids=thread_model.ids,
default_composition_mode="comment",
default_force_send=True,
default_partner_ids=partners.ids,
))
composer_form.attachment_ids.add(cloud_attachment)
composer = composer_form.save()
with self.mock_mail_gateway(mail_unlink_sent=False):
composer._action_send_mail()
self.assertEqual(len(self._mails), 2, "Two emails should be sent.")
for body, attachment in zip([m["body"] for m in self._mails], self._new_mails.attachment_ids):
large_attachment_link = str(self.env["ir.qweb"]._render("mail.mail_attachment_links", {"attachments": attachment}))
self.assertEqual(body.count(large_attachment_link), 1,
"Sending mail with cloud_storage attachment should rendered it as a link in the outgoing email.",
)
# A cloud attachment and small txt attachment sent -> 1st should become a link, 2nd should be sent with the message
small_attachment = self.env["ir.attachment"].create({
"name": "Small attachment that should be attached normally.txt",
"datas": base64.b64encode(b"tiny file").decode(),
"mimetype": "text/plain",
"res_model": "res.partner",
"res_id": thread_model.id,
})
composer_form = Form(self.env['mail.compose.message'].with_context(
default_model='res.partner',
default_res_ids=thread_model.ids,
default_composition_mode='comment',
default_force_send=True,
default_partner_ids=partners.ids,
))
composer_form.attachment_ids.add(small_attachment)
composer_form.attachment_ids.add(cloud_attachment)
composer = composer_form.save()
with self.mock_mail_gateway(mail_unlink_sent=False):
composer._action_send_mail()
self.assertEqual(len(self._mails), 2)
body = self._mails[0]['body']
for mail in self._mails:
self.assertEqual(len(mail['attachments']), 1,
"There should be only one small attachment per message")
self.assertIn(small_attachment.name, str(mail['attachments']),
"Only text attachment should be sent in the message")
for body, attachment in zip([m["body"] for m in self._mails], self._new_mails.attachment_ids):
large_attachment_link = str(self.env["ir.qweb"]._render("mail.mail_attachment_links", {"attachments": cloud_attachment}))
self.assertEqual(body.count(large_attachment_link), 1,
"Sending mail with cloud_storage attachment should rendered it as a link in the outgoing email.",
)
# A large txt attachment and 2 cloud attachments sent -> All 3 shall became links
cloud_attachment2 = self.env["ir.attachment"].create({
"name": "cloud2 attachment also should be attached as a link",
"type": "cloud_storage",
"url": "https://storage.googleapis.com/fakebucket/cloud2.txt",
"res_model": "res.partner",
"res_id": thread_model.id,
})
max_email_size_bytes = self.env['ir.mail_server'].sudo()._get_max_email_size() * 1024 * 1024
too_much_bytes = b"x" * (int(max_email_size_bytes) + 1)
large_attachment = self.env["ir.attachment"].create({
"name": "persistent large attachment should be attached as a link",
"datas": base64.b64encode(too_much_bytes).decode(),
"mimetype": "text/plain",
"res_model": "res.partner",
"res_id": thread_model.id,
})
composer_form = Form(self.env['mail.compose.message'].with_context(
default_model='res.partner',
default_res_ids=thread_model.ids,
default_composition_mode='comment',
default_force_send=True,
default_partner_ids=partners.ids,
))
composer_form.attachment_ids.add(large_attachment)
composer_form.attachment_ids.add(cloud_attachment)
composer_form.attachment_ids.add(cloud_attachment2)
composer = composer_form.save()
with self.mock_mail_gateway(mail_unlink_sent=False):
composer._action_send_mail()
for body, attachment in zip([m["body"] for m in self._mails], self._new_mails.attachment_ids):
cloud_attachment_present = body.count(cloud_attachment.access_token) == body.count(cloud_attachment.name) == 1
cloud_attachment2_present = body.count(cloud_attachment2.access_token) == body.count(cloud_attachment2.name) == 1
large_attachment_link = str(self.env["ir.qweb"]._render("mail.mail_attachment_links", {"attachments": large_attachment}))
self.assertTrue(body.count(large_attachment_link) == 1 and cloud_attachment_present and cloud_attachment2_present,
"Two cloud and one large attachments should be converted and sent as links in the outgoing email.",
)
def test_uninstall_fail(self):
with self.assertRaises(UserError, msg="Don't uninstall the module if there are Azure attachments in use"):
attachment = self.env['ir.attachment'].create([{
'name': 'test.txt',
'mimetype': 'text/plain',
'datas': b'',
}])
attachment._post_add_create(cloud_storage=True)
attachment.flush_recordset()
uninstall_hook(self.env)
def test_uninstall_success(self):
uninstall_hook(self.env)
# make sure all sensitive data are removed
self.assertFalse(self.env['ir.config_parameter'].get_param('cloud_storage_provider'))
self.assertFalse(self.env['ir.config_parameter'].get_param('cloud_storage_azure_account_name'))
self.assertFalse(self.env['ir.config_parameter'].get_param('cloud_storage_azure_tenant_id'))
self.assertFalse(self.env['ir.config_parameter'].get_param('cloud_storage_azure_client_id'))
self.assertFalse(self.env['ir.config_parameter'].get_param('cloud_storage_azure_client_secret'))
self.assertFalse(self.env['ir.config_parameter'].get_param('cloud_storage_azure_container_name'))
@@ -0,0 +1,90 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import json
import re
from requests import Response
from unittest.mock import patch
import odoo
from odoo.tools.misc import file_open
from odoo.addons.cloud_storage_azure.tests.test_cloud_storage_azure import (
TestCloudStorageAzureCommon,
)
from odoo.addons.mail.tests.test_attachment_controller import TestAttachmentControllerCommon
@odoo.tests.tagged("-at_install", "post_install")
class TestCloudStorageAttachmentController(
TestAttachmentControllerCommon, TestCloudStorageAzureCommon
):
def test_cloud_storage_azure_attachment_upload(self):
"""Test uploading an attachment with azure cloud storage."""
thread = self.env["res.partner"].create({"name": "Test"})
self.env["ir.config_parameter"].set_param("cloud_storage_provider", "azure")
self._authenticate_user(self.user_demo)
def post(url, **kwargs):
response = Response()
if url.startswith("https://login.microsoftonline.com"):
response.status_code = 200
response._content = bytes(json.dumps({"access_token": "xxx"}), "utf-8")
if "blob.core.windows.net" in url:
response.status_code = 200
response._content = self.DUMMY_USER_DELEGATION_KEY_XML
return response
with patch(
"odoo.addons.cloud_storage_azure.utils.cloud_storage_azure_utils.requests.post", post
):
with file_open("addons/web/__init__.py") as file:
res = self.url_open(
url="/mail/attachment/upload",
data={
"csrf_token": odoo.http.Request.csrf_token(self),
"is_pending": True,
"thread_id": thread.id,
"thread_model": thread._name,
"cloud_storage": True,
},
files={"ufile": file},
)
res.raise_for_status()
attachment = self.env["ir.attachment"].search([], order="id desc", limit=1)
# ignore signature in url
content = re.sub(
r'"url": "https://accountname\.blob\.core\.windows\.net/.*?"',
'"url": "[url]"',
res.content.decode("utf-8"),
)
self.assertEqual(
json.loads(content),
{
"data": {
"ir.attachment": [
{
"access_token": False,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"create_date": odoo.fields.Datetime.to_string(
attachment.create_date
),
"filename": "__init__.py",
"id": attachment.id,
"mimetype": "text/x-python",
"name": "__init__.py",
"res_name": False,
"size": 0,
"thread": False,
"voice": False,
"type": "cloud_storage",
"url": "[url]",
}
],
},
"upload_info": {
"headers": {"x-ms-blob-type": "BlockBlob"},
"method": "PUT",
"response_status": 201,
"url": "[url]",
},
},
)
@@ -0,0 +1,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from . import cloud_storage_azure_utils
@@ -0,0 +1,140 @@
import logging
import requests
import xmlrpc.client
from concurrent.futures import ThreadPoolExecutor
from itertools import islice
from lxml import etree
from urllib.parse import quote
# This is a script to manually clean up unused azure blobs.
# +--------+ 3. search_read ir.attachments with cloud urls +---------+
# | | --------------------------------------------> | |
# | | <-------------------------------------------- | Odoo |
# | | 4. used urls | |
# | | | |
# | Script | +---------+
# | | +---------+
# | | 1. list all blobs | Cloud |
# | | --------------------------------------------> | Storage |
# | | <-------------------------------------------- | |
# | | 2. blobs names | |
# | | | |
# | | 5. delete unused blobs | |
# | | --------------------------------------------> | |
# | | <-------------------------------------------- | |
# +--------+ 6. 202: Accepted +---------+
#
#
# 1, 2, 3, 4 are done in batch
# 5, 6 are done with threadpool
# odoo
odoo_url = 'http://localhost:8069'
odoo_db = 'odoo_db'
odoo_username = 'admin'
odoo_password = 'admin'
# Azure
X_MS_VERSION = '2023-11-03'
azure_container_name = 'container_name'
azure_account_name = 'account_name'
azure_tenant_id = 'tenant_id'
azure_client_id = 'client_id'
azure_client_secret = 'client_secret'
# Get Azure OAuth token
azure_token_url = f"https://login.microsoftonline.com/{azure_tenant_id}/oauth2/token"
azure_token_data = {
'grant_type': 'client_credentials',
'client_id': azure_client_id,
'client_secret': azure_client_secret,
'resource': 'https://storage.azure.com/'
}
azure_token_response = requests.post(azure_token_url, data=azure_token_data, timeout=5)
azure_token = azure_token_response.json()['access_token']
_logger = logging.getLogger()
def list_blob_urls(container_name, batch_size=1000):
cloud_storage_blobs_num = 0
url = f"https://{azure_account_name}.blob.core.windows.net/{container_name}?restype=container&comp=list"
headers = {
'Authorization': f'Bearer {azure_token}',
'x-ms-version': X_MS_VERSION,
'Content-Type': 'application/xml'
}
params = {
'maxresults': batch_size,
}
while True:
response = requests.get(url, headers=headers, params=params, timeout=5)
response_xml = etree.fromstring(response.content)
for blob in response_xml.findall('.//Blob'):
cloud_storage_blobs_num += 1
yield f"https://{azure_account_name}.blob.core.windows.net/{container_name}/{quote(blob.find('Name').text)}"
params['marker'] = response_xml.find('NextMarker').text
if params['marker'] is None:
break
logging.info('The cloud storage container has %d blobs', cloud_storage_blobs_num)
def split_every(n, iterable, piece_maker=tuple):
iterator = iter(iterable)
piece = piece_maker(islice(iterator, n))
while piece:
yield piece
piece = piece_maker(islice(iterator, n))
def get_blobs_to_be_deleted(blob_urls, batch_size=1000):
common = xmlrpc.client.ServerProxy(f'{odoo_url}/xmlrpc/2/common')
uid = common.authenticate(odoo_db, odoo_username, odoo_password, {})
models = xmlrpc.client.ServerProxy(f'{odoo_url}/xmlrpc/2/object')
for blob_urls_ in split_every(batch_size, blob_urls):
blob_urls_ = list(blob_urls_)
attachments = models.execute_kw(odoo_db, uid, odoo_password, 'ir.attachment', 'search_read', [
[('type', '=', 'cloud_storage'), ('url', 'in', blob_urls_)],
['url']
])
used_urls_ = {attachment['url'] for attachment in attachments}
for blob_url in blob_urls_:
if blob_url not in used_urls_:
yield blob_url
def delete_blobs(blob_urls, max_worker=None):
headers = {
'Authorization': f'Bearer {azure_token}',
'x-ms-version': X_MS_VERSION,
'Content-Type': 'application/xml'
}
deleted_cloud_storage_blobs_num = 0
def delete_blob_(blob_url):
nonlocal deleted_cloud_storage_blobs_num
delete_response = requests.delete(blob_url, headers=headers, timeout=5)
if delete_response.status_code == 202:
deleted_cloud_storage_blobs_num += 1
_logger.info('%s is deleted', blob_url)
elif delete_response.status_code == 404:
_logger.debug('%s has already been deleted', blob_url)
else:
_logger.warning('%s cannot be deleted:\n%s', blob_url, delete_response.text)
with ThreadPoolExecutor(max_workers=max_worker) as executor:
executor.map(delete_blob_, blob_urls)
logging.info('%d blobs are deleted by the script', deleted_cloud_storage_blobs_num)
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
all_blob_urls = list_blob_urls(container_name=azure_container_name, batch_size=1000)
to_delete_blob_urls = get_blobs_to_be_deleted(all_blob_urls, batch_size=1000)
delete_blobs(to_delete_blob_urls)
@@ -0,0 +1,393 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
"""
This module is used to provide an azure.storage.blob.generate_blob_sas
compatible function for generating sas URLs for Azure Storage without
importing the azure.storage.blob library.
"""
import base64
import hashlib
import hmac
import requests
from urllib.parse import quote
from datetime import date
from lxml import etree
from odoo.exceptions import ValidationError
X_MS_VERSION = '2023-11-03'
def sign_string(key, string_to_sign):
key = base64.b64decode(key.encode())
string_to_sign = string_to_sign.encode()
signed_hmac_sha256 = hmac.HMAC(key, string_to_sign, hashlib.sha256)
digest = signed_hmac_sha256.digest()
encoded_digest = base64.b64encode(digest).decode()
return encoded_digest
def _to_utc_datetime(value):
return value.strftime('%Y-%m-%dT%H:%M:%SZ')
class QueryStringConstants:
SIGNED_SIGNATURE = 'sig'
SIGNED_PERMISSION = 'sp'
SIGNED_START = 'st'
SIGNED_EXPIRY = 'se'
SIGNED_RESOURCE = 'sr'
SIGNED_IDENTIFIER = 'si'
SIGNED_IP = 'sip'
SIGNED_PROTOCOL = 'spr'
SIGNED_VERSION = 'sv'
SIGNED_CACHE_CONTROL = 'rscc'
SIGNED_CONTENT_DISPOSITION = 'rscd'
SIGNED_CONTENT_ENCODING = 'rsce'
SIGNED_CONTENT_LANGUAGE = 'rscl'
SIGNED_CONTENT_TYPE = 'rsct'
SIGNED_OID = 'skoid'
SIGNED_TID = 'sktid'
SIGNED_KEY_START = 'skt'
SIGNED_KEY_EXPIRY = 'ske'
SIGNED_KEY_SERVICE = 'sks'
SIGNED_KEY_VERSION = 'skv'
SIGNED_ENCRYPTION_SCOPE = 'ses'
# for ADLS
SIGNED_AUTHORIZED_OID = 'saoid'
SIGNED_UNAUTHORIZED_OID = 'suoid'
SIGNED_CORRELATION_ID = 'scid'
class BlobQueryStringConstants:
SIGNED_TIMESTAMP = 'snapshot'
class _BlobSharedAccessHelper:
def __init__(self):
self.query_dict = {}
def _add_query(self, name, val):
if val:
self.query_dict[name] = str(val)
def get_value_to_append(self, query):
return_value = self.query_dict.get(query) or ''
return return_value + '\n'
def add_base(self, permission, expiry, start, ip, protocol, x_ms_version):
if isinstance(start, date):
start = _to_utc_datetime(start)
if isinstance(expiry, date):
expiry = _to_utc_datetime(expiry)
self._add_query(QueryStringConstants.SIGNED_START, start)
self._add_query(QueryStringConstants.SIGNED_EXPIRY, expiry)
self._add_query(QueryStringConstants.SIGNED_PERMISSION, permission)
self._add_query(QueryStringConstants.SIGNED_IP, ip)
self._add_query(QueryStringConstants.SIGNED_PROTOCOL, protocol)
self._add_query(QueryStringConstants.SIGNED_VERSION, x_ms_version)
def add_resource(self, resource):
self._add_query(QueryStringConstants.SIGNED_RESOURCE, resource)
def add_id(self, policy_id):
self._add_query(QueryStringConstants.SIGNED_IDENTIFIER, policy_id)
def add_override_response_headers(self, cache_control,
content_disposition,
content_encoding,
content_language,
content_type):
self._add_query(QueryStringConstants.SIGNED_CACHE_CONTROL, cache_control)
self._add_query(QueryStringConstants.SIGNED_CONTENT_DISPOSITION, content_disposition)
self._add_query(QueryStringConstants.SIGNED_CONTENT_ENCODING, content_encoding)
self._add_query(QueryStringConstants.SIGNED_CONTENT_LANGUAGE, content_language)
self._add_query(QueryStringConstants.SIGNED_CONTENT_TYPE, content_type)
def add_resource_signature(self, account_name, account_key, path, user_delegation_key=None):
# pylint: disable = no-member
if path[0] != '/':
path = '/' + path
canonicalized_resource = '/blob/' + account_name + path + '\n'
# Form the string to sign from shared_access_policy and canonicalized
# resource. The order of values is important.
string_to_sign = \
(self.get_value_to_append(QueryStringConstants.SIGNED_PERMISSION) +
self.get_value_to_append(QueryStringConstants.SIGNED_START) +
self.get_value_to_append(QueryStringConstants.SIGNED_EXPIRY) +
canonicalized_resource)
if user_delegation_key is not None:
self._add_query(QueryStringConstants.SIGNED_OID, user_delegation_key.signed_oid)
self._add_query(QueryStringConstants.SIGNED_TID, user_delegation_key.signed_tid)
self._add_query(QueryStringConstants.SIGNED_KEY_START, user_delegation_key.signed_start)
self._add_query(QueryStringConstants.SIGNED_KEY_EXPIRY, user_delegation_key.signed_expiry)
self._add_query(QueryStringConstants.SIGNED_KEY_SERVICE, user_delegation_key.signed_service)
self._add_query(QueryStringConstants.SIGNED_KEY_VERSION, user_delegation_key.signed_version)
string_to_sign += \
(self.get_value_to_append(QueryStringConstants.SIGNED_OID) +
self.get_value_to_append(QueryStringConstants.SIGNED_TID) +
self.get_value_to_append(QueryStringConstants.SIGNED_KEY_START) +
self.get_value_to_append(QueryStringConstants.SIGNED_KEY_EXPIRY) +
self.get_value_to_append(QueryStringConstants.SIGNED_KEY_SERVICE) +
self.get_value_to_append(QueryStringConstants.SIGNED_KEY_VERSION) +
self.get_value_to_append(QueryStringConstants.SIGNED_AUTHORIZED_OID) +
self.get_value_to_append(QueryStringConstants.SIGNED_UNAUTHORIZED_OID) +
self.get_value_to_append(QueryStringConstants.SIGNED_CORRELATION_ID))
else:
string_to_sign += self.get_value_to_append(QueryStringConstants.SIGNED_IDENTIFIER)
string_to_sign += \
(self.get_value_to_append(QueryStringConstants.SIGNED_IP) +
self.get_value_to_append(QueryStringConstants.SIGNED_PROTOCOL) +
self.get_value_to_append(QueryStringConstants.SIGNED_VERSION) +
self.get_value_to_append(QueryStringConstants.SIGNED_RESOURCE) +
self.get_value_to_append(BlobQueryStringConstants.SIGNED_TIMESTAMP) +
self.get_value_to_append(QueryStringConstants.SIGNED_ENCRYPTION_SCOPE) +
self.get_value_to_append(QueryStringConstants.SIGNED_CACHE_CONTROL) +
self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_DISPOSITION) +
self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_ENCODING) +
self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_LANGUAGE) +
self.get_value_to_append(QueryStringConstants.SIGNED_CONTENT_TYPE))
# remove the trailing newline
if string_to_sign[-1] == '\n':
string_to_sign = string_to_sign[:-1]
self._add_query(QueryStringConstants.SIGNED_SIGNATURE,
sign_string(account_key if user_delegation_key is None else user_delegation_key.value,
string_to_sign))
def get_token(self):
# a conscious decision was made to exclude the timestamp in the generated token
# this is to avoid having two snapshot ids in the query parameters when the user appends the snapshot timestamp
exclude = [BlobQueryStringConstants.SIGNED_TIMESTAMP]
return '&'.join([f'{n}={quote(v)}' for n, v in self.query_dict.items() if v is not None and n not in exclude])
class UserDelegationKey:
"""
Represents a user delegation key, provided to the user by Azure Storage
based on their Azure Active Directory access token.
The fields are saved as simple strings since the user does not have to interact with this object;
to generate an identify SAS, the user can simply pass it to the right API.
:ivar str signed_oid:
Object ID of this token.
:ivar str signed_tid:
Tenant ID of the tenant that issued this token.
:ivar str signed_start:
The datetime this token becomes valid.
:ivar str signed_expiry:
The datetime this token expires.
:ivar str signed_service:
What service this key is valid for.
:ivar str signed_version:
The version identifier of the REST service that created this token.
:ivar str value:
The user delegation key.
"""
def __init__(self):
self.signed_oid = None
self.signed_tid = None
self.signed_start = None
self.signed_expiry = None
self.signed_service = None
self.signed_version = None
self.value = None
def generate_blob_sas(
account_name,
container_name,
blob_name,
account_key=None,
user_delegation_key=None,
permission=None,
expiry=None,
start=None,
policy_id=None,
ip=None,
protocol=None,
cache_control=None,
content_disposition=None,
content_encoding=None,
content_language=None,
content_type=None,
):
"""Generates a shared access signature for a blob.
This function is a simplified version of the azure.storage.blob.generate_blob_sas
without supporting parameters: snapshot and some **kwargs
for simplicity. And permission can only be str for simplicity.
Use the returned signature with the credential parameter of any BlobServiceClient,
ContainerClient or BlobClient.
:param str account_name:
The storage account name used to generate the shared access signature.
:param str container_name:
The name of the container.
:param str blob_name:
The name of the blob.
:param str account_key:
The account key, also called shared key or access key, to generate the shared access signature.
Either `account_key` or `user_delegation_key` must be specified.
:param ~azure.storage.blob.UserDelegationKey user_delegation_key:
Instead of an account shared key, the user could pass in a user delegation key.
A user delegation key can be obtained from the service by authenticating with an AAD identity;
this can be accomplished by calling :func:`~azure.storage.blob.BlobServiceClient.get_user_delegation_key`.
When present, the SAS is signed with the user delegation key instead.
:param permission:
The permissions associated with the shared access signature. The
user is restricted to operations allowed by the permissions.
Permissions must be ordered racwdxytmei.
Required unless an id is given referencing a stored access policy
which contains this field. This field must be omitted if it has been
specified in an associated stored access policy.
:type permission: str
:param expiry:
The time at which the shared access signature becomes invalid.
Required unless an id is given referencing a stored access policy
which contains this field. This field must be omitted if it has
been specified in an associated stored access policy. Azure will always
convert values to UTC. If a date is passed in without timezone info, it
is assumed to be UTC.
:type expiry: ~datetime.datetime or str
:param start:
The time at which the shared access signature becomes valid. If
omitted, start time for this call is assumed to be the time when the
storage service receives the request. Azure will always convert values
to UTC. If a date is passed in without timezone info, it is assumed to
be UTC.
:type start: ~datetime.datetime or str
:param str policy_id:
A unique value up to 64 characters in length that correlates to a
stored access policy. To create a stored access policy, use
:func:`~azure.storage.blob.ContainerClient.set_container_access_policy`.
:param str ip:
Specifies an IP address or a range of IP addresses from which to accept requests.
If the IP address from which the request originates does not match the IP address
or address range specified on the SAS token, the request is not authenticated.
For example, specifying ip=168.1.5.65 or ip=168.1.5.60-168.1.5.70 on the SAS
restricts the request to those IP addresses.
:keyword str protocol:
Specifies the protocol permitted for a request made. The default value is https.
:keyword str cache_control:
Response header value for Cache-Control when resource is accessed
using this shared access signature.
:keyword str content_disposition:
Response header value for Content-Disposition when resource is accessed
using this shared access signature.
:keyword str content_encoding:
Response header value for Content-Encoding when resource is accessed
using this shared access signature.
:keyword str content_language:
Response header value for Content-Language when resource is accessed
using this shared access signature.
:keyword str content_type:
Response header value for Content-Type when resource is accessed
using this shared access signature.
:return: A Shared Access Signature (sas) token.
:rtype: str
"""
if not policy_id:
if not expiry:
raise ValueError("'expiry' parameter must be provided when not using a stored access policy.")
if not permission:
raise ValueError("'permission' parameter must be provided when not using a stored access policy.")
if not user_delegation_key and not account_key:
raise ValueError("Either user_delegation_key or account_key must be provided.")
if isinstance(account_key, UserDelegationKey):
user_delegation_key = account_key
resource_path = container_name + '/' + blob_name
sas = _BlobSharedAccessHelper()
sas.add_base(permission, expiry, start, ip, protocol, X_MS_VERSION)
sas.add_id(policy_id)
resource = 'b'
sas.add_resource(resource)
sas.add_override_response_headers(cache_control, content_disposition,
content_encoding, content_language,
content_type)
sas.add_resource_signature(account_name, account_key, resource_path, user_delegation_key=user_delegation_key)
return sas.get_token()
class ClientAuthenticationError(Exception):
pass
def get_user_delegation_key(
tenant_id,
client_id,
client_secret,
account_name,
key_start_time,
key_expiry_time,
):
"""
logically equivalent to the following code for azure library
```
credential = ClientSecretCredential(tenant_id, client_id, client_secret)
service_client = BlobServiceClient(account_url=f"https://{account_name}.blob.core.windows.net", credential=credential)
delegation_key = service_client.get_user_delegation_key(key_start_time=key_start_time, key_expiry_time=key_expiry_time)
```
"""
# Get OAuth 2.0 access token using client credentials flow
token_url = f'https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token'
token_data = {
'client_id': client_id,
'client_secret': client_secret,
'scope': f'https://{account_name}.blob.core.windows.net/.default', # https://storage.azure.com/.default
'grant_type': 'client_credentials'
}
token_response = requests.post(token_url, data=token_data, timeout=5)
if token_response.status_code in (401, 403):
raise ClientAuthenticationError(f"Failed to get access token: {token_response.content}")
if token_response.status_code != 200:
raise ValidationError(f"Failed to get access token: {token_response.content}")
access_token = token_response.json()['access_token']
# Generate User Delegation Key using Azure Storage Blob Service REST API
key_data = f"""<?xml version='1.0' encoding='utf-8'?>
<KeyInfo><Start>{_to_utc_datetime(key_start_time)}</Start><Expiry>{_to_utc_datetime(key_expiry_time)}</Expiry></KeyInfo>"""
key_request_url = f'https://{account_name}.blob.core.windows.net/?restype=service&comp=userdelegationkey'
headers = {
'Authorization': f'Bearer {access_token}',
'x-ms-version': X_MS_VERSION,
'Content-Type': 'application/xml'
}
try:
key_response = requests.post(key_request_url, data=key_data, headers=headers, timeout=5)
except requests.exceptions.ConnectionError:
raise ValidationError("Failed to get user delegation key: the account name may be incorrect")
if key_response.status_code in (401, 403):
raise ClientAuthenticationError(f"Failed to get user delegation key: {key_response.content}")
if key_response.status_code != 200:
raise ValidationError(f"Failed to get user delegation key: {key_response.content}")
# Parse the user delegation key from the response
key_response_xml = etree.fromstring(key_response.content)
user_delegation_key = UserDelegationKey()
user_delegation_key.signed_oid = key_response_xml.findtext('SignedOid')
user_delegation_key.signed_tid = key_response_xml.findtext('SignedTid')
user_delegation_key.signed_start = key_response_xml.findtext('SignedStart')
user_delegation_key.signed_expiry = key_response_xml.findtext('SignedExpiry')
user_delegation_key.signed_service = key_response_xml.findtext('SignedService')
user_delegation_key.signed_version = key_response_xml.findtext('SignedVersion')
user_delegation_key.value = key_response_xml.findtext('Value')
return user_delegation_key
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<record id="cloud_storage_config_settings_view_form" model="ir.ui.view">
<field name="name">cloud_storage_config_settings_view_form</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="70"/>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//setting[@id='cloud_storage_provider']" position="inside">
<div class="content-group mt16" invisible="cloud_storage_provider != 'azure'">
<label for="cloud_storage_azure_account_name" class="o_light_label mr8"/>
<field name="cloud_storage_azure_account_name"/>
<br/>
<label for="cloud_storage_azure_container_name" class="o_light_label mr8"/>
<field name="cloud_storage_azure_container_name"/>
<br/>
<label for="cloud_storage_azure_tenant_id" class="o_light_label mr8"/>
<field name="cloud_storage_azure_tenant_id"/>
<br/>
<label for="cloud_storage_azure_client_id" class="o_light_label mr8"/>
<field name="cloud_storage_azure_client_id"/>
<br/>
<label for="cloud_storage_azure_client_secret" class="o_light_label mr8"/>
<field name="cloud_storage_azure_client_secret"/>
<label for="cloud_storage_azure_invalidate_user_delegation_key" class="o_light_label mr8"/>
<field name="cloud_storage_azure_invalidate_user_delegation_key"/>
</div>
</xpath>
</field>
</record>
</odoo>