first commit
This commit is contained in:
8
modules/web_shop_shopify/__init__.py
Normal file
8
modules/web_shop_shopify/__init__.py
Normal file
@@ -0,0 +1,8 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from . import routes, shopify_retry
|
||||
|
||||
__all__ = [routes]
|
||||
|
||||
shopify_retry.patch()
|
||||
BIN
modules/web_shop_shopify/__pycache__/__init__.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/__init__.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/account.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/account.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/carrier.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/carrier.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/common.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/common.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/exceptions.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/exceptions.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/graphql.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/graphql.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/ir.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/ir.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/party.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/party.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/product.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/product.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/routes.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/routes.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/sale.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/sale.cpython-311.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/stock.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/stock.cpython-311.pyc
Normal file
Binary file not shown.
BIN
modules/web_shop_shopify/__pycache__/web.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/__pycache__/web.cpython-311.pyc
Normal file
Binary file not shown.
173
modules/web_shop_shopify/account.py
Normal file
173
modules/web_shop_shopify/account.py
Normal file
@@ -0,0 +1,173 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from collections import defaultdict
|
||||
from decimal import Decimal
|
||||
|
||||
from trytond.model import Unique
|
||||
from trytond.pool import PoolMeta
|
||||
|
||||
from .common import IdentifierMixin, gid2id
|
||||
|
||||
|
||||
class Payment(IdentifierMixin, metaclass=PoolMeta):
|
||||
__name__ = 'account.payment'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
t = cls.__table__()
|
||||
cls._sql_constraints += [
|
||||
('shopify_identifier_unique',
|
||||
Unique(t, t.shopify_identifier_signed),
|
||||
'web_shop_shopify.msg_identifier_payment_unique'),
|
||||
]
|
||||
|
||||
def process_shopify(self):
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def shopify_fields(cls):
|
||||
return {
|
||||
'id': None,
|
||||
'kind': None,
|
||||
'amountSet': {
|
||||
'presentmentMoney': {
|
||||
'amount': None,
|
||||
'currencyCode': None,
|
||||
},
|
||||
},
|
||||
'parentTransaction': {
|
||||
'id': None,
|
||||
},
|
||||
'gateway': None,
|
||||
'status': None,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def _get_shopify_payment_journal_pattern(cls, sale, transaction):
|
||||
return {
|
||||
'gateway': transaction['gateway'],
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def _get_from_shopify(cls, sale, transaction):
|
||||
assert (
|
||||
transaction['kind'] in {'AUTHORIZATION', 'SALE'}
|
||||
or (transaction['kind'] == 'REFUND'
|
||||
and not transaction['parentTransaction']))
|
||||
payment = cls(shopify_identifier=gid2id(transaction['id']))
|
||||
payment.company = sale.company
|
||||
payment.journal = sale.web_shop.get_payment_journal(
|
||||
transaction['amountSet']['presentmentMoney']['currencyCode'],
|
||||
cls._get_shopify_payment_journal_pattern(
|
||||
sale, transaction))
|
||||
if transaction['kind'] == 'REFUND':
|
||||
payment.kind = 'payable'
|
||||
else:
|
||||
payment.kind = 'receivable'
|
||||
payment.amount = Decimal(
|
||||
transaction['amountSet']['presentmentMoney']['amount'])
|
||||
payment.origin = sale
|
||||
payment.party = sale.party
|
||||
return payment
|
||||
|
||||
@classmethod
|
||||
def get_from_shopify(cls, sale, order):
|
||||
id2payments = {}
|
||||
to_process = defaultdict(list)
|
||||
transactions = [
|
||||
t for t in order['transactions'] if t['status'] == 'SUCCESS']
|
||||
# Order transactions to process parent first
|
||||
kinds = ['AUTHORIZATION', 'CAPTURE', 'SALE', 'VOID', 'REFUND']
|
||||
transactions.sort(key=lambda t: kinds.index(t['kind']))
|
||||
amounts = defaultdict(Decimal)
|
||||
for transaction in transactions:
|
||||
if (transaction['kind'] not in {'AUTHORIZATION', 'SALE'}
|
||||
and not (transaction['kind'] == 'REFUND'
|
||||
and not transaction['parentTransaction'])):
|
||||
continue
|
||||
payments = cls.search([
|
||||
('shopify_identifier', '=', gid2id(transaction['id'])),
|
||||
])
|
||||
if payments:
|
||||
payment, = payments
|
||||
else:
|
||||
payment = cls._get_from_shopify(sale, transaction)
|
||||
to_process[payment.company, payment.journal].append(payment)
|
||||
id2payments[gid2id(transaction['id'])] = payment
|
||||
amounts[gid2id(transaction['id'])] = Decimal(
|
||||
transaction['amountSet']['presentmentMoney']['amount'])
|
||||
cls.save(list(id2payments.values()))
|
||||
|
||||
for (company, journal), payments in to_process.items():
|
||||
cls.submit(payments)
|
||||
cls.process(payments)
|
||||
|
||||
captured = defaultdict(Decimal)
|
||||
voided = defaultdict(Decimal)
|
||||
refunded = defaultdict(Decimal)
|
||||
for transaction in transactions:
|
||||
if transaction['kind'] == 'SALE':
|
||||
payment = id2payments[gid2id(transaction['id'])]
|
||||
captured[payment] += Decimal(
|
||||
transaction['amountSet']['presentmentMoney']['amount'])
|
||||
elif transaction['kind'] == 'CAPTURE':
|
||||
payment = id2payments[
|
||||
gid2id(transaction['parentTransaction']['id'])]
|
||||
id2payments[gid2id(transaction['id'])] = payment
|
||||
captured[payment] += Decimal(
|
||||
transaction['amountSet']['presentmentMoney']['amount'])
|
||||
elif transaction['kind'] == 'VOID':
|
||||
payment = id2payments[
|
||||
gid2id(transaction['parentTransaction']['id'])]
|
||||
voided[payment] += Decimal(
|
||||
transaction['amountSet']['presentmentMoney']['amount'])
|
||||
elif transaction['kind'] == 'REFUND':
|
||||
if not transaction['parentTransaction']:
|
||||
payment = id2payments[gid2id(transaction['id'])]
|
||||
else:
|
||||
payment = id2payments[
|
||||
gid2id(transaction['parentTransaction']['id'])]
|
||||
captured[payment] -= Decimal(
|
||||
transaction['amountSet']['presentmentMoney']['amount'])
|
||||
refunded[payment] += Decimal(
|
||||
transaction['amountSet']['presentmentMoney']['amount'])
|
||||
|
||||
to_save = []
|
||||
for payment in id2payments.values():
|
||||
if payment.kind == 'payable':
|
||||
amount = refunded[payment]
|
||||
else:
|
||||
amount = captured[payment]
|
||||
if payment.amount != amount:
|
||||
payment.amount = captured[payment]
|
||||
to_save.append(payment)
|
||||
cls.proceed(to_save)
|
||||
cls.save(to_save)
|
||||
|
||||
to_succeed, to_fail, to_proceed = set(), set(), set()
|
||||
for transaction_id, payment in id2payments.items():
|
||||
amount = captured[payment] + voided[payment] + refunded[payment]
|
||||
if amounts[transaction_id] == amount:
|
||||
if payment.amount:
|
||||
if payment.state != 'succeeded':
|
||||
to_succeed.add(payment)
|
||||
else:
|
||||
if payment.state != 'failed':
|
||||
to_fail.add(payment)
|
||||
elif payment.state != 'processing':
|
||||
to_proceed.add(payment)
|
||||
cls.fail(to_fail)
|
||||
cls.proceed(to_proceed)
|
||||
cls.succeed(to_succeed)
|
||||
|
||||
return list(id2payments.values())
|
||||
|
||||
|
||||
class PaymentJournal(metaclass=PoolMeta):
|
||||
__name__ = 'account.payment.journal'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls.process_method.selection.append(('shopify', "Shopify"))
|
||||
59
modules/web_shop_shopify/carrier.py
Normal file
59
modules/web_shop_shopify/carrier.py
Normal file
@@ -0,0 +1,59 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
import re
|
||||
|
||||
from trytond.model import MatchMixin, ModelSQL, ModelView, fields
|
||||
from trytond.pool import PoolMeta
|
||||
|
||||
|
||||
class Carrier(metaclass=PoolMeta):
|
||||
__name__ = 'carrier'
|
||||
|
||||
shopify_selections = fields.One2Many(
|
||||
'carrier.selection.shopify', 'carrier', "Shopify Selections",
|
||||
help="Define the criteria that will match this carrier "
|
||||
"with the Shopify shipping methods.")
|
||||
|
||||
def shopify_match(self, shop, shipping_line, pattern=None):
|
||||
pattern = pattern.copy() if pattern is not None else {}
|
||||
pattern.setdefault('shop', shop.id)
|
||||
pattern.setdefault('code', shipping_line.get('code'))
|
||||
pattern.setdefault('title', shipping_line.get('title'))
|
||||
for selection in self.shopify_selections:
|
||||
if selection.match(pattern):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
class SelectionShopify(MatchMixin, ModelSQL, ModelView):
|
||||
__name__ = 'carrier.selection.shopify'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls.__access__.add('carrier')
|
||||
|
||||
carrier = fields.Many2One(
|
||||
'carrier', "Carrier", required=True, ondelete='CASCADE')
|
||||
shop = fields.Many2One(
|
||||
'web.shop', "Shop",
|
||||
domain=[
|
||||
('type', '=', 'shopify'),
|
||||
])
|
||||
code = fields.Char(
|
||||
"Code",
|
||||
help="The code of the shipping line.")
|
||||
title = fields.Char(
|
||||
"Title",
|
||||
help="A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title.")
|
||||
|
||||
def match(self, pattern, match_none=False):
|
||||
if 'title' in pattern:
|
||||
pattern = pattern.copy()
|
||||
title = pattern.pop('title') or ''
|
||||
if (self.title is not None
|
||||
and not re.search(self.title, title, flags=re.I)):
|
||||
return False
|
||||
return super().match(pattern, match_none=match_none)
|
||||
23
modules/web_shop_shopify/carrier.xml
Normal file
23
modules/web_shop_shopify/carrier.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data depends="carrier">
|
||||
<record model="ir.ui.view" id="carrier_view_form">
|
||||
<field name="model">carrier</field>
|
||||
<field name="inherit" ref="carrier.carrier_view_form"/>
|
||||
<field name="name">carrier_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="carrier_selection_shopify_view_form">
|
||||
<field name="model">carrier.selection.shopify</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">carrier_selection_shopify_form</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="carrier_selection_shopify_view_list">
|
||||
<field name="model">carrier.selection.shopify</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">carrier_selection_shopify_list</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
192
modules/web_shop_shopify/common.py
Normal file
192
modules/web_shop_shopify/common.py
Normal file
@@ -0,0 +1,192 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from urllib.parse import urljoin
|
||||
|
||||
from trytond.i18n import lazy_gettext
|
||||
from trytond.model import fields
|
||||
from trytond.pool import Pool
|
||||
from trytond.pyson import Eval
|
||||
|
||||
|
||||
def id2gid(resouce, id):
|
||||
return f'gid://shopify/{resouce}/{id}'
|
||||
|
||||
|
||||
def gid2id(gid):
|
||||
_, id = gid[len('gid://shopify/'):].split('/', 1)
|
||||
return int(id)
|
||||
|
||||
|
||||
class IdentifierMixin:
|
||||
__slots__ = ()
|
||||
|
||||
shopify_identifier_signed = fields.Integer(
|
||||
lazy_gettext('web_shop_shopify.msg_shopify_identifier'))
|
||||
shopify_identifier_signed._sql_type = 'BIGINT'
|
||||
shopify_identifier = fields.Function(fields.Integer(
|
||||
lazy_gettext('web_shop_shopify.msg_shopify_identifier')),
|
||||
'get_shopify_identifier', setter='set_shopify_identifier',
|
||||
searcher='search_shopify_identifier')
|
||||
shopify_identifier_char = fields.Function(fields.Char(
|
||||
lazy_gettext('web_shop_shopify.msg_shopify_identifier')),
|
||||
'get_shopify_identifier', setter='set_shopify_identifier',
|
||||
searcher='search_shopify_identifier')
|
||||
shopify_url = fields.Function(fields.Char(
|
||||
lazy_gettext('web_shop_shopify.msg_shopify_url'),
|
||||
states={
|
||||
'invisible': ~Eval('shopify_url'),
|
||||
}),
|
||||
'get_shopify_url')
|
||||
|
||||
def get_shopify_identifier(self, name):
|
||||
if self.shopify_identifier_signed is not None:
|
||||
value = self.shopify_identifier_signed + (1 << 63)
|
||||
if name == 'shopify_identifier_char':
|
||||
value = str(value)
|
||||
return value
|
||||
|
||||
@classmethod
|
||||
def set_shopify_identifier(cls, records, name, value):
|
||||
if value is not None:
|
||||
value = int(value) - (1 << 63)
|
||||
cls.write(records, {
|
||||
'shopify_identifier_signed': value,
|
||||
})
|
||||
|
||||
@classmethod
|
||||
def search_shopify_identifier(cls, name, domain):
|
||||
_, operator, value = domain
|
||||
if operator in {'in', 'not in'}:
|
||||
value = [
|
||||
int(v) - (1 << 63) if v is not None else None for v in value]
|
||||
elif value is not None:
|
||||
value = int(value) - (1 << 63)
|
||||
return [('shopify_identifier_signed', operator, value)]
|
||||
|
||||
def get_shopify_url(self, name):
|
||||
if (getattr(self, 'shopify_resource', None)
|
||||
and getattr(self, 'web_shop', None)
|
||||
and self.shopify_identifier_char):
|
||||
return urljoin(
|
||||
self.web_shop.shopify_url + '/admin/',
|
||||
f'{self.shopify_resource}/{self.shopify_identifier_char}')
|
||||
|
||||
@classmethod
|
||||
def copy(cls, records, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
else:
|
||||
default = default.copy()
|
||||
default.setdefault('shopify_identifier_signed')
|
||||
return super().copy(records, default=default)
|
||||
|
||||
|
||||
class IdentifiersUpdateMixin:
|
||||
__slots__ = ()
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._shopify_fields = set()
|
||||
|
||||
@classmethod
|
||||
def set_shopify_to_update(cls, records):
|
||||
pool = Pool()
|
||||
Identifier = pool.get('web.shop.shopify_identifier')
|
||||
identifiers = cls.get_shopify_identifier_to_update(records)
|
||||
Identifier.write(identifiers, {
|
||||
'to_update': True,
|
||||
})
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, records):
|
||||
raise NotImplementedError
|
||||
|
||||
@classmethod
|
||||
def on_modification(cls, mode, records, field_names=None):
|
||||
super().on_modification(mode, records, field_names=field_names)
|
||||
if mode in {'create', 'delete'}:
|
||||
cls.set_shopify_to_update(records)
|
||||
elif mode == 'write':
|
||||
if field_names & cls._shopify_fields:
|
||||
cls.set_shopify_to_update(records)
|
||||
|
||||
|
||||
class IdentifiersMixin(IdentifiersUpdateMixin):
|
||||
__slots__ = ()
|
||||
|
||||
shopify_identifiers = fields.One2Many(
|
||||
'web.shop.shopify_identifier', 'record',
|
||||
lazy_gettext('web_shop_shopify.msg_shopify_identifiers'),
|
||||
readonly=True)
|
||||
|
||||
def get_shopify_identifier(self, web_shop):
|
||||
for record in self.shopify_identifiers:
|
||||
if record.web_shop == web_shop:
|
||||
return record.shopify_identifier
|
||||
|
||||
def set_shopify_identifier(self, web_shop, identifier=None):
|
||||
pool = Pool()
|
||||
Identifier = pool.get('web.shop.shopify_identifier')
|
||||
for record in self.shopify_identifiers:
|
||||
if record.web_shop == web_shop:
|
||||
if not identifier:
|
||||
Identifier.delete([record])
|
||||
return
|
||||
else:
|
||||
if record.shopify_identifier != identifier:
|
||||
record.shopify_identifier = identifier
|
||||
record.save()
|
||||
return record
|
||||
if identifier:
|
||||
record = Identifier(record=self, web_shop=web_shop)
|
||||
record.shopify_identifier = identifier
|
||||
record.save()
|
||||
return record
|
||||
|
||||
@classmethod
|
||||
def search_shopify_identifier(cls, web_shop, identifier):
|
||||
records = cls.search([
|
||||
('shopify_identifiers', 'where', [
|
||||
('web_shop', '=', web_shop.id),
|
||||
('shopify_identifier', '=', identifier),
|
||||
]),
|
||||
])
|
||||
if records:
|
||||
record, = records
|
||||
return record
|
||||
|
||||
def is_shopify_to_update(self, web_shop, **extra):
|
||||
for record in self.shopify_identifiers:
|
||||
if record.web_shop == web_shop:
|
||||
return (record.to_update
|
||||
or (record.to_update_extra or {}) != extra)
|
||||
return True
|
||||
|
||||
@classmethod
|
||||
def copy(cls, records, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
else:
|
||||
default = default.copy()
|
||||
default.setdefault('shopify_identifiers')
|
||||
return super().copy(records, default=default)
|
||||
|
||||
@classmethod
|
||||
def on_modification(cls, mode, records, field_names=None):
|
||||
pool = Pool()
|
||||
Identifier = pool.get('web.shop.shopify_identifier')
|
||||
super().on_modification(mode, records, field_names=field_names)
|
||||
if mode == 'delete':
|
||||
Identifier.delete(
|
||||
sum((r.shopify_identifiers for r in records), ()))
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, records):
|
||||
return sum((list(r.shopify_identifiers) for r in records), [])
|
||||
|
||||
|
||||
def setattr_changed(record, name, value):
|
||||
if getattr(record, name, None) != value:
|
||||
setattr(record, name, value)
|
||||
return True
|
||||
11
modules/web_shop_shopify/exceptions.py
Normal file
11
modules/web_shop_shopify/exceptions.py
Normal file
@@ -0,0 +1,11 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from trytond.exceptions import UserError, UserWarning
|
||||
|
||||
|
||||
class ShopifyError(UserError):
|
||||
pass
|
||||
|
||||
|
||||
class ShopifyCredentialWarning(UserWarning):
|
||||
pass
|
||||
58
modules/web_shop_shopify/graphql.py
Normal file
58
modules/web_shop_shopify/graphql.py
Normal file
@@ -0,0 +1,58 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
import shopify
|
||||
|
||||
from .shopify_retry import GraphQLException
|
||||
|
||||
|
||||
def deep_merge(d1, d2):
|
||||
"Merge 2 fields dictionary"
|
||||
result = d1.copy()
|
||||
for key, value in d2.items():
|
||||
if result.get(key):
|
||||
result[key] = deep_merge(result[key], value)
|
||||
else:
|
||||
result[key] = value
|
||||
return result
|
||||
|
||||
|
||||
def selection(fields):
|
||||
"Return selection string for the fields dictionary"
|
||||
def _format(key, value):
|
||||
if not value:
|
||||
return key
|
||||
fields = '\n'.join(_format(k, v) for k, v in value.items())
|
||||
return f'{key} {{\n{fields}\n}}'
|
||||
return _format('', fields).strip()
|
||||
|
||||
|
||||
def iterate(query, params, query_name, path=None, data=None):
|
||||
def getter(data):
|
||||
if path:
|
||||
for name in path.split('.'):
|
||||
data = data[name]
|
||||
return data
|
||||
|
||||
if data is None:
|
||||
data = shopify.GraphQL().execute(
|
||||
query, {
|
||||
**params,
|
||||
'cursor': None,
|
||||
})['data'][query_name]
|
||||
if errors := data.get('userErrors'):
|
||||
raise GraphQLException({'errors': errors})
|
||||
|
||||
while True:
|
||||
lst = getter(data)
|
||||
for item in lst['nodes']:
|
||||
yield item
|
||||
if not lst['pageInfo']['hasNextPage']:
|
||||
break
|
||||
data = shopify.GraphQL().execute(
|
||||
query, {
|
||||
**params,
|
||||
'cursor': lst['pageInfo']['endCursor'],
|
||||
})['data'][query_name]
|
||||
if errors := data.get('userErrors'):
|
||||
raise GraphQLException({'errors': errors})
|
||||
18
modules/web_shop_shopify/ir.py
Normal file
18
modules/web_shop_shopify/ir.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from trytond.pool import PoolMeta
|
||||
|
||||
|
||||
class Cron(metaclass=PoolMeta):
|
||||
__name__ = 'ir.cron'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls.method.selection.extend([
|
||||
('web.shop|shopify_update_product', "Update Shopify Products"),
|
||||
('web.shop|shopify_update_inventory',
|
||||
"Update Shopify Inventory"),
|
||||
('web.shop|shopify_fetch_order', "Fetch Shopify Orders"),
|
||||
('web.shop|shopify_update_order', "Update Shopify Orders"),
|
||||
])
|
||||
30
modules/web_shop_shopify/ir.xml
Normal file
30
modules/web_shop_shopify/ir.xml
Normal file
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data noupdate="1">
|
||||
<record model="ir.cron" id="cron_update_product">
|
||||
<field name="method">web.shop|shopify_update_product</field>
|
||||
<field name="interval_number" eval="1"/>
|
||||
<field name="interval_type">days</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.cron" id="cron_update_inventory">
|
||||
<field name="method">web.shop|shopify_update_inventory</field>
|
||||
<field name="interval_number" eval="1"/>
|
||||
<field name="interval_type">hours</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.cron" id="cron_fetch_order">
|
||||
<field name="method">web.shop|shopify_fetch_order</field>
|
||||
<field name="interval_number" eval="1"/>
|
||||
<field name="interval_type">days</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.cron" id="cron_update_order">
|
||||
<field name="method">web.shop|shopify_update_order</field>
|
||||
<field name="interval_number" eval="1"/>
|
||||
<field name="interval_type">days</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
405
modules/web_shop_shopify/locale/bg.po
Normal file
405
modules/web_shop_shopify/locale/bg.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
443
modules/web_shop_shopify/locale/ca.po
Normal file
443
modules/web_shop_shopify/locale/ca.po
Normal file
@@ -0,0 +1,443 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr "Seleccions de Shopify"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr "Transportista"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr "Codi"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Botiga"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr "Títol"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr "Opció 1"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr "Opció 2"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr "Opció 3"
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Identificador únic de Shopify"
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr "SKU"
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "UdM Shopify"
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr "Producte"
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Identificador únic de Shopify"
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "UdM Shopify"
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr "Magatzems shopify"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr "URL estat Shopify"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr "Ajust d'impostos de Shopify"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr "Venda"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr "Albarà"
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr "Notificar al client sobre l'enviament"
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr "Token d'accés"
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr "Diaris de pagament"
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr "URL de la botiga"
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr "Versió"
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr "Magatzems"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr "URL Webhook comandes"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr "Secret compartit del webhook"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr "ID de Shopify"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr "Només zona d'emmagatzematge"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr "Registre"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr "A actualitzar"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr "A actualitzar extra"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr "Botiga web"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr "Pasarel·la"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr "Diari"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Botiga"
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
"Defineix el criteri per a seleccionar el transportista amb els métodes "
|
||||
"d'enviament de Shopify."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr "El códi de la línia d'enviament."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
"Expressió regular per vincular el títol de la línea d'enviament.\n"
|
||||
"Deixeu en blanc per a qualsevol títol."
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"La cadena que s'utilitzar per identificar el producte en les URLs.\n"
|
||||
"Deixa-ho en blanc per a que Shopify en generi una."
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "La unitat de mesura del producte a Shopify."
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"La cadena que s'utilitzar per identificar el producte en les URLs.\n"
|
||||
"Deixa-ho en blanc per a que Shopify en generi una."
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "La unitat de mesura del producte a Shopify."
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr "L'URL que ha de cridar Shopify per als esdeveniments de la comanda."
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr "Marcar per utilitzar només la quantitat de la zona d'emmagatzematge."
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
"El nom de la passarel·la de pagament per a la qual s’ha d’utilitzar el "
|
||||
"diari."
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr "Selecció transportista Shopify"
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identificadors de Shopify"
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Identificadors d'albarà"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No s'ha pogut desar la col·lecció personalitzada \"%(category)s\" amb l'error:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No s'ha pogut desar el compliment de la venda \"%(sale)s\" amb error:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
"No s'ha pogut trobar una orde de copliment per la quantitat \"%(quantity)s\""
|
||||
" del moviment \"%(move)s\"."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
"Una transacció de Shopify només es pot importar com a pagament una vegada."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
"El registre no pot tenir més d’un identificador de Shopify per botiga web."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr "Una comanda de Shopify només es pot importar com a venda una vegada."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr "L’albarà no pot tenir més d’un identificador de Shopify per venda."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No s'ha pogut establir l'inventari amb error:\n"
|
||||
"%(error)s"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr "Cada ubicació de Shopify només es pot enllaçar a un magatzem."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No s'ha pogut crear/actualitzar el producte \"%(template)s\" amb l'error:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
"Per actualitzar el producte \"%(product)s\" a Shopify, heu d'utilitzar una "
|
||||
"unitat de mesura sense dígits."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No s'ha pogut desar el reemborsament per la venda \"%(sale)s\" amb error:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
"Per processar la venda \"%(sale)s\", heu d'establir un producte a la línia "
|
||||
"\"%(line)s\"."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
"Per processar la venda \"%(sale)s\", heu d'establir una única ubicació a la "
|
||||
"línia \"%(line)s\" de Shopify."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
"No es pot restablir l'albarà \"%(shipment)s\" a esborrany perquè esta "
|
||||
"vincular amb un enviament de Shopify."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
"Per actualitzar els productes de la botiga \"%(shop)s\", heu d'establir la "
|
||||
"moneda a \"%(shopify_currency)s\" en lloc de \"%(shop_currency)s\"."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
"Per actualitzar els productes de la botiga \"%(shop)s\", heu d'establir "
|
||||
"l'idioma a \"%(shopify_primary_locale)s\" en lloc de \"%(shop_language)s\"."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr "Estàs segur que vols modificar les credencials de Shopify?"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr "Identificador de Shopify"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identificadors de Shopify"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr "URL Shopify"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
"El identificador únic de shopify \"%(handle)s\" del producte "
|
||||
"\"%(template)s\" només pot tenir lletres mínuscules, guions y números."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr "El identificador únic de shopify ha de ser únic."
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr "Marca per actualitzar"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identificadors de Shopify"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Identificadors d'albarà"
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr "Inventari de productes de Shopify"
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr "Identificador d'albarà de Shopify"
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr "Identificador de Shopify"
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr "Diari de pagament de Shopify"
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr "Obtenir comandes de Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr "Actualitzar l'inventari de Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr "Actualitzar l'inventari de Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr "Actualitzar els productes de Shopify"
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr "Albarà de client"
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr "Criteri"
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr "Opcions de Shopify"
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
405
modules/web_shop_shopify/locale/cs.po
Normal file
405
modules/web_shop_shopify/locale/cs.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
450
modules/web_shop_shopify/locale/de.po
Normal file
450
modules/web_shop_shopify/locale/de.po
Normal file
@@ -0,0 +1,450 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr "Shopify Zuordnungen"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr "Versanddienstleister"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Webshop"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr "Überschrift"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr "Option 1"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr "Option 2"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr "Option 3"
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Shopfiy-Handle"
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr "SKU"
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "Shopify Maßeinheit"
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr "Artikel"
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Shopify-Handle"
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "Shopify Maßeinheit"
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr "Shopify-Logistikstandort"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr "Shopify-Status-URL"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr "Shopify Steuerkorrektur"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr "Verkauf"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr "Lieferung"
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr "Kunden über die Erfüllung benachrichtigen"
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr "Zugangstoken"
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr "Zahlungsjournale"
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr "Shop URL"
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr "Version"
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr "Logistikstandorte"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr "Endpoint Webhook Bestellung"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr "Shared Secret Webhook"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr "Shopfiy ID"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr "Nur Lagerzone"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr "Datensatz"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr "Aktualisierung erforderlich"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr "Aktualisierung erforderlich Extra"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr "Webshop"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr "Gateway"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr "Journal"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Webshop"
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
"Definiert die Kriterien, nach denen dieser Versanddienstleister den Shopify-"
|
||||
"Versandarten zugeordnet wird."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr "Der Code der Versandposition."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
"Ein regulärer Ausdruck, der mit dem Titel der Versandposition übereinstimmt.\n"
|
||||
"Leer lassen, um alle Titel zuzulassen."
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"Die Zeichenfolge, die zur Identifizierung des Artikels in URLs verwendet wird.\n"
|
||||
"Leer lassen, um Shopify die Generierung zu überlassen."
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "Die Maßeinheit des Artikels bei Shopify."
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"Die Zeichenfolge, die zur Identifizierung des Artikels in URLs verwendet wird.\n"
|
||||
"Leer lassen, um Shopify die Generierung zu überlassen."
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "Die Maßeinheit des Artikels bei Shopify."
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
"Die URL die von Shopify bei Auftragsereignissen aufgerufen werden soll."
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr "Aktivieren, um nur den Bestand aus der Lagerzone zu verwenden."
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
"Der Name des Zahlungsanbieters für den das Journal verwendet werden muss."
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr "Versanddienstleister Auswahl Shopify"
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Shopfiy Identifikatoren"
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Lieferungsidentifikatoren"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Beim Speichern der benutzerdefinierten Zusammenstellung \"%(category)s\" ist folgender Fehler aufgetreten:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Beim Speichern der Auftragsabwicklung für den Verkauf \"%(sale)s\" ist folgender Fehler aufgetreten:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
"Fulfillment-Auftrag für %(quantity)s der Warenbewegung \"%(move)s\" konnte "
|
||||
"nicht gefunden werden."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
"Eine Shopify Transaktion kann nur einmal als Zahlung importiert werden."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
"Es kann für den Datensatz jeweils nur ein Shopify Identifikator pro Webshop "
|
||||
"vergeben werden."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr "Ein Shopify Auftrag kann nur einmal als Verkauf importiert werden."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
"Für die Lieferung kann jeweils nur einen Shopify Identifikator pro Webshop "
|
||||
"vergeben werden."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Fehler beim Festlegen des Lagerbestands:\n"
|
||||
"%(error)s"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
"Ein Shopify Lagerort kann jeweils nur einem Logistikstandort zugeordnet "
|
||||
"werden."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Beim Erstellen/Ändern des Artikels \"%(template)s\" ist folgender Fehler aufgetreten:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
"Damit der Artikel \"%(product)s\" auf Shopify aktualisiert werden kann, muss"
|
||||
" eine Maßeinheit ohne Nachkommastellen verwendet werden."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Beim Speichern der Erstattung für den Verkauf \"%(sale)s\" ist folgender Fehler aufgetreten:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
"Damit der Verkauf \"%(sale)s\" ausgeführt werden kann, muss ein Artikel auf "
|
||||
"Position \"%(line)s\" erfasst werden."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
"Damit der Verkauf \"%(sale)s\" ausgeführt werden kann, muss ein "
|
||||
"Logistikstandort für die Position \"%(line)s\" in Shopify erfasst werden."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
"Sie können die Sendung \"%(shipment)s\" nicht auf Entwurf zurücksetzen, da "
|
||||
"sie mit einer Shopify-Auftragsabwicklung verknüpft ist."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
"Damit die Artikel im Webshop \"%(shop)s\" aktualisiert werden können, muss "
|
||||
"die Währung von \"%(shop_currency)s\" auf \"%(shopify_currency)s\" geändert "
|
||||
"werden."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
"Damit die Artikel für den Webshop \"%(shop)s\" aktualisiert werden können, "
|
||||
"muss die Sprache von \"%(shop_language)s\" auf "
|
||||
"\"%(shopify_primary_locale)s\" geändert werden."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr "Möchten Sie die Shopify-Anmeldeinformationen wirklich ändern?"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr "Shopify Identifikator"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Shopify Identifikatoren"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr "Shopify-URL"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
"Der Shopify-Handle \"%(handle)s\" des Artikels \"%(template)s\" darf nur "
|
||||
"Kleinbuchstaben, Bindestriche und Zahlen enthalten."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr "Der Shopify-Handle des Artikels muss eindeutig sein."
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr "Zur Aktualisierung markieren"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Shopify Identifikatoren"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Lieferungsidentifikatoren"
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr "Artikel Shopify Bestandsartikel"
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr "Lager Lieferung Shopify-Identifikator"
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr "Webshop Shopify-Identifikator"
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr "Webshop Shopify Zahlungsjournal"
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr "Shopify Aufträge abrufen"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr "Shopify Lagerinformationen aktualisieren"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr "Shopify Aufträge aktualisieren"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr "Shopify Artikel aktualisieren"
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr "Kundenlieferung"
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr "Kriterien"
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr "Shopify Optionen"
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
444
modules/web_shop_shopify/locale/es.po
Normal file
444
modules/web_shop_shopify/locale/es.po
Normal file
@@ -0,0 +1,444 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr "Selecciones de Shopify"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr "Transportista"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr "Código"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Tienda"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr "Opción 1"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr "Opción 2"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr "Opción 3"
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Identificador único de Shopify"
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr "SKU"
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "UdM Shopify"
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr "Producto"
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Identificador único de shopify"
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "UdM Shopify"
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr "Almacenes shopify"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr "URL estado Shopify"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr "Ajuste de impuestos de Shopify"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr "Venta"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr "Albarán"
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr "Notificar al cliente sobre el envio"
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr "Token de acceso"
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr "Diarios de pagos"
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr "URL de la tienda"
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr "Versión"
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr "Almacenes"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr "URL Webhook Ordenes"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr "Secreto compartido del webhook"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr "ID de Shopify"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr "Solo zona de almacenamiento"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr "Registro"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr "A actualizar"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr "A actualizar extra"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr "Tienda web"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr "Pasarela"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr "Diario"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Tienda"
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
"Define el critera que seleccionar este transportista con los métodos de "
|
||||
"envío de Shopify."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr "El código de la línea de envío."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
"Una expresión regular para vincular el titulo de la linea de envio.\n"
|
||||
"Dejar en blanco para cualquier titulo."
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"La cadena que se utilitza para identificar el producto en las URLs.\n"
|
||||
"Dejar en blanco para que Shopify genere uno."
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "La unidad de medida del producto en Shopify."
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"La cadena que se utilitza para identificar el producto en las URLs.\n"
|
||||
"Dejar en blanco para que Shopify genere uno."
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "La unidad de medida del producto en Shopify."
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr "La URL que será llamada por Shopify para eventos de pedidos."
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr "Marcar para usar solo la cantidad de la zona de almacenamiento."
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
"El nombre de la pasarela de pago para la que se debe utilizar el diario."
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr "Selección transportista Shopify"
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identificadores de Shopify"
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Identificadores de albarán"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No se ha podido guardar la colección personalizada \"%(category)s\" con el error:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No se ha podido guardar el cumplimiento para la venta \"%(sale)s\" con el error:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
"No se ha podido encontrar una orden de cumplimiento para la cantidad "
|
||||
"%(quantity)s del movimiento \"%(move)s\"."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr "Una transacción de Shopify solo se puede importar como pago una vez."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
"El registro no puede tener más de un identificador de Shopify por tienda "
|
||||
"web."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr "Un pedido de Shopify solo se puede importar como venta una vez."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
"El albarán no puede tener más de un identificador de Shopify por venta."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No se ha podido establecer el inventario con el error:\n"
|
||||
"%(error)s"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr "Cada ubicación de Shopify solo se puede vincular a un almacén."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No se ha podido crear/actualizar el producto \"%(template)s\" con el error:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
"Para actualizar el producto \"%(product)s\" en Shopify, debe usar una unidad"
|
||||
" de medida sin dígitos."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"No se ha podido guardar el reembolso de la venta \"%(sale)s\" con el error:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
"Para procesar la venta \"%(sale)s\" debe establecer un producto en la línea "
|
||||
"\"%(line)s\"."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
"Para procesar la venta \"%(sale)s\" debe establecer un ubicación única en la"
|
||||
" línea \"%(line)s\" de Shopify."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
"No se puede restablecer el albarán \"%(shipment)s\" a borrador porqué esta "
|
||||
"vinculado con un envio de Shopify."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
"Para actualizar los productos de la tienda \"%(shop)s\", debe establecer la "
|
||||
"moneda \"%(shopify_currency)s\" en lugar de \"%(shop_currency)s\"."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
"Para actualizar los productos de la tienda \"%(shop)s\", debe establecer el "
|
||||
"idioma \"%(shopify_primary_locale)s\" en lugar de \"%(shop_language)s\"."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr "¿Está seguro de que desea modificar las credenciales de Shopify?"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr "Identificador de Shopify"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identificadores de Shopify"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr "URL Shopify"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
"El identificador único de shopify \"%(handle)s\" del producto "
|
||||
"\"%(template)s\" solo puede contenter letras en minúsculas, guiones y "
|
||||
"numeros."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr "El identificador único de Shopify del producto debe ser único."
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr "Marcar para actualizar"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identificadores de Shopify"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Identificadores de albarán"
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr "Inventario de productos de Shopify"
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr "Identificador de albarán de Shopify"
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr "Identificador de Shopify"
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr "Diario de pago de Shopify"
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr "Obtener pedidos de Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr "Actualizar el inventario de Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr "Actualizar pedidos de Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr "Actualizar productos de Shopify"
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr "Albarán de cliente"
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr "Criterio"
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr "Opciones de Shopify"
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
405
modules/web_shop_shopify/locale/es_419.po
Normal file
405
modules/web_shop_shopify/locale/es_419.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/et.po
Normal file
405
modules/web_shop_shopify/locale/et.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/fa.po
Normal file
405
modules/web_shop_shopify/locale/fa.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/fi.po
Normal file
405
modules/web_shop_shopify/locale/fi.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
452
modules/web_shop_shopify/locale/fr.po
Normal file
452
modules/web_shop_shopify/locale/fr.po
Normal file
@@ -0,0 +1,452 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr "Sélections Shopify"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr "Transporteur"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Boutique"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr "Titre"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr "Option 1"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr "Option 2"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr "Option 3"
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Poignée Shopify"
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr "UGS"
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "UDM Shopify"
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr "Produit"
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Poignée Shopify"
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "UDM Shopify"
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr "Entrepôt Shopify"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr "URL de statut Shopify"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr "Ajustement de tax Shopify"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr "Vente"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr "Expédition"
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr "Informer le client de la livraison"
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr "Jeton d'accès"
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr "Journaux de paiement"
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr "URL de la boutique"
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr "Version"
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr "Entrepôts"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr "Point de terminaison du webhook de commande"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr "Secret partagé du webhook"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr "ID Shopify"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr "Zone de magasin uniquement"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr "Enregistrement"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr "À mettre à jour"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr "Supplément à mettre à jour"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr "Boutique en ligne"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr "Passerelle"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr "Journal"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Boutique"
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
"Définit les critères qui permettront d'associer ce transporteur aux méthodes"
|
||||
" d'expédition de Shopify."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr "Le code de la ligne d'expédition."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
"Expression régulière permettant de trouver le titre de la ligne d'expédition.\n"
|
||||
"Laissez vide pour autoriser n'importe quel titre."
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"La chaîne de caractères permettant d'identifier le produit dans 'lURL.\n"
|
||||
"Laissez vide pour que Shopify en génère une."
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "L'unité de mesure du produit sur Shopify."
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"La chaîne de caractères permettant d'identifier le produit dans 'lURL.\n"
|
||||
"Laissez vide pour que Shopify en génère une."
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "L'unité de mesure du produit sur Shopify."
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr "L'URL à appeler par Shopify pour les événements de commande."
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr "Cochez pour n'utiliser que la quantité de la zone de magasin."
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
"Le nom de la passerelle de paiement pour laquelle le journal doit être "
|
||||
"utilisé."
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr "Sélection de transporteur Shopify"
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identifiants Shopify"
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Identifiants d'expédition"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Échec de l'enregistrement de la collection personnalisée « %(category)s » avec l'erreur :\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Échec de l'enregistrement du traitement pour la vente « %(sale)s » avec l'erreur :\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
"Impossible de trouver la commande d'exécution pour %(quantity)s du mouvement"
|
||||
" « %(move)s »."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
"Une transaction Shopify ne peut être importée qu'une seule fois en tant que "
|
||||
"paiement."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
"L'enregistrement ne peut pas avoir plus d'un identifiant Shopify par "
|
||||
"boutique en ligne."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
"Une commande Shopify ne peut être importée qu'une seule fois en tant que "
|
||||
"vente."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
"L'expédition ne peut pas avoir plus d'un identifiant Shopify par vente."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Échec de la configuration de l'inventaire avec l’errer :\n"
|
||||
"%(error)s"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr "Chaque emplacement Shopify ne peut être lié qu'à un seul entrepôt."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Échec de la création/mise à jour du produit « %(template)s » avec l'erreur :\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
"Pour mettre à jour le produit « %(product)s » sur Shopify, vous devez "
|
||||
"utiliser une unité de mesure sans décimales."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Échec de l'enregistrement du remboursement pour la vente « %(sale)s » avec l'erreur :\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
"Pour traiter la vente « %(sale)s » vous devez définir un produit sur la "
|
||||
"ligne « %(line)s »."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
"Pour traiter la vente « %(sale)s », vous devez définir un emplacement unique"
|
||||
" pour la ligne « %(line)s » sur Shopify."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
"Vous ne pouvez pas réinitialiser l'expédition \"%(shipment)s\" à l'état de "
|
||||
"brouillon car elle est liée à une expédition Shopify."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
"Pour mettre à jour les produits de la boutique « %(shop)s », vous devez "
|
||||
"mettre la devise à « %(shopify_currency)s » au lieu de "
|
||||
"« %(shop_currency)s »."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
"Pour mettre à jour les produits de la boutique « %(shop)s », vous devez "
|
||||
"mettre la langue à « %(shopify_primary_locale)s » au lieu de "
|
||||
"« %(shop_language)s »."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
"Êtes-vous sûr de vouloir modifier les informations d'identification de "
|
||||
"Shopify ?"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr "Identifiant Shopify"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identifiants Shopify"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr "URL Shopify"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
"La poignée Shopify « %(handle)s » du produit « %(template)s » ne peut "
|
||||
"contenir que des lettres minuscules, des tirets et des chiffres."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr "La poignée du produit sur Shopify doit être unique."
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr "Définir à mettre à jour"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identifiants Shopify"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Identifiants d'expédition"
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr "Article d'inventaire Shopify du produit"
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr "Identifiant Shopify d'expédition de stock"
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr "Identifiant Shopify de la boutique en ligne"
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr "Journal des paiements Shopify de la boutique en ligne"
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr "Récupérer les commandes Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr "Mettre à jour l'inventaire Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr "Mettre à jour les commandes Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr "Mettre à jour les produits Shopify"
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr "Expédition cliente"
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr "Critères"
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr "Options Shopify"
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
405
modules/web_shop_shopify/locale/hu.po
Normal file
405
modules/web_shop_shopify/locale/hu.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
406
modules/web_shop_shopify/locale/id.po
Normal file
406
modules/web_shop_shopify/locale/id.po
Normal file
@@ -0,0 +1,406 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Toko"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr "Produk"
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr "Versi"
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr "Jurnal"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Toko"
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
406
modules/web_shop_shopify/locale/it.po
Normal file
406
modules/web_shop_shopify/locale/it.po
Normal file
@@ -0,0 +1,406 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr "Magazzini"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr "Magazzini"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/lo.po
Normal file
405
modules/web_shop_shopify/locale/lo.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/lt.po
Normal file
405
modules/web_shop_shopify/locale/lt.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
442
modules/web_shop_shopify/locale/nl.po
Normal file
442
modules/web_shop_shopify/locale/nl.po
Normal file
@@ -0,0 +1,442 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr "Shopify opties"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr "Koerier"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr "Code"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Winkel"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr "Optie 1"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr "Optie 2"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr "Optie 3"
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Shopify koppeling"
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr "SKU"
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "Shopify maateenheid"
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr "Product"
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "Shopify koppeling"
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "Shopify maateenheid"
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr "Shopify magazijnen"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr "Shopify status URL"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr "Shopify Belastingaanpassing"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr "Verkoop"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr "Levering"
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr "Informeer de klant over de afhandeling"
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr "Toegangssleutel"
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr "Betalingsdagboeken"
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr "Winkel-URL"
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr "Versie"
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr "Magazijnen"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr "Webhook order eindpunt"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr "Webhook gedeeld geheim"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr "Shopify-ID"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr "Enige opslagzone"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr "Record"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr "Bijwerken"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr "Extra bijwerken"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr "Webwinkel"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr "poort"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr "Dagboek"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Winkel"
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
"Definieer de criteria die ervoor zorgen dat deze vervoerder overeenkomt met "
|
||||
"de verzendmethoden van Shopify."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr "De code van de verzend regel."
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
"Een reguliere expressie die overeenkomt met de titel van de verzendregel.\n"
|
||||
"Laat dit veld leeg om elke titel toe te staan."
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"De tekst die wordt gebruikt om het product in URL's te identificeren.\n"
|
||||
"Laat dit veld leeg zodat Shopify er zelf een kan genereren."
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "De maateenheid van het product in Shopify."
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
"De tekst die wordt gebruikt om het product in URL's te identificeren.\n"
|
||||
"Laat dit veld leeg zodat Shopify er zelf een kan genereren."
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "De maateenheid van het product in Shopify."
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr "De url die aangeroepen wordt door Shopify voor order gebeurtenissen."
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr "Vink aan om alleen de hoeveelheid van de opslagzone te gebruiken."
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
"De naam van de betalingsgateway waarvoor het journaal moet worden gebruikt."
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr "Koerier selectie Shopify"
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Shopify-ID's"
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Zendings-ID's"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"De volgende fout is opgetreden tijdens het opslaan van de gepersonaliseerde compilatie \"%(category)s\":\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Kan uitvoering voor verkoop \"%(sale)s\" niet opslaan met fout:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr "Kan opdracht voor %(quantity)s van boeking \"%(move)s\" niet vinden."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
"Een shopify-transactie kan slechts één keer als betaling worden "
|
||||
"geïmporteerd."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr "Het record kan niet meer dan één Shopify-ID per webshop bevatten."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
"Een Shopify-bestelling kan slechts één keer als verkoop worden geïmporteerd."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr "De zending mag niet meer dan één Shopify-ID per verkoop hebben."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Inventaris instellen mislukt met fout:\n"
|
||||
"%(error)s"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr "Elke Shopify-locatie kan slechts aan één magazijn worden gekoppeld."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Het aanmaken/updaten van product \"%(template)s\" is mislukt met foutmelding:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
"Om product \"%(product)s\" op Shopify bij te werken, moet er een maateenheid"
|
||||
" gebruikt worden zonder decimalen."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"De volgende fout is opgetreden tijdens het opslaan van het tegoed voor de verkoop \"%(sale)s\":\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
"Om de verkoop \"%(sale)s\" te verwerken, moet u een product instellen op de "
|
||||
"regel \"%(line)s\"."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
"Om de verkoop \"%(sale)s\" te verwerken, moet u een unieke locatie instellen"
|
||||
" voor de regel \"%(line)s\" op Shopify."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
"U kunt verzending \"%(shipment)s\" niet terugzetten naar concept, omdat deze"
|
||||
" is gekoppeld aan een Shopify afhandeling."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
"Om producten in de winkel \"%(shop)s\" bij te werken, moet u de valuta "
|
||||
"instellen op \"%(shopify_currency)s\" in plaats van \"%(shop_currency)s\"."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
"Om producten in de winkel \"%(shop)s\" bij te werken, moet u de taal "
|
||||
"instellen op \"%(shopify_primary_locale)s\" in plaats van "
|
||||
"\"%(shop_language)s\"."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr "Weet u zeker dat u de inloggegevens bij Shopify wil wijzigen?"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr "Shopify-ID"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Shopify-ID's"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr "Shopify URL"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
"De Shopify koppeling \"%(handle)s\" van product \"%(template)s\" mag alleen "
|
||||
"kleine letters, koppeltekens en cijfers bevatten."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr "De Shopify koppeling van het product moet uniek zijn."
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr "Instellen om te updaten"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Shopify-ID's"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Zendings-ID's"
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr "Product shopify voorraaditem"
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr "Voorraad shopify identificatie"
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr "Webshop shopify identificatie"
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr "Webwinkel shopify dagboek betaling"
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr "Shopify-bestellingen ophalen"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr "Shopify-inventaris bijwerken"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr "Shopify-bestellingen bijwerken"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr "Update Shopify-producten"
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr "Klant zending"
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr "Criteria"
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr "Shopify-opties"
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
405
modules/web_shop_shopify/locale/pl.po
Normal file
405
modules/web_shop_shopify/locale/pl.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
436
modules/web_shop_shopify/locale/pt.po
Normal file
436
modules/web_shop_shopify/locale/pt.po
Normal file
@@ -0,0 +1,436 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr "Opções do Shopify"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Loja"
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr "Opção 1"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr "Opção 2"
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr "Opção 3"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "ID da Shopify"
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr "SKU"
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "Shopify UoM"
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr "Produto"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr "ID da Shopify"
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr "Shopify UoM"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr "Armazéms"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr "Shopify UoM"
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr "Ajuste de Impostos da Shopify"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr "Venda"
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr "Remessa"
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr "Token de Acesso"
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr "Diários de Pagamento"
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr "URL da Loja"
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr "Versão"
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr "Armazéms"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr "Endpoint do Pedido do Webhook"
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr "Segredo Compartilhado do Webhook"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr "ID da Shopify"
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr "Apenas Zona de Armazenamento"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr "Registro"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr "Para atualizar"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr "Por Atualizar Extra"
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr "Loja Virtual"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr "Gateway"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr "Diário"
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr "Loja"
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "A Unidade de Medida do Produto no Shopify."
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr "A Unidade de Medida do Produto no Shopify."
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr "A URL a ser Chamada pelo Shopify para Eventos de Pedidos."
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr "Marque para usar Somente a Quantidade da Zona de Armazenamento."
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr "O Nome do Gateway de Pagamento para o qual o Diário Deve ser Usado."
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identificadores do Shopify"
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Identificadores de Remessa"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Falha ao Salvar a Coleção Personalizada \"%(category)s\" com erro:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Falha ao Salvar o Atendimento da Venda \"%(sale)s\" com erro:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
"Falha ao Encontrar a ordem de Atendimento para %(quantity)s do Movimento "
|
||||
"\"%(move)s\"."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
"Uma Transação do Shopify só pode ser Importada como Pagamento uma Vez."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
"O registro não Pode ter Mais de um Identificador Shopify por Loja Virtual."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr "Um pedido da Shopify só Pode ser Importado como uma Venda uma Vez."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr "A Remessa não Pode ter Mais de um Identificador Shopify por Venda."
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Falha ao Salvar a Variante \"%(product)s\" com erro:\n"
|
||||
"%(error)s"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr "Cada localização da Shopify só pode ser Vinculado a um Armazém."
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Falha ao Salvar o Produto \"%(template)s\" com erro:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
"Para Atualizar o Produto \"%(product)s\" no Shopify, Você deve usar uma "
|
||||
"Unidade de Medida sem Dígitos."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
"Falha ao Salvar o Eeembolso da Venda \"%(sale)s\" com erro:\n"
|
||||
"%(error)s"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
"Para Processar a Venda \"%(sale)s\" Você deve Definir um Produto na Linha "
|
||||
"\"%(line)s\"."
|
||||
|
||||
#, fuzzy, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
"Para Processar a Venda \"%(sale)s\" Você deve Definir um Produto na Linha "
|
||||
"\"%(line)s\"."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
"Para Atualizar Produtos na loja \"%(shop)s\", Você deve Definir a Moeda como"
|
||||
" \"%(shopify_currency)s\" em vez de \"%(shop_currency)s\"."
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
"Para Atualizar Produtos na Loja \"%(shop)s\", Você deve definir o Idioma "
|
||||
"para \"%(shopify_primary_locale)s\" em vez de \"%(shop_language)s\"."
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr "Tem Certeza de Que Deseja Modificar as Credenciais do Shopify?"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr "Identificador do Shopify"
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identificadores do Shopify"
|
||||
|
||||
#, fuzzy
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr "URL da Loja"
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr "Definido para Atualizar"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr "Identificadores do Shopify"
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr "Identificadores de Remessa"
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr "Item de Inventário do Produto Shopify"
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr "Identificador Shopify de Remessa de Estoque"
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr "Identificador Shopify da Loja Virtual"
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr "Diário de Pagamentos da Loja Virtual Shopify"
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr "Obter Pedidos do Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr "Atualizar inventário do Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr "Atualizar Pedidos do Shopify"
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr "Atualizar Produtos do Shopify"
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr "Remessa ao Cliente"
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr "Opções do Shopify"
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr "Shopify"
|
||||
405
modules/web_shop_shopify/locale/ro.po
Normal file
405
modules/web_shop_shopify/locale/ro.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/ru.po
Normal file
405
modules/web_shop_shopify/locale/ru.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/sl.po
Normal file
405
modules/web_shop_shopify/locale/sl.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/tr.po
Normal file
405
modules/web_shop_shopify/locale/tr.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/uk.po
Normal file
405
modules/web_shop_shopify/locale/uk.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
405
modules/web_shop_shopify/locale/zh_CN.po
Normal file
405
modules/web_shop_shopify/locale/zh_CN.po
Normal file
@@ -0,0 +1,405 @@
|
||||
#
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=utf-8\n"
|
||||
|
||||
msgctxt "field:carrier,shopify_selections:"
|
||||
msgid "Shopify Selections"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,carrier:"
|
||||
msgid "Carrier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,code:"
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:carrier.selection.shopify,title:"
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option1:"
|
||||
msgid "Option 1"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option2:"
|
||||
msgid "Option 2"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.attribute.set,shopify_option3:"
|
||||
msgid "Option 3"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_sku:"
|
||||
msgid "SKU"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.product,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.shopify_inventory_item,product:"
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_handle:"
|
||||
msgid "Shopify Handle"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:product.template,shopify_uom:"
|
||||
msgid "Shopify UoM"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.line,shopify_warehouse:"
|
||||
msgid "Shopify Warehouse"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_status_url:"
|
||||
msgid "Shopify Status URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:sale.sale,shopify_tax_adjustment:"
|
||||
msgid "Shopify Tax Adjustment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,sale:"
|
||||
msgid "Sale"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_fulfillment_notify_customer:"
|
||||
msgid "Notify Customer about Fulfillment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_password:"
|
||||
msgid "Access Token"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_payment_journals:"
|
||||
msgid "Payment Journals"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_url:"
|
||||
msgid "Shop URL"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_version:"
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_warehouses:"
|
||||
msgid "Warehouses"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "Webhook Order Endpoint"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop,shopify_webhook_shared_secret:"
|
||||
msgid "Webhook Shared Secret"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_id:"
|
||||
msgid "Shopify ID"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Only storage zone"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,record:"
|
||||
msgid "Record"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update:"
|
||||
msgid "To Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,to_update_extra:"
|
||||
msgid "To Update Extra"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_identifier,web_shop:"
|
||||
msgid "Web Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "Gateway"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,journal:"
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "field:web.shop.shopify_payment_journal,shop:"
|
||||
msgid "Shop"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier,shopify_selections:"
|
||||
msgid ""
|
||||
"Define the criteria that will match this carrier with the Shopify shipping "
|
||||
"methods."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,code:"
|
||||
msgid "The code of the shipping line."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:carrier.selection.shopify,title:"
|
||||
msgid ""
|
||||
"A regular expression to match the shipping line title.\n"
|
||||
"Leave empty to allow any title."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.product,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_handle:"
|
||||
msgid ""
|
||||
"The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:product.template,shopify_uom:"
|
||||
msgid "The Unit of Measure of the product on Shopify."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop,shopify_webhook_endpoint_order:"
|
||||
msgid "The URL to be called by Shopify for Order events."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop-stock.location,shopify_stock_skip_warehouse:"
|
||||
msgid "Check to use only the quantity of the storage zone."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "help:web.shop.shopify_payment_journal,gateway:"
|
||||
msgid "The payment gateway name for which the journal must be used."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:carrier.selection.shopify,string:"
|
||||
msgid "Carrier Selection Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.action,name:act_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_custom_collection_fail"
|
||||
msgid ""
|
||||
"Failed to save custom collection \"%(category)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_fail"
|
||||
msgid ""
|
||||
"Failed to save fulfillment for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_fulfillment_order_line_not_found"
|
||||
msgid "Failed to find fulfillment order for %(quantity)s of move \"%(move)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_payment_unique"
|
||||
msgid "A shopify transaction can only be imported as payment once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_record_web_shop_unique"
|
||||
msgid "The record cannot have more than one Shopify identifier per web shop."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_sale_web_shop_unique"
|
||||
msgid "A Shopify order can only be imported as a sale once."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_identifier_shipment_sale_unique"
|
||||
msgid "The shipment can not have more than one Shopify identifier per sale."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_inventory_set_fail"
|
||||
msgid ""
|
||||
"Failed to set inventory with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_location_id_unique"
|
||||
msgid "Each Shopify location can only be linked to one warehouse."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_fail"
|
||||
msgid ""
|
||||
"Failed to create/update product \"%(template)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_product_shopify_uom_digits"
|
||||
msgid ""
|
||||
"To update product \"%(product)s\" on Shopify, you must use an unit of "
|
||||
"measure without digits."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_refund_fail"
|
||||
msgid ""
|
||||
"Failed to save refund for sale \"%(sale)s\" with error:\n"
|
||||
"%(error)s"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_product"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a product on the line "
|
||||
"\"%(line)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_sale_line_without_warehouse"
|
||||
msgid ""
|
||||
"To process the sale \"%(sale)s\" you must set a unique location for the line"
|
||||
" \"%(line)s\" on Shopify."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shipment_cancelled_draft_shopify"
|
||||
msgid ""
|
||||
"You cannot reset shipment \"%(shipment)s\" to draft because it is linked to "
|
||||
"a Shopify fulfillment."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_currency_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the currency to "
|
||||
"\"%(shopify_currency)s\" instead of \"%(shop_currency)s\"."
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_shop_locale_different"
|
||||
msgid ""
|
||||
"To update products on the shop \"%(shop)s\", you must set the language to "
|
||||
"\"%(shopify_primary_locale)s\" instead of \"%(shop_language)s\"."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_credential_modified"
|
||||
msgid "Are you sure you want to modify Shopify credentials?"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifier"
|
||||
msgid "Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_identifiers"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_shopify_url"
|
||||
msgid "Shopify URL"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_invalid"
|
||||
msgid ""
|
||||
"The Shopify Handle \"%(handle)s\" of product \"%(template)s\" can contain "
|
||||
"only lowercase letters, hyphens, and numbers."
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.message,text:msg_template_shopify_handle_unique"
|
||||
msgid "The Shopify Handle of product must be unique."
|
||||
msgstr ""
|
||||
|
||||
msgctxt ""
|
||||
"model:ir.model.button,string:shop_shopify_identifier_set_to_update_button"
|
||||
msgid "Set to Update"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_shop_shopify_identifier_form"
|
||||
msgid "Shopify Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:ir.ui.menu,name:menu_stock_shipment_shopify_identifier_form"
|
||||
msgid "Shipment Identifiers"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:product.shopify_inventory_item,string:"
|
||||
msgid "Product Shopify Inventory Item"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:stock.shipment.shopify_identifier,string:"
|
||||
msgid "Stock Shipment Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_identifier,string:"
|
||||
msgid "Web Shop Shopify Identifier"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "model:web.shop.shopify_payment_journal,string:"
|
||||
msgid "Web Shop Shopify Payment Journal"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:account.payment.journal,process_method:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Fetch Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Inventory"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Orders"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:ir.cron,method:"
|
||||
msgid "Update Shopify Products"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:stock.shipment.shopify_identifier,shipment:"
|
||||
msgid "Customer Shipment"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "selection:web.shop,type:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:carrier.selection.shopify:"
|
||||
msgid "Criteria"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:product.attribute.set:"
|
||||
msgid "Shopify Options"
|
||||
msgstr ""
|
||||
|
||||
msgctxt "view:web.shop:"
|
||||
msgid "Shopify"
|
||||
msgstr ""
|
||||
81
modules/web_shop_shopify/message.xml
Normal file
81
modules/web_shop_shopify/message.xml
Normal file
@@ -0,0 +1,81 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data grouped="1">
|
||||
<record model="ir.message" id="msg_shopify_credential_modified">
|
||||
<field name="text">Are you sure you want to modify Shopify credentials?</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_shopify_identifier">
|
||||
<field name="text">Shopify Identifier</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_shopify_url">
|
||||
<field name="text">Shopify URL</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_identifier_record_web_shop_unique">
|
||||
<field name="text">The record cannot have more than one Shopify identifier per web shop.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_location_id_unique">
|
||||
<field name="text">Each Shopify location can only be linked to one warehouse.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_shopify_identifiers">
|
||||
<field name="text">Shopify Identifiers</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_identifier_sale_web_shop_unique">
|
||||
<field name="text">A Shopify order can only be imported as a sale once.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_shop_currency_different">
|
||||
<field name="text">To update products on the shop "%(shop)s", you must set the currency to "%(shopify_currency)s" instead of "%(shop_currency)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_shop_locale_different">
|
||||
<field name="text">To update products on the shop "%(shop)s", you must set the language to "%(shopify_primary_locale)s" instead of "%(shop_language)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_template_shopify_handle_unique">
|
||||
<field name="text">The Shopify Handle of product must be unique.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_template_shopify_handle_invalid">
|
||||
<field name="text">The Shopify Handle "%(handle)s" of product "%(template)s" can contain only lowercase letters, hyphens, and numbers.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_product_shopify_uom_digits">
|
||||
<field name="text">To update product "%(product)s" on Shopify, you must use an unit of measure without digits.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_custom_collection_fail">
|
||||
<field name="text">Failed to save custom collection "%(category)s" with error:
|
||||
%(error)s</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_product_fail">
|
||||
<field name="text">Failed to create/update product "%(template)s" with error:
|
||||
%(error)s</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_inventory_set_fail">
|
||||
<field name="text">Failed to set inventory with error:
|
||||
%(error)s</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_fulfillment_fail">
|
||||
<field name="text">Failed to save fulfillment for sale "%(sale)s" with error:
|
||||
%(error)s</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_refund_fail">
|
||||
<field name="text">Failed to save refund for sale "%(sale)s" with error:
|
||||
%(error)s</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_identifier_payment_unique">
|
||||
<field name="text">A shopify transaction can only be imported as payment once.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_identifier_shipment_sale_unique">
|
||||
<field name="text">The shipment can not have more than one Shopify identifier per sale.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_sale_line_without_product">
|
||||
<field name="text">To process the sale "%(sale)s" you must set a product on the line "%(line)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_sale_line_without_warehouse">
|
||||
<field name="text">To process the sale "%(sale)s" you must set a unique location for the line "%(line)s" on Shopify.</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_fulfillment_order_line_not_found">
|
||||
<field name="text">Failed to find fulfillment order for %(quantity)s of move "%(move)s".</field>
|
||||
</record>
|
||||
<record model="ir.message" id="msg_shipment_cancelled_draft_shopify">
|
||||
<field name="text">You cannot reset shipment "%(shipment)s" to draft because it is linked to a Shopify fulfillment.</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
187
modules/web_shop_shopify/party.py
Normal file
187
modules/web_shop_shopify/party.py
Normal file
@@ -0,0 +1,187 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
import logging
|
||||
|
||||
from trytond.model import sequence_reorder
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.tools import remove_forbidden_chars
|
||||
from trytond.tools.email_ import EmailNotValidError, validate_email
|
||||
|
||||
from .common import IdentifiersMixin, gid2id, setattr_changed
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Party(IdentifiersMixin, metaclass=PoolMeta):
|
||||
__name__ = 'party.party'
|
||||
|
||||
@classmethod
|
||||
def shopify_fields(cls):
|
||||
return {
|
||||
'id': None,
|
||||
'displayName': None,
|
||||
'email': None,
|
||||
'phone': None,
|
||||
'locale': None,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def get_from_shopify(cls, shop, customer):
|
||||
pool = Pool()
|
||||
ContactMechanism = pool.get('party.contact_mechanism')
|
||||
Lang = pool.get('ir.lang')
|
||||
party = cls.search_shopify_identifier(
|
||||
shop, gid2id(customer['id']))
|
||||
if not party:
|
||||
party = cls()
|
||||
setattr_changed(party, 'name', remove_forbidden_chars(
|
||||
customer['displayName']))
|
||||
if customer['locale']:
|
||||
lang = Lang.get(customer['locale'])
|
||||
else:
|
||||
lang = None
|
||||
setattr_changed(party, 'lang', lang)
|
||||
contact_mechanisms = list(getattr(party, 'contact_mechanisms', []))
|
||||
for types, value in [
|
||||
(['email'], customer['email']),
|
||||
(['phone', 'mobile'], customer['phone']),
|
||||
]:
|
||||
value = remove_forbidden_chars(value)
|
||||
if not value:
|
||||
continue
|
||||
index = len(contact_mechanisms)
|
||||
for i, contact_mechanism in enumerate(contact_mechanisms):
|
||||
if (contact_mechanism.type in types
|
||||
and not contact_mechanism.address):
|
||||
index = min(i, index)
|
||||
if (contact_mechanism.value_compact
|
||||
== contact_mechanism.format_value_compact(
|
||||
value, contact_mechanism.type)):
|
||||
contact_mechanisms.insert(
|
||||
index,
|
||||
contact_mechanisms.pop(i))
|
||||
break
|
||||
else:
|
||||
if types[0] == 'email':
|
||||
try:
|
||||
validate_email(value)
|
||||
except EmailNotValidError as e:
|
||||
logger.info("Skip email %s", value, exc_info=e)
|
||||
continue
|
||||
contact_mechanisms.insert(index, ContactMechanism(
|
||||
type=types[0], value=value))
|
||||
party.contact_mechanisms = sequence_reorder(contact_mechanisms)
|
||||
# TODO tax_exempt
|
||||
return party
|
||||
|
||||
def get_address_from_shopify(self, shopify_address):
|
||||
pool = Pool()
|
||||
Address = pool.get('party.address')
|
||||
ContactMechanism = pool.get('party.contact_mechanism')
|
||||
shopify_values = Address.get_shopify_values(shopify_address)
|
||||
for address in self.addresses:
|
||||
if address.shopify_values() == shopify_values:
|
||||
break
|
||||
else:
|
||||
address = Address(**shopify_values)
|
||||
address.party = self
|
||||
address.save()
|
||||
|
||||
contact_mechanisms = list(self.contact_mechanisms)
|
||||
if phone := remove_forbidden_chars(shopify_address['phone']):
|
||||
index = len(contact_mechanisms)
|
||||
for i, contact_mechanism in enumerate(contact_mechanisms):
|
||||
if (contact_mechanism.type in ['phone', 'mobile']
|
||||
and contact_mechanism.address == address):
|
||||
index = min(i, index)
|
||||
if (contact_mechanism.value_compact
|
||||
== contact_mechanism.format_value_compact(
|
||||
phone, contact_mechanism.type)):
|
||||
contact_mechanisms.insert(
|
||||
index,
|
||||
contact_mechanisms.pop(i))
|
||||
break
|
||||
else:
|
||||
contact_mechanisms.insert(index, ContactMechanism(
|
||||
party=self, address=address,
|
||||
type='phone', value=phone))
|
||||
ContactMechanism.save(sequence_reorder(
|
||||
contact_mechanisms))
|
||||
return address
|
||||
|
||||
|
||||
class Address(metaclass=PoolMeta):
|
||||
__name__ = 'party.address'
|
||||
|
||||
@classmethod
|
||||
def shopify_fields(cls):
|
||||
return {
|
||||
'name': None,
|
||||
'company': None,
|
||||
'address1': None,
|
||||
'address2': None,
|
||||
'city': None,
|
||||
'zip': None,
|
||||
'countryCodeV2': None,
|
||||
'provinceCode': None,
|
||||
'phone': None,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def get_shopify_values(self, address):
|
||||
pool = Pool()
|
||||
Country = pool.get('country.country')
|
||||
Subdivision = pool.get('country.subdivision')
|
||||
SubdivisionType = pool.get('party.address.subdivision_type')
|
||||
|
||||
values = {}
|
||||
values['party_name'] = remove_forbidden_chars(address['name'] or '')
|
||||
if address['company']:
|
||||
values['party_name'] += (
|
||||
f"({remove_forbidden_chars(address['company'])})")
|
||||
values['street'] = '\n'.join(filter(None, [
|
||||
address['address1'], address['address2']]))
|
||||
values['city'] = remove_forbidden_chars(address['city'] or '')
|
||||
values['postal_code'] = address['zip'] or ''
|
||||
if address['countryCodeV2']:
|
||||
country, = Country.search([
|
||||
('code', '=', address['countryCodeV2']),
|
||||
], limit=1)
|
||||
values['country'] = country.id
|
||||
if address['provinceCode']:
|
||||
subdivision_code = '-'.join(
|
||||
[address['countryCodeV2'], address['provinceCode']])
|
||||
subdivision_domain = [
|
||||
('country', '=', country.id),
|
||||
('code', 'like', subdivision_code + '%'),
|
||||
]
|
||||
types = SubdivisionType.get_types(country)
|
||||
if types:
|
||||
subdivision_domain.append(('type', 'in', types))
|
||||
subdivisions = Subdivision.search(subdivision_domain, limit=1)
|
||||
if subdivisions:
|
||||
subdivision, = subdivisions
|
||||
values['subdivision'] = subdivision.id
|
||||
return values
|
||||
|
||||
def shopify_values(self):
|
||||
values = {}
|
||||
values['party_name'] = self.party_name or ''
|
||||
values['street'] = self.street or ''
|
||||
values['city'] = self.city or ''
|
||||
values['postal_code'] = self.postal_code or ''
|
||||
if self.country:
|
||||
values['country'] = self.country.id
|
||||
if self.subdivision:
|
||||
values['subdivision'] = self.subdivision.id
|
||||
return values
|
||||
|
||||
|
||||
class Replace(metaclass=PoolMeta):
|
||||
__name__ = 'party.replace'
|
||||
|
||||
@classmethod
|
||||
def fields_to_replace(cls):
|
||||
return super().fields_to_replace() + [
|
||||
('web.shop.shopify_identifier', 'record'),
|
||||
]
|
||||
12
modules/web_shop_shopify/party.xml
Normal file
12
modules/web_shop_shopify/party.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="party_view_form">
|
||||
<field name="model">party.party</field>
|
||||
<field name="inherit" ref="party.party_view_form"/>
|
||||
<field name="name">party_form</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
724
modules/web_shop_shopify/product.py
Normal file
724
modules/web_shop_shopify/product.py
Normal file
@@ -0,0 +1,724 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
import re
|
||||
from decimal import Decimal
|
||||
from urllib.parse import urljoin
|
||||
|
||||
import shopify
|
||||
from sql.conditionals import NullIf
|
||||
from sql.operators import Equal
|
||||
|
||||
from trytond.i18n import gettext
|
||||
from trytond.model import Exclude, ModelSQL, ModelView, fields
|
||||
from trytond.modules.product.exceptions import TemplateValidationError
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Bool, Eval, If
|
||||
from trytond.tools import grouped_slice, slugify
|
||||
from trytond.transaction import Transaction
|
||||
|
||||
from . import graphql
|
||||
from .common import IdentifiersMixin, IdentifiersUpdateMixin, id2gid
|
||||
|
||||
QUERY_COLLECTION = '''\
|
||||
query GetCollection($id: ID!) {
|
||||
collection(id: $id) %(fields)s
|
||||
}'''
|
||||
|
||||
QUERY_PRODUCT = '''\
|
||||
query GetProduct($id: ID!) {
|
||||
product(id: $id) %(fields)s
|
||||
}'''
|
||||
|
||||
QUERY_VARIANT = '''\
|
||||
query GetProductVariant($id: ID!) {
|
||||
productVariant(id: $id) %(fields)s
|
||||
}'''
|
||||
|
||||
|
||||
class Category(IdentifiersMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.category'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._shopify_fields.add('name')
|
||||
|
||||
def get_shopify(self, shop):
|
||||
shopify_id = self.get_shopify_identifier(shop)
|
||||
if shopify_id:
|
||||
shopify_id = id2gid('Collection', shopify_id)
|
||||
collection = shopify.GraphQL().execute(
|
||||
QUERY_COLLECTION % {
|
||||
'fields': graphql.selection({
|
||||
'id': None,
|
||||
}),
|
||||
}, {'id': shopify_id})['data']['collection'] or {}
|
||||
else:
|
||||
collection = {}
|
||||
collection['title'] = self.name[:255]
|
||||
collection['metafields'] = metafields = []
|
||||
managed_metafields = shop.managed_metafields()
|
||||
for key, value in self.get_shopify_metafields(shop).items():
|
||||
if key not in managed_metafields:
|
||||
continue
|
||||
namespace, key = key.split('.', 1)
|
||||
metafields.append({
|
||||
'namespace': namespace,
|
||||
'key': key,
|
||||
'value': value,
|
||||
})
|
||||
return collection
|
||||
|
||||
def get_shopify_metafields(self, shop):
|
||||
return {}
|
||||
|
||||
|
||||
class TemplateCategory(IdentifiersUpdateMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.template-product.category'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._shopify_fields.update(['template', 'category'])
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, records):
|
||||
return sum((list(r.template.shopify_identifiers) for r in records), [])
|
||||
|
||||
|
||||
class Template(IdentifiersMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.template'
|
||||
|
||||
shopify_uom = fields.Many2One(
|
||||
'product.uom', "Shopify UoM",
|
||||
states={
|
||||
'readonly': Bool(Eval('shopify_identifiers', [-1])),
|
||||
'invisible': ~Eval('salable', False),
|
||||
},
|
||||
help="The Unit of Measure of the product on Shopify.")
|
||||
shopify_handle = fields.Char(
|
||||
"Shopify Handle",
|
||||
states={
|
||||
'invisible': ~Eval('salable', False),
|
||||
},
|
||||
help="The string that's used to identify the product in URLs.\n"
|
||||
"Leave empty to let Shopify generate one.")
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
t = cls.__table__()
|
||||
cls._sql_constraints += [
|
||||
('shopify_handle_unique',
|
||||
Exclude(t,
|
||||
(NullIf(t.shopify_handle, ''), Equal)),
|
||||
'web_shop_shopify.msg_template_shopify_handle_unique'),
|
||||
]
|
||||
cls._shopify_fields.update([
|
||||
'name', 'web_shop_description', 'attribute_set',
|
||||
'customs_category', 'tariff_codes_category',
|
||||
'country_of_origin', 'weight', 'weight_uom'])
|
||||
categories = cls._shopify_uom_categories()
|
||||
cls.shopify_uom.domain = [
|
||||
('category', 'in', [Eval(c, -1) for c in categories]),
|
||||
('digits', '=', 0),
|
||||
]
|
||||
|
||||
@classmethod
|
||||
def _shopify_uom_categories(cls):
|
||||
return ['default_uom_category']
|
||||
|
||||
def get_shopify_uom(self):
|
||||
return self.sale_uom
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, templates):
|
||||
pool = Pool()
|
||||
Product = pool.get('product.product')
|
||||
products = [p for t in templates for p in t.products]
|
||||
return (super().get_shopify_identifier_to_update(templates)
|
||||
+ Product.get_shopify_identifier_to_update(products))
|
||||
|
||||
def get_shopify(self, shop, categories):
|
||||
shopify_id = self.get_shopify_identifier(shop)
|
||||
product = {}
|
||||
if shopify_id:
|
||||
shopify_id = id2gid('Product', shopify_id)
|
||||
product = shopify.GraphQL().execute(
|
||||
QUERY_PRODUCT % {
|
||||
'fields': graphql.selection({
|
||||
'id': None,
|
||||
'status': None,
|
||||
}),
|
||||
}, {'id': shopify_id})['data']['product'] or {}
|
||||
if product.get('status') == 'ARCHIVED':
|
||||
product['status'] = 'ACTIVE'
|
||||
product['title'] = self.name
|
||||
if self.web_shop_description:
|
||||
product['descriptionHtml'] = self.web_shop_description
|
||||
if self.shopify_handle:
|
||||
product['handle'] = self.shopify_handle
|
||||
|
||||
product['productOptions'] = options = []
|
||||
for i, attribute in enumerate(self.shopify_attributes, 1):
|
||||
values = set()
|
||||
for p in self.products:
|
||||
if p.attributes and attribute.name in p.attributes:
|
||||
values.add(p.attributes.get(attribute.name))
|
||||
values = [
|
||||
{'name': attribute.format(value)}
|
||||
for value in sorted(values)]
|
||||
options.append({
|
||||
'name': attribute.string,
|
||||
'position': i,
|
||||
'values': values,
|
||||
})
|
||||
|
||||
product['collections'] = collections = []
|
||||
for category in categories:
|
||||
if collection_id := category.get_shopify_identifier(shop):
|
||||
collections.append(id2gid(
|
||||
'Collection', collection_id))
|
||||
|
||||
product['metafields'] = metafields = []
|
||||
managed_metafields = shop.managed_metafields()
|
||||
for key, value in self.get_shopify_metafields(shop).items():
|
||||
if key not in managed_metafields:
|
||||
continue
|
||||
namespace, key = key.split('.', 1)
|
||||
metafields.append({
|
||||
'namespace': namespace,
|
||||
'key': key,
|
||||
**value
|
||||
})
|
||||
return product
|
||||
|
||||
def get_shopify_metafields(self, shop):
|
||||
return {}
|
||||
|
||||
@property
|
||||
def shopify_attributes(self):
|
||||
if not self.attribute_set:
|
||||
return []
|
||||
return filter(None, [
|
||||
self.attribute_set.shopify_option1,
|
||||
self.attribute_set.shopify_option2,
|
||||
self.attribute_set.shopify_option3])
|
||||
|
||||
@classmethod
|
||||
def validate_fields(cls, templates, field_names):
|
||||
super().validate_fields(templates, field_names)
|
||||
cls.check_shopify_handle(templates, field_names)
|
||||
|
||||
@classmethod
|
||||
def check_shopify_handle(cls, templates, field_names):
|
||||
if field_names and 'shopify_handle' not in field_names:
|
||||
return
|
||||
for template in templates:
|
||||
if (template.shopify_handle
|
||||
and not re.fullmatch(
|
||||
r'[a-z0-9-]+', template.shopify_handle)):
|
||||
raise TemplateValidationError(gettext(
|
||||
'web_shop_shopify.msg_template_shopify_handle_invalid',
|
||||
template=template.rec_name,
|
||||
handle=template.shopify_handle,
|
||||
))
|
||||
|
||||
|
||||
class Template_SaleSecondaryUnit(metaclass=PoolMeta):
|
||||
__name__ = 'product.template'
|
||||
|
||||
@classmethod
|
||||
def _shopify_uom_categories(cls):
|
||||
return super()._shopify_uom_categories() + [
|
||||
'sale_secondary_uom_category']
|
||||
|
||||
def get_shopify_uom(self):
|
||||
uom = super().get_shopify_uom()
|
||||
if self.sale_secondary_uom and not self.sale_secondary_uom.digits:
|
||||
uom = self.sale_secondary_uom
|
||||
return uom
|
||||
|
||||
|
||||
class Product(IdentifiersMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.product'
|
||||
|
||||
shopify_sku = fields.Function(
|
||||
fields.Char("SKU"), 'get_shopify_sku', searcher='search_shopify_sku')
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._shopify_fields.update(['code', 'attributes', 'position'])
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, records):
|
||||
pool = Pool()
|
||||
InventoryItem = pool.get('product.shopify_inventory_item')
|
||||
items = InventoryItem.browse(records)
|
||||
return (super().get_shopify_identifier_to_update(records)
|
||||
+ sum((list(i.shopify_identifiers) for i in items), []))
|
||||
|
||||
def set_shopify_identifier(self, web_shop, identifier=None):
|
||||
pool = Pool()
|
||||
InventoryItem = pool.get('product.shopify_inventory_item')
|
||||
if not identifier:
|
||||
inventory_item = InventoryItem(self.id)
|
||||
inventory_item.set_shopify_identifier(web_shop)
|
||||
return super().set_shopify_identifier(web_shop, identifier=identifier)
|
||||
|
||||
def get_shopify_sku(self, name):
|
||||
return self.code
|
||||
|
||||
@classmethod
|
||||
def search_shopify_sku(cls, name, clause):
|
||||
return [('code',) + tuple(clause[1:])]
|
||||
|
||||
def get_shopify(
|
||||
self, shop, sale_price, sale_tax, price, tax,
|
||||
shop_taxes_included=True):
|
||||
shopify_id = self.get_shopify_identifier(shop)
|
||||
if shopify_id:
|
||||
shopify_id = id2gid('ProductVariant', shopify_id)
|
||||
variant = shopify.GraphQL().execute(
|
||||
QUERY_VARIANT % {
|
||||
'fields': graphql.selection({
|
||||
'id': None,
|
||||
}),
|
||||
}, {'id': shopify_id})['data']['productVariant'] or {}
|
||||
else:
|
||||
variant = {}
|
||||
sale_price = self.shopify_price(
|
||||
sale_price, sale_tax, taxes_included=shop_taxes_included)
|
||||
if sale_price is not None:
|
||||
variant['price'] = str(sale_price.quantize(Decimal('.00')))
|
||||
else:
|
||||
variant['price'] = None
|
||||
price = self.shopify_price(
|
||||
price, tax, taxes_included=shop_taxes_included)
|
||||
if price is not None:
|
||||
variant['compareAtPrice'] = str(
|
||||
price.quantize(Decimal('.00')))
|
||||
else:
|
||||
variant['compareAtPrice'] = None
|
||||
variant['taxable'] = bool(sale_tax)
|
||||
|
||||
for identifier in self.identifiers:
|
||||
if identifier.type == 'ean':
|
||||
variant['barcode'] = identifier.code
|
||||
break
|
||||
|
||||
variant['optionValues'] = options = []
|
||||
attributes = self.attributes or {}
|
||||
for attribute in self.template.shopify_attributes:
|
||||
value = attributes.get(attribute.name)
|
||||
value = attribute.format(value)
|
||||
options.append({
|
||||
'optionName': attribute.string,
|
||||
'name': value,
|
||||
})
|
||||
|
||||
variant['metafields'] = metafields = []
|
||||
managed_metafields = shop.managed_metafields()
|
||||
for key, value in self.get_shopify_metafields(shop).items():
|
||||
if key not in managed_metafields:
|
||||
continue
|
||||
namespace, key = key.split('.', 1)
|
||||
metafields.append({
|
||||
'namespace': namespace,
|
||||
'key': key,
|
||||
'value': value,
|
||||
})
|
||||
return variant
|
||||
|
||||
def get_shopify_metafields(self, shop):
|
||||
return {}
|
||||
|
||||
def shopify_price(self, price, tax, taxes_included=True):
|
||||
pool = Pool()
|
||||
Uom = pool.get('product.uom')
|
||||
if price is None or tax is None:
|
||||
return None
|
||||
if taxes_included:
|
||||
price += tax
|
||||
return Uom.compute_price(
|
||||
self.sale_uom, price, self.shopify_uom,
|
||||
factor=self.shopify_uom_factor, rate=self.shopify_uom_rate)
|
||||
|
||||
@property
|
||||
def shopify_uom_factor(self):
|
||||
return None
|
||||
|
||||
@property
|
||||
def shopify_uom_rate(self):
|
||||
return None
|
||||
|
||||
@property
|
||||
def shopify_quantity(self):
|
||||
pool = Pool()
|
||||
Uom = pool.get('product.uom')
|
||||
quantity = self.forecast_quantity
|
||||
if quantity < 0:
|
||||
quantity = 0
|
||||
return Uom.compute_qty(
|
||||
self.default_uom, quantity, self.shopify_uom, round=True,
|
||||
factor=self.shopify_uom_factor, rate=self.shopify_uom_rate)
|
||||
|
||||
|
||||
class ProductURL(metaclass=PoolMeta):
|
||||
__name__ = 'product.web_shop_url'
|
||||
|
||||
def get_url(self, name):
|
||||
url = super().get_url(name)
|
||||
if (self.shop.type == 'shopify'
|
||||
and (handle := self.product.template.shopify_handle)):
|
||||
url = urljoin(self.shop.shopify_url + '/', f'products/{handle}')
|
||||
return url
|
||||
|
||||
|
||||
class ShopifyInventoryItem(IdentifiersMixin, ModelSQL, ModelView):
|
||||
__name__ = 'product.shopify_inventory_item'
|
||||
|
||||
product = fields.Function(
|
||||
fields.Many2One('product.product', "Product"), 'get_product')
|
||||
|
||||
@classmethod
|
||||
def table_query(cls):
|
||||
return Pool().get('product.product').__table__()
|
||||
|
||||
def get_product(self, name):
|
||||
return self.id
|
||||
|
||||
def get_shopify(self, shop, shop_weight_unit=None):
|
||||
pool = Pool()
|
||||
SaleLine = pool.get('sale.line')
|
||||
ModelData = pool.get('ir.model.data')
|
||||
Uom = pool.get('product.uom')
|
||||
|
||||
movable_types = SaleLine.movable_types()
|
||||
|
||||
inventory_item = {}
|
||||
inventory_item['sku'] = self.product.shopify_sku
|
||||
inventory_item['tracked'] = (
|
||||
self.product.type in movable_types and not self.product.consumable)
|
||||
inventory_item['requiresShipping'] = (
|
||||
self.product.type in movable_types)
|
||||
|
||||
if getattr(self.product, 'weight', None) and shop_weight_unit:
|
||||
units = {}
|
||||
units['KILOGRAMS'] = ModelData.get_id('product', 'uom_kilogram')
|
||||
units['GRAMS'] = ModelData.get_id('product', 'uom_gram')
|
||||
units['POUNDS'] = ModelData.get_id('product', 'uom_pound')
|
||||
units['OUNCES'] = ModelData.get_id('product', 'uom_ounce')
|
||||
weight = self.product.weight
|
||||
weight_unit = self.product.weight_uom
|
||||
if self.product.weight_uom.id not in units.values():
|
||||
weight_unit = Uom(units[shop_weight_unit])
|
||||
weight = Uom.compute_qty(
|
||||
self.product.weight_uom, weight, weight_unit)
|
||||
weight_unit = {
|
||||
v: k for k, v in units.items()}[weight_unit.id]
|
||||
inventory_item['measurement'] = {
|
||||
'weight': {
|
||||
'unit': weight_unit,
|
||||
'value': weight,
|
||||
},
|
||||
}
|
||||
|
||||
return inventory_item
|
||||
|
||||
|
||||
class ShopifyInventoryItem_Customs(metaclass=PoolMeta):
|
||||
__name__ = 'product.shopify_inventory_item'
|
||||
|
||||
def get_shopify(self, shop, shop_weight_unit=None):
|
||||
pool = Pool()
|
||||
Date = pool.get('ir.date')
|
||||
inventory_item = super().get_shopify(
|
||||
shop, shop_weight_unit=shop_weight_unit)
|
||||
with Transaction().set_context(company=shop.company.id):
|
||||
today = Date.today()
|
||||
inventory_item['countryCodeOfOrigin'] = (
|
||||
self.product.country_of_origin.code
|
||||
if self.product.country_of_origin else None)
|
||||
tariff_code = self.product.get_tariff_code(
|
||||
{'date': today, 'country': None})
|
||||
inventory_item['harmonizedSystemCode'] = (
|
||||
tariff_code.code if tariff_code else None)
|
||||
country_harmonized_system_codes = []
|
||||
countries = set()
|
||||
for tariff_code in self.product.get_tariff_codes({'date': today}):
|
||||
if (tariff_code.country
|
||||
and tariff_code.country not in countries):
|
||||
country_harmonized_system_codes.append({
|
||||
'harmonizedSystemCode': tariff_code.code,
|
||||
'countryCode': tariff_code.country.code,
|
||||
})
|
||||
countries.add(tariff_code.country)
|
||||
inventory_item['countryHarmonizedSystemCodes'] = (
|
||||
country_harmonized_system_codes)
|
||||
return inventory_item
|
||||
|
||||
|
||||
class Product_TariffCode(IdentifiersUpdateMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product-customs.tariff.code'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._shopify_fields.update(['product', 'tariff_code'])
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, records):
|
||||
pool = Pool()
|
||||
Template = pool.get('product.template')
|
||||
Category = pool.get('product.category')
|
||||
templates = set()
|
||||
categories = set()
|
||||
for record in records:
|
||||
if isinstance(record.product, Template):
|
||||
templates.add(record.product)
|
||||
elif isinstance(record.product, Category):
|
||||
categories.add(record.product)
|
||||
if categories:
|
||||
for sub_categories in grouped_slice(list(categories)):
|
||||
templates.update(Template.search([
|
||||
('customs_category', 'in',
|
||||
[c.id for c in sub_categories]),
|
||||
]))
|
||||
templates = Template.browse(list(templates))
|
||||
return Template.get_shopify_identifier_to_update(templates)
|
||||
|
||||
|
||||
class ProductIdentifier(IdentifiersUpdateMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.identifier'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._shopify_fields.update(['product', 'code'])
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, identifiers):
|
||||
return sum((
|
||||
list(i.product.shopify_identifiers) for i in identifiers), [])
|
||||
|
||||
|
||||
class Product_SaleSecondaryUnit(metaclass=PoolMeta):
|
||||
__name__ = 'product.product'
|
||||
|
||||
@property
|
||||
def shopify_uom_factor(self):
|
||||
factor = super().shopify_uom_factor
|
||||
if (self.sale_secondary_uom
|
||||
and self.shopify_uom.category
|
||||
== self.sale_secondary_uom.category):
|
||||
factor = self.sale_secondary_uom_normal_factor
|
||||
return factor
|
||||
|
||||
@property
|
||||
def shopify_uom_rate(self):
|
||||
rate = super().shopify_uom_rate
|
||||
if (self.sale_secondary_uom
|
||||
and self.shopify_uom.category
|
||||
== self.sale_secondary_uom.category):
|
||||
rate = self.sale_secondary_uom_normal_rate
|
||||
return rate
|
||||
|
||||
|
||||
class AttributeSet(IdentifiersUpdateMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.attribute.set'
|
||||
|
||||
shopify_option1 = fields.Many2One(
|
||||
'product.attribute', "Option 1",
|
||||
domain=[
|
||||
('id', 'in', Eval('attributes', [])),
|
||||
If(Eval('shopify_option2'),
|
||||
('id', '!=', Eval('shopify_option2')),
|
||||
()),
|
||||
If(Eval('shopify_option3'),
|
||||
('id', '!=', Eval('shopify_option3')),
|
||||
()),
|
||||
])
|
||||
shopify_option2 = fields.Many2One(
|
||||
'product.attribute', "Option 2",
|
||||
domain=[
|
||||
('id', 'in', Eval('attributes', [])),
|
||||
If(Eval('shopify_option1'),
|
||||
('id', '!=', Eval('shopify_option1')),
|
||||
('id', '=', None)),
|
||||
If(Eval('shopify_option3'),
|
||||
('id', '!=', Eval('shopify_option3')),
|
||||
()),
|
||||
],
|
||||
states={
|
||||
'invisible': ~Eval('shopify_option1'),
|
||||
})
|
||||
shopify_option3 = fields.Many2One(
|
||||
'product.attribute', "Option 3",
|
||||
domain=[
|
||||
('id', 'in', Eval('attributes', [])),
|
||||
If(Eval('shopify_option1'),
|
||||
('id', '!=', Eval('shopify_option1')),
|
||||
()),
|
||||
If(Eval('shopify_option2'),
|
||||
('id', '!=', Eval('shopify_option2')),
|
||||
('id', '=', None)),
|
||||
],
|
||||
states={
|
||||
'invisible': ~Eval('shopify_option2'),
|
||||
})
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._shopify_fields.update(
|
||||
['shopify_option1', 'shopify_option2', 'shopify_option3'])
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, sets):
|
||||
pool = Pool()
|
||||
Template = pool.get('product.template')
|
||||
templates = []
|
||||
for sub_sets in grouped_slice(sets):
|
||||
templates.extend(Template.search([
|
||||
('attribute_set', 'in', [s.id for s in sub_sets]),
|
||||
]))
|
||||
return Template.get_shopify_identifier_to_update(templates)
|
||||
|
||||
|
||||
class Attribute(IdentifiersUpdateMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.attribute'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._shopify_fields.add('selection')
|
||||
domain = [
|
||||
('type', '!=', 'shopify'),
|
||||
]
|
||||
if cls.web_shops.domain:
|
||||
cls.web_shops.domain = [cls.web_shops.domain, domain]
|
||||
else:
|
||||
cls.web_shops.domain = domain
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, attributes):
|
||||
pool = Pool()
|
||||
Set = pool.get('product.attribute.set')
|
||||
sets = Set.browse(sum((a.sets for a in attributes), ()))
|
||||
return Set.get_shopify_identifier_to_update(sets)
|
||||
|
||||
|
||||
class Template_Image(metaclass=PoolMeta):
|
||||
__name__ = 'product.template'
|
||||
|
||||
@property
|
||||
def shopify_images(self):
|
||||
for image in self.images_used:
|
||||
if image.web_shop:
|
||||
yield image
|
||||
|
||||
def get_shopify(self, shop, categories):
|
||||
product = super().get_shopify(shop, categories)
|
||||
product['files'] = files = []
|
||||
for image in self.shopify_images:
|
||||
file = {
|
||||
'alt': image.description,
|
||||
'contentType': 'IMAGE',
|
||||
'filename': image.shopify_name,
|
||||
}
|
||||
if image_id := image.get_shopify_identifier(shop):
|
||||
file['id'] = id2gid('MediaImage', image_id)
|
||||
else:
|
||||
file['originalSource'] = self.get_image_url(
|
||||
_external=True, id=image.id)
|
||||
files.append(file)
|
||||
return product
|
||||
|
||||
|
||||
class Product_Image(metaclass=PoolMeta):
|
||||
__name__ = 'product.product'
|
||||
|
||||
@property
|
||||
def shopify_images(self):
|
||||
for image in self.images_used:
|
||||
if image.web_shop:
|
||||
yield image
|
||||
|
||||
def get_shopify(
|
||||
self, shop, sale_price, sale_tax, price, tax,
|
||||
shop_taxes_included=True):
|
||||
variant = super().get_shopify(
|
||||
shop, sale_price, sale_tax, price, tax,
|
||||
shop_taxes_included=shop_taxes_included)
|
||||
for image in self.shopify_images:
|
||||
file = {
|
||||
'alt': image.description,
|
||||
'contentType': 'IMAGE',
|
||||
'filename': image.shopify_name,
|
||||
}
|
||||
if image_id := image.get_shopify_identifier(shop):
|
||||
file['id'] = id2gid('MediaImage', image_id)
|
||||
else:
|
||||
file['originalSource'] = self.get_image_url(
|
||||
_external=True, id=image.id)
|
||||
variant['file'] = file
|
||||
break
|
||||
else:
|
||||
variant['file'] = None
|
||||
return variant
|
||||
|
||||
|
||||
class Image(IdentifiersMixin, metaclass=PoolMeta):
|
||||
__name__ = 'product.image'
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls._shopify_fields.update(['template', 'product', 'attributes'])
|
||||
|
||||
@classmethod
|
||||
def on_write(cls, images, values):
|
||||
pool = Pool()
|
||||
Identifier = pool.get('web.shop.shopify_identifier')
|
||||
callback = super().on_write(images, values)
|
||||
if values.keys() & {'image', 'template', 'web_shop'}:
|
||||
to_delete = []
|
||||
for image in images:
|
||||
to_delete.extend(image.shopify_identifiers)
|
||||
if to_delete:
|
||||
callback.append(lambda: Identifier.delete(to_delete))
|
||||
return callback
|
||||
|
||||
@classmethod
|
||||
def get_shopify_identifier_to_update(cls, images):
|
||||
return (
|
||||
sum((list(i.template.shopify_identifiers) for i in images), [])
|
||||
+ sum(
|
||||
(list(p.shopify_identifiers)
|
||||
for i in images for p in i.template.products), []))
|
||||
|
||||
@property
|
||||
def shopify_name(self):
|
||||
if self.product:
|
||||
name = self.product.name
|
||||
else:
|
||||
name = self.template.name
|
||||
name = slugify(name)
|
||||
return f'{name}.jpg'
|
||||
|
||||
|
||||
class Image_Attribute(metaclass=PoolMeta):
|
||||
__name__ = 'product.image'
|
||||
|
||||
@property
|
||||
def shopify_name(self):
|
||||
name = super().shopify_name
|
||||
if self.product:
|
||||
attributes_name = self.product.attributes_name
|
||||
else:
|
||||
attributes_name = self.attributes_name
|
||||
if attributes_name:
|
||||
name += ' ' + attributes_name
|
||||
return name
|
||||
18
modules/web_shop_shopify/product.xml
Normal file
18
modules/web_shop_shopify/product.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="product_template_view_form">
|
||||
<field name="model">product.template</field>
|
||||
<field name="inherit" ref="product.template_view_form"/>
|
||||
<field name="name">product_template_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="product_attribute_set_view_form">
|
||||
<field name="model">product.attribute.set</field>
|
||||
<field name="inherit" ref="product_attribute.attribute_set_view_form"/>
|
||||
<field name="name">product_attribute_set_form</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
128
modules/web_shop_shopify/routes.py
Normal file
128
modules/web_shop_shopify/routes.py
Normal file
@@ -0,0 +1,128 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
import base64
|
||||
import hashlib
|
||||
import hmac
|
||||
import logging
|
||||
|
||||
from trytond.protocols.wrappers import (
|
||||
HTTPStatus, Response, abort, redirect, with_pool, with_transaction)
|
||||
from trytond.wsgi import app
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def verify_webhook(data, hmac_header, secret):
|
||||
digest = hmac.new(secret, data, hashlib.sha256).digest()
|
||||
computed_hmac = base64.b64encode(digest)
|
||||
return hmac.compare_digest(computed_hmac, hmac_header.encode('utf-8'))
|
||||
|
||||
|
||||
@app.route(
|
||||
'/<database_name>/web_shop_shopify/webhook/<shop>/order', methods={'POST'})
|
||||
@with_pool
|
||||
@with_transaction(context={'_skip_warnings': True})
|
||||
def order(request, pool, shop):
|
||||
Sale = pool.get('sale.sale')
|
||||
Shop = pool.get('web.shop')
|
||||
shop = Shop.get(shop)
|
||||
data = request.get_data()
|
||||
verified = verify_webhook(
|
||||
data, request.headers.get('X-Shopify-Hmac-SHA256'),
|
||||
shop.shopify_webhook_shared_secret.encode('utf-8'))
|
||||
if not verified:
|
||||
abort(HTTPStatus.UNAUTHORIZED)
|
||||
|
||||
topic = request.headers.get('X-Shopify-Topic')
|
||||
order = request.get_json()
|
||||
logger.info("Shopify webhook %s for %s", topic, order['id'])
|
||||
if topic == 'orders/create':
|
||||
if not Sale.search([
|
||||
('web_shop', '=', shop.id),
|
||||
('shopify_identifier', '=', order['id']),
|
||||
], order=[], limit=1):
|
||||
Shop.__queue__.shopify_fetch_order([shop])
|
||||
elif topic in {
|
||||
'orders/updated', 'orders/edited', 'orders/paid',
|
||||
'orders/cancelled'}:
|
||||
if topic == 'orders/edited':
|
||||
order_id = order['order_edit']['id']
|
||||
else:
|
||||
order_id = order['id']
|
||||
sales = Sale.search([
|
||||
('web_shop', '=', shop.id),
|
||||
('shopify_identifier', '=', order_id),
|
||||
], order=[], limit=1)
|
||||
if not sales:
|
||||
Shop.__queue__.shopify_fetch_order([shop])
|
||||
else:
|
||||
sale, = sales
|
||||
Shop.__queue__.update_sale_ids(shop, [sale.id])
|
||||
else:
|
||||
logger.warn("Unsupported topic '%s'", topic)
|
||||
return Response(status=HTTPStatus.NO_CONTENT)
|
||||
|
||||
|
||||
@app.route('/<database_name>/web_shop_shopify/products/<id>', methods={'GET'})
|
||||
@app.auth_required
|
||||
@with_pool
|
||||
@with_transaction(user='request')
|
||||
def shopify_product(request, pool, id):
|
||||
Template = pool.get('product.template')
|
||||
try:
|
||||
template, = Template.search(
|
||||
[('shopify_identifiers.shopify_identifier_char', '=', id)],
|
||||
limit=1)
|
||||
except ValueError:
|
||||
abort(HTTPStatus.NOT_FOUND)
|
||||
return redirect(template.__href__)
|
||||
|
||||
|
||||
@app.route(
|
||||
'/<database_name>/web_shop_shopify'
|
||||
'/products/<product_id>/variants/<variant_id>',
|
||||
methods={'GET'})
|
||||
@app.auth_required
|
||||
@with_pool
|
||||
@with_transaction(user='request')
|
||||
def shopify_product_variant(request, pool, product_id, variant_id):
|
||||
Product = pool.get('product.product')
|
||||
try:
|
||||
product, = Product.search([
|
||||
('template.shopify_identifiers.shopify_identifier_char',
|
||||
'=', product_id),
|
||||
('shopify_identifiers.shopify_identifier_char',
|
||||
'=', variant_id),
|
||||
],
|
||||
limit=1)
|
||||
except ValueError:
|
||||
abort(HTTPStatus.NOT_FOUND)
|
||||
return redirect(product.__href__)
|
||||
|
||||
|
||||
@app.route('/<database_name>/web_shop_shopify/customers/<id>', methods={'GET'})
|
||||
@app.auth_required
|
||||
@with_pool
|
||||
@with_transaction(user='request')
|
||||
def shopify_customer(request, pool, id):
|
||||
Party = pool.get('party.party')
|
||||
try:
|
||||
party, = Party.search([
|
||||
('shopify_identifiers.shopify_identifier_char', '=', id),
|
||||
], limit=1)
|
||||
except ValueError:
|
||||
abort(HTTPStatus.NOT_FOUND)
|
||||
return redirect(party.__href__)
|
||||
|
||||
|
||||
@app.route('/<database_name>/web_shop_shopify/orders/<id>', methods={'GET'})
|
||||
@app.auth_required
|
||||
@with_pool
|
||||
@with_transaction(user='request')
|
||||
def shopify_order(request, pool, id):
|
||||
Sale = pool.get('sale.sale')
|
||||
try:
|
||||
sale, = Sale.search([('shopify_identifier_char', '=', id)], limit=1)
|
||||
except ValueError:
|
||||
abort(HTTPStatus.NOT_FOUND)
|
||||
return redirect(sale.__href__)
|
||||
1011
modules/web_shop_shopify/sale.py
Normal file
1011
modules/web_shop_shopify/sale.py
Normal file
File diff suppressed because it is too large
Load Diff
12
modules/web_shop_shopify/sale.xml
Normal file
12
modules/web_shop_shopify/sale.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="sale_view_form">
|
||||
<field name="model">sale.sale</field>
|
||||
<field name="inherit" ref="sale.sale_view_form"/>
|
||||
<field name="name">sale_form</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
87
modules/web_shop_shopify/shopify_retry.py
Normal file
87
modules/web_shop_shopify/shopify_retry.py
Normal file
@@ -0,0 +1,87 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
import json
|
||||
import logging
|
||||
import time
|
||||
import urllib
|
||||
|
||||
from pyactiveresource.connection import ClientError
|
||||
from shopify import Limits
|
||||
from shopify.base import ShopifyConnection
|
||||
from shopify.resources.graphql import GraphQL
|
||||
|
||||
try:
|
||||
from shopify.resources.graphql import GraphQLException
|
||||
except ImportError:
|
||||
class GraphQLException(Exception):
|
||||
def __init__(self, response):
|
||||
self._response = response
|
||||
|
||||
@property
|
||||
def errors(self):
|
||||
return self._response['errors']
|
||||
|
||||
from trytond.protocols.wrappers import HTTPStatus
|
||||
from trytond.tools.logging import format_args
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def patch():
|
||||
def _open(*args, **kwargs):
|
||||
while True:
|
||||
try:
|
||||
return open_func(*args, **kwargs)
|
||||
except ClientError as e:
|
||||
if e.response.code == HTTPStatus.TOO_MANY_REQUESTS:
|
||||
retry_after = float(
|
||||
e.response.headers.get('Retry-After', 2))
|
||||
logger.debug(
|
||||
"Shopify connection retry after %ss", retry_after)
|
||||
time.sleep(retry_after)
|
||||
else:
|
||||
raise
|
||||
else:
|
||||
try:
|
||||
if Limits.credit_maxed():
|
||||
logger.debug("Shopify connection credit maxed")
|
||||
time.sleep(0.5)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if ShopifyConnection._open != _open:
|
||||
open_func = ShopifyConnection._open
|
||||
ShopifyConnection._open = _open
|
||||
|
||||
def graphql_execute(self, *args, **kwargs):
|
||||
log_message = "GraphQL execute %s"
|
||||
log_args = (
|
||||
format_args(args, kwargs, logger.isEnabledFor(logging.DEBUG)),)
|
||||
while True:
|
||||
try:
|
||||
result = graphql_execute_func(self, *args, **kwargs)
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == HTTPStatus.TOO_MANY_REQUESTS:
|
||||
retry_after = float(e.headers.get('Retry-After', 2))
|
||||
logger.debug("GraphQL retry after %ss", retry_after)
|
||||
time.sleep(retry_after)
|
||||
else:
|
||||
logger.exception(log_message, *log_args)
|
||||
raise GraphQLException(json.load(e.fp))
|
||||
if isinstance(result, str):
|
||||
result = json.loads(result)
|
||||
if result.get('errors'):
|
||||
for error in result['errors']:
|
||||
if error.get('extensions', {}).get('code') == 'THROTTLED':
|
||||
logger.debug("GraphQL throttled")
|
||||
time.sleep(0.5)
|
||||
continue
|
||||
logger.exception(log_message, *log_args)
|
||||
raise GraphQLException(result)
|
||||
logger.info(log_message, *log_args)
|
||||
logger.debug("GraphQL Result: %r", result)
|
||||
return result
|
||||
|
||||
if GraphQL.execute != graphql_execute:
|
||||
graphql_execute_func = GraphQL.execute
|
||||
GraphQL.execute = graphql_execute
|
||||
279
modules/web_shop_shopify/stock.py
Normal file
279
modules/web_shop_shopify/stock.py
Normal file
@@ -0,0 +1,279 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from collections import defaultdict
|
||||
|
||||
import shopify
|
||||
|
||||
from trytond.i18n import gettext, lazy_gettext
|
||||
from trytond.model import ModelSQL, ModelView, Unique, Workflow, fields
|
||||
from trytond.model.exceptions import AccessError
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
|
||||
from . import graphql
|
||||
from .common import IdentifierMixin, id2gid
|
||||
from .exceptions import ShopifyError
|
||||
|
||||
QUERY_FULFILLMENT_ORDERS = '''\
|
||||
query FulfillmentOrders($orderId: ID!) {
|
||||
order(id: $orderId) %(fields)s
|
||||
}'''
|
||||
|
||||
|
||||
class ShipmentOut(metaclass=PoolMeta):
|
||||
__name__ = 'stock.shipment.out'
|
||||
|
||||
shopify_identifiers = fields.One2Many(
|
||||
'stock.shipment.shopify_identifier', 'shipment',
|
||||
lazy_gettext('web_shop_shopify.msg_shopify_identifiers'))
|
||||
|
||||
def get_shopify(self, sale, fulfillment_order_fields=None):
|
||||
if self.state not in {'shipped', 'done'}:
|
||||
return
|
||||
shopify_id = self.get_shopify_identifier(sale)
|
||||
if shopify_id:
|
||||
# Fulfillment can not be modified
|
||||
return
|
||||
else:
|
||||
fulfillment = {}
|
||||
for shop_warehouse in sale.web_shop.shopify_warehouses:
|
||||
if shop_warehouse.warehouse == self.warehouse:
|
||||
location_id = int(shop_warehouse.shopify_id)
|
||||
break
|
||||
else:
|
||||
location_id = None
|
||||
fulfillment_order_fields = graphql.deep_merge(
|
||||
fulfillment_order_fields or {}, {
|
||||
'fulfillmentOrders(first: 250)': {
|
||||
'nodes': {
|
||||
'id': None,
|
||||
'assignedLocation': {
|
||||
'location': {
|
||||
'id': None,
|
||||
},
|
||||
},
|
||||
'lineItems(first: 250)': {
|
||||
'nodes': {
|
||||
'id': None,
|
||||
'lineItem': {
|
||||
'id': None,
|
||||
'fulfillableQuantity': None,
|
||||
},
|
||||
},
|
||||
},
|
||||
'status': None,
|
||||
},
|
||||
},
|
||||
})
|
||||
order_id = id2gid('Order', sale.shopify_identifier)
|
||||
fulfillment_orders = shopify.GraphQL().execute(
|
||||
QUERY_FULFILLMENT_ORDERS % {
|
||||
'fields': graphql.selection(fulfillment_order_fields),
|
||||
}, {'orderId': order_id})['data']['order']['fulfillmentOrders']
|
||||
line_items = defaultdict(list)
|
||||
for move in self.outgoing_moves:
|
||||
if move.sale == sale:
|
||||
for order_id, line_item in move.get_shopify(
|
||||
fulfillment_orders, location_id):
|
||||
line_items[order_id].append(line_item)
|
||||
if not line_items:
|
||||
return
|
||||
fulfillment['lineItemsByFulfillmentOrder'] = [{
|
||||
'fulfillmentOrderId': order_id,
|
||||
'fulfillmentOrderLineItems': line_items,
|
||||
}
|
||||
for order_id, line_items in line_items.items()]
|
||||
fulfillment['notifyCustomer'] = bool(
|
||||
sale.web_shop.shopify_fulfillment_notify_customer)
|
||||
return fulfillment
|
||||
|
||||
def get_shopify_identifier(self, sale):
|
||||
for record in self.shopify_identifiers:
|
||||
if record.sale == sale:
|
||||
return record.shopify_identifier
|
||||
|
||||
def set_shopify_identifier(self, sale, identifier=None):
|
||||
pool = Pool()
|
||||
Identifier = pool.get('stock.shipment.shopify_identifier')
|
||||
for record in self.shopify_identifiers:
|
||||
if record.sale == sale:
|
||||
if not identifier:
|
||||
Identifier.delete([record])
|
||||
return
|
||||
else:
|
||||
if record.shopify_identifier != identifier:
|
||||
record.shopify_identifier = identifier
|
||||
record.save()
|
||||
return record
|
||||
if identifier:
|
||||
record = Identifier(shipment=self, sale=sale)
|
||||
record.shopify_identifier = identifier
|
||||
record.save()
|
||||
return record
|
||||
|
||||
@classmethod
|
||||
def search_shopify_identifier(cls, sale, identifier):
|
||||
records = cls.search([
|
||||
('shopify_identifiers', 'where', [
|
||||
('sale', '=', sale.id),
|
||||
('shopify_identifier', '=', identifier),
|
||||
]),
|
||||
])
|
||||
if records:
|
||||
record, = records
|
||||
return record
|
||||
|
||||
@classmethod
|
||||
def copy(cls, records, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
else:
|
||||
default = default.copy()
|
||||
default.setdefault('shopify_identifiers')
|
||||
return super().copy(records, default=default)
|
||||
|
||||
@classmethod
|
||||
@ModelView.button
|
||||
@Workflow.transition('draft')
|
||||
def draft(cls, shipments):
|
||||
for shipment in shipments:
|
||||
if shipment.state == 'cancelled' and shipment.shopify_identifiers:
|
||||
raise AccessError(
|
||||
gettext(
|
||||
'web_shop_shopify.'
|
||||
'msg_shipment_cancelled_draft_shopify',
|
||||
shipment=shipment.rec_name))
|
||||
super().draft(shipments)
|
||||
|
||||
|
||||
class ShipmentShopifyIdentifier(IdentifierMixin, ModelSQL, ModelView):
|
||||
__name__ = 'stock.shipment.shopify_identifier'
|
||||
|
||||
shipment = fields.Reference("Shipment", [
|
||||
('stock.shipment.out', "Customer Shipment"),
|
||||
], required=True)
|
||||
sale = fields.Many2One('sale.sale', "Sale", required=True)
|
||||
|
||||
@classmethod
|
||||
def __setup__(cls):
|
||||
super().__setup__()
|
||||
cls.shopify_identifier_signed.states = {
|
||||
'required': True,
|
||||
}
|
||||
t = cls.__table__()
|
||||
cls._sql_constraints += [
|
||||
('shipment_sale_unique',
|
||||
Unique(t, t.shipment, t.sale, t.shopify_identifier_signed),
|
||||
'web_shop_shopify.msg_identifier_shipment_sale_unique'),
|
||||
]
|
||||
|
||||
|
||||
class ShipmentOut_PackageShipping(metaclass=PoolMeta):
|
||||
__name__ = 'stock.shipment.out'
|
||||
|
||||
def get_shopify(self, sale, fulfillment_order_fields=None):
|
||||
fulfillment = super().get_shopify(
|
||||
sale, fulfillment_order_fields=fulfillment_order_fields)
|
||||
if fulfillment and self.packages:
|
||||
numbers, urls = [], []
|
||||
fulfillment['trackingInfo'] = {
|
||||
'numbers': numbers,
|
||||
'urls': urls,
|
||||
}
|
||||
for package in self.packages:
|
||||
if package.shipping_reference:
|
||||
numbers.append(package.shipping_reference)
|
||||
if package.shipping_tracking_url:
|
||||
urls.append(package.shipping_tracking_url)
|
||||
return fulfillment
|
||||
|
||||
|
||||
class Move(metaclass=PoolMeta):
|
||||
__name__ = 'stock.move'
|
||||
|
||||
def get_shopify(self, fulfillment_orders, location_id):
|
||||
pool = Pool()
|
||||
SaleLine = pool.get('sale.line')
|
||||
Uom = pool.get('product.uom')
|
||||
if (not isinstance(self.origin, SaleLine)
|
||||
or not self.origin.shopify_identifier):
|
||||
return
|
||||
location_id = id2gid('Location', location_id)
|
||||
identifier = id2gid('LineItem', self.origin.shopify_identifier)
|
||||
quantity = round(Uom.compute_qty(
|
||||
self.unit, self.quantity, self.origin.unit))
|
||||
for fulfillment_order in fulfillment_orders['nodes']:
|
||||
if fulfillment_order['status'] in {'CANCELLED', 'CLOSED'}:
|
||||
continue
|
||||
if (fulfillment_order['assignedLocation']['location']['id']
|
||||
!= location_id):
|
||||
continue
|
||||
for line_item in fulfillment_order['lineItems']['nodes']:
|
||||
if line_item['lineItem']['id'] == identifier:
|
||||
qty = min(
|
||||
quantity, line_item['lineItem']['fulfillableQuantity'])
|
||||
if qty:
|
||||
yield fulfillment_order['id'], {
|
||||
'id': line_item['id'],
|
||||
'quantity': qty,
|
||||
}
|
||||
quantity -= qty
|
||||
if quantity <= 0:
|
||||
return
|
||||
else:
|
||||
raise ShopifyError(gettext(
|
||||
'web_shop_shopify.msg_fulfillment_order_line_not_found',
|
||||
quantity=quantity,
|
||||
move=self.rec_name,
|
||||
))
|
||||
|
||||
|
||||
class Move_Kit(metaclass=PoolMeta):
|
||||
__name__ = 'stock.move'
|
||||
|
||||
def get_shopify(self, fulfillment_orders, location_id):
|
||||
pool = Pool()
|
||||
SaleLineComponent = pool.get('sale.line.component')
|
||||
UoM = pool.get('product.uom')
|
||||
yield from super().get_shopify(fulfillment_orders, location_id)
|
||||
if not isinstance(self.origin, SaleLineComponent):
|
||||
return
|
||||
|
||||
sale_line = self.origin.line
|
||||
|
||||
# Track only the first component
|
||||
if min(c.id for c in sale_line.components) != self.origin.id:
|
||||
return
|
||||
|
||||
location_id = id2gid('Location', location_id)
|
||||
identifier = id2gid('LineItem', sale_line.shopify_identifier)
|
||||
|
||||
c_quantity = UoM.compute_qty(
|
||||
self.unit, self.quantity, self.origin.unit, round=False)
|
||||
if self.origin.quantity:
|
||||
ratio = c_quantity / self.origin.quantity
|
||||
else:
|
||||
ratio = 1
|
||||
quantity = round(sale_line.quantity * ratio)
|
||||
for fulfillment_order in fulfillment_orders['nodes']:
|
||||
if (fulfillment_order['assignedLocation']['location']['id']
|
||||
!= location_id):
|
||||
continue
|
||||
for line_item in fulfillment_order['lineItems']['nodes']:
|
||||
if line_item['lineItem']['id'] == identifier:
|
||||
qty = min(
|
||||
quantity, line_item['lineItem']['fulfillableQuantity'])
|
||||
if qty:
|
||||
yield fulfillment_order['id'], {
|
||||
'id': line_item['id'],
|
||||
'quantity': qty,
|
||||
}
|
||||
quantity -= qty
|
||||
if quantity <= 0:
|
||||
return
|
||||
else:
|
||||
raise ShopifyError(gettext(
|
||||
'web_shop_shopify.msg_fulfillment_order_line_not_found',
|
||||
quantity=quantity,
|
||||
move=self.rec_name,
|
||||
))
|
||||
55
modules/web_shop_shopify/stock.xml
Normal file
55
modules/web_shop_shopify/stock.xml
Normal file
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="stock_shipment_shopify_identifier_view_form">
|
||||
<field name="model">stock.shipment.shopify_identifier</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">stock_shipment_shopify_identifier_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="stock_shipment_shopify_identifier_view_list">
|
||||
<field name="model">stock.shipment.shopify_identifier</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">stock_shipment_shopify_identifier_list</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_stock_shipment_shopify_identifier_form">
|
||||
<field name="name">Shipment Identifiers</field>
|
||||
<field name="res_model">stock.shipment.shopify_identifier</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_stock_shipment_shopify_identifier_form_view1">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view" ref="stock_shipment_shopify_identifier_view_list"/>
|
||||
<field name="act_window" ref="act_stock_shipment_shopify_identifier_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_stock_shipment_shopify_identifier_form_view2">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view" ref="stock_shipment_shopify_identifier_view_form"/>
|
||||
<field name="act_window" ref="act_stock_shipment_shopify_identifier_form"/>
|
||||
</record>
|
||||
<menuitem
|
||||
parent="menu_shop_shopify_identifier_form"
|
||||
action="act_stock_shipment_shopify_identifier_form"
|
||||
sequence="50"
|
||||
id="menu_stock_shipment_shopify_identifier_form"/>
|
||||
|
||||
<record model="ir.model.access" id="access_stock_shipment_shopify_identifier">
|
||||
<field name="model">stock.shipment.shopify_identifier</field>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.model.access" id="access_stock_shipment_shopify_identifier_admin">
|
||||
<field name="model">stock.shipment.shopify_identifier</field>
|
||||
<field name="group" ref="res.group_admin"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_delete" eval="True"/>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
2
modules/web_shop_shopify/tests/__init__.py
Normal file
2
modules/web_shop_shopify/tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
modules/web_shop_shopify/tests/__pycache__/tools.cpython-311.pyc
Normal file
BIN
modules/web_shop_shopify/tests/__pycache__/tools.cpython-311.pyc
Normal file
Binary file not shown.
753
modules/web_shop_shopify/tests/scenario_web_shop_shopify.rst
Normal file
753
modules/web_shop_shopify/tests/scenario_web_shop_shopify.rst
Normal file
@@ -0,0 +1,753 @@
|
||||
=========================
|
||||
Web Shop Shopify Scenario
|
||||
=========================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> import os
|
||||
>>> import random
|
||||
>>> import string
|
||||
>>> import time
|
||||
>>> import urllib.request
|
||||
>>> from decimal import Decimal
|
||||
>>> from itertools import cycle
|
||||
>>> from unittest.mock import patch
|
||||
|
||||
>>> import shopify
|
||||
>>> from shopify.api_version import ApiVersion
|
||||
|
||||
>>> from proteus import Model
|
||||
>>> from trytond.modules.account.tests.tools import (
|
||||
... create_chart, create_fiscalyear, create_tax, get_accounts)
|
||||
>>> from trytond.modules.account_invoice.tests.tools import (
|
||||
... set_fiscalyear_invoice_sequences)
|
||||
>>> from trytond.modules.company.tests.tools import create_company, get_company
|
||||
>>> from trytond.modules.product_image.product import ImageURLMixin
|
||||
>>> from trytond.modules.web_shop_shopify.common import gid2id, id2gid
|
||||
>>> from trytond.modules.web_shop_shopify.product import Template
|
||||
>>> from trytond.modules.web_shop_shopify.tests import tools
|
||||
>>> from trytond.modules.web_shop_shopify.web import Shop
|
||||
>>> from trytond.tests.tools import activate_modules, assertEqual, assertTrue
|
||||
|
||||
>>> FETCH_SLEEP, MAX_SLEEP = 1, 10
|
||||
|
||||
Patch image URL::
|
||||
|
||||
>>> get_image_url = patch.object(
|
||||
... ImageURLMixin, 'get_image_url').start()
|
||||
>>> get_image_url.side_effect = cycle([
|
||||
... 'https://downloads.tryton.org/tests/shopify/chair.jpg',
|
||||
... 'https://downloads.tryton.org/tests/shopify/chair-black.jpg',
|
||||
... 'https://downloads.tryton.org/tests/shopify/chair-white.jpg',
|
||||
... ])
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules([
|
||||
... 'web_shop_shopify',
|
||||
... 'account_payment_clearing',
|
||||
... 'carrier',
|
||||
... 'customs',
|
||||
... 'product_measurements',
|
||||
... 'product_image',
|
||||
... 'sale_discount',
|
||||
... 'sale_shipment_cost',
|
||||
... ],
|
||||
... create_company, create_chart)
|
||||
|
||||
>>> Account = Model.get('account.account')
|
||||
>>> Carrier = Model.get('carrier')
|
||||
>>> CarrierSelection = Model.get('carrier.selection')
|
||||
>>> Category = Model.get('product.category')
|
||||
>>> Country = Model.get('country.country')
|
||||
>>> Cron = Model.get('ir.cron')
|
||||
>>> Inventory = Model.get('stock.inventory')
|
||||
>>> Journal = Model.get('account.journal')
|
||||
>>> Location = Model.get('stock.location')
|
||||
>>> Party = Model.get('party.party')
|
||||
>>> PaymentJournal = Model.get('account.payment.journal')
|
||||
>>> Product = Model.get('product.product')
|
||||
>>> ProductAttribute = Model.get('product.attribute')
|
||||
>>> ProductAttributeSet = Model.get('product.attribute.set')
|
||||
>>> ProductInventoryItem = Model.get('product.shopify_inventory_item')
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> Sale = Model.get('sale.sale')
|
||||
>>> ShopifyIdentifier = Model.get('web.shop.shopify_identifier')
|
||||
>>> Tariff = Model.get('customs.tariff.code')
|
||||
>>> Uom = Model.get('product.uom')
|
||||
>>> WebShop = Model.get('web.shop')
|
||||
|
||||
Set metafields to product::
|
||||
|
||||
>>> def get_shopify_metafields(self, shop):
|
||||
... return {
|
||||
... 'global.test': {
|
||||
... 'type': 'single_line_text_field',
|
||||
... 'value': self.name,
|
||||
... },
|
||||
... }
|
||||
|
||||
>>> Template.get_shopify_metafields = get_shopify_metafields
|
||||
|
||||
>>> def managed_metafields(self):
|
||||
... return {'global.test'}
|
||||
|
||||
>>> Shop.managed_metafields = managed_metafields
|
||||
|
||||
Create country::
|
||||
|
||||
>>> belgium = Country(name="Belgium", code='BE')
|
||||
>>> belgium.save()
|
||||
>>> china = Country(name="China", code='CN')
|
||||
>>> china.save()
|
||||
|
||||
Get company::
|
||||
|
||||
>>> company = get_company()
|
||||
|
||||
Get accounts::
|
||||
|
||||
>>> accounts = get_accounts()
|
||||
|
||||
Create tax::
|
||||
|
||||
>>> tax = create_tax(Decimal('.10'))
|
||||
|
||||
Create fiscal year::
|
||||
|
||||
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
|
||||
>>> fiscalyear.click('create_period')
|
||||
|
||||
Create payment journal::
|
||||
|
||||
>>> shopify_account = Account(parent=accounts['receivable'].parent)
|
||||
>>> shopify_account.name = "Shopify"
|
||||
>>> shopify_account.type = accounts['receivable'].type
|
||||
>>> shopify_account.reconcile = True
|
||||
>>> shopify_account.save()
|
||||
|
||||
>>> payment_journal = PaymentJournal()
|
||||
>>> payment_journal.name = "Shopify"
|
||||
>>> payment_journal.process_method = 'shopify'
|
||||
>>> payment_journal.clearing_journal, = Journal.find([('code', '=', 'REV')])
|
||||
>>> payment_journal.clearing_account = shopify_account
|
||||
>>> payment_journal.save()
|
||||
|
||||
Define a web shop::
|
||||
|
||||
>>> web_shop = WebShop(name="Web Shop")
|
||||
>>> web_shop.type = 'shopify'
|
||||
>>> web_shop.shopify_url = os.getenv('SHOPIFY_URL')
|
||||
>>> web_shop.shopify_password = os.getenv('SHOPIFY_PASSWORD')
|
||||
>>> web_shop.shopify_version = sorted(ApiVersion.versions, reverse=True)[1]
|
||||
>>> shop_warehouse = web_shop.shopify_warehouses.new()
|
||||
>>> shop_warehouse.warehouse, = Location.find([('type', '=', 'warehouse')])
|
||||
>>> shopify_payment_journal = web_shop.shopify_payment_journals.new()
|
||||
>>> shopify_payment_journal.journal = payment_journal
|
||||
>>> web_shop.save()
|
||||
|
||||
>>> shopify.ShopifyResource.activate_session(shopify.Session(
|
||||
... web_shop.shopify_url,
|
||||
... web_shop.shopify_version,
|
||||
... web_shop.shopify_password))
|
||||
|
||||
>>> location = tools.get_location()
|
||||
|
||||
>>> shop_warehouse, = web_shop.shopify_warehouses
|
||||
>>> shop_warehouse.shopify_id = str(gid2id(location['id']))
|
||||
>>> web_shop.save()
|
||||
|
||||
Create categories::
|
||||
|
||||
>>> category1 = Category(name="Category 1")
|
||||
>>> category1.save()
|
||||
>>> sub_category = Category(name="Sub Category", parent=category1)
|
||||
>>> sub_category.save()
|
||||
>>> category2 = Category(name="Category 2")
|
||||
>>> category2.save()
|
||||
|
||||
>>> account_category = Category(name="Account Category")
|
||||
>>> account_category.accounting = True
|
||||
>>> account_category.account_expense = accounts['expense']
|
||||
>>> account_category.account_revenue = accounts['revenue']
|
||||
>>> account_category.customer_taxes.append(tax)
|
||||
>>> account_category.save()
|
||||
|
||||
>>> account_category_shipping = Category(name="Account Category Shipping")
|
||||
>>> account_category_shipping.accounting = True
|
||||
>>> account_category_shipping.account_expense = accounts['expense']
|
||||
>>> account_category_shipping.account_revenue = accounts['revenue']
|
||||
>>> account_category_shipping.save()
|
||||
|
||||
Create attribute set::
|
||||
|
||||
>>> attribute_set = ProductAttributeSet(name="Attributes")
|
||||
>>> attribute = attribute_set.attributes.new()
|
||||
>>> attribute.name = 'color'
|
||||
>>> attribute.string = "Color"
|
||||
>>> attribute.type_ = 'selection'
|
||||
>>> attribute.selection = "blue:Blue\nred:Red"
|
||||
>>> attribute_set.save()
|
||||
>>> attribute = attribute_set.attributes.new()
|
||||
>>> attribute.name = 'check'
|
||||
>>> attribute.string = "Check"
|
||||
>>> attribute.type_ = 'boolean'
|
||||
>>> attribute_set.save()
|
||||
>>> attribute1, attribute2 = attribute_set.attributes
|
||||
>>> attribute_set.shopify_option1 = attribute1
|
||||
>>> attribute_set.shopify_option2 = attribute2
|
||||
>>> attribute_set.save()
|
||||
|
||||
Create tariff codes::
|
||||
|
||||
>>> tariff1 = Tariff(code='170390')
|
||||
>>> tariff1.save()
|
||||
>>> tariff2 = Tariff(code='17039099', country=belgium)
|
||||
>>> tariff2.save()
|
||||
|
||||
Create products::
|
||||
|
||||
>>> unit, = Uom.find([('name', '=', "Unit")])
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = "Product 1"
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.salable = True
|
||||
>>> template.web_shop_description = "<p>Product description</p>"
|
||||
>>> template.shopify_handle = 'product-%s' % random.randint(0, 1000)
|
||||
>>> template.list_price = round(Decimal('9.99') / (1 + tax.rate), 4)
|
||||
>>> template.account_category = account_category
|
||||
>>> template.categories.append(Category(sub_category.id))
|
||||
>>> template.country_of_origin = china
|
||||
>>> _ = template.tariff_codes.new(tariff_code=tariff1)
|
||||
>>> _ = template.tariff_codes.new(tariff_code=tariff2)
|
||||
>>> template.weight = 10
|
||||
>>> template.weight_uom, = Uom.find([('name', '=', "Carat")])
|
||||
>>> template.save()
|
||||
>>> product1, = template.products
|
||||
>>> product1.suffix_code = 'PROD1'
|
||||
>>> product1.save()
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = "Product 2"
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'service'
|
||||
>>> template.salable = True
|
||||
>>> template.list_price = round(Decimal('20') / (1 + tax.rate), 4)
|
||||
>>> template.account_category = account_category
|
||||
>>> template.categories.append(Category(category2.id))
|
||||
>>> template.save()
|
||||
>>> product2, = template.products
|
||||
>>> product2.suffix_code = 'PROD2'
|
||||
>>> product2.save()
|
||||
|
||||
>>> variant = ProductTemplate()
|
||||
>>> variant.name = "Variant"
|
||||
>>> variant.code = "VAR"
|
||||
>>> variant.default_uom = unit
|
||||
>>> variant.type = 'goods'
|
||||
>>> variant.salable = True
|
||||
>>> variant.list_price = round(Decimal('50') / (1 + tax.rate), 4)
|
||||
>>> variant.attribute_set = attribute_set
|
||||
>>> variant.account_category = account_category
|
||||
>>> variant.categories.append(Category(category1.id))
|
||||
>>> variant.categories.append(Category(category2.id))
|
||||
>>> image = variant.images.new(web_shop=True)
|
||||
>>> image.image = urllib.request.urlopen(
|
||||
... 'https://downloads.tryton.org/tests/shopify/chair.jpg').read()
|
||||
>>> variant1, = variant.products
|
||||
>>> variant1.suffix_code = "1"
|
||||
>>> variant1.attributes = {
|
||||
... 'color': 'blue',
|
||||
... 'check': True,
|
||||
... }
|
||||
>>> variant2 = variant.products.new()
|
||||
>>> variant2.suffix_code = "2"
|
||||
>>> variant2.attributes = {
|
||||
... 'color': 'red',
|
||||
... 'check': False,
|
||||
... }
|
||||
>>> variant.save()
|
||||
>>> variant1, variant2 = variant.products
|
||||
|
||||
>>> image = variant1.images.new(web_shop=True, template=variant)
|
||||
>>> image.image = urllib.request.urlopen(
|
||||
... 'https://downloads.tryton.org/tests/shopify/chair-black.jpg').read()
|
||||
>>> variant1.save()
|
||||
|
||||
>>> image = variant2.images.new(web_shop=True, template=variant)
|
||||
>>> image.image = urllib.request.urlopen(
|
||||
... 'https://downloads.tryton.org/tests/shopify/chair-white.jpg').read()
|
||||
>>> variant2.save()
|
||||
|
||||
Create carriers::
|
||||
|
||||
>>> carrier_template = ProductTemplate()
|
||||
>>> carrier_template.name = 'Carrier Product'
|
||||
>>> carrier_template.default_uom = unit
|
||||
>>> carrier_template.type = 'service'
|
||||
>>> carrier_template.salable = True
|
||||
>>> carrier_template.list_price = Decimal('3')
|
||||
>>> carrier_template.account_category = account_category_shipping
|
||||
>>> carrier_template.save()
|
||||
>>> carrier_product, = carrier_template.products
|
||||
>>> carrier_product.cost_price = Decimal('2')
|
||||
>>> carrier_product.save()
|
||||
|
||||
>>> carrier1 = Carrier()
|
||||
>>> party = Party(name="Carrier 1")
|
||||
>>> party.save()
|
||||
>>> carrier1.party = party
|
||||
>>> carrier1.carrier_product = carrier_product
|
||||
>>> carrier1.save()
|
||||
|
||||
>>> carrier2 = Carrier()
|
||||
>>> party = Party(name="Carrier 2")
|
||||
>>> party.save()
|
||||
>>> carrier2.party = party
|
||||
>>> carrier2.carrier_product = carrier_product
|
||||
>>> _ = carrier2.shopify_selections.new(code='SHIP')
|
||||
>>> carrier2.save()
|
||||
|
||||
>>> CarrierSelection(carrier=carrier1).save()
|
||||
>>> CarrierSelection(carrier=carrier2).save()
|
||||
|
||||
Fill warehouse::
|
||||
|
||||
>>> inventory = Inventory()
|
||||
>>> inventory.location, = Location.find([('code', '=', 'STO')])
|
||||
>>> line = inventory.lines.new()
|
||||
>>> line.product = product1
|
||||
>>> line.quantity = 10
|
||||
>>> line = inventory.lines.new()
|
||||
>>> line.product = variant1
|
||||
>>> line.quantity = 5
|
||||
>>> inventory.click('confirm')
|
||||
>>> inventory.state
|
||||
'done'
|
||||
|
||||
Set categories, products and attributes to web shop::
|
||||
|
||||
>>> web_shop.categories.extend([
|
||||
... Category(category1.id),
|
||||
... Category(sub_category.id),
|
||||
... Category(category2.id)])
|
||||
>>> web_shop.products.extend([
|
||||
... Product(product1.id),
|
||||
... Product(product2.id),
|
||||
... Product(variant1.id),
|
||||
... Product(variant2.id)])
|
||||
>>> web_shop.save()
|
||||
|
||||
Run update product::
|
||||
|
||||
>>> cron_update_product, = Cron.find([
|
||||
... ('method', '=', 'web.shop|shopify_update_product'),
|
||||
... ])
|
||||
>>> cron_update_product.click('run_once')
|
||||
|
||||
>>> category1.reload()
|
||||
>>> len(category1.shopify_identifiers)
|
||||
1
|
||||
>>> category2.reload()
|
||||
>>> len(category2.shopify_identifiers)
|
||||
1
|
||||
|
||||
>>> product1.reload()
|
||||
>>> len(product1.shopify_identifiers)
|
||||
1
|
||||
>>> len(product1.template.shopify_identifiers)
|
||||
1
|
||||
>>> product2.reload()
|
||||
>>> len(product2.shopify_identifiers)
|
||||
1
|
||||
>>> len(product2.template.shopify_identifiers)
|
||||
1
|
||||
>>> variant1.reload()
|
||||
>>> len(variant1.shopify_identifiers)
|
||||
1
|
||||
>>> variant2.reload()
|
||||
>>> len(variant2.shopify_identifiers)
|
||||
1
|
||||
>>> variant.reload()
|
||||
>>> len(variant.shopify_identifiers)
|
||||
1
|
||||
>>> all(i.shopify_identifiers for i in variant.images)
|
||||
True
|
||||
|
||||
Run update inventory::
|
||||
|
||||
>>> cron_update_inventory, = Cron.find([
|
||||
... ('method', '=', 'web.shop|shopify_update_inventory'),
|
||||
... ])
|
||||
>>> cron_update_inventory.click('run_once')
|
||||
|
||||
Check inventory item::
|
||||
|
||||
>>> inventory_items = ProductInventoryItem.find([])
|
||||
>>> inventory_item_ids = [i.shopify_identifier
|
||||
... for inv in inventory_items for i in inv.shopify_identifiers]
|
||||
>>> for _ in range(MAX_SLEEP):
|
||||
... inventory_levels = tools.get_inventory_levels(location)
|
||||
... if inventory_levels and len(inventory_levels) == 2:
|
||||
... break
|
||||
... time.sleep(FETCH_SLEEP)
|
||||
>>> sorted(l['quantities'][0]['quantity'] for l in inventory_levels
|
||||
... if l['quantities'][0]['quantity']
|
||||
... and gid2id(l['item']['id']) in inventory_item_ids)
|
||||
[5, 10]
|
||||
|
||||
Remove a category, a product and an image::
|
||||
|
||||
>>> _ = web_shop.categories.pop(web_shop.categories.index(category2))
|
||||
>>> _ = web_shop.products.pop(web_shop.products.index(product2))
|
||||
>>> web_shop.save()
|
||||
>>> variant2.images.remove(variant2.images[0])
|
||||
>>> variant2.save()
|
||||
|
||||
Rename a category::
|
||||
|
||||
>>> sub_category.name = "Sub-category"
|
||||
>>> sub_category.save()
|
||||
>>> identifier, = sub_category.shopify_identifiers
|
||||
>>> bool(identifier.to_update)
|
||||
True
|
||||
|
||||
Update attribute::
|
||||
|
||||
>>> attribute, = [a for a in attribute_set.attributes if a.name == 'color']
|
||||
>>> attribute.selection += "\ngreen:Green"
|
||||
>>> attribute.save()
|
||||
|
||||
Run update product::
|
||||
|
||||
>>> cron_update_product, = Cron.find([
|
||||
... ('method', '=', 'web.shop|shopify_update_product'),
|
||||
... ])
|
||||
>>> cron_update_product.click('run_once')
|
||||
|
||||
>>> category1.reload()
|
||||
>>> len(category1.shopify_identifiers)
|
||||
1
|
||||
>>> category2.reload()
|
||||
>>> len(category2.shopify_identifiers)
|
||||
0
|
||||
|
||||
>>> sub_category.reload()
|
||||
>>> identifier, = sub_category.shopify_identifiers
|
||||
>>> bool(identifier.to_update)
|
||||
False
|
||||
|
||||
>>> product1.reload()
|
||||
>>> len(product1.shopify_identifiers)
|
||||
1
|
||||
>>> len(product1.template.shopify_identifiers)
|
||||
1
|
||||
>>> product2.reload()
|
||||
>>> len(product2.shopify_identifiers)
|
||||
0
|
||||
>>> identifier, = product2.template.shopify_identifiers
|
||||
>>> tools.get_product(identifier.shopify_identifier)['status']
|
||||
'ARCHIVED'
|
||||
>>> variant1.reload()
|
||||
>>> len(variant1.shopify_identifiers)
|
||||
1
|
||||
>>> variant2.reload()
|
||||
>>> len(variant2.shopify_identifiers)
|
||||
1
|
||||
>>> variant.reload()
|
||||
>>> len(variant.shopify_identifiers)
|
||||
1
|
||||
>>> all(i.shopify_identifiers for i in variant1.images)
|
||||
True
|
||||
>>> any(i.shopify_identifiers for i in variant2.images)
|
||||
False
|
||||
|
||||
Create an order on Shopify::
|
||||
|
||||
>>> customer_phone = '+32-495-555-' + (
|
||||
... ''.join(random.choice(string.digits) for _ in range(3)))
|
||||
>>> customer_address_phone = '+32-495-555-' + (
|
||||
... ''.join(random.choice(string.digits) for _ in range(3)))
|
||||
>>> customer = tools.create_customer({
|
||||
... 'lastName': "Customer",
|
||||
... 'email': (''.join(
|
||||
... random.choice(string.ascii_letters) for _ in range(10))
|
||||
... + '@example.com'),
|
||||
... 'phone': customer_phone,
|
||||
... 'locale': 'en-CA',
|
||||
... })
|
||||
|
||||
>>> order = tools.create_order({
|
||||
... 'customer': {
|
||||
... 'toAssociate': {
|
||||
... 'id': customer['id'],
|
||||
... },
|
||||
... },
|
||||
... 'shippingAddress': {
|
||||
... 'lastName': "Customer",
|
||||
... 'address1': "Street",
|
||||
... 'city': "City",
|
||||
... 'countryCode': 'BE',
|
||||
... 'phone': customer_address_phone,
|
||||
... },
|
||||
... 'lineItems': [{
|
||||
... 'variantId': id2gid(
|
||||
... 'ProductVariant',
|
||||
... product1.shopify_identifiers[0].shopify_identifier),
|
||||
... 'quantity': 1,
|
||||
... }, {
|
||||
... 'variantId': id2gid(
|
||||
... 'ProductVariant',
|
||||
... product1.shopify_identifiers[0].shopify_identifier),
|
||||
... 'quantity': 1,
|
||||
... }, {
|
||||
... 'variantId': id2gid(
|
||||
... 'ProductVariant',
|
||||
... variant1.shopify_identifiers[0].shopify_identifier),
|
||||
... 'quantity': 5,
|
||||
... }],
|
||||
... 'shippingLines': [{
|
||||
... 'code': 'SHIP',
|
||||
... 'title': "Shipping",
|
||||
... 'priceSet': {
|
||||
... 'shopMoney': {
|
||||
... 'amount': 4,
|
||||
... 'currencyCode': company.currency.code,
|
||||
... },
|
||||
... },
|
||||
... }],
|
||||
... 'discountCode': {
|
||||
... 'itemFixedDiscountCode': {
|
||||
... 'amountSet': {
|
||||
... 'shopMoney': {
|
||||
... 'amount': 15,
|
||||
... 'currencyCode': company.currency.code,
|
||||
... },
|
||||
... },
|
||||
... 'code': "CODE",
|
||||
... },
|
||||
... },
|
||||
... 'financialStatus': 'AUTHORIZED',
|
||||
... 'transactions': [{
|
||||
... 'kind': 'AUTHORIZATION',
|
||||
... 'status': 'SUCCESS',
|
||||
... 'amountSet': {
|
||||
... 'shopMoney': {
|
||||
... 'amount': 258.98,
|
||||
... 'currencyCode': company.currency.code,
|
||||
... },
|
||||
... },
|
||||
... 'test': True,
|
||||
... }],
|
||||
... })
|
||||
>>> order['totalPriceSet']['presentmentMoney']['amount']
|
||||
'258.98'
|
||||
>>> order['displayFinancialStatus']
|
||||
'AUTHORIZED'
|
||||
>>> order['displayFulfillmentStatus']
|
||||
'UNFULFILLED'
|
||||
|
||||
Run fetch order::
|
||||
|
||||
>>> with config.set_context(shopify_orders=[gid2id(order['id'])]):
|
||||
... cron_fetch_order, = Cron.find([
|
||||
... ('method', '=', 'web.shop|shopify_fetch_order'),
|
||||
... ])
|
||||
... cron_fetch_order.click('run_once')
|
||||
|
||||
>>> sale, = Sale.find([])
|
||||
>>> sale.shopify_tax_adjustment
|
||||
Decimal('0.01')
|
||||
>>> len(sale.lines)
|
||||
4
|
||||
>>> sorted([l.unit_price for l in sale.lines])
|
||||
[Decimal('4.0000'), Decimal('8.5727'), Decimal('8.5727'), Decimal('42.9309')]
|
||||
>>> any(l.product == carrier_product for l in sale.lines)
|
||||
True
|
||||
>>> sale.total_amount
|
||||
Decimal('258.98')
|
||||
>>> len(sale.payments)
|
||||
1
|
||||
>>> payment, = sale.payments
|
||||
>>> payment.state
|
||||
'processing'
|
||||
>>> payment.amount
|
||||
Decimal('0')
|
||||
>>> assertEqual(sale.carrier, carrier2)
|
||||
>>> sale.state
|
||||
'quotation'
|
||||
>>> sale.party.name
|
||||
'Customer'
|
||||
>>> sale.party.lang.code
|
||||
'en'
|
||||
>>> assertTrue(sale.party.email)
|
||||
>>> assertEqual(sale.party.phone.replace(' ', ''), customer_phone.replace('-', ''))
|
||||
>>> address, = sale.party.addresses
|
||||
>>> address_contact_mechanism, = address.contact_mechanisms
|
||||
>>> assertEqual(
|
||||
... address_contact_mechanism.value.replace(' ', ''),
|
||||
... customer_address_phone.replace('-', ''))
|
||||
>>> len(sale.party.contact_mechanisms)
|
||||
3
|
||||
>>> assertTrue(sale.web_status_url)
|
||||
|
||||
Capture full amount::
|
||||
|
||||
>>> transaction = tools.capture_order(
|
||||
... order['id'], 258.98, order['transactions'][0]['id'])
|
||||
|
||||
>>> with config.set_context(shopify_orders=[gid2id(order['id'])]):
|
||||
... cron_update_order, = Cron.find([
|
||||
... ('method', '=', 'web.shop|shopify_update_order'),
|
||||
... ])
|
||||
... cron_update_order.click('run_once')
|
||||
|
||||
>>> sale.reload()
|
||||
>>> len(sale.payments)
|
||||
1
|
||||
>>> payment, = sale.payments
|
||||
>>> payment.state
|
||||
'succeeded'
|
||||
>>> sale.state
|
||||
'processing'
|
||||
>>> len(sale.invoices)
|
||||
0
|
||||
>>> len(sale.party.contact_mechanisms)
|
||||
3
|
||||
|
||||
Make a partial shipment::
|
||||
|
||||
>>> shipment, = sale.shipments
|
||||
>>> move, = [m for m in shipment.inventory_moves if m.product == variant1]
|
||||
>>> move.quantity = 3
|
||||
>>> shipment.click('pick')
|
||||
>>> shipment.click('pack')
|
||||
>>> shipment.click('do')
|
||||
>>> shipment.state
|
||||
'done'
|
||||
|
||||
>>> sale.reload()
|
||||
>>> len(sale.invoices)
|
||||
0
|
||||
|
||||
>>> order = tools.get_order(order['id'])
|
||||
>>> order['displayFulfillmentStatus']
|
||||
'PARTIALLY_FULFILLED'
|
||||
>>> len(order['fulfillments'])
|
||||
1
|
||||
>>> order['displayFinancialStatus']
|
||||
'PAID'
|
||||
|
||||
Ship and cancel remaining shipment::
|
||||
|
||||
>>> shipment, = [s for s in sale.shipments if s.state != 'done']
|
||||
>>> shipment.click('pick')
|
||||
>>> shipment.click('pack')
|
||||
>>> shipment.click('ship')
|
||||
>>> shipment.state
|
||||
'shipped'
|
||||
|
||||
>>> order = tools.get_order(order['id'])
|
||||
>>> order['displayFulfillmentStatus']
|
||||
'FULFILLED'
|
||||
>>> len(order['fulfillments'])
|
||||
2
|
||||
|
||||
>>> shipment.click('cancel')
|
||||
>>> shipment.state
|
||||
'cancelled'
|
||||
|
||||
>>> order = tools.get_order(order['id'])
|
||||
>>> order['displayFulfillmentStatus']
|
||||
'PARTIALLY_FULFILLED'
|
||||
>>> len(order['fulfillments'])
|
||||
2
|
||||
|
||||
>>> shipment_exception = sale.click('handle_shipment_exception')
|
||||
>>> shipment_exception.form.recreate_moves.extend(
|
||||
... shipment_exception.form.ignore_moves.find())
|
||||
>>> shipment_exception.execute('handle')
|
||||
|
||||
Cancel remaining shipment::
|
||||
|
||||
>>> shipment, = [s for s in sale.shipments if s.state not in {'done', 'cancelled'}]
|
||||
>>> shipment.click('cancel')
|
||||
>>> shipment.state
|
||||
'cancelled'
|
||||
|
||||
>>> sale.reload()
|
||||
>>> sale.shipment_state
|
||||
'exception'
|
||||
>>> len(sale.invoices)
|
||||
0
|
||||
|
||||
>>> order = tools.get_order(order['id'])
|
||||
>>> order['displayFulfillmentStatus']
|
||||
'PARTIALLY_FULFILLED'
|
||||
>>> len(order['fulfillments'])
|
||||
2
|
||||
>>> order['displayFinancialStatus']
|
||||
'PAID'
|
||||
|
||||
Ignore shipment exception::
|
||||
|
||||
>>> shipment_exception = sale.click('handle_shipment_exception')
|
||||
>>> shipment_exception.form.ignore_moves.extend(
|
||||
... shipment_exception.form.ignore_moves.find())
|
||||
>>> shipment_exception.execute('handle')
|
||||
|
||||
>>> order = tools.get_order(order['id'])
|
||||
>>> order['displayFulfillmentStatus']
|
||||
'FULFILLED'
|
||||
>>> len(order['fulfillments'])
|
||||
2
|
||||
>>> order['displayFinancialStatus']
|
||||
'PARTIALLY_REFUNDED'
|
||||
|
||||
>>> sale.reload()
|
||||
>>> invoice, = sale.invoices
|
||||
>>> invoice.total_amount
|
||||
Decimal('164.53')
|
||||
>>> payment, = sale.payments
|
||||
>>> payment.state
|
||||
'succeeded'
|
||||
|
||||
Correct taxes as partial invoice can get rounding gap::
|
||||
|
||||
>>> tax_line, = invoice.taxes
|
||||
>>> tax_line.amount += payment.amount - invoice.total_amount
|
||||
>>> invoice.save()
|
||||
>>> assertEqual(invoice.total_amount, payment.amount)
|
||||
|
||||
Post invoice::
|
||||
|
||||
>>> invoice.click('post')
|
||||
>>> invoice.state
|
||||
'paid'
|
||||
>>> sale.reload()
|
||||
>>> sale.state
|
||||
'done'
|
||||
>>> order = tools.get_order(order['id'])
|
||||
>>> bool(order['closed'])
|
||||
True
|
||||
|
||||
Clean up::
|
||||
|
||||
>>> tools.delete_order(order['id'])
|
||||
>>> for product in ShopifyIdentifier.find(
|
||||
... [('record', 'like', 'product.template,%')]):
|
||||
... tools.delete_product(id2gid('Product', product.shopify_identifier))
|
||||
>>> for category in ShopifyIdentifier.find(
|
||||
... [('record', 'like', 'product.category,%')]):
|
||||
... tools.delete_collection(id2gid('Collection', category.shopify_identifier))
|
||||
>>> for _ in range(MAX_SLEEP):
|
||||
... try:
|
||||
... tools.delete_customer(customer['id'])
|
||||
... except Exception:
|
||||
... time.sleep(FETCH_SLEEP)
|
||||
... else:
|
||||
... break
|
||||
|
||||
>>> shopify.ShopifyResource.clear_session()
|
||||
@@ -0,0 +1,296 @@
|
||||
=====================================
|
||||
Web Shop Shopify Product Kit Scenario
|
||||
=====================================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> import os
|
||||
>>> import random
|
||||
>>> import string
|
||||
>>> import time
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> import shopify
|
||||
>>> from shopify.api_version import ApiVersion
|
||||
|
||||
>>> from proteus import Model
|
||||
>>> from trytond.modules.account.tests.tools import (
|
||||
... create_chart, create_fiscalyear, get_accounts)
|
||||
>>> from trytond.modules.account_invoice.tests.tools import (
|
||||
... set_fiscalyear_invoice_sequences)
|
||||
>>> from trytond.modules.company.tests.tools import create_company, get_company
|
||||
>>> from trytond.modules.web_shop_shopify.common import gid2id, id2gid
|
||||
>>> from trytond.modules.web_shop_shopify.tests import tools
|
||||
>>> from trytond.tests.tools import activate_modules
|
||||
|
||||
>>> FETCH_SLEEP, MAX_SLEEP = 1, 10
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules([
|
||||
... 'web_shop_shopify',
|
||||
... 'product_kit',
|
||||
... ],
|
||||
... create_company, create_chart)
|
||||
|
||||
>>> Account = Model.get('account.account')
|
||||
>>> Category = Model.get('product.category')
|
||||
>>> Cron = Model.get('ir.cron')
|
||||
>>> Location = Model.get('stock.location')
|
||||
>>> PaymentJournal = Model.get('account.payment.journal')
|
||||
>>> Product = Model.get('product.product')
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> Sale = Model.get('sale.sale')
|
||||
>>> ShopifyIdentifier = Model.get('web.shop.shopify_identifier')
|
||||
>>> Uom = Model.get('product.uom')
|
||||
>>> WebShop = Model.get('web.shop')
|
||||
|
||||
Get company::
|
||||
|
||||
>>> company = get_company()
|
||||
|
||||
Get accounts::
|
||||
|
||||
>>> accounts = get_accounts()
|
||||
|
||||
Create fiscal year::
|
||||
|
||||
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
|
||||
>>> fiscalyear.click('create_period')
|
||||
|
||||
Create payment journal::
|
||||
|
||||
>>> shopify_account = Account(parent=accounts['receivable'].parent)
|
||||
>>> shopify_account.name = "Shopify"
|
||||
>>> shopify_account.type = accounts['receivable'].type
|
||||
>>> shopify_account.reconcile = True
|
||||
>>> shopify_account.save()
|
||||
|
||||
>>> payment_journal = PaymentJournal()
|
||||
>>> payment_journal.name = "Shopify"
|
||||
>>> payment_journal.process_method = 'shopify'
|
||||
>>> payment_journal.save()
|
||||
|
||||
Define a web shop::
|
||||
|
||||
>>> web_shop = WebShop(name="Web Shop")
|
||||
>>> web_shop.type = 'shopify'
|
||||
>>> web_shop.shopify_url = os.getenv('SHOPIFY_URL')
|
||||
>>> web_shop.shopify_password = os.getenv('SHOPIFY_PASSWORD')
|
||||
>>> web_shop.shopify_version = sorted(ApiVersion.versions, reverse=True)[1]
|
||||
>>> shop_warehouse = web_shop.shopify_warehouses.new()
|
||||
>>> shop_warehouse.warehouse, = Location.find([('type', '=', 'warehouse')])
|
||||
>>> shopify_payment_journal = web_shop.shopify_payment_journals.new()
|
||||
>>> shopify_payment_journal.journal = payment_journal
|
||||
>>> web_shop.save()
|
||||
|
||||
>>> shopify.ShopifyResource.activate_session(shopify.Session(
|
||||
... web_shop.shopify_url,
|
||||
... web_shop.shopify_version,
|
||||
... web_shop.shopify_password))
|
||||
|
||||
>>> location = tools.get_location()
|
||||
|
||||
>>> shop_warehouse, = web_shop.shopify_warehouses
|
||||
>>> shop_warehouse.shopify_id = str(gid2id(location['id']))
|
||||
>>> web_shop.save()
|
||||
|
||||
Create categories::
|
||||
|
||||
>>> category = Category(name="Category")
|
||||
>>> category.save()
|
||||
|
||||
>>> account_category = Category(name="Account Category")
|
||||
>>> account_category.accounting = True
|
||||
>>> account_category.account_expense = accounts['expense']
|
||||
>>> account_category.account_revenue = accounts['revenue']
|
||||
>>> account_category.save()
|
||||
|
||||
Create product kit::
|
||||
|
||||
>>> unit, = Uom.find([('name', '=', "Unit")])
|
||||
>>> meter, = Uom.find([('name', '=', "Meter")])
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = "Component 1"
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.save()
|
||||
>>> component1, = template.products
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = "Component 2"
|
||||
>>> template.default_uom = meter
|
||||
>>> template.type = 'goods'
|
||||
>>> template.save()
|
||||
>>> component2, = template.products
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = "Product Kit"
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'kit'
|
||||
>>> template.salable = True
|
||||
>>> template.list_price = Decimal('100.0000')
|
||||
>>> template.account_category = account_category
|
||||
>>> template.categories.append(Category(category.id))
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
>>> product.suffix_code = 'PROD'
|
||||
>>> product.save()
|
||||
|
||||
>>> _ = template.components.new(product=component1, quantity=2)
|
||||
>>> _ = template.components.new(product=component2, quantity=5)
|
||||
>>> template.save()
|
||||
|
||||
Set categories, products and attributes to web shop::
|
||||
|
||||
>>> web_shop.categories.append(Category(category.id))
|
||||
>>> web_shop.products.append(Product(product.id))
|
||||
>>> web_shop.save()
|
||||
|
||||
Run update product::
|
||||
|
||||
>>> cron_update_product, = Cron.find([
|
||||
... ('method', '=', 'web.shop|shopify_update_product'),
|
||||
... ])
|
||||
>>> cron_update_product.click('run_once')
|
||||
|
||||
Create an order on Shopify::
|
||||
|
||||
>>> customer = tools.create_customer({
|
||||
... 'lastName': "Customer",
|
||||
... 'email': (''.join(
|
||||
... random.choice(string.ascii_letters) for _ in range(10))
|
||||
... + '@example.com'),
|
||||
... 'addresses': [{
|
||||
... 'address1': "Street",
|
||||
... 'city': "City",
|
||||
... 'countryCode': 'BE',
|
||||
... }],
|
||||
... })
|
||||
|
||||
>>> order = tools.create_order({
|
||||
... 'customerId': customer['id'],
|
||||
... 'lineItems': [{
|
||||
... 'variantId': id2gid(
|
||||
... 'ProductVariant',
|
||||
... product.shopify_identifiers[0].shopify_identifier),
|
||||
... 'quantity': 3,
|
||||
... }],
|
||||
... 'financialStatus': 'AUTHORIZED',
|
||||
... 'transactions': [{
|
||||
... 'kind': 'AUTHORIZATION',
|
||||
... 'status': 'SUCCESS',
|
||||
... 'amountSet': {
|
||||
... 'shopMoney': {
|
||||
... 'amount': 300,
|
||||
... 'currencyCode': company.currency.code,
|
||||
... },
|
||||
... },
|
||||
... 'test': True,
|
||||
... }],
|
||||
... })
|
||||
>>> order['totalPriceSet']['presentmentMoney']['amount']
|
||||
'300.0'
|
||||
>>> order['displayFinancialStatus']
|
||||
'AUTHORIZED'
|
||||
|
||||
>>> transaction = tools.capture_order(
|
||||
... order['id'], 300, order['transactions'][0]['id'])
|
||||
|
||||
Run fetch order::
|
||||
|
||||
>>> with config.set_context(shopify_orders=[gid2id(order['id'])]):
|
||||
... cron_fetch_order, = Cron.find([
|
||||
... ('method', '=', 'web.shop|shopify_fetch_order'),
|
||||
... ])
|
||||
... for _ in range(MAX_SLEEP):
|
||||
... cron_fetch_order.click('run_once')
|
||||
... if Sale.find([]):
|
||||
... break
|
||||
... time.sleep(FETCH_SLEEP)
|
||||
|
||||
>>> sale, = Sale.find([])
|
||||
>>> sale.total_amount
|
||||
Decimal('300.00')
|
||||
>>> sale_line, = sale.lines
|
||||
>>> sale_line.quantity
|
||||
3.0
|
||||
|
||||
Make a partial shipment of components::
|
||||
|
||||
>>> shipment, = sale.shipments
|
||||
>>> for move in shipment.inventory_moves:
|
||||
... if move.product == component1:
|
||||
... move.quantity = 4
|
||||
... else:
|
||||
... move.quantity = 0
|
||||
>>> shipment.click('pick')
|
||||
>>> shipment.click('pack')
|
||||
>>> shipment.click('do')
|
||||
>>> shipment.state
|
||||
'done'
|
||||
|
||||
>>> order = tools.get_order(order['id'])
|
||||
>>> order['displayFulfillmentStatus']
|
||||
'PARTIALLY_FULFILLED'
|
||||
>>> fulfillment, = order['fulfillments']
|
||||
>>> fulfillment_line_item, = fulfillment['fulfillmentLineItems']['nodes']
|
||||
>>> fulfillment_line_item['quantity']
|
||||
2
|
||||
|
||||
Make a partial shipment for a single component::
|
||||
|
||||
>>> sale.reload()
|
||||
>>> _, shipment = sale.shipments
|
||||
>>> for move in shipment.inventory_moves:
|
||||
... if move.product == component1:
|
||||
... move.quantity = 0
|
||||
... else:
|
||||
... move.quantity = 10
|
||||
>>> shipment.click('pick')
|
||||
>>> shipment.click('pack')
|
||||
>>> shipment.click('do')
|
||||
>>> shipment.state
|
||||
'done'
|
||||
|
||||
>>> order = tools.get_order(order['id'])
|
||||
>>> order['displayFulfillmentStatus']
|
||||
'PARTIALLY_FULFILLED'
|
||||
>>> fulfillment, = order['fulfillments']
|
||||
>>> fulfillment_line_item, = fulfillment['fulfillmentLineItems']['nodes']
|
||||
>>> fulfillment_line_item['quantity']
|
||||
2
|
||||
|
||||
Ship remaining::
|
||||
|
||||
>>> sale.reload()
|
||||
>>> _, _, shipment = sale.shipments
|
||||
>>> shipment.click('pick')
|
||||
>>> shipment.click('pack')
|
||||
>>> shipment.click('do')
|
||||
>>> shipment.state
|
||||
'done'
|
||||
|
||||
>>> order = tools.get_order(order['id'])
|
||||
>>> order['displayFulfillmentStatus']
|
||||
'FULFILLED'
|
||||
|
||||
Clean up::
|
||||
|
||||
>>> tools.delete_order(order['id'])
|
||||
>>> for product in ShopifyIdentifier.find(
|
||||
... [('record', 'like', 'product.template,%')]):
|
||||
... tools.delete_product(id2gid('Product', product.shopify_identifier))
|
||||
>>> for category in ShopifyIdentifier.find(
|
||||
... [('record', 'like', 'product.category,%')]):
|
||||
... tools.delete_collection(id2gid('Collection', category.shopify_identifier))
|
||||
>>> for _ in range(MAX_SLEEP):
|
||||
... try:
|
||||
... tools.delete_customer(customer['id'])
|
||||
... except Exception:
|
||||
... time.sleep(FETCH_SLEEP)
|
||||
... else:
|
||||
... break
|
||||
|
||||
>>> shopify.ShopifyResource.clear_session()
|
||||
@@ -0,0 +1,242 @@
|
||||
========================================
|
||||
Web Shop Shopify Secondary Unit Scenario
|
||||
========================================
|
||||
|
||||
Imports::
|
||||
|
||||
>>> import os
|
||||
>>> import random
|
||||
>>> import string
|
||||
>>> import time
|
||||
>>> from decimal import Decimal
|
||||
|
||||
>>> import shopify
|
||||
>>> from shopify.api_version import ApiVersion
|
||||
|
||||
>>> from proteus import Model
|
||||
>>> from trytond.modules.account.tests.tools import (
|
||||
... create_chart, create_fiscalyear, get_accounts)
|
||||
>>> from trytond.modules.account_invoice.tests.tools import (
|
||||
... set_fiscalyear_invoice_sequences)
|
||||
>>> from trytond.modules.company.tests.tools import create_company, get_company
|
||||
>>> from trytond.modules.web_shop_shopify.common import gid2id, id2gid
|
||||
>>> from trytond.modules.web_shop_shopify.tests import tools
|
||||
>>> from trytond.tests.tools import activate_modules, assertEqual
|
||||
|
||||
>>> FETCH_SLEEP, MAX_SLEEP = 1, 10
|
||||
|
||||
Activate modules::
|
||||
|
||||
>>> config = activate_modules([
|
||||
... 'web_shop_shopify',
|
||||
... 'sale_secondary_unit',
|
||||
... ],
|
||||
... create_company, create_chart)
|
||||
|
||||
>>> Account = Model.get('account.account')
|
||||
>>> Category = Model.get('product.category')
|
||||
>>> Cron = Model.get('ir.cron')
|
||||
>>> Location = Model.get('stock.location')
|
||||
>>> PaymentJournal = Model.get('account.payment.journal')
|
||||
>>> Product = Model.get('product.product')
|
||||
>>> ProductTemplate = Model.get('product.template')
|
||||
>>> Sale = Model.get('sale.sale')
|
||||
>>> ShopifyIdentifier = Model.get('web.shop.shopify_identifier')
|
||||
>>> Uom = Model.get('product.uom')
|
||||
>>> WebShop = Model.get('web.shop')
|
||||
|
||||
Get company::
|
||||
|
||||
>>> company = get_company()
|
||||
|
||||
Get accounts::
|
||||
|
||||
>>> accounts = get_accounts()
|
||||
|
||||
Create fiscal year::
|
||||
|
||||
>>> fiscalyear = set_fiscalyear_invoice_sequences(create_fiscalyear())
|
||||
>>> fiscalyear.click('create_period')
|
||||
|
||||
Create payment journal::
|
||||
|
||||
>>> shopify_account = Account(parent=accounts['receivable'].parent)
|
||||
>>> shopify_account.name = "Shopify"
|
||||
>>> shopify_account.type = accounts['receivable'].type
|
||||
>>> shopify_account.reconcile = True
|
||||
>>> shopify_account.save()
|
||||
|
||||
>>> payment_journal = PaymentJournal()
|
||||
>>> payment_journal.name = "Shopify"
|
||||
>>> payment_journal.process_method = 'shopify'
|
||||
>>> payment_journal.save()
|
||||
|
||||
Define a web shop::
|
||||
|
||||
>>> web_shop = WebShop(name="Web Shop")
|
||||
>>> web_shop.type = 'shopify'
|
||||
>>> web_shop.shopify_url = os.getenv('SHOPIFY_URL')
|
||||
>>> web_shop.shopify_password = os.getenv('SHOPIFY_PASSWORD')
|
||||
>>> web_shop.shopify_version = sorted(ApiVersion.versions, reverse=True)[1]
|
||||
>>> shop_warehouse = web_shop.shopify_warehouses.new()
|
||||
>>> shop_warehouse.warehouse, = Location.find([('type', '=', 'warehouse')])
|
||||
>>> shopify_payment_journal = web_shop.shopify_payment_journals.new()
|
||||
>>> shopify_payment_journal.journal = payment_journal
|
||||
>>> web_shop.save()
|
||||
|
||||
>>> shopify.ShopifyResource.activate_session(shopify.Session(
|
||||
... web_shop.shopify_url,
|
||||
... web_shop.shopify_version,
|
||||
... web_shop.shopify_password))
|
||||
|
||||
>>> location = tools.get_location()
|
||||
|
||||
>>> shop_warehouse, = web_shop.shopify_warehouses
|
||||
>>> shop_warehouse.shopify_id = str(gid2id(location['id']))
|
||||
>>> web_shop.save()
|
||||
|
||||
Create categories::
|
||||
|
||||
>>> category = Category(name="Category")
|
||||
>>> category.save()
|
||||
|
||||
>>> account_category = Category(name="Account Category")
|
||||
>>> account_category.accounting = True
|
||||
>>> account_category.account_expense = accounts['expense']
|
||||
>>> account_category.account_revenue = accounts['revenue']
|
||||
>>> account_category.save()
|
||||
|
||||
Create product::
|
||||
|
||||
>>> unit, = Uom.find([('name', '=', "Unit")])
|
||||
>>> unit.digits = 2
|
||||
>>> unit.rounding = 0.01
|
||||
>>> unit.save()
|
||||
>>> cm, = Uom.find([('name', '=', "Centimeter")])
|
||||
>>> cm, = cm.duplicate(default={'digits': 0, 'rounding': 1})
|
||||
|
||||
>>> template = ProductTemplate()
|
||||
>>> template.name = "Product 1"
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.salable = True
|
||||
>>> template.sale_secondary_uom = cm
|
||||
>>> template.sale_secondary_uom_factor = 25
|
||||
>>> template.list_price = Decimal('100.0000')
|
||||
>>> template.account_category = account_category
|
||||
>>> template.categories.append(Category(category.id))
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
>>> product.suffix_code = 'PROD'
|
||||
>>> product.save()
|
||||
|
||||
Set categories, products and attributes to web shop::
|
||||
|
||||
>>> web_shop.categories.append(Category(category.id))
|
||||
>>> web_shop.products.append(Product(product.id))
|
||||
>>> web_shop.save()
|
||||
|
||||
Run update product::
|
||||
|
||||
>>> cron_update_product, = Cron.find([
|
||||
... ('method', '=', 'web.shop|shopify_update_product'),
|
||||
... ])
|
||||
>>> cron_update_product.click('run_once')
|
||||
|
||||
Create an order on Shopify::
|
||||
|
||||
>>> customer = tools.create_customer({
|
||||
... 'lastName': "Customer",
|
||||
... 'email': (''.join(
|
||||
... random.choice(string.ascii_letters) for _ in range(10))
|
||||
... + '@example.com'),
|
||||
... 'addresses': [{
|
||||
... 'address1': "Street",
|
||||
... 'city': "City",
|
||||
... 'countryCode': 'BE',
|
||||
... }],
|
||||
... })
|
||||
|
||||
>>> order = tools.create_order({
|
||||
... 'customerId': customer['id'],
|
||||
... 'lineItems': [{
|
||||
... 'variantId': id2gid(
|
||||
... 'ProductVariant',
|
||||
... product.shopify_identifiers[0].shopify_identifier),
|
||||
... 'quantity': 50,
|
||||
... }],
|
||||
... 'shippingLines': [{
|
||||
... 'code': 'SHIP',
|
||||
... 'title': "Shipping",
|
||||
... 'priceSet': {
|
||||
... 'shopMoney': {
|
||||
... 'amount': 2,
|
||||
... 'currencyCode': company.currency.code,
|
||||
... },
|
||||
... },
|
||||
... }],
|
||||
... 'financialStatus': 'AUTHORIZED',
|
||||
... 'transactions': [{
|
||||
... 'kind': 'AUTHORIZATION',
|
||||
... 'status': 'SUCCESS',
|
||||
... 'amountSet': {
|
||||
... 'shopMoney': {
|
||||
... 'amount': 202,
|
||||
... 'currencyCode': company.currency.code,
|
||||
... },
|
||||
... },
|
||||
... 'test': True,
|
||||
... }],
|
||||
... })
|
||||
>>> order['totalPriceSet']['presentmentMoney']['amount']
|
||||
'202.0'
|
||||
>>> order['displayFinancialStatus']
|
||||
'AUTHORIZED'
|
||||
|
||||
Run fetch order::
|
||||
|
||||
>>> with config.set_context(shopify_orders=[gid2id(order['id'])]):
|
||||
... cron_fetch_order, = Cron.find([
|
||||
... ('method', '=', 'web.shop|shopify_fetch_order'),
|
||||
... ])
|
||||
... for _ in range(MAX_SLEEP):
|
||||
... cron_fetch_order.click('run_once')
|
||||
... if Sale.find([]):
|
||||
... break
|
||||
... time.sleep(FETCH_SLEEP)
|
||||
|
||||
>>> sale, = Sale.find([])
|
||||
>>> len(sale.lines)
|
||||
2
|
||||
>>> sale.total_amount
|
||||
Decimal('202.00')
|
||||
>>> line, = [l for l in sale.lines if l.product]
|
||||
>>> line.quantity
|
||||
2.0
|
||||
>>> assertEqual(line.unit, unit)
|
||||
>>> line.unit_price
|
||||
Decimal('100.0000')
|
||||
>>> line.secondary_quantity
|
||||
50.0
|
||||
>>> assertEqual(line.secondary_unit, cm)
|
||||
>>> line.secondary_unit_price
|
||||
Decimal('4.0000')
|
||||
|
||||
Clean up::
|
||||
|
||||
>>> tools.delete_order(order['id'])
|
||||
>>> for product in ShopifyIdentifier.find(
|
||||
... [('record', 'like', 'product.template,%')]):
|
||||
... tools.delete_product(id2gid('Product', product.shopify_identifier))
|
||||
>>> for category in ShopifyIdentifier.find(
|
||||
... [('record', 'like', 'product.category,%')]):
|
||||
... tools.delete_collection(id2gid('Collection', category.shopify_identifier))
|
||||
>>> for _ in range(MAX_SLEEP):
|
||||
... try:
|
||||
... tools.delete_customer(customer['id'])
|
||||
... except Exception:
|
||||
... time.sleep(FETCH_SLEEP)
|
||||
... else:
|
||||
... break
|
||||
|
||||
>>> shopify.ShopifyResource.clear_session()
|
||||
60
modules/web_shop_shopify/tests/test_graphql.py
Normal file
60
modules/web_shop_shopify/tests/test_graphql.py
Normal file
@@ -0,0 +1,60 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
import unittest
|
||||
|
||||
from trytond.modules.web_shop_shopify.graphql import deep_merge, selection
|
||||
|
||||
|
||||
class GraphQLTestCase(unittest.TestCase):
|
||||
"Test GraphQL library"
|
||||
|
||||
def test_deep_merge(self):
|
||||
"Test deep_merge"
|
||||
a = {
|
||||
'id': None,
|
||||
'firstName': None,
|
||||
'birthday': {
|
||||
'month': None,
|
||||
},
|
||||
}
|
||||
b = {
|
||||
'id': None,
|
||||
'lastName': None,
|
||||
'birthday': {
|
||||
'day': None,
|
||||
},
|
||||
}
|
||||
self.assertEqual(deep_merge(a, b), {
|
||||
'id': None,
|
||||
'firstName': None,
|
||||
'lastName': None,
|
||||
'birthday': {
|
||||
'month': None,
|
||||
'day': None,
|
||||
},
|
||||
})
|
||||
|
||||
def test_selection(self):
|
||||
"Test selection"
|
||||
for fields, result in [
|
||||
({'id': None}, '{\nid\n}'),
|
||||
({
|
||||
'id': None,
|
||||
'firstName': None,
|
||||
'lastName': None},
|
||||
'{\nid\nfirstName\nlastName\n}'),
|
||||
({
|
||||
'id': None,
|
||||
'firstName': None,
|
||||
'lastName': None,
|
||||
'birthday': {
|
||||
'month': None,
|
||||
'day': None,
|
||||
},
|
||||
},
|
||||
'{\nid\nfirstName\nlastName\n'
|
||||
'birthday {\nmonth\nday\n}\n}'),
|
||||
]:
|
||||
with self.subTest(fields=fields):
|
||||
self.assertEqual(selection(fields), result)
|
||||
27
modules/web_shop_shopify/tests/test_module.py
Normal file
27
modules/web_shop_shopify/tests/test_module.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
from trytond.modules.party.tests import PartyCheckReplaceMixin
|
||||
from trytond.modules.web_shop_shopify.common import gid2id, id2gid
|
||||
from trytond.tests.test_tryton import ModuleTestCase
|
||||
|
||||
|
||||
class WebShopShopifyTestCase(PartyCheckReplaceMixin, ModuleTestCase):
|
||||
'Test Web Shop Shopify module'
|
||||
module = 'web_shop_shopify'
|
||||
extras = [
|
||||
'carrier', 'customs', 'product_image', 'product_image_attribute',
|
||||
'product_kit', 'product_measurements', 'sale_discount',
|
||||
'sale_invoice_grouping', 'sale_secondary_unit', 'sale_shipment_cost',
|
||||
'stock_package_shipping']
|
||||
|
||||
def test_id2gid(self):
|
||||
"Test ID to GID"
|
||||
self.assertEqual(id2gid('Product', '123'), 'gid://shopify/Product/123')
|
||||
|
||||
def test_gid2id(self):
|
||||
"Test GID to ID"
|
||||
self.assertEqual(gid2id('gid://shopify/Product/123'), 123)
|
||||
|
||||
|
||||
del ModuleTestCase
|
||||
18
modules/web_shop_shopify/tests/test_scenario.py
Normal file
18
modules/web_shop_shopify/tests/test_scenario.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
import os
|
||||
|
||||
from trytond.tests.test_tryton import TEST_NETWORK, load_doc_tests
|
||||
|
||||
|
||||
def load_tests(*args, **kwargs):
|
||||
if (not TEST_NETWORK
|
||||
or not (os.getenv('SHOPIFY_PASSWORD')
|
||||
and os.getenv('SHOPIFY_URL'))):
|
||||
kwargs.setdefault('skips', set()).update({
|
||||
'scenario_web_shop_shopify.rst',
|
||||
'scenario_web_shop_shopify_secondary_unit.rst',
|
||||
'scenario_web_shop_shopify_product_kit.rst',
|
||||
})
|
||||
return load_doc_tests(__name__, __file__, *args, **kwargs)
|
||||
216
modules/web_shop_shopify/tests/tools.py
Normal file
216
modules/web_shop_shopify/tests/tools.py
Normal file
@@ -0,0 +1,216 @@
|
||||
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
|
||||
import shopify
|
||||
|
||||
from trytond.modules.web_shop_shopify.common import id2gid
|
||||
from trytond.modules.web_shop_shopify.shopify_retry import GraphQLException
|
||||
|
||||
|
||||
def get_location():
|
||||
return shopify.GraphQL().execute('''{
|
||||
locations(first:1) {
|
||||
nodes {
|
||||
id
|
||||
}
|
||||
}
|
||||
}''')['data']['locations']['nodes'][0]
|
||||
|
||||
|
||||
def get_inventory_levels(location):
|
||||
return shopify.GraphQL().execute('''query InventoryLevels($id: ID!) {
|
||||
location(id: $id) {
|
||||
inventoryLevels(first: 250) {
|
||||
nodes {
|
||||
item {
|
||||
id
|
||||
}
|
||||
quantities(names: ["available"]) {
|
||||
name
|
||||
quantity
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}''', {
|
||||
'id': location['id'],
|
||||
})['data']['location']['inventoryLevels']['nodes']
|
||||
|
||||
|
||||
def get_product(id):
|
||||
return shopify.GraphQL().execute('''query Product($id: ID!) {
|
||||
product(id: $id) {
|
||||
status
|
||||
}
|
||||
}''', {
|
||||
'id': id2gid('Product', id),
|
||||
})['data']['product']
|
||||
|
||||
|
||||
def delete_product(id):
|
||||
result = shopify.GraphQL().execute('''mutation productDelete($id: ID!) {
|
||||
productDelete(input: {id: $id}) {
|
||||
userErrors {
|
||||
field
|
||||
message
|
||||
}
|
||||
}
|
||||
}''', {
|
||||
'id': id,
|
||||
})['data']['productDelete']
|
||||
if errors := result.get('userErrors'):
|
||||
raise GraphQLException({'errors': errors})
|
||||
|
||||
|
||||
def delete_collection(id):
|
||||
result = shopify.GraphQL().execute('''mutation collectionDelete($id: ID!) {
|
||||
collectionDelete(input: {id: $id}) {
|
||||
userErrors {
|
||||
field
|
||||
message
|
||||
}
|
||||
}
|
||||
}''', {
|
||||
'id': id,
|
||||
})['data']['collectionDelete']
|
||||
if errors := result.get('userErrors'):
|
||||
raise GraphQLException({'errors': errors})
|
||||
|
||||
|
||||
def create_customer(customer):
|
||||
result = shopify.GraphQL().execute('''mutation customerCreate(
|
||||
$input: CustomerInput!) {
|
||||
customerCreate(input: $input) {
|
||||
customer {
|
||||
id
|
||||
}
|
||||
userErrors {
|
||||
field
|
||||
message
|
||||
}
|
||||
}
|
||||
}''', {
|
||||
'input': customer,
|
||||
})['data']['customerCreate']
|
||||
if errors := result.get('userErrors'):
|
||||
raise GraphQLException({'errors': errors})
|
||||
return result['customer']
|
||||
|
||||
|
||||
def delete_customer(id):
|
||||
result = shopify.GraphQL().execute('''mutation customerDelete($id: ID!) {
|
||||
customerDelete(input: {id: $id}) {
|
||||
userErrors {
|
||||
field
|
||||
message
|
||||
}
|
||||
}
|
||||
}''', {
|
||||
'id': id,
|
||||
})['data']['customerDelete']
|
||||
if errors := result.get('userErrors'):
|
||||
raise GraphQLException({'errors': errors})
|
||||
|
||||
|
||||
def create_order(order):
|
||||
result = shopify.GraphQL().execute('''mutation orderCreate(
|
||||
$order: OrderCreateOrderInput!) {
|
||||
orderCreate(order: $order) {
|
||||
order {
|
||||
id
|
||||
totalPriceSet {
|
||||
presentmentMoney {
|
||||
amount
|
||||
currencyCode
|
||||
}
|
||||
}
|
||||
displayFinancialStatus
|
||||
displayFulfillmentStatus
|
||||
transactions(first: 250) {
|
||||
id
|
||||
}
|
||||
fulfillments {
|
||||
id
|
||||
}
|
||||
closed
|
||||
}
|
||||
userErrors {
|
||||
field
|
||||
message
|
||||
}
|
||||
}
|
||||
}''', {
|
||||
'order': order,
|
||||
})['data']['orderCreate']
|
||||
if errors := result.get('userErrors'):
|
||||
raise GraphQLException({'errors': errors})
|
||||
return result['order']
|
||||
|
||||
|
||||
def get_order(id):
|
||||
return shopify.GraphQL().execute('''query Order($id: ID!) {
|
||||
order(id: $id) {
|
||||
id
|
||||
totalPriceSet {
|
||||
presentmentMoney {
|
||||
amount
|
||||
currencyCode
|
||||
}
|
||||
}
|
||||
displayFinancialStatus
|
||||
displayFulfillmentStatus
|
||||
transactions(first: 250) {
|
||||
id
|
||||
}
|
||||
fulfillments {
|
||||
id
|
||||
fulfillmentLineItems(first: 10) {
|
||||
nodes {
|
||||
quantity
|
||||
}
|
||||
}
|
||||
}
|
||||
closed
|
||||
}
|
||||
}''', {
|
||||
'id': id,
|
||||
})['data']['order']
|
||||
|
||||
|
||||
def capture_order(id, amount, parent_transaction_id):
|
||||
result = shopify.GraphQL().execute('''mutation orderCapture(
|
||||
$input: OrderCaptureInput!) {
|
||||
orderCapture(input: $input) {
|
||||
transaction {
|
||||
id
|
||||
}
|
||||
userErrors {
|
||||
field
|
||||
message
|
||||
}
|
||||
}
|
||||
}''', {
|
||||
'input': {
|
||||
'amount': amount,
|
||||
'id': id,
|
||||
'parentTransactionId': parent_transaction_id,
|
||||
},
|
||||
})['data']['orderCapture']
|
||||
if errors := result.get('userErrors'):
|
||||
raise GraphQLException({'errors': errors})
|
||||
return result['transaction']
|
||||
|
||||
|
||||
def delete_order(id):
|
||||
result = shopify.GraphQL().execute('''mutation orderDelete($orderId: ID!) {
|
||||
orderDelete(orderId: $orderId) {
|
||||
userErrors {
|
||||
field
|
||||
message
|
||||
}
|
||||
}
|
||||
}''', {
|
||||
'orderId': id,
|
||||
})['data']['orderDelete']
|
||||
if errors := result.get('userErrors'):
|
||||
raise GraphQLException({'errors': errors})
|
||||
109
modules/web_shop_shopify/tryton.cfg
Normal file
109
modules/web_shop_shopify/tryton.cfg
Normal file
@@ -0,0 +1,109 @@
|
||||
[tryton]
|
||||
version=7.8.3
|
||||
depends:
|
||||
account_payment
|
||||
currency
|
||||
ir
|
||||
party
|
||||
product
|
||||
product_attribute
|
||||
sale
|
||||
sale_amendment
|
||||
sale_payment
|
||||
stock
|
||||
web_shop
|
||||
extras_depend:
|
||||
carrier
|
||||
customs
|
||||
product_image
|
||||
product_image_attribute
|
||||
product_kit
|
||||
product_measurements
|
||||
sale_discount
|
||||
sale_invoice_grouping
|
||||
sale_secondary_unit
|
||||
sale_shipment_cost
|
||||
stock_package_shipping
|
||||
xml:
|
||||
ir.xml
|
||||
product.xml
|
||||
party.xml
|
||||
web.xml
|
||||
sale.xml
|
||||
stock.xml
|
||||
carrier.xml
|
||||
message.xml
|
||||
|
||||
[register]
|
||||
model:
|
||||
ir.Cron
|
||||
web.Shop
|
||||
web.ShopShopifyIdentifier
|
||||
web.Shop_Warehouse
|
||||
web.Shop_Attribute
|
||||
web.ShopShopifyPaymentJournal
|
||||
product.Category
|
||||
product.TemplateCategory
|
||||
product.Template
|
||||
product.Product
|
||||
product.ProductURL
|
||||
product.ShopifyInventoryItem
|
||||
product.ProductIdentifier
|
||||
product.AttributeSet
|
||||
product.Attribute
|
||||
party.Party
|
||||
party.Address
|
||||
sale.Sale
|
||||
sale.Line
|
||||
account.Payment
|
||||
account.PaymentJournal
|
||||
stock.ShipmentOut
|
||||
stock.ShipmentShopifyIdentifier
|
||||
stock.Move
|
||||
wizard:
|
||||
party.Replace
|
||||
|
||||
[register carrier]
|
||||
model:
|
||||
carrier.Carrier
|
||||
carrier.SelectionShopify
|
||||
|
||||
[register customs]
|
||||
model:
|
||||
product.ShopifyInventoryItem_Customs
|
||||
product.Product_TariffCode
|
||||
|
||||
[register product_image]
|
||||
model:
|
||||
web.Shop_Image
|
||||
product.Template_Image
|
||||
product.Product_Image
|
||||
product.Image
|
||||
|
||||
[register product_image_attribute]
|
||||
model:
|
||||
product.Image_Attribute
|
||||
|
||||
[register product_kit]
|
||||
model:
|
||||
stock.Move_Kit
|
||||
sale.Line_Kit
|
||||
|
||||
[register sale_discount]
|
||||
model:
|
||||
sale.Line_Discount
|
||||
|
||||
[register sale_secondary_unit]
|
||||
model:
|
||||
product.Template_SaleSecondaryUnit
|
||||
product.Product_SaleSecondaryUnit
|
||||
sale.Line_SaleSecondaryUnit
|
||||
|
||||
[register sale_shipment_cost]
|
||||
model:
|
||||
sale.Sale_ShipmentCost
|
||||
sale.Line_ShipmentCost
|
||||
|
||||
[register stock_package_shipping]
|
||||
model:
|
||||
stock.ShipmentOut_PackageShipping
|
||||
8
modules/web_shop_shopify/view/carrier_form.xml
Normal file
8
modules/web_shop_shopify/view/carrier_form.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="/form" position="inside">
|
||||
<field name="shopify_selections" colspan="4"/>
|
||||
</xpath>
|
||||
</data>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<form cursor="shop" col="2">
|
||||
<label name="carrier"/>
|
||||
<field name="carrier"/>
|
||||
|
||||
<separator string="Criteria" id="criteria" colspan="2"/>
|
||||
<label name="shop"/>
|
||||
<field name="shop"/>
|
||||
|
||||
<label name="code"/>
|
||||
<field name="code"/>
|
||||
|
||||
<label name="title"/>
|
||||
<field name="title"/>
|
||||
</form>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tree>
|
||||
<field name="carrier" expand="2"/>
|
||||
<field name="shop" expand="1"/>
|
||||
<field name="code" expand="1"/>
|
||||
<field name="title" expand="1"/>
|
||||
</tree>
|
||||
8
modules/web_shop_shopify/view/party_form.xml
Normal file
8
modules/web_shop_shopify/view/party_form.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//field[@name='identifiers']" position="after">
|
||||
<field name="shopify_identifiers" colspan="4"/>
|
||||
</xpath>
|
||||
</data>
|
||||
12
modules/web_shop_shopify/view/product_attribute_set_form.xml
Normal file
12
modules/web_shop_shopify/view/product_attribute_set_form.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//field[@name='attributes']" position="after">
|
||||
<group id="shopify_options" string="Shopify Options" colspan="4" col="-1">
|
||||
<field name="shopify_option1"/>
|
||||
<field name="shopify_option2"/>
|
||||
<field name="shopify_option3"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</data>
|
||||
17
modules/web_shop_shopify/view/product_template_form.xml
Normal file
17
modules/web_shop_shopify/view/product_template_form.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//page[@id='web_shop']" position="inside">
|
||||
<newline/>
|
||||
<label name="shopify_uom"/>
|
||||
<field name="shopify_uom"/>
|
||||
<newline/>
|
||||
|
||||
<label name="shopify_handle"/>
|
||||
<field name="shopify_handle"/>
|
||||
<newline/>
|
||||
|
||||
<field name="shopify_identifiers" colspan="4"/>
|
||||
</xpath>
|
||||
</data>
|
||||
10
modules/web_shop_shopify/view/sale_form.xml
Normal file
10
modules/web_shop_shopify/view/sale_form.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//field[@name='web_id']" position="after">
|
||||
<newline/>
|
||||
<label name="shopify_url"/>
|
||||
<field name="shopify_url" widget="url" colspan="3"/>
|
||||
</xpath>
|
||||
</data>
|
||||
29
modules/web_shop_shopify/view/shop_form.xml
Normal file
29
modules/web_shop_shopify/view/shop_form.xml
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<data>
|
||||
<xpath expr="//page[@name='warehouses']" position="after">
|
||||
<page name="shopify_warehouses">
|
||||
<field name="shopify_warehouses" colspan="4" view_ids="web_shop_shopify.shop_stock_location_view_list,web_shop_shopify.shop_stock_location_view_form"/>
|
||||
</page>
|
||||
</xpath>
|
||||
<xpath expr="//page[@id='products']" position="after">
|
||||
<page string="Shopify" id="shopify" col="6">
|
||||
<label name="shopify_url"/>
|
||||
<field name="shopify_url"/>
|
||||
<label name="shopify_password"/>
|
||||
<field name="shopify_password" widget="password"/>
|
||||
<label name="shopify_version"/>
|
||||
<field name="shopify_version"/>
|
||||
|
||||
<label name="shopify_webhook_shared_secret"/>
|
||||
<field name="shopify_webhook_shared_secret"/>
|
||||
<label name="shopify_webhook_endpoint_order"/>
|
||||
<field name="shopify_webhook_endpoint_order"/>
|
||||
<label name="shopify_fulfillment_notify_customer"/>
|
||||
<field name="shopify_fulfillment_notify_customer"/>
|
||||
|
||||
<field name="shopify_payment_journals" colspan="6"/>
|
||||
</page>
|
||||
</xpath>
|
||||
</data>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<form>
|
||||
<label name="web_shop"/>
|
||||
<field name="web_shop" colspan="3"/>
|
||||
|
||||
<label name="record"/>
|
||||
<field name="record"/>
|
||||
<label name="shopify_identifier"/>
|
||||
<field name="shopify_identifier" width="20"/>
|
||||
|
||||
<label name="shopify_url"/>
|
||||
<field name="shopify_url" widget="url"/>
|
||||
<label name="to_update"/>
|
||||
<field name="to_update"/>
|
||||
</form>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tree>
|
||||
<field name="web_shop" expand="1"/>
|
||||
<field name="record" expand="1"/>
|
||||
<field name="shopify_identifier" expand="2" optional="0"/>
|
||||
<field name="shopify_url" widget="url"/>
|
||||
<field name="to_update" optional="1"/>
|
||||
<button name="set_to_update" tree_invisible="1"/>
|
||||
</tree>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<form>
|
||||
<label name="shop"/>
|
||||
<field name="shop" colspan="3"/>
|
||||
|
||||
<label name="journal"/>
|
||||
<field name="journal" widget="selection"/>
|
||||
<label name="sequence"/>
|
||||
<field name="sequence"/>
|
||||
|
||||
<label name="gateway"/>
|
||||
<field name="gateway"/>
|
||||
</form>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tree sequence="sequence">
|
||||
<field name="shop" expand="1"/>
|
||||
<field name="gateway"/>
|
||||
<field name="journal" expand="2"/>
|
||||
</tree>
|
||||
15
modules/web_shop_shopify/view/shop_stock_location_form.xml
Normal file
15
modules/web_shop_shopify/view/shop_stock_location_form.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<form>
|
||||
<label name="shop"/>
|
||||
<field name="shop" colspan="3"/>
|
||||
|
||||
<label name="warehouse"/>
|
||||
<field name="warehouse"/>
|
||||
<label name="shopify_id"/>
|
||||
<field name="shopify_id"/>
|
||||
|
||||
<label name="shopify_stock_skip_warehouse"/>
|
||||
<field name="shopify_stock_skip_warehouse"/>
|
||||
</form>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tree>
|
||||
<field name="shop" expand="1"/>
|
||||
<field name="warehouse" expand="1"/>
|
||||
<field name="shopify_id"/>
|
||||
</tree>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<form>
|
||||
<label name="shipment"/>
|
||||
<field name="shipment" colspan="3"/>
|
||||
|
||||
<label name="sale"/>
|
||||
<field name="sale"/>
|
||||
<label name="shopify_identifier"/>
|
||||
<field name="shopify_identifier" width="20"/>
|
||||
</form>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tree>
|
||||
<field name="shipment" expand="1"/>
|
||||
<field name="sale" expand="1"/>
|
||||
<field name="shopify_identifier" expand="2"/>
|
||||
</tree>
|
||||
1081
modules/web_shop_shopify/web.py
Normal file
1081
modules/web_shop_shopify/web.py
Normal file
File diff suppressed because it is too large
Load Diff
93
modules/web_shop_shopify/web.xml
Normal file
93
modules/web_shop_shopify/web.xml
Normal file
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
|
||||
this repository contains the full copyright notices and license terms. -->
|
||||
<tryton>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="shop_view_form">
|
||||
<field name="model">web.shop</field>
|
||||
<field name="inherit" ref="web_shop.shop_view_form"/>
|
||||
<field name="name">shop_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="shop_stock_location_view_form">
|
||||
<field name="model">web.shop-stock.location</field>
|
||||
<field name="type">form</field>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="name">shop_stock_location_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="shop_stock_location_view_list">
|
||||
<field name="model">web.shop-stock.location</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="priority" eval="20"/>
|
||||
<field name="name">shop_stock_location_list</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="shop_shopify_identifier_view_form">
|
||||
<field name="model">web.shop.shopify_identifier</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">shop_shopify_identifier_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="shop_shopify_identifier_view_list">
|
||||
<field name="model">web.shop.shopify_identifier</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">shop_shopify_identifier_list</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.action.act_window" id="act_shop_shopify_identifier_form">
|
||||
<field name="name">Shopify Identifiers</field>
|
||||
<field name="res_model">web.shop.shopify_identifier</field>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_shop_shopify_identifier_form_view1">
|
||||
<field name="sequence" eval="10"/>
|
||||
<field name="view" ref="shop_shopify_identifier_view_list"/>
|
||||
<field name="act_window" ref="act_shop_shopify_identifier_form"/>
|
||||
</record>
|
||||
<record model="ir.action.act_window.view" id="act_shop_shopify_identifier_form_view2">
|
||||
<field name="sequence" eval="20"/>
|
||||
<field name="view" ref="shop_shopify_identifier_view_form"/>
|
||||
<field name="act_window" ref="act_shop_shopify_identifier_form"/>
|
||||
</record>
|
||||
<menuitem
|
||||
parent="ir.menu_models"
|
||||
action="act_shop_shopify_identifier_form"
|
||||
sequence="50"
|
||||
id="menu_shop_shopify_identifier_form"/>
|
||||
|
||||
<record model="ir.model.access" id="access_shop_shopify_identifier">
|
||||
<field name="model">web.shop.shopify_identifier</field>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="False"/>
|
||||
<field name="perm_create" eval="False"/>
|
||||
<field name="perm_delete" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.model.access" id="access_shop_shopify_identifier_admin">
|
||||
<field name="model">web.shop.shopify_identifier</field>
|
||||
<field name="group" ref="res.group_admin"/>
|
||||
<field name="perm_read" eval="True"/>
|
||||
<field name="perm_write" eval="True"/>
|
||||
<field name="perm_create" eval="True"/>
|
||||
<field name="perm_delete" eval="True"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.model.button" id="shop_shopify_identifier_set_to_update_button">
|
||||
<field name="model">web.shop.shopify_identifier</field>
|
||||
<field name="name">set_to_update</field>
|
||||
<field name="string">Set to Update</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="shop_shopify_payment_journal_view_form">
|
||||
<field name="model">web.shop.shopify_payment_journal</field>
|
||||
<field name="type">form</field>
|
||||
<field name="name">shop_shopify_payment_journal_form</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="shop_shopify_payment_journal_view_list">
|
||||
<field name="model">web.shop.shopify_payment_journal</field>
|
||||
<field name="type">tree</field>
|
||||
<field name="name">shop_shopify_payment_journal_list</field>
|
||||
</record>
|
||||
</data>
|
||||
</tryton>
|
||||
Reference in New Issue
Block a user