diff -pruN 1.2.1-1/CONTRIBUTING.rst 1.2.2-1/CONTRIBUTING.rst
--- 1.2.1-1/CONTRIBUTING.rst	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/CONTRIBUTING.rst	2025-06-26 09:26:59.000000000 +0000
@@ -179,3 +179,16 @@ Whenever the content of
 the corresponding documentation table::
 
     dateparser_scripts/update_supported_languages_and_locales.py
+
+
+Updating the Timezone Cache
+----------------------------------------------------
+
+Whenever the content of
+``dateparser/timezones.py`` is modified you need to rebuild the timezone cache.
+
+Run this command:
+``BUILD_TZ_CACHE=1 python -c "import dateparser"``
+
+which should update
+``dateparser/data/dateparser_tz_cache.pkl``
diff -pruN 1.2.1-1/HISTORY.rst 1.2.2-1/HISTORY.rst
--- 1.2.1-1/HISTORY.rst	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/HISTORY.rst	2025-06-26 09:26:59.000000000 +0000
@@ -3,6 +3,19 @@
 History
 =======
 
+1.2.2 (2025-06-26)
+------------------
+
+Fixes:
+
+- Handle the Russian preposition “с” (#1261)
+- Fix weekday search (#1274)
+
+Improvements:
+
+- Add Python 3.14 support (#1273)
+- Cache timezone offsets to improve import time (#1250)
+
 1.2.1 (2025-02-05)
 ------------------
 
diff -pruN 1.2.1-1/MANIFEST.in 1.2.2-1/MANIFEST.in
--- 1.2.1-1/MANIFEST.in	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/MANIFEST.in	2025-06-26 09:26:59.000000000 +0000
@@ -3,6 +3,7 @@ include CONTRIBUTING.rst
 include HISTORY.rst
 include LICENSE
 include README.rst
+include dateparser/data/dateparser_tz_cache.pkl
 include dateparser_data/settings.py
 include requirements.txt
 
diff -pruN 1.2.1-1/dateparser/__init__.py 1.2.2-1/dateparser/__init__.py
--- 1.2.1-1/dateparser/__init__.py	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/dateparser/__init__.py	2025-06-26 09:26:59.000000000 +0000
@@ -1,4 +1,4 @@
-__version__ = "1.2.1"
+__version__ = "1.2.2"
 
 from .conf import apply_settings
 from .date import DateDataParser
Binary files 1.2.1-1/dateparser/data/dateparser_tz_cache.pkl and 1.2.2-1/dateparser/data/dateparser_tz_cache.pkl differ
diff -pruN 1.2.1-1/dateparser/parser.py 1.2.2-1/dateparser/parser.py
--- 1.2.1-1/dateparser/parser.py	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/dateparser/parser.py	2025-06-26 09:26:59.000000000 +0000
@@ -399,8 +399,8 @@ class _parser:
             return datetime(**params)
         except ValueError as e:
             error_text = e.__str__()
-            error_msgs = ["day is out of range", "day must be in"]
-            if error_msgs[0] in error_text or error_msgs[1] in error_text:
+            error_msgs = ["day is out of range", "day must be in", "must be in range"]
+            if any(msg in error_text for msg in error_msgs):
                 if not (self._token_day or hasattr(self, "_token_weekday")):
                     # if day is not available put last day of the month
                     params["day"] = get_last_day_of_month(
@@ -512,6 +512,10 @@ class _parser:
 
             dateobj = dateobj + delta
 
+            # set the token_month here so that it is not subsequently
+            # altered by _correct_for_month
+            self._token_month = dateobj.month
+
         # NOTE: If this assert fires, self.now needs to be made offset-aware in a similar
         # way that dateobj is temporarily made offset-aware.
         assert not (self.now.tzinfo is None and dateobj.tzinfo is not None), (
diff -pruN 1.2.1-1/dateparser/search/__init__.py 1.2.2-1/dateparser/search/__init__.py
--- 1.2.1-1/dateparser/search/__init__.py	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/dateparser/search/__init__.py	2025-06-26 09:26:59.000000000 +0000
@@ -57,6 +57,8 @@ def search_dates(
      ('on May 6th 2004', datetime.datetime(2004, 5, 6, 0, 0))]
 
     """
+    text = _search_with_detection.preprocess_text(text, languages)
+
     result = _search_with_detection.search_dates(
         text=text,
         languages=languages,
diff -pruN 1.2.1-1/dateparser/search/search.py 1.2.2-1/dateparser/search/search.py
--- 1.2.1-1/dateparser/search/search.py	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/dateparser/search/search.py	2025-06-26 09:26:59.000000000 +0000
@@ -295,3 +295,10 @@ class DateSearchWithDetection:
                 language_shortname, text, settings=settings
             ),
         }
+
+    def preprocess_text(self, text, languages):
+        """Preprocess text to handle language-specific quirks."""
+        if languages and "ru" in languages:
+            # Replace "с" (from) before numbers with a placeholder
+            text = re.sub(r"\bс\s+(?=\d)", "[FROM] ", text)
+        return text
diff -pruN 1.2.1-1/dateparser/timezone_parser.py 1.2.2-1/dateparser/timezone_parser.py
--- 1.2.1-1/dateparser/timezone_parser.py	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/dateparser/timezone_parser.py	2025-06-26 09:26:59.000000000 +0000
@@ -1,4 +1,8 @@
+import os
+import pickle
+import zlib
 from datetime import datetime, timedelta, timezone, tzinfo
+from pathlib import Path
 
 import regex as re
 
@@ -84,8 +88,47 @@ def get_local_tz_offset():
     return offset
 
 
-_search_regex_parts = []
-_tz_offsets = list(build_tz_offsets(_search_regex_parts))
-_search_regex = re.compile("|".join(_search_regex_parts))
-_search_regex_ignorecase = re.compile("|".join(_search_regex_parts), re.IGNORECASE)
 local_tz_offset = get_local_tz_offset()
+
+_tz_offsets = None
+_search_regex = None
+_search_regex_ignorecase = None
+
+
+def _load_offsets(cache_path, current_hash):
+    global _tz_offsets, _search_regex, _search_regex_ignorecase
+
+    try:
+        with open(cache_path, mode="rb") as file:
+            (
+                serialized_hash,
+                _tz_offsets,
+                _search_regex,
+                _search_regex_ignorecase,
+            ) = pickle.load(file)
+            if current_hash is None or current_hash == serialized_hash:
+                return
+    except (FileNotFoundError, ValueError, TypeError):
+        pass
+
+    _search_regex_parts = []
+    _tz_offsets = list(build_tz_offsets(_search_regex_parts))
+    _search_regex = re.compile("|".join(_search_regex_parts))
+    _search_regex_ignorecase = re.compile("|".join(_search_regex_parts), re.IGNORECASE)
+
+    with open(cache_path, mode="wb") as file:
+        pickle.dump(
+            (current_hash, _tz_offsets, _search_regex, _search_regex_ignorecase),
+            file,
+            protocol=5,
+        )
+
+
+CACHE_PATH = Path(__file__).parent.joinpath("data", "dateparser_tz_cache.pkl")
+
+if "BUILD_TZ_CACHE" in os.environ:
+    current_hash = zlib.crc32(str(timezone_info_list).encode("utf-8"))
+else:
+    current_hash = None
+
+_load_offsets(CACHE_PATH, current_hash)
diff -pruN 1.2.1-1/debian/changelog 1.2.2-1/debian/changelog
--- 1.2.1-1/debian/changelog	2025-04-14 16:30:31.000000000 +0000
+++ 1.2.2-1/debian/changelog	2025-12-05 06:30:36.000000000 +0000
@@ -1,3 +1,18 @@
+dateparser (1.2.2-1) unstable; urgency=medium
+
+  * Team Upload
+  * New upstream version 1.2.2
+  * Bump Standards-Version to 4.7.2
+  * Drop "Rules-Requires-Root: no": it is the default now
+  * Replace transitional python3-tz dependency with python3-pytz
+  * Add debian/salsa-ci.yml
+  * Rewrite d/watch in v5 format
+
+  [ Chris Lamb ]
+  * make the build reproducible (Closes: #1120352)
+
+ -- Alexandre Detiste <tchet@debian.org>  Fri, 05 Dec 2025 07:30:36 +0100
+
 dateparser (1.2.1-1) unstable; urgency=medium
 
   * new upstream release
diff -pruN 1.2.1-1/debian/control 1.2.2-1/debian/control
--- 1.2.1-1/debian/control	2025-04-14 16:30:31.000000000 +0000
+++ 1.2.2-1/debian/control	2025-12-05 06:30:36.000000000 +0000
@@ -16,18 +16,17 @@ Build-Depends: debhelper-compat (= 13),
                python3-parameterized <!nocheck>,
                python3-parsel <!nocheck>,
                python3-pytest <!nocheck>,
+               python3-pytz <!nocheck>,
                python3-requests <!nocheck>,
                python3-ruamel.yaml <!nocheck>,
                python3-regex <!nocheck>,
                python3-setuptools,
-               python3-tz <!nocheck>,
                python3-tzlocal <!nocheck>,
                tzdata-legacy <!nocheck>,
-Standards-Version: 4.6.2
+Standards-Version: 4.7.2
 Homepage: https://github.com/scrapinghub/dateparser
 Vcs-Git: https://salsa.debian.org/python-team/packages/dateparser.git
 Vcs-Browser: https://salsa.debian.org/python-team/packages/dateparser
-Rules-Requires-Root: no
 
 Package: python3-dateparser
 Architecture: all
diff -pruN 1.2.1-1/debian/rules 1.2.2-1/debian/rules
--- 1.2.1-1/debian/rules	2025-04-14 16:30:31.000000000 +0000
+++ 1.2.2-1/debian/rules	2025-12-05 06:30:36.000000000 +0000
@@ -5,6 +5,7 @@ export PYBUILD_NAME=dateparser
 export PYBUILD_BEFORE_TEST=cp -r {dir}/dateparser_data/ {build_dir}
 export PYBUILD_TEST_ARGS=tests \
     -k 'not test_dateparser_data_integrity and not test_custom_language_detect_fast_text'
+export PYBUILD_AFTER_TEST=rm -rf {build_dir}/dateparser_data/
 
 %:
 	dh $@ --buildsystem=pybuild
diff -pruN 1.2.1-1/debian/salsa-ci.yml 1.2.2-1/debian/salsa-ci.yml
--- 1.2.1-1/debian/salsa-ci.yml	1970-01-01 00:00:00.000000000 +0000
+++ 1.2.2-1/debian/salsa-ci.yml	2025-12-05 06:30:36.000000000 +0000
@@ -0,0 +1,2 @@
+include:
+  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/recipes/debian.yml
diff -pruN 1.2.1-1/debian/tests/run-unittests 1.2.2-1/debian/tests/run-unittests
--- 1.2.1-1/debian/tests/run-unittests	2025-04-14 16:30:31.000000000 +0000
+++ 1.2.2-1/debian/tests/run-unittests	2025-12-05 06:30:36.000000000 +0000
@@ -9,6 +9,7 @@ cp -a dateparser_scripts tests $AUTOPKGT
 ln -s /usr/lib/python3/dist-packages/dateparser_data $AUTOPKGTEST_TMP
 
 cd $AUTOPKGTEST_TMP
+rm -vf ./tests/test_dateparser_data_integrity.py
 
 for py3vers in $(py3versions -s); do
     echo "Testing with $py3vers:"
diff -pruN 1.2.1-1/debian/watch 1.2.2-1/debian/watch
--- 1.2.1-1/debian/watch	2025-04-14 16:30:31.000000000 +0000
+++ 1.2.2-1/debian/watch	2025-12-05 06:30:36.000000000 +0000
@@ -1,4 +1,5 @@
-# Compulsory line, this is a version 4 file
-version=4
+Version: 5
 
-https://github.com/scrapinghub/dateparser/tags .*/archive/refs/tags/v?((?:\d+\.?)*)\.tar\.gz
+Template: GitHub
+Owner: scrapinghub
+Project: dateparser
diff -pruN 1.2.1-1/pyproject.toml 1.2.2-1/pyproject.toml
--- 1.2.1-1/pyproject.toml	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/pyproject.toml	2025-06-26 09:26:59.000000000 +0000
@@ -1,5 +1,5 @@
 [tool.bumpversion]
-current_version = "1.2.1"
+current_version = "1.2.2"
 commit = true
 tag = true
 
diff -pruN 1.2.1-1/setup.py 1.2.2-1/setup.py
--- 1.2.1-1/setup.py	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/setup.py	2025-06-26 09:26:59.000000000 +0000
@@ -31,7 +31,7 @@ setup(
     install_requires=[
         "python-dateutil>=2.7.0",
         "pytz>=2024.2",
-        "regex>=2015.06.24,!=2019.02.19,!=2021.8.27",
+        "regex>=2024.9.11",
         "tzlocal>=0.2",
     ],
     entry_points={
diff -pruN 1.2.1-1/tests/test_date_parser.py 1.2.2-1/tests/test_date_parser.py
--- 1.2.1-1/tests/test_date_parser.py	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/tests/test_date_parser.py	2025-06-26 09:26:59.000000000 +0000
@@ -630,6 +630,25 @@ class TestDateParser(BaseTestCase):
 
     @parameterized.expand(
         [
+            param("Monday", datetime(2015, 3, 2)),
+        ]
+    )
+    def test_preferably_future_dates_relative_last_week_of_month(
+        self, date_string, expected
+    ):
+        self.given_local_tz_offset(0)
+        self.given_parser(
+            settings={
+                "PREFER_DATES_FROM": "future",
+                "RELATIVE_BASE": datetime(2015, 2, 24, 15, 30),
+            }
+        )
+        self.when_date_is_parsed(date_string)
+        self.then_date_was_parsed_by_date_parser()
+        self.then_date_obj_exactly_is(expected)
+
+    @parameterized.expand(
+        [
             param("10 December", datetime(2015, 12, 10)),
             param("March", datetime(2015, 3, 15)),
             param("Friday", datetime(2015, 2, 13)),
@@ -875,7 +894,7 @@ class TestDateParser(BaseTestCase):
     ):
         self.when_date_is_parsed_by_date_parser(date_string)
         self.then_error_was_raised(
-            ValueError, ["day is out of range for month", message]
+            ValueError, ["day is out of range for month", "must be in range", message]
         )
 
     @parameterized.expand(
diff -pruN 1.2.1-1/tests/test_search.py 1.2.2-1/tests/test_search.py
--- 1.2.1-1/tests/test_search.py	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/tests/test_search.py	2025-06-26 09:26:59.000000000 +0000
@@ -410,7 +410,7 @@ class TestTranslateSearch(BaseTestCase):
                 "Die UdSSR blieb gemäß dem Neutralitätspakt "
                 "vom 13. April 1941 gegenüber Japan vorerst neutral.",
                 [
-                    ("Die", datetime.datetime(1999, 1, 28, 0, 0)),
+                    ("Die", datetime.datetime(1999, 12, 28, 0, 0)),
                     ("13. April 1941", datetime.datetime(1941, 4, 13, 0, 0)),
                 ],
                 settings={"RELATIVE_BASE": datetime.datetime(2000, 1, 1)},
@@ -1090,3 +1090,16 @@ class TestTranslateSearch(BaseTestCase):
             text=text, languages=languages, error_type=ValueError
         )
         self.check_error_message("Unknown language(s): 'unknown language code'")
+
+    def test_search_dates_with_prepositions(self):
+        """Test `search_dates` for parsing Russian date ranges with prepositions and language detection."""
+        result = search_dates(
+            "Сервис будет недоступен с 12 января по 30 апреля.",
+            add_detected_language=True,
+            languages=["ru"],
+        )
+        expected = [
+            ("12 января", datetime.datetime(2025, 1, 12, 0, 0), "ru"),
+            ("30 апреля", datetime.datetime(2025, 4, 30, 0, 0), "ru"),
+        ]
+        assert result == expected
diff -pruN 1.2.1-1/tox.ini 1.2.2-1/tox.ini
--- 1.2.1-1/tox.ini	2025-02-05 11:57:37.000000000 +0000
+++ 1.2.2-1/tox.ini	2025-06-26 09:26:59.000000000 +0000
@@ -27,7 +27,7 @@ deps =
     {[testenv]deps}
     python-dateutil==2.7.0
     pytz==2024.2
-    regex==2015.06.24
+    regex==2024.9.11
     tzlocal==0.2
 
 [testenv:min-all]
@@ -36,10 +36,11 @@ extras = {[testenv:all]extras}
 deps =
     {[testenv:min]deps}
     convertdate==2.2.1
-    fasttext==0.9.1
     hijridate==2.3.0
     langdetect==1.0.0
     numpy==1.19.3
+    # fasttext excluded due to
+    # https://github.com/facebookresearch/fastText/issues/512
 
 [testenv:scripts]
 deps =
