// з REQUEST_URI ─────────── require_once dirname(__DIR__) . '/phpadd/i18n/i18n.php'; $link_parse_go = (string) parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH); $_route = i18n_resolve($link_parse_go, $default_language, $active_languages); $lang = $_route['lang']; $country_s = $_route['country']; $id_s = $_route['id']; i18n_set(i18n_dict($lang, $default_language)); // lng() готовий $cookie_consent_show = i18n_consent_required(!empty($cookie_consent_enabled)); // ── Версіонований домен-архів (заморожені знімки поштових доменів) ── require_once dirname(__DIR__) . '/phpadd/name_gen/ng_domains.php'; // ── Детермінований seed (без БД) + ВЕРСІЯ знімка у перших 2 hex id. ── // POST/без валідного id → НОВА картка: id = <2hex current-версії> + 30hex random. // GET з валідним id → деталь: версію беремо з id → той самий заморожений знімок // доменів НАЗАВЖДИ (старий permalink не «з'їжджає»). Деталі — ng_domains.php. $is_post = isset($_POST['con'][0]); $is_detail = (!$is_post && $id_s !== ''); $id_s = preg_replace('/[^a-zA-Z0-9]/', '', (string) $id_s); if ($is_post || strlen($id_s) < 32) { $dom_version = ng_domain_current_version(); $id_s = ng_domain_version_prefix($dom_version) . bin2hex(random_bytes(15)); // 2+30 = 32 hex $is_detail = false; } else { $dom_version = hexdec(substr($id_s, 0, 2)); // версія знімка з permalink } // seed з УСЬОГО id (sha256 → 60-біт int). Детерміновано: id → seed → ті самі дані. $seed = (int) hexdec(substr(hash('sha256', $id_s), 0, 15)); mt_srand($seed); // усі rand()/mt_rand() нижче — відтворювані з id // Країна (валідація — нижче, після масиву $data_providers). if ($is_post) $countryset = (string) $_POST['con'][0]; elseif ($country_s !== "") $countryset = $country_s; else $countryset = "en_US"; // Слайдери форми (лише показ). У v1 на детермінований id НЕ впливають. $female_set = isset($_POST['perc']) ? (string)(int)$_POST['perc'] : "50"; $min_year = isset($_POST['miny']) ? (string)(int)$_POST['miny'] : "19"; $max_year = isset($_POST['maxy']) ? (string)(int)$_POST['maxy'] : "57"; $male_set = (string)(100 - (int)$female_set); $data_providers = Array( Array ('iso_639-1' => 'random','name' => 'Random','native_name' => 'Random','url_name' => 'random'), Array ('iso_639-1' => 'en_US','name' => 'English (United States)','native_name' => 'English (United States)','url_name' => 'english-united-states'), Array ('iso_639-1' => 'en_CA','name' => 'English (Canada)','native_name' => 'English (Canada)','url_name' => 'english-canada'), Array ('iso_639-1' => 'en_GB','name' => 'English (United Kingdom)','native_name' => 'English (United Kingdom)','url_name' => 'english-united-kingdom'), Array ('iso_639-1' => 'en_AU','name' => 'English (Australia)','native_name' => 'English (Australia)','url_name' => 'english-australia'), Array ('iso_639-1' => 'en_NZ','name' => 'English (New Zealand)','native_name' => 'English (New Zealand)','url_name' => 'english-new-zealand'), Array ('iso_639-1' => 'en_PH','name' => 'English (Philippines)','native_name' => 'English (Philippines)','url_name' => 'english-philippines'), Array ('iso_639-1' => 'en_UG','name' => 'English (Uganda)','native_name' => 'English (Uganda)','url_name' => 'english-uganda'), Array ('iso_639-1' => 'en_ZA','name' => 'English (South Africa)','native_name' => 'English (South Africa)','url_name' => 'english-south-africa'), Array ('iso_639-1' => 'de_AT','name' => 'German (Austria)','native_name' => 'Deutsch (Österreich)','url_name' => 'german-austria'), Array ('iso_639-1' => 'de_DE','name' => 'German (Germany)','native_name' => 'Deutsch (Deutschland)','url_name' => 'german_germany'), Array ('iso_639-1' => 'fr_BE','name' => 'French (Belgium)','native_name' => 'français (Belgique)','url_name' => 'french-belgium'), Array ('iso_639-1' => 'fr_CA','name' => 'French (Canada)','native_name' => 'français (Canada)','url_name' => 'french-canada'), Array ('iso_639-1' => 'fr_FR','name' => 'French (France)','native_name' => 'français (France)','url_name' => 'french-france'), Array ('iso_639-1' => 'ar_JO','name' => 'Arabic (Jordan)','native_name' => 'العربية (الأردن)','url_name' => 'arabic-jordan'), Array ('iso_639-1' => 'bg_BG','name' => 'Bulgarian (Bulgaria)','native_name' => 'български (България)','url_name' => 'bulgarian-bulgaria'), Array ('iso_639-1' => 'bn_BD','name' => 'Bengali (Bangladesh)','native_name' => 'বাংলা (বাংলাদেশ)','url_name' => 'bengali-bangladesh'), Array ('iso_639-1' => 'cs_CZ','name' => 'Czech (Czech Republic)','native_name' => 'čeština (Česká republika)','url_name' => 'czech-czech-republic'), Array ('iso_639-1' => 'da_DK','name' => 'Danish (Denmark)','native_name' => 'Dansk (Danmark)','url_name' => 'danish-denmark'), Array ('iso_639-1' => 'el_GR','name' => 'Greek (Greece)','native_name' => 'Ελληνικά (Ελλάδα)','url_name' => 'greek-greece'), Array ('iso_639-1' => 'es_AR','name' => 'Spanish (Argentina)','native_name' => 'español (Argentina)','url_name' => 'spanish-argentina'), Array ('iso_639-1' => 'es_ES','name' => 'Spanish (Spain)','native_name' => 'español (España)','url_name' => 'spanish-spain'), Array ('iso_639-1' => 'es_PE','name' => 'Spanish (Peru)','native_name' => 'español (Perú)','url_name' => 'spanish-peru'), Array ('iso_639-1' => 'es_VE','name' => 'Spanish (Venezuela)','native_name' => 'español (Venezuela)','url_name' => 'spanish-venezuela'), Array ('iso_639-1' => 'fa_IR','name' => 'Persian (Iran)','native_name' => 'فارسی (ایران)','url_name' => 'persian_Iran'), Array ('iso_639-1' => 'fi_FI','name' => 'Finnish (Finland)','native_name' => 'suomi (Suomi)','url_name' => 'finnish-finland'), Array ('iso_639-1' => 'hu_HU','name' => 'Hungarian (Hungary)','native_name' => 'magyar (Magyarország)','url_name' => 'hungarian-hungary'), Array ('iso_639-1' => 'hy_AM','name' => 'Armenian (Armenia)','native_name' => 'Հայերեն (Հայաստան)','url_name' => 'armenian-armenia'), Array ('iso_639-1' => 'id_ID','name' => 'Indonesian (Indonesia)','native_name' => 'Bahasa Indonesia (Indonesia)','url_name' => 'indonesian-indonesia'), Array ('iso_639-1' => 'is_IS','name' => 'Icelandic (Iceland)','native_name' => 'íslenska (Ísland)','url_name' => 'icelandic-iceland'), Array ('iso_639-1' => 'it_IT','name' => 'Italian (Italy)','native_name' => 'italiano (Italia)','url_name' => 'italian-italy'), Array ('iso_639-1' => 'ja_JP','name' => 'Japanese (Japan)','native_name' => '日本語 (日本)','url_name' => 'japanese-japan'), Array ('iso_639-1' => 'ka_GE','name' => 'Georgian (Georgia)','native_name' => 'ქართული (საქართველო)','url_name' => 'georgian-georgia'), Array ('iso_639-1' => 'kk_KZ','name' => 'Kazakh (Kazakhstan)','native_name' => 'Қазақ (Қазақстан)','url_name' => 'kazakh-kazakhstan'), Array ('iso_639-1' => 'ko_KR','name' => 'Korean (South Korea)','native_name' => '한국어 (대한민국)','url_name' => 'korean-south-korea'), Array ('iso_639-1' => 'lv_LV','name' => 'Latvian (Latvia)','native_name' => 'Latviešu (Latvija)','url_name' => 'latvian-latvia'), Array ('iso_639-1' => 'me_ME','name' => 'Montenegro (Montenegrin)','native_name' => 'Црна Гора (Црногорски)','url_name' => 'montenegro-montenegrin'), Array ('iso_639-1' => 'ne_NP','name' => 'Nepali (Nepal)','native_name' => 'नेपाली (नेपाल)','url_name' => 'nepali-nepal'), Array ('iso_639-1' => 'nl_BE','name' => 'Dutch (Belgium)','native_name' => 'Nederlands (België)','url_name' => 'dutch-belgium'), Array ('iso_639-1' => 'nl_NL','name' => 'Dutch (Netherlands)','native_name' => 'Nederlands (Nederland)','url_name' => 'dutch-netherlands'), Array ('iso_639-1' => 'no_NO','name' => 'Norwegian (Norway)','native_name' => 'norsk (Norge)','url_name' => 'norwegian-norway'), Array ('iso_639-1' => 'pl_PL','name' => 'Polish (Poland)','native_name' => 'polski (Polska)','url_name' => 'polish-poland'), Array ('iso_639-1' => 'pt_BR','name' => 'Portuguese (Brazil)','native_name' => 'português (Brasil)','url_name' => 'portuguese-brazil'), Array ('iso_639-1' => 'pt_PT','name' => 'Portuguese (Portugal)','native_name' => 'português (Portugal)','url_name' => 'portuguese-portugal'), Array ('iso_639-1' => 'ro_MD','name' => 'Romanian (Moldova)','native_name' => 'România (Moldova)','url_name' => 'romanian-moldova'), Array ('iso_639-1' => 'ro_RO','name' => 'Romanian (Romania)','native_name' => 'română (România)','url_name' => 'romanian-romania'), Array ('iso_639-1' => 'ru_RU','name' => 'Russian (Russia)','native_name' => 'русский (Россия)','url_name' => 'russian-russia'), Array ('iso_639-1' => 'sk_SK','name' => 'Slovak (Slovakia)','native_name' => 'Slovenčina (Slovenská)','url_name' => 'slovak-slovakia'), Array ('iso_639-1' => 'sl_SI','name' => 'Slovenian (Slovenia)','native_name' => 'Slovenščina (Slovenija)','url_name' => 'slovenian-slovenia'), Array ('iso_639-1' => 'sr_Cyrl_RS','name' => 'Serbian (Cyrillic, Serbia)','native_name' => 'Српски језик (Ћирилица, српски)','url_name' => 'serbian-cyrillic-serbia'), Array ('iso_639-1' => 'sr_Latn_RS','name' => 'Serbian (Latin, Serbia)','native_name' => 'Srpski (Latin, Srbija)','url_name' => 'serbian-latin-serbia'), Array ('iso_639-1' => 'sr_RS','name' => 'Serbian (Serbia)','native_name' => 'Српски (Serbia)','url_name' => 'serbian-serbia'), Array ('iso_639-1' => 'sv_SE','name' => 'Swedish (Sweden)','native_name' => 'svenska (Sverige)','url_name' => 'swedish-sweden'), Array ('iso_639-1' => 'tr_TR','name' => 'Turkish (Turkey)','native_name' => 'Türkçe (Türkiye)','url_name' => 'turkish-turkey'), Array ('iso_639-1' => 'uk_UA','name' => 'Ukrainian (Ukraine)','native_name' => 'українська (Україна)','url_name' => 'ukrainian-ukraine'), Array ('iso_639-1' => 'vi_VN','name' => 'Vietnamese (Vietnam)','native_name' => 'Tiếng Việt (Việt Nam)','url_name' => 'vietnamese-vietnam'), Array ('iso_639-1' => 'zh_CN','name' => 'Chinese (China)','native_name' => '中文 (中国)','url_name' => 'chinese-china'), Array ('iso_639-1' => 'zh_TW','name' => 'Chinese (Taiwan)','native_name' => '中文 (台灣)','url_name' => 'chinese-taiwan') ); // ── Дропдаун країн + детект вибраної. 8.5: змінні ініціалізовано. ──── $option_val = ''; $country_name_s = $country_native_s = $country_url_s = ''; $countryset_only_from_array = ''; foreach ($data_providers as $option_data) { $option_val .= '