mirror of
https://github.com/TandoorRecipes/recipes.git
synced 2025-12-24 02:39:20 -05:00
Merge branch 'develop'
This commit is contained in:
17
boot.sh
17
boot.sh
@@ -22,6 +22,14 @@ display_warning() {
|
||||
echo -e "$1"
|
||||
}
|
||||
|
||||
# prepare nginx config
|
||||
envsubst '$MEDIA_ROOT $STATIC_ROOT $TANDOOR_PORT' < /opt/recipes/http.d/Recipes.conf.template > /opt/recipes/http.d/Recipes.conf
|
||||
|
||||
# start nginx early to display error pages
|
||||
echo "Starting nginx"
|
||||
nginx
|
||||
|
||||
|
||||
echo "Checking configuration..."
|
||||
|
||||
# SECRET_KEY (or a valid file at SECRET_KEY_FILE) must be set in .env file
|
||||
@@ -93,7 +101,7 @@ fi
|
||||
|
||||
echo "Collecting static files, this may take a while..."
|
||||
|
||||
python manage.py collectstatic --noinput
|
||||
python manage.py collectstatic --noinput --clear
|
||||
|
||||
echo "Done"
|
||||
|
||||
@@ -101,13 +109,6 @@ chmod -R 755 ${MEDIA_ROOT:-/opt/recipes/mediafiles}
|
||||
|
||||
ipv6_disable=$(cat /sys/module/ipv6/parameters/disable)
|
||||
|
||||
# prepare nginx config
|
||||
envsubst '$MEDIA_ROOT $STATIC_ROOT $TANDOOR_PORT' < /opt/recipes/http.d/Recipes.conf.template > /opt/recipes/http.d/Recipes.conf
|
||||
|
||||
# start nginx
|
||||
echo "Starting nginx"
|
||||
nginx
|
||||
|
||||
echo "Starting gunicorn"
|
||||
# Check if IPv6 is enabled, only then run gunicorn with ipv6 support
|
||||
if [ "$ipv6_disable" -eq 0 ]; then
|
||||
|
||||
@@ -33,12 +33,14 @@ class AiCallbackHandler(CustomLogger):
|
||||
space = None
|
||||
user = None
|
||||
ai_provider = None
|
||||
function = None
|
||||
|
||||
def __init__(self, space, user, ai_provider):
|
||||
def __init__(self, space, user, ai_provider, function):
|
||||
super().__init__()
|
||||
self.space = space
|
||||
self.user = user
|
||||
self.ai_provider = ai_provider
|
||||
self.function = function
|
||||
|
||||
def log_pre_api_call(self, model, messages, kwargs):
|
||||
pass
|
||||
@@ -77,7 +79,7 @@ class AiCallbackHandler(CustomLogger):
|
||||
end_time=end_time,
|
||||
input_tokens=response_obj['usage']['prompt_tokens'],
|
||||
output_tokens=response_obj['usage']['completion_tokens'],
|
||||
function=AiLog.F_FILE_IMPORT,
|
||||
function=self.function,
|
||||
credit_cost=credit_cost,
|
||||
credits_from_balance=credits_from_balance,
|
||||
)
|
||||
|
||||
@@ -51,10 +51,10 @@ class OpenDataImporter:
|
||||
for field in field_list:
|
||||
if isinstance(getattr(obj, field), float) or isinstance(getattr(obj, field), Decimal):
|
||||
if abs(float(getattr(obj, field)) - float(existing_obj[field])) > 0.001: # convert both to float and check if basically equal
|
||||
print(f'comparing FLOAT {obj} failed because field {field} is not equal ({getattr(obj, field)} != {existing_obj[field]})')
|
||||
#print(f'comparing FLOAT {obj} failed because field {field} is not equal ({getattr(obj, field)} != {existing_obj[field]})')
|
||||
return False
|
||||
elif getattr(obj, field) != existing_obj[field]:
|
||||
print(f'comparing {obj} failed because field {field} is not equal ({getattr(obj, field)} != {existing_obj[field]})')
|
||||
#print(f'comparing {obj} failed because field {field} is not equal ({getattr(obj, field)} != {existing_obj[field]})')
|
||||
return False
|
||||
return True
|
||||
|
||||
@@ -342,7 +342,7 @@ class OpenDataImporter:
|
||||
'name': self.data[datatype][k]['name'],
|
||||
'plural_name': self.data[datatype][k]['plural_name'] if self.data[datatype][k]['plural_name'] != '' else None,
|
||||
'supermarket_category_id': self.slug_id_cache['category'][self.data[datatype][k]['store_category']] if self.data[datatype][k]['store_category'] in self.slug_id_cache['category'] else None,
|
||||
'fdc_id': re.sub(r'\D', '', self.data[datatype][k]['fdc_id']) if self.data[datatype][k]['fdc_id'] != '' else None,
|
||||
'fdc_id': re.sub(r'\D', '', str(self.data[datatype][k]['fdc_id'])) if self.data[datatype][k]['fdc_id'] != '' else None,
|
||||
'open_data_slug': k,
|
||||
'properties_food_unit_id': None,
|
||||
'space_id': self.request.space.id,
|
||||
|
||||
@@ -288,7 +288,7 @@ class RecipeSearch():
|
||||
|
||||
def _updated_on_filter(self):
|
||||
if self._updatedon:
|
||||
self._queryset = self._queryset.filter(updated_at__date__date=self._updatedon)
|
||||
self._queryset = self._queryset.filter(updated_at__date=self._updatedon)
|
||||
elif self._updatedon_lte:
|
||||
self._queryset = self._queryset.filter(updated_at__date__lte=self._updatedon_lte)
|
||||
elif self._updatedon_gte:
|
||||
|
||||
@@ -155,7 +155,7 @@ def get_from_scraper(scrape, request):
|
||||
|
||||
# assign steps
|
||||
try:
|
||||
for i in parse_instructions(scrape.instructions()):
|
||||
for i in parse_instructions(scrape.instructions_list()):
|
||||
recipe_json['steps'].append({
|
||||
'instruction': i,
|
||||
'ingredients': [],
|
||||
@@ -177,11 +177,11 @@ def get_from_scraper(scrape, request):
|
||||
for x in scrape.ingredients():
|
||||
if x.strip() != '':
|
||||
try:
|
||||
amount, unit, ingredient, note = ingredient_parser.parse(x)
|
||||
amount, unit, food, note = ingredient_parser.parse(x)
|
||||
ingredient = {
|
||||
'amount': amount,
|
||||
'food': {
|
||||
'name': ingredient,
|
||||
'name': food,
|
||||
},
|
||||
'unit': None,
|
||||
'note': note,
|
||||
@@ -315,14 +315,29 @@ def clean_instruction_string(instruction):
|
||||
# handle unsupported, special UTF8 character in Thermomix-specific instructions,
|
||||
# that happen in nearly every recipe on Cookidoo, Zaubertopf Club, Rezeptwelt
|
||||
# and in Thermomix-specific recipes on many other sites
|
||||
return normalized_string \
|
||||
.replace("", _('reverse rotation')) \
|
||||
.replace("", _('careful rotation')) \
|
||||
.replace("", _('knead')) \
|
||||
.replace("", _('thicken')) \
|
||||
.replace("", _('warm up')) \
|
||||
.replace("", _('ferment')) \
|
||||
.replace("", _("sous-vide"))
|
||||
normalized_string = normalized_string \
|
||||
.replace(u"\uE003", _('reverse rotation')) \
|
||||
.replace(u"\uE002", _('careful rotation')) \
|
||||
.replace(u"\uE001", _('knead')) \
|
||||
.replace(u"\uE031", _('thicken')) \
|
||||
.replace(u"\uE019", _('warm up')) \
|
||||
.replace(u"\uE02E", _('ferment')) \
|
||||
.replace(u"\uE018", _('slow cook')) \
|
||||
.replace(u"\uE033", _('egg boiler')) \
|
||||
.replace(u"\uE016", _('kettle')) \
|
||||
.replace(u"\uE01E", _('blend')) \
|
||||
.replace(u"\uE011", _('pre-clean')) \
|
||||
.replace(u"\uE026", _('high temperature')) \
|
||||
.replace(u"\uE00D", _('rice cooker')) \
|
||||
.replace(u"\uE00C", _('caramelize')) \
|
||||
.replace(u"\uE038", _('peeler')) \
|
||||
.replace(u"\uE037", _('slicer')) \
|
||||
.replace(u"\uE036", _('grater')) \
|
||||
.replace(u"\uE04C", _('spiralizer')) \
|
||||
.replace(u"\uE02D", _("sous-vide"))
|
||||
|
||||
|
||||
return normalized_string
|
||||
|
||||
|
||||
def parse_instructions(instructions):
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
cookbook/locale/hr/LC_MESSAGES/django.mo
Normal file
BIN
cookbook/locale/hr/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -420,9 +420,14 @@ class AiProvider(models.Model):
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
class Meta:
|
||||
ordering = ('id',)
|
||||
|
||||
|
||||
class AiLog(models.Model, PermissionModelMixin):
|
||||
F_FILE_IMPORT = 'FILE_IMPORT'
|
||||
F_STEP_SORT = 'STEP_SORT'
|
||||
F_FOOD_PROPERTIES = 'FOOD_PROPERTIES'
|
||||
|
||||
ai_provider = models.ForeignKey(AiProvider, on_delete=models.SET_NULL, null=True)
|
||||
function = models.CharField(max_length=64)
|
||||
@@ -443,6 +448,9 @@ class AiLog(models.Model, PermissionModelMixin):
|
||||
def __str__(self):
|
||||
return f"{self.function} {self.ai_provider.name} {self.created_at}"
|
||||
|
||||
class Meta:
|
||||
ordering = ('-created_at',)
|
||||
|
||||
|
||||
class ConnectorConfig(models.Model, PermissionModelMixin):
|
||||
HOMEASSISTANT = 'HomeAssistant'
|
||||
@@ -799,14 +807,7 @@ class Food(ExportModelOperationsMixin('food'), TreeModel, PermissionModelMixin):
|
||||
self.delete()
|
||||
return target
|
||||
|
||||
def delete(self):
|
||||
if self.ingredient_set.all().exclude(step=None).count() > 0:
|
||||
raise ProtectedError(self.name + _(" is part of a recipe step and cannot be deleted"), self.ingredient_set.all().exclude(step=None))
|
||||
else:
|
||||
return super().delete()
|
||||
|
||||
# MP_Tree move uses raw SQL to execute move, override behavior to force a save triggering post_save signal
|
||||
|
||||
def move(self, *args, **kwargs):
|
||||
super().move(*args, **kwargs)
|
||||
# treebeard bypasses ORM, need to explicity save to trigger post save signals retrieve the object again to avoid writing previous state back to disk
|
||||
|
||||
@@ -151,19 +151,22 @@ class CustomOnHandField(serializers.Field):
|
||||
return instance
|
||||
|
||||
def to_representation(self, obj):
|
||||
if not self.context["request"].user.is_authenticated:
|
||||
try:
|
||||
if not self.context["request"].user.is_authenticated:
|
||||
return []
|
||||
shared_users = []
|
||||
if c := caches['default'].get(f'shopping_shared_users_{self.context["request"].space.id}_{self.context["request"].user.id}', None):
|
||||
shared_users = c
|
||||
else:
|
||||
try:
|
||||
shared_users = [x.id for x in list(self.context['request'].user.get_shopping_share())] + [self.context['request'].user.id]
|
||||
caches['default'].set(f'shopping_shared_users_{self.context["request"].space.id}_{self.context["request"].user.id}', shared_users, timeout=5 * 60)
|
||||
# TODO ugly hack that improves API performance significantly, should be done properly
|
||||
except AttributeError: # Anonymous users (using share links) don't have shared users
|
||||
pass
|
||||
return obj.onhand_users.filter(id__in=shared_users).exists()
|
||||
except AttributeError:
|
||||
return []
|
||||
shared_users = []
|
||||
if c := caches['default'].get(f'shopping_shared_users_{self.context["request"].space.id}_{self.context["request"].user.id}', None):
|
||||
shared_users = c
|
||||
else:
|
||||
try:
|
||||
shared_users = [x.id for x in list(self.context['request'].user.get_shopping_share())] + [self.context['request'].user.id]
|
||||
caches['default'].set(f'shopping_shared_users_{self.context["request"].space.id}_{self.context["request"].user.id}', shared_users, timeout=5 * 60)
|
||||
# TODO ugly hack that improves API performance significantly, should be done properly
|
||||
except AttributeError: # Anonymous users (using share links) don't have shared users
|
||||
pass
|
||||
return obj.onhand_users.filter(id__in=shared_users).exists()
|
||||
|
||||
def to_internal_value(self, data):
|
||||
return data
|
||||
@@ -342,8 +345,11 @@ class AiProviderSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
allow superusers to create AI providers without a space but make sure everyone else only uses their own space
|
||||
"""
|
||||
if ('space' not in validated_data or not validated_data['space']) and self.context['request'].user.is_superuser:
|
||||
validated_data['space'] = None
|
||||
if self.context['request'].user.is_superuser:
|
||||
if ('space' not in validated_data or not validated_data['space']):
|
||||
validated_data['space'] = None
|
||||
else:
|
||||
validated_data['space'] = self.context['request'].space
|
||||
else:
|
||||
if instance:
|
||||
validated_data['space'] = instance.space
|
||||
@@ -840,28 +846,31 @@ class FoodSerializer(UniqueFieldsMixin, WritableNestedModelSerializer, ExtendedR
|
||||
|
||||
@extend_schema_field(bool)
|
||||
def get_substitute_onhand(self, obj):
|
||||
if not self.context["request"].user.is_authenticated:
|
||||
try:
|
||||
if not self.context["request"].user.is_authenticated:
|
||||
return []
|
||||
shared_users = []
|
||||
if c := caches['default'].get(
|
||||
f'shopping_shared_users_{self.context["request"].space.id}_{self.context["request"].user.id}', None):
|
||||
shared_users = c
|
||||
else:
|
||||
try:
|
||||
shared_users = [x.id for x in list(self.context['request'].user.get_shopping_share())] + [
|
||||
self.context['request'].user.id]
|
||||
caches['default'].set(
|
||||
f'shopping_shared_users_{self.context["request"].space.id}_{self.context["request"].user.id}',
|
||||
shared_users, timeout=5 * 60)
|
||||
# TODO ugly hack that improves API performance significantly, should be done properly
|
||||
except AttributeError: # Anonymous users (using share links) don't have shared users
|
||||
pass
|
||||
filter = Q(id__in=obj.substitute.all())
|
||||
if obj.substitute_siblings:
|
||||
filter |= Q(path__startswith=obj.path[:Food.steplen * (obj.depth - 1)], depth=obj.depth)
|
||||
if obj.substitute_children:
|
||||
filter |= Q(path__startswith=obj.path, depth__gt=obj.depth)
|
||||
return Food.objects.filter(filter).filter(onhand_users__id__in=shared_users).exists()
|
||||
except AttributeError:
|
||||
return []
|
||||
shared_users = []
|
||||
if c := caches['default'].get(
|
||||
f'shopping_shared_users_{self.context["request"].space.id}_{self.context["request"].user.id}', None):
|
||||
shared_users = c
|
||||
else:
|
||||
try:
|
||||
shared_users = [x.id for x in list(self.context['request'].user.get_shopping_share())] + [
|
||||
self.context['request'].user.id]
|
||||
caches['default'].set(
|
||||
f'shopping_shared_users_{self.context["request"].space.id}_{self.context["request"].user.id}',
|
||||
shared_users, timeout=5 * 60)
|
||||
# TODO ugly hack that improves API performance significantly, should be done properly
|
||||
except AttributeError: # Anonymous users (using share links) don't have shared users
|
||||
pass
|
||||
filter = Q(id__in=obj.substitute.all())
|
||||
if obj.substitute_siblings:
|
||||
filter |= Q(path__startswith=obj.path[:Food.steplen * (obj.depth - 1)], depth=obj.depth)
|
||||
if obj.substitute_children:
|
||||
filter |= Q(path__startswith=obj.path, depth__gt=obj.depth)
|
||||
return Food.objects.filter(filter).filter(onhand_users__id__in=shared_users).exists()
|
||||
|
||||
def create(self, validated_data):
|
||||
name = validated_data['name'].strip()
|
||||
@@ -1715,7 +1724,7 @@ class FdcQuerySerializer(serializers.Serializer):
|
||||
foods = FdcQueryFoodsSerializer(many=True)
|
||||
|
||||
|
||||
class GenericModelSerializer(serializers.Serializer):
|
||||
class GenericModelReferenceSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
model = serializers.CharField()
|
||||
name = serializers.CharField()
|
||||
|
||||
@@ -236,42 +236,6 @@ def test_delete(u1_s1, u1_s2, obj_1, obj_tree_1):
|
||||
assert Food.find_problems() == ([], [], [], [], [])
|
||||
|
||||
|
||||
def test_integrity(u1_s1, recipe_1_s1):
|
||||
with scopes_disabled():
|
||||
assert Food.objects.count() == 10
|
||||
assert Ingredient.objects.count() == 10
|
||||
f_1 = Food.objects.first()
|
||||
|
||||
# deleting food will fail because food is part of recipe
|
||||
r = u1_s1.delete(
|
||||
reverse(
|
||||
DETAIL_URL,
|
||||
args={f_1.id}
|
||||
)
|
||||
)
|
||||
assert r.status_code == 403
|
||||
|
||||
with scopes_disabled():
|
||||
i_1 = f_1.ingredient_set.first()
|
||||
# remove Ingredient that references Food from recipe step
|
||||
i_1.step_set.first().ingredients.remove(i_1)
|
||||
assert Food.objects.count() == 10
|
||||
assert Ingredient.objects.count() == 10
|
||||
|
||||
# deleting food will succeed because its not part of recipe and delete will cascade to Ingredient
|
||||
r = u1_s1.delete(
|
||||
reverse(
|
||||
DETAIL_URL,
|
||||
args={f_1.id}
|
||||
)
|
||||
)
|
||||
assert r.status_code == 204
|
||||
|
||||
with scopes_disabled():
|
||||
assert Food.objects.count() == 9
|
||||
assert Ingredient.objects.count() == 9
|
||||
|
||||
|
||||
def test_move(u1_s1, obj_tree_1, obj_2, obj_3, space_1):
|
||||
with scope(space=space_1):
|
||||
# for some reason the 'path' attribute changes between the factory and the test when using both obj_tree and obj
|
||||
|
||||
@@ -104,6 +104,7 @@ urlpatterns = [
|
||||
path('api/sync_all/', api.sync_all, name='api_sync'),
|
||||
path('api/recipe-from-source/', api.RecipeUrlImportView.as_view(), name='api_recipe_from_source'),
|
||||
path('api/ai-import/', api.AiImportView.as_view(), name='api_ai_import'),
|
||||
path('api/ai-step-sort/', api.AiStepSortView.as_view(), name='api_ai_step_sort'),
|
||||
path('api/import-open-data/', api.ImportOpenData.as_view(), name='api_import_open_data'),
|
||||
path('api/ingredient-from-string/', api.ingredient_from_string, name='api_ingredient_from_string'),
|
||||
path('api/fdc-search/', api.FdcSearchView.as_view(), name='api_fdc_search'),
|
||||
|
||||
@@ -9,6 +9,7 @@ import threading
|
||||
import traceback
|
||||
import uuid
|
||||
from collections import OrderedDict
|
||||
from functools import wraps
|
||||
from json import JSONDecodeError
|
||||
from urllib.parse import unquote
|
||||
from zipfile import ZipFile
|
||||
@@ -26,7 +27,7 @@ from django.core.cache import caches
|
||||
from django.core.exceptions import FieldError, ValidationError
|
||||
from django.core.files import File
|
||||
from django.db import DEFAULT_DB_ALIAS
|
||||
from django.db.models import Case, Count, Exists, OuterRef, ProtectedError, Q, Subquery, Value, When
|
||||
from django.db.models import Case, Count, Exists, OuterRef, ProtectedError, Q, Subquery, Value, When, QuerySet
|
||||
from django.db.models.deletion import Collector
|
||||
from django.db.models.fields.related import ForeignObjectRel
|
||||
from django.db.models.functions import Coalesce, Lower
|
||||
@@ -113,7 +114,7 @@ from cookbook.serializer import (AccessTokenSerializer, AutomationSerializer, Au
|
||||
LocalizationSerializer, ServerSettingsSerializer, RecipeFromSourceResponseSerializer, ShoppingListEntryBulkCreateSerializer, FdcQuerySerializer,
|
||||
AiImportSerializer, ImportOpenDataSerializer, ImportOpenDataMetaDataSerializer, ImportOpenDataResponseSerializer, ExportRequestSerializer,
|
||||
RecipeImportSerializer, ConnectorConfigSerializer, SearchPreferenceSerializer, SearchFieldsSerializer, RecipeBatchUpdateSerializer,
|
||||
AiProviderSerializer, AiLogSerializer, FoodBatchUpdateSerializer, GenericModelSerializer
|
||||
AiProviderSerializer, AiLogSerializer, FoodBatchUpdateSerializer, GenericModelReferenceSerializer
|
||||
)
|
||||
from cookbook.version_info import TANDOOR_VERSION
|
||||
from cookbook.views.import_export import get_integration
|
||||
@@ -514,6 +515,143 @@ class TreeMixin(MergeMixin, FuzzyFilterMixin):
|
||||
return Response(content, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
def paginate(func):
|
||||
"""
|
||||
pagination decorator for custom ViewSet actions
|
||||
"""
|
||||
|
||||
@wraps(func)
|
||||
def inner(self, *args, **kwargs):
|
||||
queryset = func(self, *args, **kwargs)
|
||||
assert isinstance(queryset, (list, QuerySet))
|
||||
|
||||
page = self.paginate_queryset(queryset)
|
||||
if page is not None:
|
||||
serializer = self.get_serializer(page, many=True)
|
||||
return self.get_paginated_response(serializer.data)
|
||||
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
return inner
|
||||
|
||||
|
||||
class DeleteRelationMixing:
|
||||
"""
|
||||
mixin to add custom API function for model delete dependency checking
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def collect(obj):
|
||||
# collector.nested() nested seems to not include protecting but does include cascading
|
||||
# collector.protected: objects that raise Protected or Restricted error when deleting unit
|
||||
# collector.field_updates: fields that get updated when deleting the unit
|
||||
# collector.model_objs: collects the objects that should be deleted together with the selected unit
|
||||
|
||||
collector = NestedObjects(using=DEFAULT_DB_ALIAS)
|
||||
collector.collect([obj])
|
||||
return collector
|
||||
|
||||
@extend_schema(responses=GenericModelReferenceSerializer(many=True), parameters=[
|
||||
OpenApiParameter(name='cache', description='If results can be cached or not', type=bool, default=True),
|
||||
])
|
||||
@decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelReferenceSerializer)
|
||||
@paginate
|
||||
def protecting(self, request, pk):
|
||||
"""
|
||||
get a paginated list of objects that are protecting the selected object form being deleted
|
||||
"""
|
||||
obj = self.queryset.filter(pk=pk, space=request.space).first()
|
||||
if obj:
|
||||
CACHE_KEY = f'DELETE_COLLECTOR_{request.space.pk}_PROTECTING_{obj.__class__.__name__}_{obj.pk}'
|
||||
cache = self.request.query_params.get('cache', "true") == "true"
|
||||
if caches['default'].has_key(CACHE_KEY) and cache:
|
||||
return caches['default'].get(CACHE_KEY)
|
||||
|
||||
collector = self.collect(obj)
|
||||
protected_objects = []
|
||||
for o in collector.protected:
|
||||
protected_objects.append({
|
||||
'id': o.pk,
|
||||
'model': o.__class__.__name__,
|
||||
'name': str(o),
|
||||
})
|
||||
|
||||
caches['default'].set(CACHE_KEY, protected_objects, 60)
|
||||
return protected_objects
|
||||
else:
|
||||
return []
|
||||
|
||||
@extend_schema(responses=GenericModelReferenceSerializer(many=True), parameters=[
|
||||
OpenApiParameter(name='cache', description='If results can be cached or not', type=bool, default=True),
|
||||
])
|
||||
@decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelReferenceSerializer)
|
||||
@paginate
|
||||
def cascading(self, request, pk):
|
||||
"""
|
||||
get a paginated list of objects that will be cascaded (deleted) when deleting the selected object
|
||||
"""
|
||||
obj = self.queryset.filter(pk=pk, space=request.space).first()
|
||||
if obj:
|
||||
CACHE_KEY = f'DELETE_COLLECTOR_{request.space.pk}_CASCADING_{obj.__class__.__name__}_{obj.pk}'
|
||||
cache = self.request.query_params.get('cache', "true") == "true"
|
||||
if caches['default'].has_key(CACHE_KEY) and cache:
|
||||
return caches['default'].get(CACHE_KEY)
|
||||
|
||||
collector = self.collect(obj)
|
||||
|
||||
cascading_objects = []
|
||||
for model, objs in collector.model_objs.items():
|
||||
for o in objs:
|
||||
if o.pk != pk and o.__class__.__name__ != obj.__class__.__name__:
|
||||
cascading_objects.append({
|
||||
'id': o.pk,
|
||||
'model': o.__class__.__name__,
|
||||
'name': str(o),
|
||||
})
|
||||
caches['default'].set(CACHE_KEY, cascading_objects, 60)
|
||||
return cascading_objects
|
||||
else:
|
||||
return []
|
||||
|
||||
@extend_schema(responses=GenericModelReferenceSerializer(many=True), parameters=[
|
||||
OpenApiParameter(name='cache', description='If results can be cached or not', type=bool, default=True),
|
||||
])
|
||||
@decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelReferenceSerializer)
|
||||
@paginate
|
||||
def nulling(self, request, pk):
|
||||
"""
|
||||
get a paginated list of objects where the selected object will be removed whe its deleted
|
||||
"""
|
||||
obj = self.queryset.filter(pk=pk, space=request.space).first()
|
||||
if obj:
|
||||
CACHE_KEY = f'DELETE_COLLECTOR_{request.space.pk}_NULLING_{obj.__class__.__name__}_{obj.pk}'
|
||||
cache = self.request.query_params.get('cache', "true") == "true"
|
||||
if caches['default'].has_key(CACHE_KEY) and cache:
|
||||
return caches['default'].get(CACHE_KEY)
|
||||
|
||||
collector = self.collect(obj)
|
||||
|
||||
nulling_objects = []
|
||||
# field_updates is a dict of relations that will be updated and querysets of items affected
|
||||
for key, value in collector.field_updates.items():
|
||||
# iterate over each queryset for relation
|
||||
for qs in value:
|
||||
# itereate over each object in queryset of relation
|
||||
for o in qs:
|
||||
nulling_objects.append(
|
||||
{
|
||||
'id': o.pk,
|
||||
'model': o.__class__.__name__,
|
||||
'name': str(o),
|
||||
}
|
||||
)
|
||||
caches['default'].set(CACHE_KEY, nulling_objects, 60)
|
||||
return nulling_objects
|
||||
else:
|
||||
return []
|
||||
|
||||
|
||||
@extend_schema_view(list=extend_schema(parameters=[
|
||||
OpenApiParameter(name='filter_list', description='User IDs, repeat for multiple', type=str, many=True),
|
||||
]))
|
||||
@@ -636,7 +774,7 @@ class SearchPreferenceViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
return self.queryset.filter(user=self.request.user)
|
||||
|
||||
|
||||
class AiProviderViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
class AiProviderViewSet(LoggingMixin, viewsets.ModelViewSet, DeleteRelationMixing):
|
||||
queryset = AiProvider.objects
|
||||
serializer_class = AiProviderSerializer
|
||||
permission_classes = [CustomAiProviderPermission & CustomTokenHasReadWriteScope]
|
||||
@@ -659,7 +797,7 @@ class AiLogViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class StorageViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
class StorageViewSet(LoggingMixin, viewsets.ModelViewSet, DeleteRelationMixing):
|
||||
# TODO handle delete protect error and adjust test
|
||||
queryset = Storage.objects
|
||||
serializer_class = StorageSerializer
|
||||
@@ -670,7 +808,7 @@ class StorageViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class SyncViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
class SyncViewSet(LoggingMixin, viewsets.ModelViewSet, DeleteRelationMixing):
|
||||
queryset = Sync.objects
|
||||
serializer_class = SyncSerializer
|
||||
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
@@ -731,7 +869,7 @@ class RecipeImportViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
return Response({'msg': 'ok'}, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
class ConnectorConfigViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
class ConnectorConfigViewSet(LoggingMixin, viewsets.ModelViewSet, DeleteRelationMixing):
|
||||
queryset = ConnectorConfig.objects
|
||||
serializer_class = ConnectorConfigSerializer
|
||||
permission_classes = [CustomIsAdmin & CustomTokenHasReadWriteScope]
|
||||
@@ -741,7 +879,7 @@ class ConnectorConfigViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
|
||||
class SupermarketViewSet(LoggingMixin, StandardFilterModelViewSet):
|
||||
class SupermarketViewSet(LoggingMixin, StandardFilterModelViewSet, DeleteRelationMixing):
|
||||
queryset = Supermarket.objects
|
||||
serializer_class = SupermarketSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -753,7 +891,7 @@ class SupermarketViewSet(LoggingMixin, StandardFilterModelViewSet):
|
||||
|
||||
|
||||
# TODO does supermarket category have settings to support fuzzy filtering and/or merge?
|
||||
class SupermarketCategoryViewSet(LoggingMixin, FuzzyFilterMixin, MergeMixin):
|
||||
class SupermarketCategoryViewSet(LoggingMixin, FuzzyFilterMixin, MergeMixin, DeleteRelationMixing):
|
||||
queryset = SupermarketCategory.objects
|
||||
model = SupermarketCategory
|
||||
serializer_class = SupermarketCategorySerializer
|
||||
@@ -776,7 +914,7 @@ class SupermarketCategoryRelationViewSet(LoggingMixin, StandardFilterModelViewSe
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class KeywordViewSet(LoggingMixin, TreeMixin):
|
||||
class KeywordViewSet(LoggingMixin, TreeMixin, DeleteRelationMixing):
|
||||
queryset = Keyword.objects
|
||||
model = Keyword
|
||||
serializer_class = KeywordSerializer
|
||||
@@ -784,7 +922,7 @@ class KeywordViewSet(LoggingMixin, TreeMixin):
|
||||
pagination_class = DefaultPagination
|
||||
|
||||
|
||||
class UnitViewSet(LoggingMixin, MergeMixin, FuzzyFilterMixin):
|
||||
class UnitViewSet(LoggingMixin, MergeMixin, FuzzyFilterMixin, DeleteRelationMixing):
|
||||
queryset = Unit.objects
|
||||
model = Unit
|
||||
serializer_class = UnitSerializer
|
||||
@@ -804,7 +942,7 @@ class FoodInheritFieldViewSet(LoggingMixin, viewsets.ReadOnlyModelViewSet):
|
||||
return super().get_queryset()
|
||||
|
||||
|
||||
class FoodViewSet(LoggingMixin, TreeMixin):
|
||||
class FoodViewSet(LoggingMixin, TreeMixin, DeleteRelationMixing):
|
||||
queryset = Food.objects
|
||||
model = Food
|
||||
serializer_class = FoodSerializer
|
||||
@@ -950,6 +1088,82 @@ class FoodViewSet(LoggingMixin, TreeMixin):
|
||||
return JsonResponse({'msg': 'there was an error parsing the FDC data, please check the server logs'},
|
||||
status=500, json_dumps_params={'indent': 4})
|
||||
|
||||
@extend_schema(
|
||||
parameters=[
|
||||
OpenApiParameter(name='provider', description='ID of the AI provider that should be used for this AI request', type=int),
|
||||
]
|
||||
)
|
||||
@decorators.action(detail=True, methods=['POST'], )
|
||||
def aiproperties(self, request, pk):
|
||||
serializer = RecipeSerializer(data=request.data, partial=True, context={'request': request})
|
||||
if serializer.is_valid():
|
||||
|
||||
if not request.query_params.get('provider', None) or not re.match(r'^(\d)+$', request.query_params.get('provider', None)):
|
||||
response = {
|
||||
'error': True,
|
||||
'msg': _('You must select an AI provider to perform your request.'),
|
||||
}
|
||||
return Response(response, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if not can_perform_ai_request(request.space):
|
||||
response = {
|
||||
'error': True,
|
||||
'msg': _("You don't have any credits remaining to use AI or AI features are not enabled for your space."),
|
||||
}
|
||||
return Response(response, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
ai_provider = AiProvider.objects.filter(pk=request.query_params.get('provider')).filter(Q(space=request.space) | Q(space__isnull=True)).first()
|
||||
|
||||
litellm.callbacks = [AiCallbackHandler(request.space, request.user, ai_provider, AiLog.F_FOOD_PROPERTIES)]
|
||||
|
||||
property_type_list = list(PropertyType.objects.filter(space=request.space).values('id', 'name', 'description', 'unit', 'category', 'fdc_id'))
|
||||
messages = [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "Given the following food and the following different types of properties please update the food so that the properties attribute contains a list with all property types in the following format [{property_amount: <the property value>, property_type: {id: <the ID of the property type>, name: <the name of the property type>}}]."
|
||||
"The property values should be in the unit given in the property type and for the amount specified in the properties_food_amount attribute of the food, which is given in the properties_food_unit."
|
||||
"property_amount is a decimal number. Please try to keep a percision of two decimal places if given in your source data."
|
||||
"Do not make up any data. If there is no data available for the given property type that is ok, just return null as a property_amount for that property type. Do not change anything else!"
|
||||
"Most property types are likely going to be nutritional values. Please do not make up any values, only return values you can find in the sources available to you."
|
||||
"Only return values if you are sure they are meant for the food given. Under no circumstance are you allowed to change any other value of the given food or change the structure in any way or form."
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"text": json.dumps(request.data)
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"text": json.dumps(property_type_list)
|
||||
},
|
||||
]
|
||||
},
|
||||
]
|
||||
|
||||
try:
|
||||
ai_request = {
|
||||
'api_key': ai_provider.api_key,
|
||||
'model': ai_provider.model_name,
|
||||
'response_format': {"type": "json_object"},
|
||||
'messages': messages,
|
||||
}
|
||||
if ai_provider.url:
|
||||
ai_request['api_base'] = ai_provider.url
|
||||
ai_response = completion(**ai_request)
|
||||
|
||||
response_text = ai_response.choices[0].message.content
|
||||
|
||||
return Response(json.loads(response_text), status=status.HTTP_200_OK)
|
||||
except BadRequestError as err:
|
||||
pass
|
||||
response = {
|
||||
'error': True,
|
||||
'msg': 'The AI could not process your request. \n\n' + err.message,
|
||||
}
|
||||
return Response(response, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
def destroy(self, *args, **kwargs):
|
||||
try:
|
||||
return (super().destroy(self, *args, **kwargs))
|
||||
@@ -1052,7 +1266,7 @@ class FoodViewSet(LoggingMixin, TreeMixin):
|
||||
OpenApiParameter(name='order_direction', description='Order ascending or descending', type=str,
|
||||
enum=['asc', 'desc']),
|
||||
]))
|
||||
class RecipeBookViewSet(LoggingMixin, StandardFilterModelViewSet):
|
||||
class RecipeBookViewSet(LoggingMixin, StandardFilterModelViewSet, DeleteRelationMixing):
|
||||
queryset = RecipeBook.objects
|
||||
serializer_class = RecipeBookSerializer
|
||||
permission_classes = [(CustomIsOwner | CustomIsShared) & CustomTokenHasReadWriteScope]
|
||||
@@ -1206,7 +1420,7 @@ class AutoPlanViewSet(LoggingMixin, mixins.CreateModelMixin, viewsets.GenericVie
|
||||
return Response(serializer.errors, 400)
|
||||
|
||||
|
||||
class MealTypeViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
class MealTypeViewSet(LoggingMixin, viewsets.ModelViewSet, DeleteRelationMixing):
|
||||
"""
|
||||
returns list of meal types created by the
|
||||
requesting user ordered by the order field.
|
||||
@@ -1356,7 +1570,7 @@ class RecipePagination(PageNumberPagination):
|
||||
OpenApiParameter(name='filter', description=_('ID of a custom filter. Returns all recipes matched by that filter.'), type=int),
|
||||
OpenApiParameter(name='makenow', description=_('Filter recipes that can be made with OnHand food. [''true''/''<b>false</b>'']'), type=bool),
|
||||
]))
|
||||
class RecipeViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
class RecipeViewSet(LoggingMixin, viewsets.ModelViewSet, DeleteRelationMixing):
|
||||
queryset = Recipe.objects
|
||||
serializer_class = RecipeSerializer
|
||||
# TODO split read and write permission for meal plan guest
|
||||
@@ -1638,7 +1852,7 @@ class UnitConversionViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
enum=[m[0] for m in PropertyType.CHOICES])
|
||||
]
|
||||
))
|
||||
class PropertyTypeViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
class PropertyTypeViewSet(LoggingMixin, viewsets.ModelViewSet, DeleteRelationMixing):
|
||||
queryset = PropertyType.objects
|
||||
serializer_class = PropertyTypeSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -1651,27 +1865,6 @@ class PropertyTypeViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
self.queryset.filter(category__in=category)
|
||||
return self.queryset.filter(space=self.request.space)
|
||||
|
||||
@extend_schema(responses=GenericModelSerializer(many=True))
|
||||
@decorators.action(detail=True, methods=['GET'], serializer_class=GenericModelSerializer, pagination_class=DefaultPagination)
|
||||
# TODO actually implement pagination
|
||||
def protecting(self, request, pk):
|
||||
obj = self.queryset.filter(pk=pk, space=request.space).first()
|
||||
if obj:
|
||||
collector = NestedObjects(using=DEFAULT_DB_ALIAS)
|
||||
collector.collect([obj])
|
||||
|
||||
protected_objects = []
|
||||
for o in collector.protected:
|
||||
protected_objects.append({
|
||||
'id': o.pk,
|
||||
'model': o.__class__.__name__,
|
||||
'name': str(o),
|
||||
})
|
||||
|
||||
return Response(self.serializer_class(protected_objects, many=True, context={'request': request}).data)
|
||||
else:
|
||||
return Response({}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
|
||||
class PropertyViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
queryset = Property.objects
|
||||
@@ -1890,7 +2083,7 @@ class BookmarkletImportViewSet(LoggingMixin, viewsets.ModelViewSet):
|
||||
return self.queryset.filter(space=self.request.space).all()
|
||||
|
||||
|
||||
class UserFileViewSet(LoggingMixin, StandardFilterModelViewSet):
|
||||
class UserFileViewSet(LoggingMixin, StandardFilterModelViewSet, DeleteRelationMixing):
|
||||
queryset = UserFile.objects
|
||||
serializer_class = UserFileSerializer
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
@@ -2179,7 +2372,7 @@ class AiImportView(APIView):
|
||||
|
||||
ai_provider = AiProvider.objects.filter(pk=serializer.validated_data['ai_provider_id']).filter(Q(space=request.space) | Q(space__isnull=True)).first()
|
||||
|
||||
litellm.callbacks = [AiCallbackHandler(request.space, request.user, ai_provider)]
|
||||
litellm.callbacks = [AiCallbackHandler(request.space, request.user, ai_provider, AiLog.F_FILE_IMPORT)]
|
||||
|
||||
messages = []
|
||||
uploaded_file = serializer.validated_data['file']
|
||||
@@ -2296,6 +2489,80 @@ class AiImportView(APIView):
|
||||
return Response(RecipeFromSourceResponseSerializer(context={'request': request}).to_representation(response), status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class AiStepSortView(APIView):
|
||||
throttle_classes = [AiEndpointThrottle]
|
||||
permission_classes = [CustomIsUser & CustomTokenHasReadWriteScope]
|
||||
|
||||
@extend_schema(request=RecipeSerializer(many=False), responses=RecipeSerializer(many=False),
|
||||
parameters=[
|
||||
OpenApiParameter(name='provider', description='ID of the AI provider that should be used for this AI request', type=int),
|
||||
])
|
||||
def post(self, request, *args, **kwargs):
|
||||
"""
|
||||
given an image or PDF file convert its content to a structured recipe using AI and the scraping system
|
||||
"""
|
||||
serializer = RecipeSerializer(data=request.data, partial=True, context={'request': request})
|
||||
if serializer.is_valid():
|
||||
|
||||
if not request.query_params.get('provider', None) or not re.match(r'^(\d)+$', request.query_params.get('provider', None)):
|
||||
response = {
|
||||
'error': True,
|
||||
'msg': _('You must select an AI provider to perform your request.'),
|
||||
}
|
||||
return Response(response, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if not can_perform_ai_request(request.space):
|
||||
response = {
|
||||
'error': True,
|
||||
'msg': _("You don't have any credits remaining to use AI or AI features are not enabled for your space."),
|
||||
}
|
||||
return Response(response, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
ai_provider = AiProvider.objects.filter(pk=request.query_params.get('provider')).filter(Q(space=request.space) | Q(space__isnull=True)).first()
|
||||
|
||||
litellm.callbacks = [AiCallbackHandler(request.space, request.user, ai_provider, AiLog.F_STEP_SORT)]
|
||||
|
||||
messages = [
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{
|
||||
"type": "text",
|
||||
"text": "You are given data for a recipe formatted as json. You cannot under any circumstance change the value of any of the fields. You are only allowed to split the instructions into multiple steps and to sort the ingredients to their appropriate step. Your goal is to properly structure the recipe by splitting large instructions into multiple coherent steps and putting the ingredients that belong to this step into the ingredients list. Generally an ingredient of a cooking recipe should occur in the first step where its needed. Please sort the ingredients to the appropriate steps without changing any of the actual field values. Return the recipe in the same format you were given as json. Do not change any field value like strings or numbers, or change the sorting, also do not change the language."
|
||||
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"text": json.dumps(request.data)
|
||||
},
|
||||
|
||||
]
|
||||
},
|
||||
]
|
||||
|
||||
try:
|
||||
ai_request = {
|
||||
'api_key': ai_provider.api_key,
|
||||
'model': ai_provider.model_name,
|
||||
'response_format': {"type": "json_object"},
|
||||
'messages': messages,
|
||||
}
|
||||
if ai_provider.url:
|
||||
ai_request['api_base'] = ai_provider.url
|
||||
ai_response = completion(**ai_request)
|
||||
|
||||
response_text = ai_response.choices[0].message.content
|
||||
# TODO validate by loading/dumping using serializer ?
|
||||
|
||||
return Response(json.loads(response_text), status=status.HTTP_200_OK)
|
||||
except BadRequestError as err:
|
||||
response = {
|
||||
'error': True,
|
||||
'msg': 'The AI could not process your request. \n\n' + err.message,
|
||||
}
|
||||
return Response(response, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class AppImportView(APIView):
|
||||
parser_classes = [MultiPartParser]
|
||||
throttle_classes = [RecipeImportThrottle]
|
||||
|
||||
@@ -212,6 +212,6 @@ location /static/ {
|
||||
Tandoor 1 includes gunicorn, a python WSGI server that handles python code well but is not meant to serve mediafiles. Thus, it has always been recommended to set up a nginx webserver
|
||||
(not just a reverse proxy) in front of Tandoor to handle mediafiles. The gunicorn server by default is exposed on port 8080.
|
||||
|
||||
Tandoor 2 now occasionally bundles nginx inside the container and exposes port 80 where mediafiles are handled by nginx and all the other requests are (mostly) passed to gunicorn.
|
||||
Tandoor 2 now bundles nginx inside the container and exposes port 80 where mediafiles are handled by nginx and all the other requests are (mostly) passed to gunicorn.
|
||||
|
||||
A [GitHub Issue](https://github.com/TandoorRecipes/recipes/issues/3851) has been created to allow for discussions and FAQ's on this issue while this change is fresh. It will later be updated in the docs here if necessary.
|
||||
@@ -1,9 +1,6 @@
|
||||
!!! info "Community Contributed"
|
||||
This guide was contributed by the community and is neither officially supported, nor updated or tested. Since I cannot test it myself, feedback and improvements are always very welcome.
|
||||
|
||||
!!! danger "Tandoor 2 Compatibility"
|
||||
This guide has not been verified/tested for Tandoor 2, which now integrates a nginx service inside the default docker container and exposes its service on port 80 instead of 8080.
|
||||
|
||||
## **Instructions**
|
||||
|
||||
Basic guide to setup `vabenee1111/recipes` docker container on Synology NAS.
|
||||
@@ -12,7 +9,7 @@ Basic guide to setup `vabenee1111/recipes` docker container on Synology NAS.
|
||||
- Login to Synology DSM through your browser
|
||||
- Install `Container Manager` through package center
|
||||
- Install `Text Editor` through package center (needed to edit `.env` if you don't edit it locally first)
|
||||
- If you do not already have a `docker` folder in your File Station, create one at the root of your volume.
|
||||
- If you do not already have a shared `docker` folder in your File Station, create one at the root of your volume.
|
||||
- inside of your `volume1/docker` folder, create a `recipes` folder.
|
||||
- Within, create the necessary folder structure. You will need these folders:
|
||||
|
||||
@@ -44,9 +41,13 @@ volume1/docker/
|
||||
|
||||
### 4. Edit docker-compose.yml
|
||||
- Paste the `docker-compose.yml` into the `source` textbox.
|
||||
- This file tells docker how to setup recipes. Docker will create three containers for recipes to work, recipes, nginx and postgresql. They are all required and need to store and share data through the folders you created before.
|
||||
- Under the `nginx_recipes` section, look for `ports` that lists `80:80` as the default. This line specifies which external synology port will point to which internal docker port. Chose a free port to use and replace the first number with it. You will open recipes by browsing to http://your.synology.ip:chosen.port, e.g. http://192.168.1.1:2000
|
||||
- If you want to use port 2000 you would edit the `ports` to `2000:80`
|
||||
- This file tells docker how to setup recipes. Docker will create two containers for recipes to work, `web_recipes` and `db_recipes`. They are all required and need to store and share data through the folders you created before.
|
||||
- Under the `web_recipes` section, you can add `ports` . This line specifies which external synology port will point to which internal docker port. Chose a free port to use and replace the first number with it. You will open recipes by browsing to http://your.synology.ip:chosen.port, e.g. http://192.168.1.1:2000
|
||||
- If you want to use port 2000 you would edit the `ports` to `2000:8080`
|
||||
```
|
||||
ports:
|
||||
- "2000:8080"
|
||||
```
|
||||
|
||||
### 5. Finishing up
|
||||
- Click `Next`.
|
||||
@@ -59,25 +60,27 @@ volume1/docker/
|
||||
Container recipes-db_recipes-1 Started
|
||||
Container recipes-web_recipes-1 Starting
|
||||
Container recipes-web_recipes-1 Started
|
||||
Container recipes-nginx_recipes-1 Starting
|
||||
Container recipes-nginx_recipes-1 Started
|
||||
Exit Code: 0
|
||||
```
|
||||
- If you get an error, review the error and fix. A common reason it might fail is because you did not create the folders specified in the directory tree in step 1.
|
||||
- If you notice that `web_recipes` cannot connect to the database there is probably a misconfiguration in you Firewall, see next section.
|
||||
- Browse to 192.168.1.1:2000 or whatever your IP and port are
|
||||
|
||||
### 6. Firewall
|
||||
!!!info "Depreciated?" This section may be depreciated and may no longer needed. The container may be able to be used without any firewall rules enabled. Further datapoints needed before section or this warning is removed.
|
||||
|
||||
You need to set up firewall rules in order for the recipes_web container to be able to connect to the recipes_db container.
|
||||
You need to set up firewall rules in order for the `recipes_web` container to be able to connect to the `recipes_db` container.
|
||||
|
||||
- Control Panel -> Security -> Firewall -> Edit Rules -> Create
|
||||
- Ports: All
|
||||
- if you only want to allow the database port 5432, you'll need to create 2 rules to allow ingoing and outgoing port (and eventually also specify ip more restrictive)
|
||||
- Source IP: Specific IP -> Select -> Subnet
|
||||
- insert docker network ip (can be found in the docker application, network tab)
|
||||
- Example: IP address: 172.18.0.0 and Subnet mask/Prefix length: 255.255.255.0
|
||||
- Action: Allow
|
||||
- Save and make sure it's above the deny rules
|
||||
- If you want to skip the SSL Setup via Reverse Proxy you'll also need to allow access to the port you used to expose the container (e.g. 2000 in this example).
|
||||
- Ports: 2000
|
||||
- Source: depends on how broad the access should be
|
||||
- Action: Allow
|
||||
|
||||
### 7. Additional SSL Setup
|
||||
Easiest way is to do it via Reverse Proxy.
|
||||
@@ -102,7 +105,7 @@ Easiest way is to do it via Reverse Proxy.
|
||||
- Action: Allow
|
||||
- Save and make sure it's above the deny rules
|
||||
|
||||
### 8. Depreciated Guides
|
||||
### 8. Deprecated Guides
|
||||
|
||||
The following are older guides that may be useful if you are running older versions of DSM.
|
||||
|
||||
@@ -111,4 +114,4 @@ The following are older guides that may be useful if you are running older versi
|
||||
|
||||
- There is also this
|
||||
([word](https://github.com/vabene1111/recipes/files/6708738/Tandoor.on.a.Synology.Disk.Station.docx),
|
||||
[pdf](https://github.com/vabene1111/recipes/files/6901601/Tandoor.on.a.Synology.Disk.Station.pdf)) awesome and very detailed guide provided by @DiversityBug.
|
||||
[pdf](https://github.com/vabene1111/recipes/files/6901601/Tandoor.on.a.Synology.Disk.Station.pdf)) awesome and very detailed guide provided by @DiversityBug.
|
||||
|
||||
@@ -20,11 +20,13 @@ server {
|
||||
location / {
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_pass http://localhost:${TANDOOR_PORT};
|
||||
error_page 502 /errors/http502.html;
|
||||
|
||||
# disabled for now because it redirects to the error page and not back, also not showing html
|
||||
#error_page 502 /errors/http502.html;
|
||||
}
|
||||
|
||||
location /errors/ {
|
||||
alias /etc/nginx/conf.d/errorpages/;
|
||||
alias /etc/nginx/http.d/errorpages/;
|
||||
internal;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -69,70 +69,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -69,70 +69,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,72 +68,112 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr "Englisch"
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr "Deutsch"
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
#, fuzzy
|
||||
#| msgid "English"
|
||||
msgid "Polish"
|
||||
msgstr "Englisch"
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -69,70 +69,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
BIN
recipes/locale/hr/LC_MESSAGES/django.mo
Normal file
BIN
recipes/locale/hr/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
177
recipes/locale/hr/LC_MESSAGES/django.po
Normal file
177
recipes/locale/hr/LC_MESSAGES/django.po
Normal file
@@ -0,0 +1,177 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
#: .\recipes\plugins\enterprise_plugin\helper\permission_helper.py:58
|
||||
msgid ""
|
||||
"You do not have the required permissions to view this page! You need to have "
|
||||
"the following modules licensed: "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\helper\permission_helper.py:76
|
||||
msgid "You are not logged in and therefore cannot view this page!"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\helper\permission_helper.py:79
|
||||
msgid "You do not have the required modules to view this page!"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\helper\permission_helper.py:90
|
||||
msgid "You do not have the required module to view this page!"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Recipe Keyword"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Meal Plan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Shopping"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:32
|
||||
msgid "Book"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "start"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "center"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\models.py:37
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -67,70 +67,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -69,70 +69,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -67,70 +67,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -70,70 +70,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-08-01 15:04+0200\n"
|
||||
"POT-Creation-Date: 2025-09-22 20:15+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -68,70 +68,110 @@ msgstr ""
|
||||
msgid "end"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:478
|
||||
#: .\recipes\plugins\enterprise_plugin\templates\enterprise_social_public_view.html:15
|
||||
msgid "Tandoor Recipe Manager"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:571
|
||||
msgid "Armenian "
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:479
|
||||
#: .\recipes\settings.py:572
|
||||
msgid "Bulgarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:480
|
||||
#: .\recipes\settings.py:573
|
||||
msgid "Catalan"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:481
|
||||
#: .\recipes\settings.py:574
|
||||
msgid "Czech"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:482
|
||||
#: .\recipes\settings.py:575
|
||||
msgid "Croatian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:576
|
||||
msgid "Danish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:483
|
||||
#: .\recipes\settings.py:577
|
||||
msgid "Dutch"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:484
|
||||
#: .\recipes\settings.py:578
|
||||
msgid "English"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:485
|
||||
#: .\recipes\settings.py:579
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:486
|
||||
#: .\recipes\settings.py:580
|
||||
msgid "Finnish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:581
|
||||
msgid "German"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:487
|
||||
#: .\recipes\settings.py:582
|
||||
msgid "Greek"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:583
|
||||
msgid "Hebrew"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:584
|
||||
msgid "Hungarian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:488
|
||||
#: .\recipes\settings.py:585
|
||||
msgid "Italian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:489
|
||||
#: .\recipes\settings.py:586
|
||||
msgid "Latvian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:490
|
||||
msgid "Norwegian "
|
||||
#: .\recipes\settings.py:587
|
||||
msgid "Norwegian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:491
|
||||
#: .\recipes\settings.py:589
|
||||
msgid "Polish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:492
|
||||
#: .\recipes\settings.py:590
|
||||
msgid "Portuguese"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:591
|
||||
msgid "Russian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:493
|
||||
#: .\recipes\settings.py:592
|
||||
msgid "Romanian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:593
|
||||
msgid "Spanish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:494
|
||||
#: .\recipes\settings.py:594
|
||||
msgid "Slovenian"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:595
|
||||
msgid "Swedish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:596
|
||||
msgid "Turkish"
|
||||
msgstr ""
|
||||
|
||||
#: .\recipes\settings.py:597
|
||||
msgid "Ukranian"
|
||||
msgstr ""
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user