From a8583c8e6901b8014e8ab21aa2c8a098377344f9 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Sat, 9 Dec 2023 17:12:07 +0000 Subject: [PATCH 01/47] added backend translation support for plurals --- mealie/pkgs/i18n/json_provider.py | 26 ++++++++++++++++--- .../pkgs/i18n/test_locale_provider.py | 23 ++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/mealie/pkgs/i18n/json_provider.py b/mealie/pkgs/i18n/json_provider.py index 34cc7710c458..5fbeb10c902d 100644 --- a/mealie/pkgs/i18n/json_provider.py +++ b/mealie/pkgs/i18n/json_provider.py @@ -1,6 +1,7 @@ import json from dataclasses import dataclass from pathlib import Path +from typing import cast @dataclass(slots=True) @@ -13,6 +14,22 @@ class JsonProvider: else: self.translations = path + def _parse_plurals(self, value: str, count: float): + # based off of: https://kazupon.github.io/vue-i18n/guide/pluralization.html + + values = [v.strip() for v in value.split("|")] + if len(values) == 1: + return value + elif len(values) == 2: + return values[0] if count == 1 else values[1] + elif len(values) == 3: + if count == 0: + return values[0] + else: + return values[1] if count == 1 else values[2] + else: + return values[0] + def t(self, key: str, default=None, **kwargs) -> str: keys = key.split(".") @@ -30,9 +47,12 @@ class JsonProvider: if i == last: for key, value in kwargs.items(): - if not value: + translation_value = cast(str, translation_value) + if value is None: value = "" - translation_value = translation_value.replace("{" + key + "}", value) - return translation_value + if key == "count": + translation_value = self._parse_plurals(translation_value, float(value)) + translation_value = translation_value.replace("{" + key + "}", str(value)) # type: ignore + return translation_value # type: ignore return default or key diff --git a/tests/unit_tests/pkgs/i18n/test_locale_provider.py b/tests/unit_tests/pkgs/i18n/test_locale_provider.py index 73100fb739a6..f4bf3a550521 100644 --- a/tests/unit_tests/pkgs/i18n/test_locale_provider.py +++ b/tests/unit_tests/pkgs/i18n/test_locale_provider.py @@ -9,6 +9,29 @@ def test_json_provider(): assert provider.t("test2", "DEFAULT") == "DEFAULT" +def test_json_provider_plural(): + provider = JsonProvider({"test": "test | tests"}) + assert provider.t("test", count=0) == "tests" + assert provider.t("test", count=0.5) == "tests" + assert provider.t("test", count=1) == "test" + assert provider.t("test", count=1.5) == "tests" + assert provider.t("test", count=2) == "tests" + + provider = JsonProvider({"test": "test 0 | test | tests"}) + assert provider.t("test", count=0) == "test 0" + assert provider.t("test", count=0.5) == "tests" + assert provider.t("test", count=1) == "test" + assert provider.t("test", count=1.5) == "tests" + assert provider.t("test", count=2) == "tests" + + provider = JsonProvider({"test": "zero tests | one test | {count} tests"}) + assert provider.t("test", count=0) == "zero tests" + assert provider.t("test", count=0.5) == "0.5 tests" + assert provider.t("test", count=1) == "one test" + assert provider.t("test", count=1.5) == "1.5 tests" + assert provider.t("test", count=2) == "2 tests" + + def test_json_provider_nested_keys(): nested_dict = { "root": { From 2cfc63b3026e69b4b654180f915b6f02f4809b61 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Sat, 9 Dec 2023 17:19:06 +0000 Subject: [PATCH 02/47] added timedelta translations --- mealie/lang/messages/en-US.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/en-US.json b/mealie/lang/messages/en-US.json index a4990159d5d5..16bee3cc7743 100644 --- a/mealie/lang/messages/en-US.json +++ b/mealie/lang/messages/en-US.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 408df286fd0d8dbf883731ae0a3950d86066be60 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Sat, 9 Dec 2023 17:19:19 +0000 Subject: [PATCH 03/47] added translator to scraper --- mealie/routes/groups/controller_migrations.py | 1 + mealie/routes/recipe/recipe_crud_routes.py | 6 +-- mealie/services/migrations/_migration_base.py | 13 +++++- mealie/services/scraper/cleaner.py | 40 ++++++++++--------- .../services/scraper/recipe_bulk_scraper.py | 8 +++- mealie/services/scraper/recipe_scraper.py | 6 ++- mealie/services/scraper/scraper.py | 5 ++- mealie/services/scraper/scraper_strategies.py | 4 +- 8 files changed, 52 insertions(+), 31 deletions(-) diff --git a/mealie/routes/groups/controller_migrations.py b/mealie/routes/groups/controller_migrations.py index 3beba1083f41..3ec1ca26eb5a 100644 --- a/mealie/routes/groups/controller_migrations.py +++ b/mealie/routes/groups/controller_migrations.py @@ -44,6 +44,7 @@ class GroupMigrationController(BaseUserController): "user_id": self.user.id, "group_id": self.group_id, "add_migration_tag": add_migration_tag, + "translator": self.translator, } table: dict[SupportedMigrations, type[BaseMigrator]] = { diff --git a/mealie/routes/recipe/recipe_crud_routes.py b/mealie/routes/recipe/recipe_crud_routes.py index bace402ebd2e..d479fe2f4ca7 100644 --- a/mealie/routes/recipe/recipe_crud_routes.py +++ b/mealie/routes/recipe/recipe_crud_routes.py @@ -167,7 +167,7 @@ class RecipeController(BaseRecipeController): async def parse_recipe_url(self, req: ScrapeRecipe): """Takes in a URL and attempts to scrape data and load it into the database""" try: - recipe, extras = await create_from_url(req.url) + recipe, extras = await create_from_url(req.url, self.translator) except ForceTimeoutException as e: raise HTTPException( status_code=408, detail=ErrorResponse.respond(message="Recipe Scraping Timed Out") @@ -196,7 +196,7 @@ class RecipeController(BaseRecipeController): @router.post("/create-url/bulk", status_code=202) def parse_recipe_url_bulk(self, bulk: CreateRecipeByUrlBulk, bg_tasks: BackgroundTasks): """Takes in a URL and attempts to scrape data and load it into the database""" - bulk_scraper = RecipeBulkScraperService(self.service, self.repos, self.group) + bulk_scraper = RecipeBulkScraperService(self.service, self.repos, self.group, self.translator) report_id = bulk_scraper.get_report_id() bg_tasks.add_task(bulk_scraper.scrape, bulk) @@ -211,7 +211,7 @@ class RecipeController(BaseRecipeController): async def test_parse_recipe_url(self, url: ScrapeRecipeTest): # Debugger should produce the same result as the scraper sees before cleaning try: - if scraped_data := await RecipeScraperPackage(url.url).scrape_url(): + if scraped_data := await RecipeScraperPackage(url.url, self.translator).scrape_url(): return scraped_data.schema.data except ForceTimeoutException as e: raise HTTPException( diff --git a/mealie/services/migrations/_migration_base.py b/mealie/services/migrations/_migration_base.py index 1268a38fb7cd..6cfa6fa3012c 100644 --- a/mealie/services/migrations/_migration_base.py +++ b/mealie/services/migrations/_migration_base.py @@ -6,6 +6,7 @@ from pydantic import UUID4 from mealie.core import root_logger from mealie.core.exceptions import UnexpectedNone +from mealie.lang.providers import Translator from mealie.repos.all_repositories import AllRepositories from mealie.schema.recipe import Recipe from mealie.schema.recipe.recipe_settings import RecipeSettings @@ -35,12 +36,20 @@ class BaseMigrator(BaseService): helpers: DatabaseMigrationHelpers def __init__( - self, archive: Path, db: AllRepositories, session, user_id: UUID4, group_id: UUID, add_migration_tag: bool + self, + archive: Path, + db: AllRepositories, + session, + user_id: UUID4, + group_id: UUID, + add_migration_tag: bool, + translator: Translator, ): self.archive = archive self.db = db self.session = session self.add_migration_tag = add_migration_tag + self.translator = translator user = db.users.get_one(user_id) if not user: @@ -225,6 +234,6 @@ class BaseMigrator(BaseService): with contextlib.suppress(KeyError): del recipe_dict["id"] - recipe_dict = cleaner.clean(recipe_dict, url=recipe_dict.get("org_url", None)) + recipe_dict = cleaner.clean(recipe_dict, self.translator, url=recipe_dict.get("org_url", None)) return Recipe(**recipe_dict) diff --git a/mealie/services/scraper/cleaner.py b/mealie/services/scraper/cleaner.py index f4bfc0ad7083..294b5c99b42f 100644 --- a/mealie/services/scraper/cleaner.py +++ b/mealie/services/scraper/cleaner.py @@ -10,6 +10,7 @@ from datetime import datetime, timedelta from slugify import slugify from mealie.core.root_logger import get_logger +from mealie.lang.providers import Translator logger = get_logger("recipe-scraper") @@ -32,7 +33,7 @@ MATCH_ERRONEOUS_WHITE_SPACE = re.compile(r"\n\s*\n") """ Matches multiple new lines and removes erroneous white space """ -def clean(recipe_data: dict, url=None) -> dict: +def clean(recipe_data: dict, translator: Translator, url=None) -> dict: """Main entrypoint to clean a recipe extracted from the web and format the data into an accectable format for the database @@ -45,9 +46,9 @@ def clean(recipe_data: dict, url=None) -> dict: recipe_data["description"] = clean_string(recipe_data.get("description", "")) # Times - recipe_data["prepTime"] = clean_time(recipe_data.get("prepTime")) - recipe_data["performTime"] = clean_time(recipe_data.get("performTime")) - recipe_data["totalTime"] = clean_time(recipe_data.get("totalTime")) + recipe_data["prepTime"] = clean_time(recipe_data.get("prepTime"), translator) + recipe_data["performTime"] = clean_time(recipe_data.get("performTime"), translator) + recipe_data["totalTime"] = clean_time(recipe_data.get("totalTime"), translator) recipe_data["recipeCategory"] = clean_categories(recipe_data.get("recipeCategory", [])) recipe_data["recipeYield"] = clean_yield(recipe_data.get("recipeYield")) recipe_data["recipeIngredient"] = clean_ingredients(recipe_data.get("recipeIngredient", [])) @@ -332,7 +333,7 @@ def clean_yield(yld: str | list[str] | None) -> str: return yld -def clean_time(time_entry: str | timedelta | None) -> None | str: +def clean_time(time_entry: str | timedelta | None, translator: Translator) -> None | str: """_summary_ Supported Structures: @@ -358,11 +359,11 @@ def clean_time(time_entry: str | timedelta | None) -> None | str: try: time_delta_instructionsect = parse_duration(time_entry) - return pretty_print_timedelta(time_delta_instructionsect) + return pretty_print_timedelta(time_delta_instructionsect, translator) except ValueError: return str(time_entry) case timedelta(): - return pretty_print_timedelta(time_entry) + return pretty_print_timedelta(time_entry, translator) case {"minValue": str(value)}: return clean_time(value) case [str(), *_]: @@ -371,7 +372,7 @@ def clean_time(time_entry: str | timedelta | None) -> None | str: # TODO: Not sure what to do here return str(time_entry) case _: - logger.warning("[SCRAPER] Unexpected type or structure for time_entrys") + logger.warning("[SCRAPER] Unexpected type or structure for time_entries") return None @@ -405,25 +406,25 @@ def parse_duration(iso_duration: str) -> timedelta: return timedelta(**times) -def pretty_print_timedelta(t: timedelta, max_components=None, max_decimal_places=2): +def pretty_print_timedelta(t: timedelta, translator: Translator, max_components=None, max_decimal_places=2): """ Print a pretty string for a timedelta. For example datetime.timedelta(days=2, seconds=17280) will be printed as '2 days 4 Hours 48 Minutes'. Setting max_components to e.g. 1 will change this to '2.2 days', where the number of decimal points can also be set. """ - time_scale_names_dict = { - timedelta(days=365): "year", - timedelta(days=1): "day", - timedelta(hours=1): "Hour", - timedelta(minutes=1): "Minute", - timedelta(seconds=1): "Second", - timedelta(microseconds=1000): "millisecond", - timedelta(microseconds=1): "microsecond", + time_scale_translation_keys_dict = { + timedelta(days=365): "datetime.year", + timedelta(days=1): "datetime.day", + timedelta(hours=1): "datetime.hour", + timedelta(minutes=1): "datetime.minute", + timedelta(seconds=1): "datetime.second", + timedelta(microseconds=1000): "datetime.millisecond", + timedelta(microseconds=1): "datetime.microsecond", } count = 0 out_list = [] - for scale, scale_name in time_scale_names_dict.items(): + for scale, scale_translation_key in time_scale_translation_keys_dict.items(): if t >= scale: count += 1 n = t / scale if count == max_components else int(t / scale) @@ -433,7 +434,8 @@ def pretty_print_timedelta(t: timedelta, max_components=None, max_decimal_places if n_txt[-2:] == ".0": n_txt = n_txt[:-2] - out_list.append(f"{n_txt} {scale_name}{'s' if n > 1 else ''}") + scale_value = translator.t(scale_translation_key, count=n) + out_list.append(f"{n_txt} {scale_value}") if out_list == []: return "none" diff --git a/mealie/services/scraper/recipe_bulk_scraper.py b/mealie/services/scraper/recipe_bulk_scraper.py index ed701ecc3886..bfd714941152 100644 --- a/mealie/services/scraper/recipe_bulk_scraper.py +++ b/mealie/services/scraper/recipe_bulk_scraper.py @@ -2,6 +2,7 @@ import asyncio from pydantic import UUID4 +from mealie.lang.providers import Translator from mealie.repos.repository_factory import AllRepositories from mealie.schema.recipe.recipe import CreateRecipeByUrlBulk, Recipe from mealie.schema.reports.reports import ( @@ -20,11 +21,14 @@ from mealie.services.scraper.scraper import create_from_url class RecipeBulkScraperService(BaseService): report_entries: list[ReportEntryCreate] - def __init__(self, service: RecipeService, repos: AllRepositories, group: GroupInDB) -> None: + def __init__( + self, service: RecipeService, repos: AllRepositories, group: GroupInDB, translator: Translator + ) -> None: self.service = service self.repos = repos self.group = group self.report_entries = [] + self.translator = translator super().__init__() @@ -81,7 +85,7 @@ class RecipeBulkScraperService(BaseService): async def _do(url: str) -> Recipe | None: async with sem: try: - recipe, _ = await create_from_url(url) + recipe, _ = await create_from_url(url, self.translator) return recipe except Exception as e: self.service.logger.error(f"failed to scrape url during bulk url import {url}") diff --git a/mealie/services/scraper/recipe_scraper.py b/mealie/services/scraper/recipe_scraper.py index a9faeeccb6fc..90a81c636025 100644 --- a/mealie/services/scraper/recipe_scraper.py +++ b/mealie/services/scraper/recipe_scraper.py @@ -1,3 +1,4 @@ +from mealie.lang.providers import Translator from mealie.schema.recipe.recipe import Recipe from mealie.services.scraper.scraped_extras import ScrapedExtras @@ -14,11 +15,12 @@ class RecipeScraper: # List of recipe scrapers. Note that order matters scrapers: list[type[ABCScraperStrategy]] - def __init__(self, scrapers: list[type[ABCScraperStrategy]] | None = None) -> None: + def __init__(self, translator: Translator, scrapers: list[type[ABCScraperStrategy]] | None = None) -> None: if scrapers is None: scrapers = DEFAULT_SCRAPER_STRATEGIES self.scrapers = scrapers + self.translator = translator async def scrape(self, url: str) -> tuple[Recipe, ScrapedExtras] | tuple[None, None]: """ @@ -26,7 +28,7 @@ class RecipeScraper: """ for scraper_type in self.scrapers: - scraper = scraper_type(url) + scraper = scraper_type(url, self.translator) result = await scraper.parse() if result is not None: diff --git a/mealie/services/scraper/scraper.py b/mealie/services/scraper/scraper.py index eb8d415b88d5..bcd240edd302 100644 --- a/mealie/services/scraper/scraper.py +++ b/mealie/services/scraper/scraper.py @@ -5,6 +5,7 @@ from fastapi import HTTPException, status from slugify import slugify from mealie.core.root_logger import get_logger +from mealie.lang.providers import Translator from mealie.pkgs import cache from mealie.schema.recipe import Recipe from mealie.services.recipe.recipe_data_service import RecipeDataService @@ -19,7 +20,7 @@ class ParserErrors(str, Enum): CONNECTION_ERROR = "CONNECTION_ERROR" -async def create_from_url(url: str) -> tuple[Recipe, ScrapedExtras | None]: +async def create_from_url(url: str, translator: Translator) -> tuple[Recipe, ScrapedExtras | None]: """Main entry point for generating a recipe from a URL. Pass in a URL and a Recipe object will be returned if successful. @@ -29,7 +30,7 @@ async def create_from_url(url: str) -> tuple[Recipe, ScrapedExtras | None]: Returns: Recipe: Recipe Object """ - scraper = RecipeScraper() + scraper = RecipeScraper(translator) new_recipe, extras = await scraper.scrape(url) if not new_recipe: diff --git a/mealie/services/scraper/scraper_strategies.py b/mealie/services/scraper/scraper_strategies.py index fd51498023a4..a995ba389204 100644 --- a/mealie/services/scraper/scraper_strategies.py +++ b/mealie/services/scraper/scraper_strategies.py @@ -11,6 +11,7 @@ from slugify import slugify from w3lib.html import get_base_url from mealie.core.root_logger import get_logger +from mealie.lang.providers import Translator from mealie.schema.recipe.recipe import Recipe, RecipeStep from mealie.services.scraper.scraped_extras import ScrapedExtras @@ -77,9 +78,10 @@ class ABCScraperStrategy(ABC): url: str - def __init__(self, url: str) -> None: + def __init__(self, url: str, translator: Translator) -> None: self.logger = get_logger() self.url = url + self.translator = translator @abstractmethod async def get_html(self, url: str) -> str: From 3a30b3216ee69c34bfa960ed9e160dc76675cee9 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Sat, 9 Dec 2023 17:19:27 +0000 Subject: [PATCH 04/47] fixed tests --- .../scraper_tests/test_cleaner.py | 7 +++++-- .../scraper_tests/test_cleaner_parts.py | 21 +++++++++++-------- tests/unit_tests/test_recipe_parser.py | 6 ++++-- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/tests/unit_tests/services_tests/scraper_tests/test_cleaner.py b/tests/unit_tests/services_tests/scraper_tests/test_cleaner.py index 395b943016d2..7e7bf047fa61 100644 --- a/tests/unit_tests/services_tests/scraper_tests/test_cleaner.py +++ b/tests/unit_tests/services_tests/scraper_tests/test_cleaner.py @@ -4,6 +4,7 @@ from pathlib import Path import pytest +from mealie.lang.providers import local_provider from mealie.services.scraper import cleaner from mealie.services.scraper.scraper_strategies import RecipeScraperOpenGraph from tests import data as test_data @@ -37,15 +38,17 @@ test_cleaner_data = [ @pytest.mark.parametrize("json_file,num_steps", test_cleaner_data) def test_cleaner_clean(json_file: Path, num_steps): - recipe_data = cleaner.clean(json.loads(json_file.read_text())) + translator = local_provider() + recipe_data = cleaner.clean(json.loads(json_file.read_text()), translator) assert len(recipe_data["recipeInstructions"]) == num_steps def test_html_with_recipe_data(): path = test_data.html_healthy_pasta_bake_60759 url = "https://www.bbc.co.uk/food/recipes/healthy_pasta_bake_60759" + translator = local_provider() - open_graph_strategy = RecipeScraperOpenGraph(url) + open_graph_strategy = RecipeScraperOpenGraph(url, translator) recipe_data = open_graph_strategy.get_recipe_fields(path.read_text()) diff --git a/tests/unit_tests/services_tests/scraper_tests/test_cleaner_parts.py b/tests/unit_tests/services_tests/scraper_tests/test_cleaner_parts.py index 67cbf9b34869..5fedb073b7cc 100644 --- a/tests/unit_tests/services_tests/scraper_tests/test_cleaner_parts.py +++ b/tests/unit_tests/services_tests/scraper_tests/test_cleaner_parts.py @@ -4,6 +4,7 @@ from typing import Any import pytest +from mealie.lang.providers import local_provider from mealie.services.scraper import cleaner @@ -324,32 +325,32 @@ time_test_cases = ( CleanerCase( test_id="timedelta", input=timedelta(minutes=30), - expected="30 Minutes", + expected="30 minutes", ), CleanerCase( test_id="timedelta string (1)", input="PT2H30M", - expected="2 Hours 30 Minutes", + expected="2 hours 30 minutes", ), CleanerCase( test_id="timedelta string (2)", input="PT30M", - expected="30 Minutes", + expected="30 minutes", ), CleanerCase( test_id="timedelta string (3)", input="PT2H", - expected="2 Hours", + expected="2 hours", ), CleanerCase( test_id="timedelta string (4)", input="P1DT1H1M1S", - expected="1 day 1 Hour 1 Minute 1 Second", + expected="1 day 1 hour 1 minute 1 second", ), CleanerCase( test_id="timedelta string (4)", input="P1DT1H1M1.53S", - expected="1 day 1 Hour 1 Minute 1 Second", + expected="1 day 1 hour 1 minute 1 second", ), CleanerCase( test_id="timedelta string (5) invalid", @@ -366,7 +367,8 @@ time_test_cases = ( @pytest.mark.parametrize("case", time_test_cases, ids=(x.test_id for x in time_test_cases)) def test_cleaner_clean_time(case: CleanerCase): - result = cleaner.clean_time(case.input) + translator = local_provider() + result = cleaner.clean_time(case.input, translator) assert case.expected == result @@ -536,10 +538,11 @@ def test_cleaner_clean_nutrition(case: CleanerCase): @pytest.mark.parametrize( "t,max_components,max_decimal_places,expected", [ - (timedelta(days=2, seconds=17280), None, 2, "2 days 4 Hours 48 Minutes"), + (timedelta(days=2, seconds=17280), None, 2, "2 days 4 hours 48 minutes"), (timedelta(days=2, seconds=17280), 1, 2, "2.2 days"), (timedelta(days=365), None, 2, "1 year"), ], ) def test_pretty_print_timedelta(t, max_components, max_decimal_places, expected): - assert cleaner.pretty_print_timedelta(t, max_components, max_decimal_places) == expected + translator = local_provider() + assert cleaner.pretty_print_timedelta(t, translator, max_components, max_decimal_places) == expected diff --git a/tests/unit_tests/test_recipe_parser.py b/tests/unit_tests/test_recipe_parser.py index b583543a55f7..e7515d73d98c 100644 --- a/tests/unit_tests/test_recipe_parser.py +++ b/tests/unit_tests/test_recipe_parser.py @@ -1,5 +1,6 @@ import pytest +from mealie.lang.providers import local_provider from mealie.services.scraper import scraper from tests.utils.recipe_data import RecipeSiteTestCase, get_recipe_test_cases @@ -18,9 +19,10 @@ and then use this test case by removing the `@pytest.mark.skip` and than testing @pytest.mark.parametrize("recipe_test_data", test_cases) @pytest.mark.asyncio async def test_recipe_parser(recipe_test_data: RecipeSiteTestCase): - recipe, _ = await scraper.create_from_url(recipe_test_data.url) + translator = local_provider() + recipe, _ = await scraper.create_from_url(recipe_test_data.url, translator) assert recipe.slug == recipe_test_data.expected_slug - assert len(recipe.recipe_instructions) == recipe_test_data.num_steps + assert len(recipe.recipe_instructions or []) == recipe_test_data.num_steps assert len(recipe.recipe_ingredient) == recipe_test_data.num_ingredients assert recipe.org_url == recipe_test_data.url From 437f5c454f484f5f5fb097c204c17f0616b9e5d3 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Sat, 9 Dec 2023 22:04:21 +0000 Subject: [PATCH 05/47] fixed missing translator --- mealie/services/scraper/scraper_strategies.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/mealie/services/scraper/scraper_strategies.py b/mealie/services/scraper/scraper_strategies.py index a995ba389204..2a9046b5843a 100644 --- a/mealie/services/scraper/scraper_strategies.py +++ b/mealie/services/scraper/scraper_strategies.py @@ -105,7 +105,9 @@ class RecipeScraperPackage(ABCScraperStrategy): return await safe_scrape_html(url) def clean_scraper(self, scraped_data: SchemaScraperFactory.SchemaScraper, url: str) -> tuple[Recipe, ScrapedExtras]: - def try_get_default(func_call: Callable | None, get_attr: str, default: Any, clean_func=None): + def try_get_default( + func_call: Callable | None, get_attr: str, default: Any, clean_func=None, **clean_func_kwargs + ): value = default if func_call: @@ -121,7 +123,7 @@ class RecipeScraperPackage(ABCScraperStrategy): self.logger.error(f"Error parsing recipe attribute '{get_attr}'") if clean_func: - value = clean_func(value) + value = clean_func(value, **clean_func_kwargs) return value @@ -141,9 +143,9 @@ class RecipeScraperPackage(ABCScraperStrategy): except TypeError: return [] - cook_time = try_get_default(None, "performTime", None, cleaner.clean_time) or try_get_default( - None, "cookTime", None, cleaner.clean_time - ) + cook_time = try_get_default( + None, "performTime", None, cleaner.clean_time, translator=self.translator + ) or try_get_default(None, "cookTime", None, cleaner.clean_time, translator=self.translator) extras = ScrapedExtras() @@ -160,8 +162,8 @@ class RecipeScraperPackage(ABCScraperStrategy): scraped_data.ingredients, "recipeIngredient", [""], cleaner.clean_ingredients ), recipe_instructions=get_instructions(), - total_time=try_get_default(None, "totalTime", None, cleaner.clean_time), - prep_time=try_get_default(None, "prepTime", None, cleaner.clean_time), + total_time=try_get_default(None, "totalTime", None, cleaner.clean_time, translator=self.translator), + prep_time=try_get_default(None, "prepTime", None, cleaner.clean_time, translator=self.translator), perform_time=cook_time, org_url=url, ) From 94342081f97f248794042974ea302de2c2654553 Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Thu, 8 Feb 2024 14:43:13 +0000 Subject: [PATCH 06/47] I don't know why I changed this --- mealie/services/scraper/cleaner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mealie/services/scraper/cleaner.py b/mealie/services/scraper/cleaner.py index ba816e0365d3..ee64bd3e3945 100644 --- a/mealie/services/scraper/cleaner.py +++ b/mealie/services/scraper/cleaner.py @@ -375,7 +375,7 @@ def clean_time(time_entry: str | timedelta | None, translator: Translator) -> No # TODO: Not sure what to do here return str(time_entry) case _: - logger.warning("[SCRAPER] Unexpected type or structure for time_entries") + logger.warning("[SCRAPER] Unexpected type or structure for variable time_entry") return None From bb9620b67eef64160ac1270c0478c2fa77f8abf2 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:53:58 -0600 Subject: [PATCH 07/47] New translations en-us.json (Romanian) --- mealie/lang/messages/ro-RO.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/ro-RO.json b/mealie/lang/messages/ro-RO.json index 1507db797937..81c86e865817 100644 --- a/mealie/lang/messages/ro-RO.json +++ b/mealie/lang/messages/ro-RO.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} a fost actualizat, {url}", "generic-duplicated": "{name} a fost duplicat", "generic-deleted": "{name} a fost șters" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From a3693d83a3778890f38254b5fb5042e414a275ed Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:53:59 -0600 Subject: [PATCH 08/47] New translations en-us.json (French) --- mealie/lang/messages/fr-FR.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/fr-FR.json b/mealie/lang/messages/fr-FR.json index 16f7cc787356..fa3c806135c8 100644 --- a/mealie/lang/messages/fr-FR.json +++ b/mealie/lang/messages/fr-FR.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} a été mis à jour, {url}", "generic-duplicated": "{name} a été dupliqué", "generic-deleted": "{name} a été supprimé" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From d916c0a4722176405b43612e71c1edae2922cac6 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:00 -0600 Subject: [PATCH 09/47] New translations en-us.json (Spanish) --- mealie/lang/messages/es-ES.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/es-ES.json b/mealie/lang/messages/es-ES.json index c982a50319a2..b7ee19a8697e 100644 --- a/mealie/lang/messages/es-ES.json +++ b/mealie/lang/messages/es-ES.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "Se ha actualizado {name}, {url}", "generic-duplicated": "Se ha duplicado {name}", "generic-deleted": "Se ha eliminado {name}" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 5a7dc14a48f24f625e09eaafa6299e525cf17cda Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:00 -0600 Subject: [PATCH 10/47] New translations en-us.json (Afrikaans) --- mealie/lang/messages/af-ZA.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/af-ZA.json b/mealie/lang/messages/af-ZA.json index d717ff2c73df..ec80ed4fe38d 100644 --- a/mealie/lang/messages/af-ZA.json +++ b/mealie/lang/messages/af-ZA.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} is opgedateer, {url}", "generic-duplicated": "{name} is gekopieer", "generic-deleted": "{name} is verwyder" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 9cf181b4155d6d33b0341e939567c1828f426a6d Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:01 -0600 Subject: [PATCH 11/47] New translations en-us.json (Arabic) --- mealie/lang/messages/ar-SA.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/ar-SA.json b/mealie/lang/messages/ar-SA.json index d5dc93c9570f..8251d6923d93 100644 --- a/mealie/lang/messages/ar-SA.json +++ b/mealie/lang/messages/ar-SA.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} تم تحديثه، {url}", "generic-duplicated": "تم تكرار {name}", "generic-deleted": "تم حذف {name}" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From d954869dd773e1c5f3af743d4ba141f5aded457e Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:02 -0600 Subject: [PATCH 12/47] New translations en-us.json (Bulgarian) --- frontend/lang/messages/bg-BG.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/frontend/lang/messages/bg-BG.json b/frontend/lang/messages/bg-BG.json index 0c7a74e3efe0..35e0b0872fd8 100644 --- a/frontend/lang/messages/bg-BG.json +++ b/frontend/lang/messages/bg-BG.json @@ -200,7 +200,7 @@ "created-on-date": "Създадено на {0}", "unsaved-changes": "Имате незапазени промени. Желаете ли да ги запазите преди да излезете? Натиснете Ок за запазване и Отказ за отхвърляне на промените.", "clipboard-copy-failure": "Линкът към рецептата е копиран в клипборда.", - "confirm-delete-generic-items": "Are you sure you want to delete the following items?" + "confirm-delete-generic-items": "Сигурни ли сте, че желаете да изтриете следните елементи?" }, "group": { "are-you-sure-you-want-to-delete-the-group": "Сигурни ли сте, че искате да изтриете {groupName}?", @@ -259,7 +259,7 @@ }, "meal-plan": { "create-a-new-meal-plan": "Създаване на нов хранителен план", - "update-this-meal-plan": "Update this Meal Plan", + "update-this-meal-plan": "Обнови този План за хранене", "dinner-this-week": "Вечеря тази седмица", "dinner-today": "Вечеря Днес", "dinner-tonight": "Вечеря ТАЗИ ВЕЧЕР", @@ -474,11 +474,11 @@ "add-to-timeline": "Добави към времевата линия", "recipe-added-to-list": "Рецептата е добавена към списъка", "recipes-added-to-list": "Рецептите са добавени към списъка", - "successfully-added-to-list": "Successfully added to list", + "successfully-added-to-list": "Успешно добавено в списъка", "recipe-added-to-mealplan": "Рецептата е добавена към хранителния план", "failed-to-add-recipes-to-list": "Неуспешно добавяне на рецепта към списъка", "failed-to-add-recipe-to-mealplan": "Рецептата не беше добавена към хранителния план", - "failed-to-add-to-list": "Failed to add to list", + "failed-to-add-to-list": "Неуспешно добавяне към списъка", "yield": "Добив", "quantity": "Количество", "choose-unit": "Избери единица", @@ -537,8 +537,8 @@ "new-recipe-names-must-be-unique": "Името на рецептата трябва да бъде уникално", "scrape-recipe": "Обхождане на рецепта", "scrape-recipe-description": "Обходи рецепта по линк. Предоставете линк за сайт, който искате да бъде обходен. Mealie ще опита да обходи рецептата от този сайт и да я добави във Вашата колекция.", - "scrape-recipe-have-a-lot-of-recipes": "Have a lot of recipes you want to scrape at once?", - "scrape-recipe-suggest-bulk-importer": "Try out the bulk importer", + "scrape-recipe-have-a-lot-of-recipes": "Имате много рецепти, които искате да обходите наведнъж?", + "scrape-recipe-suggest-bulk-importer": "Пробвайте масовото импорторане", "import-original-keywords-as-tags": "Импортирай оригиналните ключови думи като тагове", "stay-in-edit-mode": "Остани в режим на редакция", "import-from-zip": "Импортирай от Zip", @@ -562,7 +562,7 @@ "upload-image": "Качване на изображение", "screen-awake": "Запази екрана активен", "remove-image": "Премахване на изображение", - "nextStep": "Next step" + "nextStep": "Следваща стъпка" }, "search": { "advanced-search": "Разширено търсене", @@ -1187,7 +1187,7 @@ "require-all-tools": "Изискване на всички инструменти", "cookbook-name": "Име на книгата с рецепти", "cookbook-with-name": "Книга с рецепти {0}", - "create-a-cookbook": "Create a Cookbook", - "cookbook": "Cookbook" + "create-a-cookbook": "Създай Готварска книга", + "cookbook": "Готварска книга" } } From 88a52092376466d6048cf27e2076c36d7bac3aca Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:03 -0600 Subject: [PATCH 13/47] New translations en-us.json (Bulgarian) --- mealie/lang/messages/bg-BG.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/bg-BG.json b/mealie/lang/messages/bg-BG.json index 9673ffc2f82d..6b70987568ad 100644 --- a/mealie/lang/messages/bg-BG.json +++ b/mealie/lang/messages/bg-BG.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} беше актуализирано, {url}", "generic-duplicated": "{name} е дублицирано", "generic-deleted": "{name} беше изтрито" + }, + "datetime": { + "year": "година|години", + "day": "ден|дни", + "hour": "час|часове", + "minute": "минута|минути", + "second": "секунда|секунди", + "millisecond": "милисекунда|милисекунди", + "microsecond": "микросекунда|микросекунди" } } From 166f2486a2b6a89b4ab6be3b4aef1ca8f7df9aa9 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:04 -0600 Subject: [PATCH 14/47] New translations en-us.json (Catalan) --- mealie/lang/messages/ca-ES.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/ca-ES.json b/mealie/lang/messages/ca-ES.json index bb7cc17737fc..5257c1c1ad68 100644 --- a/mealie/lang/messages/ca-ES.json +++ b/mealie/lang/messages/ca-ES.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} ha estat actualitzat, {url}", "generic-duplicated": "S'ha duplicat {name}", "generic-deleted": "{name} ha estat eliminat" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From f74610a0f7e651ce4c63375ffd30fa74f48a47df Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:05 -0600 Subject: [PATCH 15/47] New translations en-us.json (Czech) --- mealie/lang/messages/cs-CZ.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/cs-CZ.json b/mealie/lang/messages/cs-CZ.json index 7753ac775190..a944f3a92910 100644 --- a/mealie/lang/messages/cs-CZ.json +++ b/mealie/lang/messages/cs-CZ.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} byl aktualizován, {url}", "generic-duplicated": "{name} byl duplikován", "generic-deleted": "{name} byl odstraněn" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 5f4a36bbd8056968621ceb6c4af2408d4c3bd3e6 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:06 -0600 Subject: [PATCH 16/47] New translations en-us.json (Danish) --- mealie/lang/messages/da-DK.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/da-DK.json b/mealie/lang/messages/da-DK.json index 4be73c5c5aee..987166defe69 100644 --- a/mealie/lang/messages/da-DK.json +++ b/mealie/lang/messages/da-DK.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} er blevet opdateret, {url}", "generic-duplicated": "{name} er blevet dublikeret", "generic-deleted": "{name} er blevet slettet" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From dddeed63599d6295de8b3b71a3d336b8f541a61d Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:07 -0600 Subject: [PATCH 17/47] New translations en-us.json (German) --- mealie/lang/messages/de-DE.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/de-DE.json b/mealie/lang/messages/de-DE.json index 3cd40401117a..07396530601a 100644 --- a/mealie/lang/messages/de-DE.json +++ b/mealie/lang/messages/de-DE.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} wurde aktualisiert, {url}", "generic-duplicated": "{name} wurde dupliziert", "generic-deleted": "{name} wurde gelöscht" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 82dcfb5635e88adcbed4e3ae8861077bfff68849 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:08 -0600 Subject: [PATCH 18/47] New translations en-us.json (Greek) --- mealie/lang/messages/el-GR.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/el-GR.json b/mealie/lang/messages/el-GR.json index a4990159d5d5..16bee3cc7743 100644 --- a/mealie/lang/messages/el-GR.json +++ b/mealie/lang/messages/el-GR.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From e6351273e278dfafbf206a63b391d2bc7895096d Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:09 -0600 Subject: [PATCH 19/47] New translations en-us.json (Finnish) --- mealie/lang/messages/fi-FI.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/fi-FI.json b/mealie/lang/messages/fi-FI.json index 4e9ac01bb7b1..ba1a8e074e30 100644 --- a/mealie/lang/messages/fi-FI.json +++ b/mealie/lang/messages/fi-FI.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} on päivitetty, {url}", "generic-duplicated": "{name} on kahdennettu", "generic-deleted": "{name} on poistettu" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From fb70bc76b3dfb17fb3bd3236f3a0030da54c6b51 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:10 -0600 Subject: [PATCH 20/47] New translations en-us.json (Hebrew) --- mealie/lang/messages/he-IL.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/he-IL.json b/mealie/lang/messages/he-IL.json index 9fc410fb3041..f36eb1411128 100644 --- a/mealie/lang/messages/he-IL.json +++ b/mealie/lang/messages/he-IL.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} עודכן, {url}", "generic-duplicated": "{name} שוכפל", "generic-deleted": "{name} נמחק" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From a12aba6b9d0b940017e7e397ba7a51964babfc23 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:11 -0600 Subject: [PATCH 21/47] New translations en-us.json (Hungarian) --- mealie/lang/messages/hu-HU.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/hu-HU.json b/mealie/lang/messages/hu-HU.json index 5594f035c3ed..d6c613245fcb 100644 --- a/mealie/lang/messages/hu-HU.json +++ b/mealie/lang/messages/hu-HU.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} frissítve, {url}", "generic-duplicated": "{name} duplikálva", "generic-deleted": "{name} törölve lett" + }, + "datetime": { + "year": "év|év", + "day": "nap/nap", + "hour": "óra|óra", + "minute": "perc/perc", + "second": "másodperc|másodperc", + "millisecond": "ezredmásodperc|ezredmásodperc", + "microsecond": "mikroszekundum|mikroszekundum" } } From de1486c57ff9476bd437bc3df03585ae44cc0dcf Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:12 -0600 Subject: [PATCH 22/47] New translations en-us.json (Italian) --- mealie/lang/messages/it-IT.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/it-IT.json b/mealie/lang/messages/it-IT.json index aae7613341a0..3e0adad96457 100644 --- a/mealie/lang/messages/it-IT.json +++ b/mealie/lang/messages/it-IT.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} è stato aggiornato, {url}", "generic-duplicated": "{name} è stato duplicato", "generic-deleted": "{name} è stato eliminato" + }, + "datetime": { + "year": "anno|anni", + "day": "giorno|giorni", + "hour": "ora|ore", + "minute": "minuto|minuti", + "second": "secondo|secondi", + "millisecond": "millisecondo|millisecondi", + "microsecond": "microsecondo|microsecondi" } } From 3ee53977ecfd6a3acc739ddb68d41de66b0fba30 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:12 -0600 Subject: [PATCH 23/47] New translations en-us.json (Japanese) --- mealie/lang/messages/ja-JP.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/ja-JP.json b/mealie/lang/messages/ja-JP.json index 25ad979ccdc0..5a3f3e0601da 100644 --- a/mealie/lang/messages/ja-JP.json +++ b/mealie/lang/messages/ja-JP.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 43174dcebe25bffd81bde551aeb68f57f7b484fe Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:13 -0600 Subject: [PATCH 24/47] New translations en-us.json (Korean) --- mealie/lang/messages/ko-KR.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/ko-KR.json b/mealie/lang/messages/ko-KR.json index a4990159d5d5..16bee3cc7743 100644 --- a/mealie/lang/messages/ko-KR.json +++ b/mealie/lang/messages/ko-KR.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From a14c1b48c64bae24fc2155951061db1ea2a8d830 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:15 -0600 Subject: [PATCH 25/47] New translations en-us.json (Lithuanian) --- mealie/lang/messages/lt-LT.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/lt-LT.json b/mealie/lang/messages/lt-LT.json index 79be148c6b7d..3433e0158c03 100644 --- a/mealie/lang/messages/lt-LT.json +++ b/mealie/lang/messages/lt-LT.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} atnaujintas, {url}", "generic-duplicated": "{name} buvo nukopijuotas", "generic-deleted": "{name} ištrintas" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From a071a7d16b2ca8b6a75a836728faba91877ff58b Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:16 -0600 Subject: [PATCH 26/47] New translations en-us.json (Dutch) --- mealie/lang/messages/nl-NL.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/nl-NL.json b/mealie/lang/messages/nl-NL.json index 3cc264704248..1a63e325a51c 100644 --- a/mealie/lang/messages/nl-NL.json +++ b/mealie/lang/messages/nl-NL.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} is bijgewerkt, {url}", "generic-duplicated": "(naam) is gekopieerd", "generic-deleted": "{name} is verwijderd" + }, + "datetime": { + "year": "jaar|jaren", + "day": "dag|dagen", + "hour": "uur|uren", + "minute": "minuut|minuten", + "second": "seconde|seconden", + "millisecond": "milliseconde milliseconden", + "microsecond": "microseconde microseconden" } } From 2aa8c5810a94e17a256b0f2bc8c08faade78bcc7 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:17 -0600 Subject: [PATCH 27/47] New translations en-us.json (Norwegian) --- mealie/lang/messages/no-NO.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/no-NO.json b/mealie/lang/messages/no-NO.json index 4fb57f87a1b2..307097513c38 100644 --- a/mealie/lang/messages/no-NO.json +++ b/mealie/lang/messages/no-NO.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} har blitt oppdatert, {url}", "generic-duplicated": "{name} har blitt duplisert", "generic-deleted": "{name} har blitt slettet" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 04176f692741f15b3a0312aa93a406fa3bde71ff Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:18 -0600 Subject: [PATCH 28/47] New translations en-us.json (Polish) --- mealie/lang/messages/pl-PL.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/pl-PL.json b/mealie/lang/messages/pl-PL.json index 5be65509c7dc..6bd2e8866eee 100644 --- a/mealie/lang/messages/pl-PL.json +++ b/mealie/lang/messages/pl-PL.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} został zaktualizowany. {url}", "generic-duplicated": "{name} został zduplikowany", "generic-deleted": "{name} został usunięty" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 3f9c46a763258396ae21b29248e01c9cee0d3c41 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:19 -0600 Subject: [PATCH 29/47] New translations en-us.json (Portuguese) --- mealie/lang/messages/pt-PT.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/pt-PT.json b/mealie/lang/messages/pt-PT.json index c84b060bcf5d..e0c59513670c 100644 --- a/mealie/lang/messages/pt-PT.json +++ b/mealie/lang/messages/pt-PT.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} foi atualizado, {url}", "generic-duplicated": "{name} foi duplicado", "generic-deleted": "{name} foi removido" + }, + "datetime": { + "year": "ano|anos", + "day": "dia|dias", + "hour": "hora|horas", + "minute": "minuto|minutos", + "second": "segundo|segundos", + "millisecond": "milissegundo|milissegundos", + "microsecond": "microssegundo|microssegundos" } } From d5d86488a012ab9ce567921127e9ffe5de1529b3 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:20 -0600 Subject: [PATCH 30/47] New translations en-us.json (Russian) --- mealie/lang/messages/ru-RU.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/ru-RU.json b/mealie/lang/messages/ru-RU.json index c123d0b62e45..39c23285a506 100644 --- a/mealie/lang/messages/ru-RU.json +++ b/mealie/lang/messages/ru-RU.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} был обновлен, {url}", "generic-duplicated": "Копия {name} была создана", "generic-deleted": "{name} был удален" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From ac5a63e32d34e59aada58d6c1a4b9fdd251b1be4 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:21 -0600 Subject: [PATCH 31/47] New translations en-us.json (Slovak) --- mealie/lang/messages/sk-SK.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/sk-SK.json b/mealie/lang/messages/sk-SK.json index 29efd24b3c35..dfc3423ded2b 100644 --- a/mealie/lang/messages/sk-SK.json +++ b/mealie/lang/messages/sk-SK.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} bol aktualizovaný, {url}", "generic-duplicated": "{name} bol duplikovaný", "generic-deleted": "{name} bol vymazaný" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 1b3cbb38aeb14921592e7f76b9634e0054ecedd9 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:22 -0600 Subject: [PATCH 32/47] New translations en-us.json (Slovenian) --- mealie/lang/messages/sl-SI.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/sl-SI.json b/mealie/lang/messages/sl-SI.json index f2d4fd205ee1..6502aa11f93e 100644 --- a/mealie/lang/messages/sl-SI.json +++ b/mealie/lang/messages/sl-SI.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} je bil posodobljen, {url}", "generic-duplicated": "{name} je bilo podvojeno", "generic-deleted": "{name} je bil izbrisan" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 90e373582b4c0f189ba7e9d01f06bbcb1bd78969 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:22 -0600 Subject: [PATCH 33/47] New translations en-us.json (Serbian (Cyrillic)) --- mealie/lang/messages/sr-SP.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/sr-SP.json b/mealie/lang/messages/sr-SP.json index 2b07d8cca182..d83526c1a0c9 100644 --- a/mealie/lang/messages/sr-SP.json +++ b/mealie/lang/messages/sr-SP.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} је ажурирано, {url}", "generic-duplicated": "{name} је дуплиран", "generic-deleted": "{name} је обрисан" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From b16fa49f16724435cc2a93ce7901f13bda7ef15b Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:23 -0600 Subject: [PATCH 34/47] New translations en-us.json (Swedish) --- mealie/lang/messages/sv-SE.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/sv-SE.json b/mealie/lang/messages/sv-SE.json index d9bc6728a9f3..d2e59308f6d3 100644 --- a/mealie/lang/messages/sv-SE.json +++ b/mealie/lang/messages/sv-SE.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} har uppdaterats, {url}", "generic-duplicated": "{name} har duplicerats", "generic-deleted": "{name} har tagits bort" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 22cc19a0857fd57f8db6736a751de4c9ff4f243d Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:24 -0600 Subject: [PATCH 35/47] New translations en-us.json (Turkish) --- mealie/lang/messages/tr-TR.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/tr-TR.json b/mealie/lang/messages/tr-TR.json index 8e60c7c1f891..b1292ad53462 100644 --- a/mealie/lang/messages/tr-TR.json +++ b/mealie/lang/messages/tr-TR.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} güncellendi, {url}", "generic-duplicated": "{name} yinelendi", "generic-deleted": "{name} silindi" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 7f6de730a392c6aa74403340f11224745c42d0c2 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:25 -0600 Subject: [PATCH 36/47] New translations en-us.json (Ukrainian) --- mealie/lang/messages/uk-UA.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/uk-UA.json b/mealie/lang/messages/uk-UA.json index aed591982bd7..bb0a9671a242 100644 --- a/mealie/lang/messages/uk-UA.json +++ b/mealie/lang/messages/uk-UA.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} оновлено, {url}", "generic-duplicated": "{name} дубльовано", "generic-deleted": "{name} видалено" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 2b711747656ff29b3b83bb774ed2f24925b8628f Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:26 -0600 Subject: [PATCH 37/47] New translations en-us.json (Chinese Simplified) --- mealie/lang/messages/zh-CN.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/zh-CN.json b/mealie/lang/messages/zh-CN.json index 68b2c62650ac..f77ed0464fdd 100644 --- a/mealie/lang/messages/zh-CN.json +++ b/mealie/lang/messages/zh-CN.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} 已创建, {url}", "generic-duplicated": "{name} 已复制", "generic-deleted": "{name} 已删除" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 6d64418727ef819de00f743f8f8482d3cacdfd98 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:27 -0600 Subject: [PATCH 38/47] New translations en-us.json (Chinese Traditional) --- mealie/lang/messages/zh-TW.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/zh-TW.json b/mealie/lang/messages/zh-TW.json index 1690e19e890f..0d5f022f301e 100644 --- a/mealie/lang/messages/zh-TW.json +++ b/mealie/lang/messages/zh-TW.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From a5e56dc97fd1ab9d827b1dea27288373559b9dde Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:27 -0600 Subject: [PATCH 39/47] New translations en-us.json (Vietnamese) --- mealie/lang/messages/vi-VN.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/vi-VN.json b/mealie/lang/messages/vi-VN.json index a4990159d5d5..16bee3cc7743 100644 --- a/mealie/lang/messages/vi-VN.json +++ b/mealie/lang/messages/vi-VN.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From dbec3e58f9f26e93bb1f36b3b6d1fc4e367d99ba Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:28 -0600 Subject: [PATCH 40/47] New translations en-us.json (Galician) --- mealie/lang/messages/gl-ES.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/gl-ES.json b/mealie/lang/messages/gl-ES.json index a4990159d5d5..16bee3cc7743 100644 --- a/mealie/lang/messages/gl-ES.json +++ b/mealie/lang/messages/gl-ES.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From f0d0d0d463e33369bbaee66fb2aee7760ec8ce1e Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:29 -0600 Subject: [PATCH 41/47] New translations en-us.json (Icelandic) --- mealie/lang/messages/is-IS.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/is-IS.json b/mealie/lang/messages/is-IS.json index a4990159d5d5..16bee3cc7743 100644 --- a/mealie/lang/messages/is-IS.json +++ b/mealie/lang/messages/is-IS.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 2244c3a8b52837d38e4177df7d084ba61356ff0e Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:30 -0600 Subject: [PATCH 42/47] New translations en-us.json (Portuguese, Brazilian) --- mealie/lang/messages/pt-BR.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/pt-BR.json b/mealie/lang/messages/pt-BR.json index 9adccaaa8e3f..b5fd9f9260c7 100644 --- a/mealie/lang/messages/pt-BR.json +++ b/mealie/lang/messages/pt-BR.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} foi atualizado, {url}", "generic-duplicated": "{name} foi duplicada", "generic-deleted": "{name} foi excluído" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 9ce71c911facda65b64d49f66e03d504f39be2a2 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:31 -0600 Subject: [PATCH 43/47] New translations en-us.json (Croatian) --- mealie/lang/messages/hr-HR.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/hr-HR.json b/mealie/lang/messages/hr-HR.json index 7301dc6a8bd6..fc112264c1f1 100644 --- a/mealie/lang/messages/hr-HR.json +++ b/mealie/lang/messages/hr-HR.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} je ažuriran, {url}", "generic-duplicated": "{name} je dupliciran", "generic-deleted": "{name} je obrisan" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 47086da6b698a48b249243bb16a8ae46417e4a00 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:32 -0600 Subject: [PATCH 44/47] New translations en-us.json (Latvian) --- mealie/lang/messages/lv-LV.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/lv-LV.json b/mealie/lang/messages/lv-LV.json index a4990159d5d5..16bee3cc7743 100644 --- a/mealie/lang/messages/lv-LV.json +++ b/mealie/lang/messages/lv-LV.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 3d0adda4055c83100054b712bd4b2cde22784cd4 Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:33 -0600 Subject: [PATCH 45/47] New translations en-us.json (English, United Kingdom) --- mealie/lang/messages/en-GB.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/en-GB.json b/mealie/lang/messages/en-GB.json index a4990159d5d5..16bee3cc7743 100644 --- a/mealie/lang/messages/en-GB.json +++ b/mealie/lang/messages/en-GB.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} has been updated, {url}", "generic-duplicated": "{name} has been duplicated", "generic-deleted": "{name} has been deleted" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 94a85f997787e9685a003cc6a886d315a54a587f Mon Sep 17 00:00:00 2001 From: Hayden <64056131+hay-kot@users.noreply.github.com> Date: Fri, 9 Feb 2024 02:54:34 -0600 Subject: [PATCH 46/47] New translations en-us.json (French, Canada) --- mealie/lang/messages/fr-CA.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mealie/lang/messages/fr-CA.json b/mealie/lang/messages/fr-CA.json index 082f05e7a9cc..10c677ae3347 100644 --- a/mealie/lang/messages/fr-CA.json +++ b/mealie/lang/messages/fr-CA.json @@ -31,5 +31,14 @@ "generic-updated-with-url": "{name} a été mis à jour, {url}", "generic-duplicated": "{name} a été dupliqué", "generic-deleted": "{name} a été supprimé" + }, + "datetime": { + "year": "year|years", + "day": "day|days", + "hour": "hour|hours", + "minute": "minute|minutes", + "second": "second|seconds", + "millisecond": "millisecond|milliseconds", + "microsecond": "microsecond|microseconds" } } From 1e04e9424f1e7f817b991fe9a1c3fc6547370917 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 Feb 2024 05:54:04 -0900 Subject: [PATCH 47/47] Update dependency python-slugify to v8.0.4 (#3131) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 5b64e4f68904..e63b8fbe213f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1979,13 +1979,13 @@ dev = ["atomicwrites (==1.2.1)", "attrs (==19.2.0)", "coverage (==6.5.0)", "hatc [[package]] name = "python-slugify" -version = "8.0.3" +version = "8.0.4" description = "A Python slugify application that also handles Unicode" optional = false python-versions = ">=3.7" files = [ - {file = "python-slugify-8.0.3.tar.gz", hash = "sha256:e04cba5f1c562502a1175c84a8bc23890c54cdaf23fccaaf0bf78511508cabed"}, - {file = "python_slugify-8.0.3-py2.py3-none-any.whl", hash = "sha256:c71189c161e8c671f1b141034d9a56308a8a5978cd13d40446c879569212fdd1"}, + {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"}, + {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"}, ] [package.dependencies]