mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-11-12 21:44:22 +08:00
576 lines
109 KiB
JSON
576 lines
109 KiB
JSON
{
|
||
"runtime": {
|
||
"api_documentation_cb3d2229": "Документация API",
|
||
"openflare_provides_a_simple_powerful_api_for_ba400468": "OpenFlare предоставляет простой и мощный API для ряда языков программирования и сред разработки. Его стандартный интерфейс RESTful упрощает интеграцию и настройку серверной части.",
|
||
"platform_user_guide_d0ead991": "Руководство пользователя платформы",
|
||
"welcome_to_the_openflare_management_platform_this_e8ecbe4d": "Добро пожаловать на платформу управления OpenFlare. В этом руководстве представлены основные компоненты, роли и разрешения, а также рабочий процесс настройки, которые помогут вам начать работу.",
|
||
"privacy_policy_b6da1ca6": "Политика конфиденциальности",
|
||
"we_value_your_privacy_this_policy_explains_2c9e3c0b": "Мы ценим вашу конфиденциальность. Эта политика объясняет, как мы собираем, используем и храним вашу личную информацию. ",
|
||
"and_the_rights_you_have_over_it_4560abf2": "и права, которые вы имеете на это.",
|
||
"terms_of_service_4e80a140": "Условия обслуживания",
|
||
"please_read_the_following_terms_carefully_to_c46a6a61": "Пожалуйста, внимательно прочитайте следующие условия, чтобы понять свои права.",
|
||
"use_1b3d699e": ": использовать ",
|
||
"or_07d4e3c0": "(или ",
|
||
"place_the_lucide_icon_directly_inside_the_104f794c": ": поместите значок Lucide прямо внутри контейнера заголовка и примените ",
|
||
"use_only_5e12eecb": ": использовать только ",
|
||
"for_pages_with_multiple_tabs_keep_each_5f721959": ": для страниц с несколькими вкладками содержимое каждой вкладки должно храниться в отдельном файле компонента (например, ",
|
||
"beyond_tabs_when_a_page_exceeds_600_d152cfdc": ": когда страница превышает 600 ",
|
||
"message_18ab4763": ") ",
|
||
"and_de1d5dd0": " и ",
|
||
"inputs_fabee312": "Входы (",
|
||
"and_selectors_e4875cdf": ") и селекторы (",
|
||
"should_share_the_compact_height_f1fe2218": ") должен иметь компактную высоту ",
|
||
"with_font_size_e7c29991": ", с размером шрифта ",
|
||
"and_use_ca398a12": "и использовать ",
|
||
"to_remove_overlapping_native_shadows_dd65b475": " чтобы удалить перекрывающиеся собственные тени.",
|
||
"align_checkboxes_toward_the_top_left_using_092dcef0": "Выровняйте флажки в левом верхнем углу, используя контейнер с ",
|
||
"add_bf15da3a": ". Добавить ",
|
||
"to_the_checkbox_so_multiline_descriptions_stay_1bb85c4b": " установите флажок, чтобы многострочные описания оставались выровненными вверху.",
|
||
"use_the_default_primary_or_secondary_db7513e5": "Используйте основной или дополнительный по умолчанию ",
|
||
"button_for_forms_and_create_save_actions_a657dba8": " кнопка для форм и действий создания/сохранения с компактной высотой ",
|
||
"outline_buttons_must_include_the_66ace005": ". Кнопки структуры должны включать ",
|
||
"class_43eff5ff": " класс.",
|
||
"1_align_label_and_input_32d4558d": "// 1. Align Label and Input",
|
||
"div_classname_space_y_1_5_label_32230ad7": "<div className=\"space-y-1.5\">\n <Label htmlFor=\"id\" className=\"text-xs font-medium text-foreground\">Title</Label>\n <Input id=\"id\" className=\"h-8 text-xs shadow-none\" />\n</div>",
|
||
"2_align_checkbox_to_the_top_bdf68ad8": "// 2. Align Checkbox to the top",
|
||
"div_classname_flex_items_start_gap_2_ccf0d526": "<div className=\"flex items-start gap-2.5\">\n <Checkbox id=\"c\" className=\"mt-0.5\" />\n <div className=\"grid gap-1\">\n <label htmlFor=\"c\" className=\"text-xs font-medium leading-none\">Title</label>\n <p className=\"text-[10px] text-muted-foreground\">Multiline description</p>\n </div>\n</div>",
|
||
"card_classname_border_dashed_shadow_none_cardheader_35727acf": "<Card className=\"border-dashed shadow-none\">\n <CardHeader className=\"flex flex-row items-center justify-between pb-2\">\n <span className=\"text-xs font-medium text-muted-foreground\">Metric title</span>\n <Cpu className=\"size-4 text-primary\" />\n </CardHeader>\n <CardContent className=\"space-y-2\">\n <div className=\"text-2xl font-semibold tracking-tight\">42.8 %</div>\n <Progress value={42.8} className=\"h-1.5\" />\n <p className=\"text-[10px] text-muted-foreground\">Status description</p>\n </CardContent>\n</Card>",
|
||
"div_classname_border_border_dashed_shadow_none_b430b520": "<div className=\"border border-dashed shadow-none rounded-lg overflow-hidden bg-background\">\n <Table>\n <TableHeader className=\"bg-muted/40\">\n <TableRow className=\"border-dashed hover:bg-transparent\">\n <TableHead className=\"text-xs font-semibold\">ID</TableHead>\n <TableHead className=\"text-xs font-semibold\">Status</TableHead>\n </TableRow>\n </TableHeader>\n <TableBody>\n <TableRow className=\"border-dashed hover:bg-muted/10 transition-colors\">\n <TableCell className=\"font-mono text-xs\">ID-1001</TableCell>\n <TableCell>\n <Badge variant=\"outline\" className=\"text-[10px] bg-emerald-500/10 border-emerald-500/20 text-emerald-600 rounded-full py-0 px-2\">\n <span className=\"size-1 bg-emerald-500 rounded-full mr-1.5 shrink-0\" />\n Success\n </Badge>\n </TableCell>\n </TableRow>\n </TableBody>\n </Table>\n</div>",
|
||
"disabled_f95ea7f4": "Отключено",
|
||
"title_administrator_login_alert_content_administrator_user_6f32cf7c": "{\"title\": \"Вход администратора\", \"content\": \"Администратор {{user.username}} ...\", \"level\": \"INFO\"}",
|
||
"lark_webhook_c2e0b312": "Lark Вебхук",
|
||
"title_content_view_details_url_7af4b7d5": "### $title\n$content\n\n[Подробнее]($url)",
|
||
"dingtalk_group_bot_5d8efec9": "DingTalk групповой бот",
|
||
"wecom_group_bot_138ea7a8": "WeCom групповой бот",
|
||
"under_development_78c33fbf": "В разработке",
|
||
"this_feature_is_being_migrated_and_developed_61ebaf78": "Эта функция переносится и развивается. Пожалуйста, зайдите позже.",
|
||
"port_for_the_built_in_frps_web_cfab540f": "Порт для встроенного интерфейса веб-администрирования FRPS",
|
||
"request_failed_please_try_again_later_8977b79a": "Запрос не выполнен. Пожалуйста, повторите попытку позже.",
|
||
"operation_failed_0c3b4cf7": "Операция не удалась",
|
||
"automatic_configuration_must_be_a_json_object_90ba17a4": "Автоматическая конфигурация должна быть объектом JSON.",
|
||
"high_frequency_404_scan_from_one_ip_f7d27ffb": "Высокочастотное сканирование 404 с одного IP",
|
||
"abnormal_direct_access_from_one_ip_732dbeee": "Аномальный прямой доступ с одного IP",
|
||
"permanent_3e71ccc8": "Постоянный",
|
||
"expired_2fe0e333": "Срок действия истек",
|
||
"in_value0_minutes_fd2a5b53": "Через {value0} мин",
|
||
"in_value0_hours_5ca37144": "Через {value0} ч",
|
||
"node_2410d860": "Узел",
|
||
"edge_099db313": "Ребро",
|
||
"edge_s_id_74f6affc": "Edge(?:\\s+ID)?",
|
||
"value0_s_value1_s_40960c98": "{value0}\\s+{value1}(?=$|[\\s,.:])",
|
||
"rule_graph_schema_version_must_be_1_ea9a1161": "График правил schema_version должен быть равен 1.",
|
||
"rule_graph_exceeds_the_size_limit_337651b9": "График правил превышает ограничение по размеру",
|
||
"node_id_must_not_be_empty_51a5de58": "Узел ID не должен быть пустым.",
|
||
"duplicate_node_id_value0_621230af": "Повторяющийся ID узла: {value0}",
|
||
"edge_id_must_not_be_empty_bc8f69cb": "Край ID не должен быть пустым.",
|
||
"duplicate_edge_id_value0_0a9d1c7c": "Повторяющийся ID ребра: {value0}",
|
||
"the_start_node_must_not_have_incoming_50a07b17": "Начальный узел не должен иметь входящих ребер.",
|
||
"the_rule_graph_must_contain_exactly_one_7dfbc027": "Граф правил должен содержать ровно один начальный узел.",
|
||
"the_rule_graph_must_contain_exactly_one_0036eb82": "Граф правил должен содержать ровно один разрешающий узел.",
|
||
"edge_value0_has_an_invalid_endpoint_or_9d84eb7e": "Ребро {value0} содержит неверный узел подключения или порт.",
|
||
"node_value0_output_value1_is_not_connected_c3038e81": "Выход {value1} узла {value0} не подключён",
|
||
"node_value0_output_value1_can_only_be_903e54ce": "Выход {value1} узла {value0} можно подключить только один раз.",
|
||
"node_value0_is_unreachable_from_the_start_086531dc": "Узел {value0} недоступен из начального узла.",
|
||
"node_value0_cannot_reach_a_terminal_node_8de2ff6e": "Узел {value0} не может достичь конечного узла.",
|
||
"the_rule_graph_must_not_contain_cycles_fd6fe797": "Граф правил не должен содержать циклов",
|
||
"node_value0_contains_an_invalid_ip_address_1873ab94": "Узел {value0} содержит неверный адрес IP.",
|
||
"node_value0_contains_an_invalid_cidr_00c880d9": "Узел {value0} содержит недопустимый CIDR.",
|
||
"node_value0_contains_an_invalid_ip_group_589219a5": "Узел {value0} содержит недопустимую группу IP.",
|
||
"node_value0_contains_an_invalid_geography_code_1a9f469b": "Узел {value0} содержит неверный географический код.",
|
||
"node_value0_has_pow_settings_outside_the_9fd2a4cb": "У узла {value0} настройки PoW выходят за пределы допустимого диапазона.",
|
||
"node_value0_has_invalid_block_response_settings_ae4c35ca": "Узел {value0} имеет неверные настройки ответа на блокировку.",
|
||
"node_value0_match_mode_must_be_and_242c1ae7": "Режим сопоставления узла {value0} должен быть and или or",
|
||
"node_value0_contains_an_invalid_browser_tag_4d0e6740": "Узел {value0} содержит недопустимый тег браузера.",
|
||
"node_value0_contains_an_invalid_operating_system_45bea1fb": "Узел {value0} содержит недопустимый тег операционной системы.",
|
||
"node_value0_allows_at_most_32_custom_497938c6": "Узел {value0} позволяет использовать не более 32 пользовательских шаблонов UA.",
|
||
"node_value0_custom_ua_pattern_must_not_a72718be": "Пользовательский шаблон узла {value0} UA не должен быть пустым.",
|
||
"node_value0_custom_ua_pattern_is_too_c2c83c0e": "Пользовательский шаблон узла {value0} UA слишком длинный.",
|
||
"node_value0_has_an_invalid_custom_ua_c47ffd0d": "Узел {value0} имеет недопустимый пользовательский шаблон UA.",
|
||
"node_value0_requires_at_least_one_pattern_6114bb93": "Узел {value0} требует хотя бы один шаблон, если включена пользовательская блокировка UA.",
|
||
"start_d2bb025a": "Начало",
|
||
"ip_match_43f4b6d4": "Проверка IP",
|
||
"geography_match_9acb08c4": "Проверка географии",
|
||
"ua_check_b56dac23": "Проверка User-Agent",
|
||
"security_checks_e09822e6": "Проверки безопасности",
|
||
"pow_challenge_3c043088": "Проверка PoW",
|
||
"allow_1e9f2561": "Разрешить",
|
||
"block_2a366d09": "Заблокировать",
|
||
"wechat_81b430b6": "WeChat",
|
||
"wildcard_c6b0739e": "Подстановочный знак",
|
||
"exact_match_391fe725": "Точное совпадение",
|
||
"value0_expires_value1_7d8600f8": "{value0} (срок действия: {value1})",
|
||
"sorry_the_page_you_requested_seems_to_ba66cd83": "Запрошенная вами страница не найдена.",
|
||
"check_the_path_or_return_to_safety_b1f31888": "Проверьте URL или вернитесь на панель управления.",
|
||
"previous_c9b9ae7a": "Назад",
|
||
"home_203c08e0": "Главная",
|
||
"1_api_conventions_and_authentication_e6d4df61": "1. API соглашения и аутентификация",
|
||
"standard_api_request_conventions_and_developer_access_39eb956e": "Стандартные соглашения о запросах API и проверка подлинности токена доступа разработчика.",
|
||
"1_1_standard_response_format_5cddae2f": "1.1 Стандартный формат ответа",
|
||
"all_api_endpoints_use_a_standard_json_87c92fb0": "Все конечные точки API используют стандартную структуру ответа JSON:",
|
||
"field_49ecd0e3": "Поле",
|
||
"type_ba40014f": "Тип",
|
||
"description_4262c45d": "Описание",
|
||
"error_message_empty_on_success_contains_error_d89d457f": "Сообщение об ошибке. Пусто (\"\") в случае успеха; содержит сведения об ошибке при сбое.",
|
||
"the_response_payload_null_when_the_request_97b8b29c": "Параметры ответа. null, если запрос не выполнен или данные не возвращаются.",
|
||
"successful_response_example_8917e853": "Пример успешного ответа:",
|
||
"failed_response_example_eae899e1": "Пример неудачного ответа:",
|
||
"error_msg_incorrect_password_data_null_b2eccc86": "{\n \"error_msg\": \"Неверный пароль\",\n \"data\": null\n}",
|
||
"1_2_authentication_methods_3c5db38a": "1.2 Методы аутентификации",
|
||
"protected_endpoints_require_credentials_except_public_endpoints_1fa0a24c": "Аутентификация требуется, за исключением общедоступных конечных точек, таких как вход в систему, регистрация и общедоступная конфигурация:",
|
||
"session_credentials_de72024d": "Учетные данные сеанса:",
|
||
"browser_clients_can_stay_signed_in_using_f316279b": "Клиенты браузера могут оставаться в системе, используя стандартный файл cookie сеанса.",
|
||
"access_tokens_8de23550": "Токены доступа:",
|
||
"for_backend_calls_and_third_party_integrations_dfd8bf0f": "Для бэкэнд-вызовов и сторонних интеграций. Создайте токен доступа API и включите его в заголовок запроса для аутентификации.",
|
||
"use_either_of_the_following_request_headers_1e03b04b": "Используйте любой из следующих заголовков запроса:",
|
||
"2_user_and_authentication_endpoints_4a89d429": "2. Конечные точки пользователя и аутентификации",
|
||
"2_1_user_registration_4f332f85": "2.1 Регистрация пользователя",
|
||
"endpoint_79a2369a": "Конечная точка:",
|
||
"description_3e633a20": "Описание:",
|
||
"register_a_local_account_when_registration_is_938891dc": "Зарегистрируйте локальную учетную запись, если регистрация включена в настройках администрирования.",
|
||
"parameter_9634fb08": "Параметр",
|
||
"required_11da9dc4": "Требуется",
|
||
"yes_b5141d3d": "Да",
|
||
"username_must_be_unique_and_contain_no_e81c1e5c": "Имя пользователя; должно быть уникальным и не содержать пробелов.",
|
||
"password_at_least_8_characters_37cdc807": "Пароль; не менее 8 символов.",
|
||
"no_0c70665b": "Нет",
|
||
"nickname_defaults_to_the_username_when_omitted_676aae7e": "Никнейм. По умолчанию используется имя пользователя, если оно опущено.",
|
||
"2_2_password_login_271483ba": "2.2 Вход по паролю",
|
||
"authenticate_with_a_username_and_password_establishing_a38ff252": "Аутентификация с использованием имени пользователя и пароля, создание файла cookie сеанса в случае успеха.",
|
||
"username_1a3f0617": "Имя пользователя",
|
||
"password_a621ab60": "Пароль",
|
||
"2_3_sign_out_3252611d": "2.3 Выйти",
|
||
"delete_the_current_session_cookie_and_sign_c213ffd9": "Удалите файл cookie текущего сеанса и выйдите из системы.",
|
||
"2_4_get_profile_7b96110a": "2.4 Получить профиль",
|
||
"get_the_signed_in_account_s_basic_b0eb8cfa": "Получите основную информацию об учетной записи, в которую выполнен вход, включая ID, роль и псевдоним.",
|
||
"3_personal_access_token_endpoints_989f5d7c": "3. Конечные точки токена личного доступа",
|
||
"access_token_management_requires_a_session_login_42d91543": "Управление токенами доступа требует входа в систему и доступно обычным пользователям.",
|
||
"3_1_list_tokens_9840c227": "3.1 Список токенов",
|
||
"list_the_current_user_s_tokens_with_c34d2210": "Вывести список токенов текущего пользователя с замаскированными секретными значениями.",
|
||
"3_2_create_an_access_token_e53bd784": "3.2 Создайте токен доступа",
|
||
"parameters_ba89685c": "Параметры:",
|
||
"name_token_name_is_admin_false_4f3e4868": "{\"name\": \"название токена\", \"is_admin\": false}",
|
||
"generate_an_access_token_the_response_includes_70552390": "Создайте токен доступа. Ответ включает значение открытого текста один раз; храните его в надежном месте.",
|
||
"optional_default_210b9d8f": " (необязательно, по умолчанию ",
|
||
"grant_administrator_privileges_to_the_token_only_2292cad8": "): предоставить токену права администратора. Только администраторы могут включить это. Обычные токены не могут получить доступ ",
|
||
"endpoints_815c88e5": " конечные точки.",
|
||
"successful_response_example_7783a39c": "Пример успешного ответа:",
|
||
"3_3_revoke_delete_a_token_ae510f58": "3.3 Отзыв/удаление токена",
|
||
"permanently_delete_a_token_by_id_immediately_145287f6": "Окончательно удалите токен до ID, немедленно сделав его недействительным.",
|
||
"3_4_rotate_a_token_secret_79209983": "3.4 Замена секрета токена",
|
||
"replace_a_token_s_secret_and_return_d2caca89": "Замените секрет токена и верните его новое значение в виде открытого текста. Предыдущий секрет становится недействительным; его имя и ID остаются прежними.",
|
||
"4_public_configuration_and_administration_17ebdbd5": "4. Публичная настройка и администрирование",
|
||
"4_1_public_system_configuration_2be912e4": "4.1 Конфигурация общедоступной системы",
|
||
"get_publicly_visible_configuration_keys_and_values_bc7bff66": "Получите общедоступные ключи конфигурации и значения для динамического рендеринга интерфейса.",
|
||
"response_example_d3087445": "Пример ответа:",
|
||
"4_2_system_configuration_crud_administrator_2ce66c8b": "4.2 Конфигурация системы CRUD (администратор)",
|
||
"manage_system_configs_dynamically_through_an_administrator_acdcdb99": "Управляйте system_configs динамически через сеанс администратора.",
|
||
"list_configuration_3d58680b": "Конфигурация списка:",
|
||
"create_a_configuration_entry_1d995264": "Создайте запись конфигурации:",
|
||
"update_a_configuration_value_2a0b0b76": "Обновите значение конфигурации:",
|
||
"delete_a_configuration_entry_1b77a6ea": "Удалить запись конфигурации:",
|
||
"1_quick_start_ef8fbb58": "1. Быстрый старт",
|
||
"a_guide_to_the_general_purpose_full_9cd8c987": "Руководство по универсальной полнофункциональной платформе разработки.",
|
||
"architecture_e992b65c": "Архитектура:",
|
||
"go_gin_gorm_redis_asynq_backend_react_d5fe02d3": "Go (Gin + GORM + Redis + Asynq) бэкэнд + React (Next.js 16 + Tailwind CSS 4 + shadcn/ui) интерфейс",
|
||
"authentication_d36b345b": "Аутентификация:",
|
||
"local_username_password_registration_and_login_plus_583ab638": "Локальная регистрация имени пользователя/пароля и вход в систему, а также привязка сторонней учетной записи OIDC (OAuth2)",
|
||
"access_tokens_b7b856d3": "Токены доступа:",
|
||
"personal_developer_access_tokens_api_keys_for_4b407149": "Токены доступа персонального разработчика (ключи API) для вызова системных API через заголовки HTTP.",
|
||
"observability_ea0cc1bf": "Наблюдаемость:",
|
||
"zap_structured_logging_and_opentelemetry_distributed_tracing_9fd6da9f": "Структурированное ведение журнала Zap и распределенная трассировка OpenTelemetry",
|
||
"2_authentication_and_security_settings_76967059": "2. Настройки аутентификации и безопасности",
|
||
"the_platform_combines_authentication_methods_to_support_bc9f1772": "Платформа сочетает в себе методы аутентификации для поддержки различных развертываний и вариантов использования:",
|
||
"2_1_username_and_password_authentication_97184f8f": "2.1 Аутентификация имени пользователя и пароля",
|
||
"registration_and_password_login_c5bd6cb4": "Регистрация и пароль для входа:",
|
||
"users_can_register_and_create_sessions_with_21883e04": "Пользователи могут регистрироваться и создавать сеансы с именем пользователя и паролем. Пароли хранятся с помощью ",
|
||
"salted_hashing_dc2a9b63": " хеширование с солью.",
|
||
"system_switches_53741557": "Системные переключатели:",
|
||
"administrators_can_disable_password_registration_or_login_a2648e62": "Администраторы могут в любое время отключить регистрацию пароля или вход в систему, чтобы потребовать стороннюю аутентификацию.",
|
||
"2_2_third_party_oidc_providers_f14083c8": "2.2 Сторонние поставщики OIDC",
|
||
"users_can_link_external_accounts_from_their_c08d3f5a": "Пользователи могут связать внешние учетные записи со страницы своего профиля:",
|
||
"open_4540d74d": "Открыть ",
|
||
"settings_profile_32835b0d": "Настройки/Профиль",
|
||
"message_a173cce8": ".",
|
||
"under_linked_accounts_view_existing_connections_or_5151eb9b": "В разделе «Связанные учетные записи» просмотрите существующие подключения или выберите доступного поставщика OIDC, чтобы начать процесс связывания OAuth2.",
|
||
"after_linking_use_the_oidc_login_button_6095b15d": "После привязки воспользуйтесь кнопкой входа OIDC на странице входа для быстрого доступа.",
|
||
"3_integrating_personal_access_tokens_af2647b5": "3. Интеграция токенов личного доступа",
|
||
"personal_access_tokens_allow_developers_and_third_9a242a0e": "Токены личного доступа позволяют разработчикам и сторонним инструментам напрямую вызывать системные API.",
|
||
"3_1_token_generation_and_storage_2b78c681": "3.1 Генерация и хранение токенов",
|
||
"one_time_plaintext_display_fd13912a": "Одноразовое отображение открытого текста:",
|
||
"a_newly_generated_plaintext_token_such_as_57eb11a1": "Недавно сгенерированный токен открытого текста (например, ",
|
||
"is_displayed_only_once_copy_and_save_8d378c8a": ") отображается только один раз. Скопируйте и немедленно сохраните его; его невозможно получить после закрытия диалога.",
|
||
"secure_hash_storage_1ce392ff": "Безопасное хранение хеша:",
|
||
"only_a_sha_256_hash_of_the_dbf434b1": "В базе данных хранится только хеш токена SHA-256, что предотвращает восстановление открытого текста из утекшего дайджеста.",
|
||
"3_2_calling_apis_with_headers_fccd7b0d": "3.2 Вызов API с заголовками",
|
||
"use_your_saved_plaintext_token_with_either_3af53a05": "Используйте сохраненный токен открытого текста с любым из следующих заголовков аутентификации HTTP:",
|
||
"method_1_authorization_bearer_header_2a9c2a6c": "Метод 1: заголовок носителя авторизации",
|
||
"method_2_custom_x_access_token_header_4548169f": "Способ 2: Пользовательский заголовок X-Access-Token",
|
||
"4_dynamic_system_configuration_b3bf8c49": "4. Динамическая конфигурация системы",
|
||
"the_built_in_key_value_configuration_module_713f6d05": "Встроенный модуль конфигурации «ключ/значение» позволяет администраторам динамически настраивать поведение во время выполнения:",
|
||
"cached_reads_35828322": "В кэше читается:",
|
||
"configuration_is_read_from_the_database_through_3e9f6a34": "Конфигурация считывается из базы данных через GORM и ускоряется с помощью хэш-кэширования Redis для уменьшения задержки запроса.",
|
||
"core_system_configuration_keys_6dc02be8": "Ключи конфигурации основной системы:",
|
||
"platform_display_name_116219b1": ": отображаемое имя платформы",
|
||
"password_login_switch_153eaa45": ": переключатель входа в систему с паролем",
|
||
"user_registration_switch_827b5b21": ": переключатель регистрации пользователя",
|
||
"maximum_tokens_per_regular_user_default_5_5dd6d9e7": ": максимальное количество токенов на обычного пользователя (по умолчанию: 5)",
|
||
"5_background_tasks_and_scheduling_7142ce96": "5. Фоновые задачи и планирование",
|
||
"cobra_provides_separate_commands_so_worker_services_1bbae2df": "Cobra предоставляет отдельные команды для независимого выполнения тяжёлых вычислений и медленных операций ввода-вывода:",
|
||
"scheduled_dispatch_scheduler_command_e79062ad": "Запланированная отправка (команда планировщика):",
|
||
"enqueues_tasks_in_redis_according_to_their_694e5985": "Ставит задачи в очередь Redis в соответствии с их выражениями Cron.",
|
||
"workers_with_queue_priorities_worker_command_faa970b1": "Воркеры с приоритетами очереди (рабочая команда):",
|
||
"asynq_consumes_tasks_by_priority_and_executes_69d82251": "Asynq использует задачи по приоритету и выполняет их одновременно, например очистку временной загрузки и синхронизацию внешнего журнала.",
|
||
"6_distributed_tracing_and_structured_logs_e8971cad": "6. Распределенная трассировка и структурированные журналы.",
|
||
"the_platform_integrates_monitoring_components_for_observability_2b1da50f": "Платформа объединяет компоненты мониторинга для обеспечения наблюдения за распределенными сервисами:",
|
||
"tracing_context_is_propagated_automatically_gin_requests_0f549cce": "Контекст трассировки передаётся автоматически. Запросы Gin, исходящие запросы и операции GORM содержат спаны для диагностики задержек и ошибок.",
|
||
"zap_structured_logs_1c9725e8": "Структурированные журналы Zap:",
|
||
"standardizes_backend_console_and_log_output_as_16970757": "Стандартизирует серверную консоль и вывод журнала как JSON для интеграции со сборщиками журналов, такими как ELK и Loki.",
|
||
"last_updated_value0_87a896df": "Последнее обновление: {value0}",
|
||
"back_to_home_d66f4359": "Вернуться домой",
|
||
"sections_fcb2696e": " разделы",
|
||
"last_updated_a83cd480": "Последнее обновление:",
|
||
"copied_8f6f8d97": "Скопировано",
|
||
"copy_markdown_f9c71ee4": "Копировать Markdown",
|
||
"table_of_contents_52daa71e": "Оглавление",
|
||
"questions_about_this_content_feb7d44a": "Есть вопросы об этом контенте?",
|
||
"contact_support_4cac90c8": "Связаться со службой поддержки",
|
||
"1_information_we_collect_af0db091": "1. Информация, которую мы собираем",
|
||
"we_collect_only_the_information_necessary_to_72f6e528": "Мы собираем только ту информацию, которая необходима для предоставления этой услуги, следуя принципам законности, справедливости и необходимости. Сбор ограничен следующим:",
|
||
"1_1_authentication_information_60199ee9": "1.1 Информация для аутентификации:",
|
||
"when_you_register_locally_or_sign_in_acdd6bd1": "Когда вы регистрируетесь локально или входите в систему через стороннего поставщика OIDC, мы собираем ваше имя пользователя, связанный адрес электронной почты, хэш пароля и связанный сторонний идентификатор OpenID.",
|
||
"we_do_not_require_a_phone_number_3540dfca": "Нам не требуется номер телефона, документ, удостоверяющий личность, или другая реальная идентификационная информация.",
|
||
"1_2_service_and_api_logs_46c9a04d": "1.2 Сервисные и API логи:",
|
||
"for_system_security_and_auditing_we_automatically_89737fdd": "В целях безопасности и аудита системы мы автоматически собираем журналы активности, включая адрес IP, дату и время доступа, токен личного доступа API историю вызовов и User-Agent (браузер, устройство или инструмент запроса).",
|
||
"2_data_storage_and_security_7cc5cdef": "2. Хранение и безопасность данных",
|
||
"we_recognize_the_importance_of_data_security_cd3bd4d9": "Мы осознаем важность безопасности данных и используем стандартные технические меры для защиты ваших данных:",
|
||
"storage_security_a33cfbef": "Безопасность хранения:",
|
||
"user_data_is_stored_in_a_dedicated_132af7bb": "Пользовательские данные хранятся в выделенной облачной базе данных или локальном контейнерном хранилище, доступном только авторизованным системным приложениям.",
|
||
"cryptography_9a15a88b": "Криптография:",
|
||
"sensitive_password_and_personal_access_token_hashes_9f724cd8": "Хэши конфиденциальных паролей и токенов личного доступа хранятся с использованием надежных криптографических алгоритмов. Для передачи данных API требуется шифрование SSL/TLS.",
|
||
"access_control_3471eafa": "Контроль доступа:",
|
||
"we_apply_the_principle_of_least_privilege_79328c28": "Мы применяем принцип наименьших привилегий. Данные платформы не передаются извне, а внутреннее администрирование системы записывается в журналы аудита.",
|
||
"3_how_we_use_information_41b4d6ad": "3. Как мы используем информацию",
|
||
"collected_information_is_used_only_for_the_4868b538": "Собранная информация используется только для следующих целей:",
|
||
"identification_481b07f4": "Идентификация:",
|
||
"to_identify_your_registered_account_and_display_8c559094": "Для идентификации вашей зарегистрированной учетной записи и отображения вашего профиля и настроек.",
|
||
"service_functions_c5834f20": "Функции сервиса:",
|
||
"to_identify_and_process_api_authentication_requests_d48a36a2": "Для идентификации и обработки запросов аутентификации API с использованием ваших личных токенов доступа.",
|
||
"security_e7132437": "Безопасность:",
|
||
"to_analyze_ip_addresses_and_activity_logs_5210836a": "Для анализа адресов IP и журналов активности на предмет злоупотреблений API и атак методом перебора, защищая стабильность серверной части.",
|
||
"prohibited_uses_b13fde94": "Запрещенное использование:",
|
||
"we_will_8856fb95": "Мы ",
|
||
"never_c1d7d603": "никогда не будем",
|
||
"sell_your_data_to_third_parties_or_7bb4d77a": " продавать ваши данные третьим лицам или предоставлять каким-либо организациям услуги профилирования пользователей или рекламных рассылок.",
|
||
"4_information_sharing_and_disclosure_c034d295": "4. Обмен и раскрытие информации",
|
||
"4_1_sharing_principles_b89eb890": "4.1 Принципы обмена:",
|
||
"we_do_not_share_personal_information_with_ffcf1e8f": "Мы не передаем личную информацию третьим лицам, включая аффилированные лица и деловых партнеров, за исключением следующих обстоятельств:",
|
||
"with_your_prior_explicit_authorization_or_consent_0fa05878": "С вашего предварительного явного разрешения или согласия;",
|
||
"when_required_by_applicable_laws_legal_proceedings_cb547dd6": "Когда этого требуют применимые законы, судебные разбирательства или обязательные административные или судебные требования.",
|
||
"4_2_transfer_and_public_disclosure_383d35be": "4.2 Передача и публичное раскрытие:",
|
||
"we_do_not_transfer_your_personal_information_e3339921": "Мы не передаем вашу личную информацию какой-либо компании, организации или частному лицу и не раскрываем ее публично в коммерческих целях.",
|
||
"5_your_rights_and_data_management_08999326": "5. Ваши права и управление данными",
|
||
"under_the_personal_information_protection_law_of_94ea405e": "В соответствии с Законом о защите личной информации Китайской Народной Республики вы сохраняете контроль над своей личной информацией:",
|
||
"5_1_access_and_management_854d0793": "5.1 Доступ и управление:",
|
||
"you_may_sign_in_at_any_time_8727c5be": "Вы можете войти в систему в любое время, чтобы просмотреть свою основную личную информацию и сгенерировать, заменить или отозвать токены доступа (ключи API).",
|
||
"5_2_deletion_and_account_closure_9d1e7aba": "5.2 Удаление и закрытие аккаунта:",
|
||
"if_you_stop_using_the_service_you_24c642c6": "Если вы прекратите пользоваться услугой, вы можете запросить закрытие учетной записи. Мы незамедлительно удалим конфиденциальную информацию из активного хранилища, за исключением журналов безопасности, которые должны храниться по закону.",
|
||
"6_policy_updates_and_notices_444076f5": "6. Обновления и уведомления политики",
|
||
"this_privacy_policy_may_change_as_the_2a270464": "Эта политика конфиденциальности может меняться по мере развития сервиса или изменения действующего законодательства.",
|
||
"we_will_prominently_announce_material_changes_for_210fbd3b": "Мы будем публично объявлять о существенных изменениях, например, посредством объявлений на платформе или диалогов. Продолжение использования услуги означает принятие пересмотренной политики.",
|
||
"1_agreement_and_service_overview_511c6782": "1. Соглашение и обзор услуг",
|
||
"1_1_parties_d2bf79cd": "1.1 Стороны:",
|
||
"these_terms_of_service_the_agreement_govern_1e6754fc": "Настоящие Условия обслуживания (Соглашение) регулируют использование данной системы между вами (Пользователем или Разработчиком) и оператором этой универсальной платформы разработки (Системы или Платформы).",
|
||
"1_2_read_carefully_dfde346e": "1.2 Читайте внимательно:",
|
||
"this_system_is_a_general_purpose_full_f1d395fe": "Эта система представляет собой универсальную полнофункциональную основу для настройки, обеспечения регистрации, сеансов, интеграции OIDC, аутентификации по ключу API и администрирования. Пожалуйста, прочтите все условия перед использованием.",
|
||
"1_3_agreement_contents_f05cebc0": "1.3 Содержание Соглашения:",
|
||
"the_agreement_includes_these_terms_and_any_43e244b6": "Соглашение включает в себя настоящие условия, а также любые правила, заявления или пояснения, которые мы опубликовали или можем опубликовать. Эти правила являются неотъемлемой частью Соглашения и имеют равную юридическую силу.",
|
||
"2_service_definition_and_nature_61db87f8": "2. Определение и характер услуги",
|
||
"your_responsibility_527cbdbf": "Ваша ответственность:",
|
||
"the_entity_deploying_and_operating_a_customized_047c6a8f": "Организация, развертывающая и эксплуатирующая настроенную версию этой системы, принимает на себя всю ответственность за соблюдение требований в отношении своей деловой деятельности в других производственных средах.",
|
||
"3_registration_and_account_use_cfab1555": "3. Регистрация и использование аккаунта",
|
||
"3_1_accounts_2631c114": "3.1 Счета:",
|
||
"users_may_register_through_the_frontend_or_e527ef52": "Пользователи могут зарегистрироваться через интерфейс или связать логин через стороннего поставщика OIDC, включенного администратором.",
|
||
"3_2_password_and_token_security_80dd80d9": "3.2 Безопасность пароля и токена:",
|
||
"password_security_7a29e44e": "Безопасность пароля:",
|
||
"keep_your_account_password_secure_eb9adf10": "Держите пароль своей учетной записи в безопасности.",
|
||
"api_token_security_34af066f": "Безопасность токена API:",
|
||
"a_personal_access_token_api_key_represents_6215b3b0": "Токен личного доступа (ключ API) представляет полные разрешения API вашей учетной записи.",
|
||
"you_are_responsible_for_data_loss_or_0c9acc88": "Вы несете ответственность за потерю данных или повреждение системы в результате утечки токена, вызванной ненадлежащим хранением.",
|
||
"4_prohibited_user_conduct_bd5628b6": "4. Запрещенное поведение пользователя",
|
||
"when_using_this_system_you_must_comply_1e54356c": "При использовании этой системы вы должны соблюдать применимые законы, в том числе Закон о кибербезопасности Китайской Народной Республики и Меры по обеспечению безопасности компьютерных информационных сетей, подключенных к Интернету.",
|
||
"the_following_activities_are_strictly_prohibited_5b57de7f": "Строго запрещены следующие виды деятельности:",
|
||
"endangering_national_security_4a160c4e": "Угроза национальной безопасности:",
|
||
"opposing_constitutional_principles_endangering_national_security_disclosing_bdfb8814": "Противодействие конституционным принципам, создание угрозы национальной безопасности, разглашение государственной тайны, подрыв государственной власти или подрыв национального единства;",
|
||
"illegal_information_services_c97748bb": "Незаконные информационные услуги:",
|
||
"hacking_tools_ddos_attack_services_server_brute_686746c4": "Хакерские инструменты, услуги DDoS-атак, услуги перебора серверов или другие нелегальные информационные сервисные платформы;",
|
||
"pornography_gambling_and_drugs_fdb44a54": "Порнография, азартные игры и наркотики:",
|
||
"creating_copying_publishing_or_distributing_obscene_pornographic_ec8c0fdb": "Создание, копирование, публикация или распространение непристойного, порнографического, связанного с азартными играми, жестокого, убийственного, террористического или провоцирующего преступления контента;",
|
||
"intellectual_property_infringement_cc10b950": "Нарушение интеллектуальной собственности:",
|
||
"selling_pirated_software_or_media_illegal_game_3f0f4159": "Продажа пиратского программного обеспечения или носителей, незаконных игровых читов, неавторизованных игровых серверов, украденных учетных записей или утечки личных баз данных;",
|
||
"other_unlawful_information_4085c17c": "Другая незаконная информация:",
|
||
"spreading_rumors_promoting_cults_or_superstition_insulting_a062981a": "Распространение слухов, пропаганда культов или суеверий, оскорбление или клевета на других людей, а также нарушение их законных прав.",
|
||
"enforcement_9c7cfd68": "Правоприменение:",
|
||
"if_these_rules_are_violated_the_platform_86df3b18": "В случае нарушения этих правил оператор платформы может без предварительного уведомления ",
|
||
"permanently_suspend_your_account_block_all_access_b9f04a42": "навсегда заблокировать вашу учетную запись, заблокировать все запросы токенов доступа и передать соответствующую информацию органам общественной безопасности или кибербезопасности, как того требует закон.",
|
||
"5_disclaimer_and_force_majeure_be649f43": "5. Отказ от ответственности и форс-мажорные обстоятельства",
|
||
"5_1_general_disclaimer_30d01f0d": "5.1 Общий отказ от ответственности:",
|
||
"this_development_platform_is_provided_as_is_23bc2b55": "Эта платформа разработки предоставляется в том виде, в каком она есть и доступна. Мы не гарантируем, что он соответствует вашим конкретным потребностям разработки, и не предоставляем дополнительных гарантий своевременности, безопасности или точности.",
|
||
"5_2_service_interruptions_16558fa8": "5.2 Перебои в обслуживании:",
|
||
"the_platform_is_not_liable_for_interruptions_405b1c95": "Платформа не несет ответственности за сбои, потерю данных или повреждение учетной записи, вызванные следующими форс-мажорными обстоятельствами:",
|
||
"natural_disasters_including_typhoons_earthquakes_tsunamis_and_1bbbfb21": "Стихийные бедствия, включая тайфуны, землетрясения, цунами и наводнения;",
|
||
"government_actions_cybersecurity_law_changes_or_administrative_2b7322f5": "Действия правительства, изменения в законодательстве о кибербезопасности или административные приказы;",
|
||
"telecommunication_faults_or_damage_to_data_center_259a542f": "Сбои в телекоммуникациях или повреждение центров обработки данных или подводных кабелей;",
|
||
"data_corruption_or_downtime_caused_by_hacking_68f2e04f": "Повреждение данных или простои, вызванные взломом или программами-вымогателями.",
|
||
"6_governing_law_and_disputes_b9663c86": "6. Применимое право и споры",
|
||
"6_1_governing_law_ff2afc5e": "6.1 Применимое право:",
|
||
"the_formation_performance_interpretation_and_resolution_of_c1510775": "Формирование, ведение, толкование и разрешение споров по настоящему Соглашению регулируются ",
|
||
"the_laws_of_the_people_s_republic_5d5c80d6": "законы Китайской Народной Республики",
|
||
"excluding_the_conflict_of_laws_rules_of_b235c4e3": " (за исключением коллизионных норм Гонконга, Макао и Тайваня).",
|
||
"6_2_dispute_resolution_44e871de": "6.2 Разрешение споров:",
|
||
"disputes_should_first_be_resolved_through_friendly_1ccf4610": "Споры следует сначала разрешать путем дружеских переговоров. Если переговоры не увенчались успехом, они должны быть переданы в компетентный народный суд по месту нахождения развертывающего или оператора системы.",
|
||
"failed_to_load_value0_7f5a06a3": "Не удалось загрузить {value0}",
|
||
"load_failed_d1d04482": "Загрузка не удалась",
|
||
"no_data_497c8569": "Нет данных",
|
||
"loading_d04fcbda": "Загрузка",
|
||
"saved_e05ddf99": "Сохранено",
|
||
"save_failed_6309a3bb": "Сохранить не удалось",
|
||
"unknown_error_13a46616": "Неизвестная ошибка",
|
||
"deleted_5223f91b": "Удалено",
|
||
"delete_failed_c228558c": "Удаление не удалось",
|
||
"configuration_list_53052147": "Список конфигурации",
|
||
"confirm_delete_2d61cf17": "Подтвердить удаление?",
|
||
"this_cannot_be_undone_this_will_permanently_8c896756": "Это невозможно отменить. Это приведет к безвозвратному удалению конфигурации.",
|
||
"cancel_2cd0f3be": "Отмена",
|
||
"confirm_delete_a3ea3c17": "Подтвердить удаление",
|
||
"configuration_info_7f69a860": "Информация о конфигурации",
|
||
"select_a_configuration_to_view_details_ec4949ab": "Выберите конфигурацию, чтобы просмотреть подробности",
|
||
"updating_e1d9dd03": " Обновление",
|
||
"update_3055a035": "Сохранить",
|
||
"actions_ed31fbb4": "Действия",
|
||
"enter_password_728a7b60": "Введите пароль",
|
||
"for_your_account_security_please_enter_the_28fc0bbd": "Для безопасности вашей учетной записи введите 6-значный пароль подтверждения.",
|
||
"verifying_6c128e0a": "Проверка…",
|
||
"confirm_36f33ada": "Подтвердить",
|
||
"profile_b94d13a4": "Профиль",
|
||
"manage_your_account_information_and_preferences_cced83b4": "Управляйте информацией и настройками своей учетной записи",
|
||
"user_guide_c83b6b0a": "Руководство пользователя",
|
||
"api_integration_and_everyday_operation_guides_281269a1": "API руководства по интеграции и повседневной работе",
|
||
"system_settings_68ea5dd4": "Системные настройки",
|
||
"manage_registration_login_and_authentication_provider_security_f378ed37": "Управляйте безопасностью поставщика регистрации, входа и аутентификации.",
|
||
"global_system_configuration_1eb8931e": "Глобальная конфигурация системы",
|
||
"manage_core_platform_runtime_settings_341e4182": "Управление настройками среды выполнения базовой платформы",
|
||
"user_permissions_8e8b1d33": "Разрешения пользователя",
|
||
"view_and_manage_registered_users_and_their_db533b7c": "Просмотр и управление зарегистрированными пользователями и статусом их учетной записи",
|
||
"background_task_scheduling_408172d1": "Планирование фоновых задач",
|
||
"dispatch_and_monitor_background_and_scheduled_tasks_83967fc9": "Отправка и мониторинг фоновых и запланированных задач",
|
||
"system_logs_366ada1d": "Системные журналы",
|
||
"view_background_task_logs_and_system_status_24fd6a7d": "Просмотр журналов фоновых задач и состояния системы",
|
||
"a_modern_extensible_administration_platform_with_ready_0d95c0c1": "Современная расширяемая платформа администрирования с готовой инфраструктурой для создания корпоративных приложений.",
|
||
"get_started_715ee9dc": "Начать",
|
||
"hide_tip_738f4b27": "Скрыть подсказку",
|
||
"quick_navigation_05deefcb": "Быстрая навигация",
|
||
"open_fee3b5a5": "Открыть ",
|
||
"open_df42ebc3": "Открыть ",
|
||
"administration_console_ceb0c289": "Консоль администрирования",
|
||
"live_origin_error_page_preview_a2a12823": "Предварительный просмотр страницы ошибки в реальном времени",
|
||
"html_editor_19f0d7b7": "Редактор HTML",
|
||
"bytes_f5d87a8b": " байты",
|
||
"leave_empty_for_the_built_in_default_29ffce9f": " · Оставьте пустым для встроенного значения по умолчанию.",
|
||
"leave_empty_to_use_the_built_in_e57252bd": "Оставьте пустым, чтобы использовать встроенный шаблон по умолчанию…",
|
||
"drag_to_resize_b5154511": "Перетащите, чтобы изменить размер",
|
||
"live_preview_a76fdaad": "Предпросмотр",
|
||
"preview_13d61fea": "Предпросмотр",
|
||
"for_example_github_1061e2e4": "Например: гитхаб",
|
||
"for_example_github_login_1e0c113c": "Например: GitHub логин",
|
||
"https_or_leave_empty_a0d86d9b": "https://... или оставьте пустым",
|
||
"missing_configuration_value0_31b43fa6": "Отсутствует конфигурация: {value0}",
|
||
"missing_configuration_file_access_whitelist_6dd80936": "Отсутствует конфигурация: file_access_whitelist",
|
||
"directory_visibility_configuration_json_string_format_url_8e3c0671": "Конфигурация видимости каталога (строка JSON, формат: {url: enabled})",
|
||
"missing_configuration_login_session_ttl_hours_d6f433c2": "Отсутствует конфигурация: login_session_ttl_hours",
|
||
"server_address_d3716cc5": "Адрес сервера",
|
||
"platform_display_name_4b656edf": "Отображаемое имя платформы",
|
||
"for_example_openflare_28e07341": "Например: OpenFlare",
|
||
"for_example_https_example_com_9cf31711": "Например: https://example.com",
|
||
"allow_search_engines_to_crawl_and_index_59eff8b5": "Разрешить поисковым системам сканировать и индексировать",
|
||
"for_example_smtp_example_com_834569b4": "Например: smtp.example.com.",
|
||
"for_example_587_or_465_1bd015a5": "Например: 587 или 465.",
|
||
"for_example_sender_example_com_1795f7c6": "Например: sender@example.com",
|
||
"for_example_receiver_example_com_ade0ff8b": "Например: receiver@example.com",
|
||
"for_example_login_email_c7212e1f": "Например: login_email",
|
||
"for_example_login_verification_email_9d28f166": "Например: электронное письмо для подтверждения входа.",
|
||
"for_example_openflare_login_verification_code_0925e8d4": "Например: OpenFlare код подтверждения входа.",
|
||
"for_example_your_code_is_code_valid_44cf273f": "например Электронная почта для подтверждения. Доступная переменная: {{.Code}}",
|
||
"h3_message_title_h3_p_message_content_20c91d04": "<h3>Название сообщения</h3><p>Содержание сообщения; доступная переменная: {{.Code}}</p>",
|
||
"register_a_user_curl_x_post_https_4ae682b0": "# Register a user\ncurl -X POST https://api.example.com/api/v1/auth/register \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"username\": \"developer\",\n \"email\": \"dev@example.com\",\n \"password\": \"secure_password\"\n }'",
|
||
"quick_start_42fbb067": "# Быстрый старт",
|
||
"developer_friendly_40c2a4ce": "Дружественный к разработчикам, ",
|
||
"quick_to_integrate_18cbee8a": "быстрая интеграция",
|
||
"standard_restful_apis_complete_typescript_types_detailed_6369a0e2": "Стандартные API-интерфейсы RESTful, полные типы TypeScript, подробная документация и Swagger UI. Интегрируйтесь с помощью всего лишь нескольких строк кода на предпочитаемом вами языке.",
|
||
"restful_api_with_clear_understandable_semantics_1fa9d6f5": "RESTful API с четкой и понятной семантикой",
|
||
"openapi_swagger_documentation_ccbcbc84": "OpenAPI / Swagger документация",
|
||
"developer_friendly_typescript_type_definitions_910a7909": "Удобные для разработчиков определения типа TypeScript",
|
||
"code_samples_and_integration_guides_9e998a5a": "Примеры кода и руководства по интеграции",
|
||
"an_open_source_platform_for_managing_edge_317d8f34": "Платформа с открытым исходным кодом для управления пограничными узлами и обратными прокси. Создан на Go и React для управления узлами OpenResty, правилами веб-сайта и конфигурацией WAF.",
|
||
"product_aea82737": "Продукт",
|
||
"dashboard_0853bf3c": "Обзор",
|
||
"personal_c2952a5f": "Персональный",
|
||
"development_9ec42862": "Разработка",
|
||
"source_code_606a4e58": "Исходный код",
|
||
"community_5bcd0ddc": "Сообщество",
|
||
"discussions_3cef912c": "Обсуждения",
|
||
"privacy_policy_e464b41f": "Политика конфиденциальности",
|
||
"terms_of_service_9303687a": "Условия обслуживания",
|
||
"built_for_customization_ff3cf147": "Создан для индивидуальной настройки",
|
||
"a_modern_administration_platform_116688ff": "Современная платформа администрирования",
|
||
"ready_to_use_infrastructure_that_is_easy_77776634": "Готовая к использованию инфраструктура, которую легко расширить для корпоративных приложений.",
|
||
"get_started_d1f9c450": "Начать",
|
||
"learn_more_ca66c2da": "Узнать больше",
|
||
"ready_to_use_c58cfea2": "Готов к использованию",
|
||
"highly_extensible_9dfa6c10": "Высокая расширяемость",
|
||
"production_infrastructure_08c3a5e6": "Производственная инфраструктура",
|
||
"good_fortune_b3541887": "Удача",
|
||
"retry_b8784c8d": "Повторить",
|
||
"an_unknown_error_occurred_please_try_again_79a9f98a": "Произошла неизвестная ошибка. Пожалуйста, повторите попытку позже.",
|
||
"view_error_details_9e7e4e37": "Просмотр сведений об ошибке",
|
||
"unknown_error_e83a8ca8": "Неизвестная ошибка",
|
||
"fetching_data_9ac5e428": "Получение данных...",
|
||
"type_and_press_enter_to_add_e30b7b5f": "Введите и нажмите Enter, чтобы добавить",
|
||
"remove_value0_30c2158a": "Удалить {value0}",
|
||
"fnv_1a_32_bit_function_fnv1a_str_a1690b96": "\n// FNV-1a 32-bit\nfunction fnv1a(str) {\n let h = 2166136261 >>> 0;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 16777619) >>> 0;\n }\n return h;\n}\nfunction fnv1aResume(state, str) {\n let h = state >>> 0;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 16777619) >>> 0;\n }\n return h;\n}\n\n// xorshift32 PRNG → hex string\nfunction prngFromHash(seed, len) {\n let s = seed >>> 0, r = '';\n while (r.length < len) {\n s ^= (s << 13) >>> 0;\n s ^= (s >>> 17) >>> 0;\n s ^= (s << 5) >>> 0;\n s = s >>> 0;\n r += s.toString(16).padStart(8, '0');\n }\n return r.slice(0, len);\n}\n\n// SHA-256 via SubtleCrypto (available in workers)\nasync function sha256Hex(input) {\n const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(input));\n return Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2, '0')).join('');\n}\n\n// Solve one puzzle\nasync function solvePuzzle(token, index, size, difficulty) {\n const tFnv = fnv1a(token);\n const saltSeed = fnv1aResume(tFnv, String(index + 1));\n const targetSeed = fnv1aResume(saltSeed, 'd');\n const salt = prngFromHash(saltSeed, size);\n const target = prngFromHash(targetSeed, difficulty);\n\n for (let nonce = 0; nonce < 10_000_000; nonce++) {\n if ((await sha256Hex(salt + nonce)).startsWith(target)) return nonce;\n }\n throw new Error('Could not solve puzzle ' + (index + 1) + ' within the allowed search range');\n}\n\n// Entry point — receive task from main thread\nself.onmessage = async ({ data }) => {\n const { token, count, size, difficulty } = data;\n try {\n const t0 = performance.now();\n const solutions = [];\n for (let i = 0; i < count; i++) {\n solutions.push(await solvePuzzle(token, i, size, difficulty));\n }\n const elapsed = ((performance.now() - t0) / 1000).toFixed(3);\n self.postMessage({ type: 'done', solutions, elapsed });\n } catch (err) {\n self.postMessage({ type: 'error', message: err.message });\n }\n};\n",
|
||
"worker_execution_failed_1877e35b": "Ошибка выполнения воркера",
|
||
"failed_to_fetch_the_verification_challenge_95553133": "Не удалось получить запрос на проверку.",
|
||
"cap_starting_verification_pow_solver_657f3af5": "[Шапка] Запускаем верификацию PoW решателя",
|
||
"challenge_count_value0_ea1ffc80": " Количество испытаний: {value0}",
|
||
"difficulty_value0_f104cb0d": " Сложность: {value0}",
|
||
"salt_size_value0_4f2bae5d": " Размер соли: {value0}",
|
||
"cap_verification_pow_solver_completed_e1f79fd5": "[Cap] Проверка решателя PoW завершена",
|
||
"worker_duration_value0_s_8de32777": " Продолжительность рабочего: {value0}s",
|
||
"total_duration_including_communication_value0_s_004a6894": " Общая продолжительность (включая общение): {value0}s",
|
||
"verification_failed_d3925ab2": "Проверка не удалась",
|
||
"doctype_html_html_lang_en_head_meta_3e4f5ecb": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Офлайн-страница | OpenFlare</title>\n <style>\n *, *::before, *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n body {\n font-family: 'Inter', -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n background-color: #f4f3ef;\n color: #121212;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 48px 24px;\n -webkit-font-smoothing: antialiased;\n }\n\n .bauhaus-card {\n width: 100%;\n max-width: 580px;\n background: #ffffff;\n border: 3px solid #121212;\n box-shadow: 8px 8px 0px #121212;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .card-accent-bar {\n height: 12px;\n display: flex;\n }\n\n .accent-red { flex: 2; background-color: #e63946; }\n .accent-blue { flex: 3; background-color: #1d3557; }\n .accent-yellow { flex: 1; background-color: #f1faee; }\n\n .card-body {\n padding: 40px 32px;\n display: flex;\n flex-direction: column;\n gap: 24px;\n }\n\n .tag {\n align-self: flex-start;\n background-color: #121212;\n color: #ffffff;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n padding: 4px 10px;\n }\n\n .title {\n font-size: 28px;\n font-weight: 800;\n line-height: 1.2;\n letter-spacing: -0.02em;\n }\n\n .message {\n font-size: 15px;\n line-height: 1.6;\n color: #4a4a4a;\n }\n\n .contact-box {\n border: 2px solid #121212;\n background-color: #f9f8f3;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n }\n\n .contact-line {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 14px;\n font-weight: 600;\n }\n\n .contact-line a {\n color: #e63946;\n text-decoration: none;\n font-weight: 700;\n }\n\n .contact-line a:hover {\n text-decoration: underline;\n }\n\n .card-footer {\n border-top: 2px solid #121212;\n padding: 16px 32px;\n background-color: #faf9f6;\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n font-weight: 700;\n letter-spacing: 0.05em;\n }\n\n .brand {\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .brand-icon {\n width: 16px;\n height: 16px;\n fill: currentColor;\n }\n </style>\n</head>\n<body>\n<div class=\"bauhaus-card\">\n <div class=\"card-accent-bar\">\n <div class=\"accent-red\"></div>\n <div class=\"accent-blue\"></div>\n <div class=\"accent-yellow\"></div>\n </div>\n <div class=\"card-body\">\n <div class=\"tag\">РЕЗЕРВНАЯ СТРАНИЦА</div>\n <h1 class=\"title\">Сайт недоступен</h1>\n <p class=\"message\">\n Сервер-источник временно недоступен. Этот запрос обработан Service Worker в автономном режиме. Свяжитесь с администратором по контактам ниже.\n </p>\n <div class=\"contact-box\">\n <div class=\"contact-line\">\n <span>Почта администратора</span>\n <a href=\"mailto:admin@example.com\">admin@example.com</a>\n </div>\n <div class=\"contact-line\">\n <span>Состояние сервиса</span>\n <a href=\"https://status.example.com\" target=\"_blank\" rel=\"noopener\">status.example.com</a>\n </div>\n </div>\n </div>\n <div class=\"card-footer\">\n <div class=\"brand\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 2L3 14H12L11 22L21 10H12L13 2Z\" />\n </svg>\n <span>OpenFlare Service Worker</span>\n </div>\n <span>БЕЗ СЕТИ</span>\n </div>\n</div>\n</body>\n</html>\n",
|
||
"minimal_white_5636e8a9": "Минимализм",
|
||
"line_topology_22ad450c": "Схема соединений",
|
||
"bauhaus_5cc69781": "Bauhaus",
|
||
"doctype_html_html_lang_en_head_meta_42a4f2da": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Офлайн-страница | OpenFlare</title>\n <style>\n *, *::before, *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :root {\n --color-bg: #fcfcfc;\n --color-line: #e0e0e0;\n --color-line-hover: #1a1a1a;\n --color-text-main: #1a1a1a;\n --color-text-sub: #666666;\n --color-text-muted: #999999;\n --color-accent: #d4d4d4;\n --font-geo: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n body {\n font-family: var(--font-geo);\n background-color: var(--color-bg);\n background-image: radial-gradient(circle, var(--color-accent) 0.8px, transparent 0.8px);\n background-size: 24px 24px;\n color: var(--color-text-main);\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 48px 24px;\n -webkit-font-smoothing: antialiased;\n letter-spacing: 0.01em;\n }\n\n .main-container {\n width: 100%;\n max-width: 640px;\n display: flex;\n flex-direction: column;\n gap: 32px;\n }\n\n .line-box {\n border: 1px solid var(--color-line);\n background: rgba(255, 255, 255, 0.7);\n backdrop-filter: blur(4px);\n padding: 32px;\n transition: all var(--transition-fast);\n position: relative;\n }\n\n .line-box:hover {\n border-color: var(--color-line-hover);\n box-shadow: 0 0 0 1px var(--color-line-hover);\n }\n\n .status-badge {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.15em;\n text-transform: uppercase;\n color: var(--color-text-sub);\n margin-bottom: 12px;\n }\n\n .status-dot {\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background-color: #f59e0b;\n }\n\n .title {\n font-size: 24px;\n font-weight: 700;\n letter-spacing: -0.02em;\n margin-bottom: 12px;\n }\n\n .description {\n font-size: 14px;\n line-height: 1.6;\n color: var(--color-text-sub);\n margin-bottom: 24px;\n }\n\n .contact-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n border-top: 1px dashed var(--color-line);\n padding-top: 20px;\n }\n\n .contact-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 13px;\n }\n\n .contact-label {\n color: var(--color-text-muted);\n font-size: 12px;\n letter-spacing: 0.05em;\n text-transform: uppercase;\n }\n\n .contact-value a {\n color: var(--color-text-main);\n font-weight: 600;\n text-decoration: none;\n border-bottom: 1px solid var(--color-line);\n transition: border-color var(--transition-fast);\n }\n\n .contact-value a:hover {\n border-color: var(--color-text-main);\n }\n\n .footer-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 11px;\n color: var(--color-text-muted);\n letter-spacing: 0.05em;\n }\n\n .brand {\n display: flex;\n align-items: center;\n gap: 6px;\n font-weight: 600;\n color: var(--color-text-main);\n }\n\n .brand-icon {\n width: 14px;\n height: 14px;\n fill: currentColor;\n }\n </style>\n</head>\n<body>\n<div class=\"main-container\">\n <div class=\"line-box\">\n <div class=\"status-badge\">\n <span class=\"status-dot\"></span>\n SERVICE WORKER НЕТ СЕТИ CACHE\n </div>\n <h1 class=\"title\">Сеть прервана или источник недоступен</h1>\n <p class=\"description\">\n Резервная защита Service Worker активна. Свяжитесь с администратором по следующим каналам:\n </p>\n <div class=\"contact-list\">\n <div class=\"contact-row\">\n <span class=\"contact-label\">Поддержка по электронной почте</span>\n <span class=\"contact-value\"><a href=\"mailto:admin@example.com\">admin@example.com</a></span>\n </div>\n <div class=\"contact-row\">\n <span class=\"contact-label\">Страница статуса</span>\n <span class=\"contact-value\"><a href=\"https://status.example.com\" target=\"_blank\" rel=\"noopener\">status.example.com</a></span>\n </div>\n </div>\n </div>\n <div class=\"footer-bar\">\n <div class=\"brand\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 2L3 14H12L11 22L21 10H12L13 2Z\" />\n </svg>\n <span>OpenFlare Край</span>\n </div>\n <span>FALLBACK ACTIVE</span>\n </div>\n</div>\n</body>\n</html>\n",
|
||
"doctype_html_html_lang_en_head_meta_505c1308": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Офлайн-страница | OpenFlare</title>\n <style>\n * { box-sizing: border-box; margin: 0; padding: 0; }\n body {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n background-color: #ffffff;\n color: #333333;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n padding: 48px 24px;\n }\n .container {\n max-width: 560px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n }\n .badge {\n display: inline-flex;\n align-items: center;\n padding: 4px 12px;\n border-radius: 9999px;\n background-color: #f3f4f6;\n color: #4b5563;\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0.05em;\n }\n .title {\n font-size: 32px;\n font-weight: 700;\n color: #111827;\n line-height: 1.25;\n }\n .description {\n font-size: 15px;\n line-height: 1.6;\n color: #6b7280;\n max-width: 480px;\n }\n .contact-card {\n width: 100%;\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n padding: 24px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n text-align: left;\n }\n .contact-item {\n display: flex;\n align-items: center;\n gap: 12px;\n font-size: 14px;\n color: #374151;\n }\n .contact-item svg {\n width: 18px;\n height: 18px;\n color: #6b7280;\n flex-shrink: 0;\n }\n .contact-item a {\n color: #2563eb;\n text-decoration: none;\n }\n .contact-item a:hover {\n text-decoration: underline;\n }\n .footer {\n margin-top: 32px;\n display: flex;\n align-items: center;\n gap: 8px;\n color: #9ca3af;\n font-size: 13px;\n }\n .brand-icon {\n width: 20px;\n height: 20px;\n fill: currentColor;\n }\n </style>\n</head>\n<body>\n<div class=\"container\">\n <div class=\"badge\">НЕТ СЕТИ CONTACT</div>\n <h1 class=\"title\">Сайт недоступен: свяжитесь с администратором</h1>\n <p class=\"description\">\n Источник в настоящее время недоступен. Автономная защита Service Worker активна. Свяжитесь с администратором по контактам ниже.\n </p>\n <div class=\"contact-card\">\n <div class=\"contact-item\">\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"></path></svg>\n <span>Контактный адрес электронной почты: <a href=\"mailto:admin@example.com\">admin@example.com</a></span>\n </div>\n <div class=\"contact-item\">\n <svg fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 10V3L4 14h7v7l9-11h-7z\"></path></svg>\n <span>Состояние сервиса: <a href=\"https://status.example.com\" target=\"_blank\" rel=\"noopener\">status.example.com</a></span>\n </div>\n </div>\n <div class=\"footer\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M13 2L3 14H12L11 22L21 10H12L13 2Z\" />\n </svg>\n <span>OpenFlare Защита</span>\n </div>\n</div>\n</body>\n</html>\n",
|
||
"status_code_tag_must_not_be_empty_21235ebf": "Тег кода статуса не должен быть пустым.",
|
||
"invalid_status_code_range_value0_8983e96e": "Неверный диапазон кода состояния: {value0}",
|
||
"invalid_status_code_value0_0f206e48": "Неверный код статуса: {value0}",
|
||
"status_code_range_endpoints_are_reversed_value0_d92c2784": "Конечные точки диапазона кода состояния поменяны местами: {value0}",
|
||
"status_code_must_be_between_value0_value1_c5b04822": "Код состояния должен находиться в диапазоне {value0}–{value1}: {value2}",
|
||
"invalid_status_code_tag_d16e85d7": "Неверный тег кода состояния",
|
||
"add_at_least_one_status_code_tag_b81b2696": "Добавьте хотя бы один тег кода статуса.",
|
||
"the_expanded_status_code_list_is_empty_47245f34": "Расширенный список кодов состояния пуст.",
|
||
"request_canceled_5892f9b1": "Запрос отменен",
|
||
"insufficient_permissions_complete_verification_and_try_again_73719073": "Недостаточно разрешений; завершите проверку и повторите попытку",
|
||
"the_requested_resource_was_not_found_aecc0681": "Запрошенный ресурс не найден",
|
||
"request_parameter_validation_failed_60ef7c51": "Проверка параметров запроса не удалась",
|
||
"too_many_requests_retry_in_value0_seconds_ab5e78f1": "Слишком много запросов. Повторите через {value0, plural, one {# секунду} few {# секунды} many {# секунд} other {# секунды}}.",
|
||
"request_rate_limit_ad4f0f8b": "Ограничение скорости запроса",
|
||
"internal_server_error_try_again_later_4f0dd7e9": "Внутренняя ошибка сервера; попробуйте еще раз позже",
|
||
"cannot_connect_to_the_server_check_that_5551f4fc": "Невозможно подключиться к серверу; проверьте, что бэкэнд работает",
|
||
"network_request_failed_8407ceab": "Сетевой запрос не выполнен",
|
||
"request_canceled_manually_7ba622e6": "Запрос отменен вручную",
|
||
"all_requests_canceled_72f8fa9a": "Все запросы отменены",
|
||
"network_connection_failed_check_your_network_cbf47b07": "Сетевое соединение не удалось; проверьте свою сеть",
|
||
"request_timed_out_try_again_later_6c3465f6": "Время запроса истекло; попробуйте еще раз позже",
|
||
"unauthorized_sign_in_first_466879f5": "Несанкционированный; сначала войдите в систему",
|
||
"insufficient_permissions_5e3c8a26": "Недостаточно разрешений",
|
||
"value0_must_be_a_valid_number_1d79f887": "{value0}: укажите корректное число",
|
||
"value0_must_be_true_or_false_23cce68e": "{value0}: допустимы только true или false",
|
||
"value0_must_not_be_empty_8bf3a929": "{value0} не должно быть пустым",
|
||
"request_canceled_282c4cfb": "Запрос отменен",
|
||
"base64_encoding_is_not_supported_in_this_7642d848": "Кодировка Base64 не поддерживается в этой среде.",
|
||
"rate_limit_retry_later": "Слишком много запросов; попробуйте еще раз позже",
|
||
"list_separator": ", ",
|
||
"sentence_end": ".",
|
||
"task_notification_template_example": "{\"title\":\"Задача завершена\",\"content\":\"{{task_name}}: {{task_status}}\",\"level\":\"INFO\"}",
|
||
"ui_totalRequests": "Всего запросов",
|
||
"ui_totalVisits": "Всего посещений",
|
||
"ui_bandwidthServed": "Передано данных",
|
||
"ui_requestsOverTime": "Динамика запросов",
|
||
"ui_requestsByDevice": "Запросы по типам устройств",
|
||
"ui_statusCodes": "Коды ответа",
|
||
"ui_topPaths": "Популярные пути",
|
||
"ui_topHosts": "Популярные хосты",
|
||
"ui_topIps": "Популярные IP-адреса",
|
||
"ui_topBrowsers": "Популярные браузеры",
|
||
"ui_topOperatingSystems": "Операционные системы",
|
||
"ui_topUserAgents": "Популярные User-Agent",
|
||
"ui_deviceTypes": "Типы устройств",
|
||
"ui_fileHash": "Хэш (SHA-256)",
|
||
"ui_pathStyle": "Адресация через путь (Path Style)",
|
||
"ui_requestHeaders": "Заголовки запроса",
|
||
"ui_barkApp": "Приложение Bark",
|
||
"ui_administrator": "Администратор",
|
||
"ui_nodeLabel": "Узел:",
|
||
"ui_payload": "Параметры задачи",
|
||
"ui_selectAll": "Выбрать всё",
|
||
"ui_production": "Рабочая версия",
|
||
"ui_allDeployments": "Все развёртывания",
|
||
"ui_remoteUrl": "URL архива",
|
||
"ui_githubRelease": "Релиз GitHub",
|
||
"ui_releaseTag": "Тег релиза",
|
||
"ui_originHostHeader": "Заголовок Host сервера-источника",
|
||
"ui_globalRuleGroup": "Глобальная группа правил",
|
||
"ui_zone": "Зона DNS",
|
||
"ui_pageNotFound": "Страница не найдена",
|
||
"ui_jsonBody": "Тело JSON",
|
||
"ui_openTelemetryTracing": "Трассировка OpenTelemetry:",
|
||
"ui_clientId": "ID клиента",
|
||
"ui_clientSecret": "Секрет клиента",
|
||
"ui_scopes": "Области доступа",
|
||
"ui_copyright": "© 2026 Modern Platform. Все права защищены.",
|
||
"ui_technologyStack": "Технологии",
|
||
"ui_readyFor": "Готово к",
|
||
"ui_development": "Разработке",
|
||
"ui_features": "Возможности",
|
||
"ui_modern": "Современный",
|
||
"ui_versionLabel": "Версия",
|
||
"ui_builtAt": "Дата сборки",
|
||
"ui_breadcrumb": "Навигационная цепочка",
|
||
"ui_more": "Ещё",
|
||
"ui_previousSlide": "Предыдущий слайд",
|
||
"ui_nextSlide": "Следующий слайд",
|
||
"ui_closeLabel": "Закрыть",
|
||
"ui_imageCrop": "Обрезка изображения",
|
||
"ui_pagination": "Страницы",
|
||
"ui_previousPage": "Предыдущая страница",
|
||
"ui_previousLabel": "Назад",
|
||
"ui_nextPage": "Следующая страница",
|
||
"ui_nextLabel": "Далее",
|
||
"ui_morePages": "Другие страницы",
|
||
"ui_sidebarLabel": "Боковая панель",
|
||
"ui_mobileSidebarDescription": "Меню навигации на мобильных устройствах.",
|
||
"ui_toggleSidebar": "Переключить боковую панель",
|
||
"ui_loadingLabel": "Загрузка",
|
||
"origin_error_page_minimalist": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>{{status}} | OpenFlare</title>\n <style>\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n body {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n background-color: #ffffff;\n color: #333333;\n height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n text-align: center;\n padding: 48px 24px;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n .container {\n max-width: 600px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n }\n\n .error-code {\n font-size: 48px;\n font-weight: 700;\n color: #333333;\n line-height: 1.2;\n letter-spacing: -0.02em;\n }\n\n .error-description {\n font-size: 20px;\n line-height: 1.6;\n color: #666666;\n max-width: 480px;\n }\n\n .host {\n font-size: 14px;\n color: #999999;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n word-break: break-all;\n }\n\n .footer {\n margin-top: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n color: #999999;\n font-size: 14px;\n font-weight: 500;\n }\n\n .brand-icon {\n width: 24px;\n height: 24px;\n fill: currentColor;\n display: block;\n }\n\n @media (max-width: 480px) {\n .error-code {\n font-size: 36px;\n }\n\n .error-description {\n font-size: 18px;\n }\n }\n </style>\n</head>\n<body>\n<div class=\"container\">\n <h1 class=\"error-code\" aria-label=\"Код HTTP\">{{status}}</h1>\n <p class=\"error-description\">\n Сервер-источник недоступен. Попробуйте позже. Если проблема повторяется, обратитесь к администратору сайта.\n </p>\n <p class=\"host\">{{host}}</p>\n <div class=\"footer\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M13 2L3 14H12L11 22L21 10H12L13 2Z\" />\n </svg>\n <span>OpenFlare</span>\n </div>\n</div>\n</body>\n</html>\n",
|
||
"origin_error_page_line_style": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>{{status}} | OpenFlare</title>\n <style>\n *, *::before, *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n :root {\n --color-bg: #fcfcfc;\n --color-line: #e0e0e0;\n --color-line-hover: #1a1a1a;\n --color-text-main: #1a1a1a;\n --color-text-sub: #666666;\n --color-text-muted: #999999;\n --color-accent: #d4d4d4;\n --font-geo: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n body {\n font-family: var(--font-geo);\n background-color: var(--color-bg);\n background-image: radial-gradient(circle, var(--color-accent) 0.8px, transparent 0.8px);\n background-size: 24px 24px;\n color: var(--color-text-main);\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 48px 24px;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n letter-spacing: 0.01em;\n }\n\n .main-container {\n width: 100%;\n max-width: 640px;\n display: flex;\n flex-direction: column;\n gap: 48px;\n }\n\n .line-box {\n border: 1px solid var(--color-line);\n background: rgba(255, 255, 255, 0.6);\n backdrop-filter: blur(4px);\n padding: 32px;\n transition: all var(--transition-fast);\n position: relative;\n }\n\n .line-box:hover {\n border-color: var(--color-line-hover);\n box-shadow: 0 0 0 1px var(--color-line-hover);\n }\n\n .line-box:active {\n transform: scale(0.995);\n transition-duration: 100ms;\n }\n\n .error-header {\n text-align: center;\n }\n\n .error-code {\n font-size: 64px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: -0.03em;\n color: var(--color-text-main);\n margin-bottom: 12px;\n }\n\n .error-label {\n font-size: 12px;\n font-weight: 500;\n letter-spacing: 0.2em;\n text-transform: uppercase;\n color: var(--color-text-sub);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 12px;\n }\n\n .error-label::before,\n .error-label::after {\n content: '';\n width: 24px;\n height: 1px;\n background-color: var(--color-line);\n }\n\n .topology-wrapper {\n width: 100%;\n overflow: hidden;\n }\n\n .topology-svg {\n width: 100%;\n height: 140px;\n display: block;\n }\n\n .node-circle {\n fill: var(--color-bg);\n stroke: var(--color-text-main);\n stroke-width: 1.5;\n transition: all var(--transition-fast);\n }\n\n .node-circle.error {\n stroke: var(--color-text-muted);\n stroke-dasharray: 3 3;\n }\n\n .flow-line {\n stroke: var(--color-accent);\n stroke-width: 1.5;\n fill: none;\n transition: stroke var(--transition-fast);\n }\n\n .flow-line.error {\n stroke: var(--color-text-muted);\n stroke-dasharray: 4 4;\n }\n\n .node-text {\n font-family: var(--font-geo);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.1em;\n fill: var(--color-text-sub);\n text-anchor: middle;\n }\n\n .status-text {\n font-family: var(--font-geo);\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.05em;\n fill: var(--color-text-muted);\n text-anchor: middle;\n }\n\n .status-text.error {\n fill: #b0b0b0;\n }\n\n .description {\n text-align: center;\n }\n\n .desc-text {\n font-size: 18px;\n line-height: 1.6;\n color: var(--color-text-sub);\n font-weight: 400;\n max-width: 480px;\n margin: 0 auto 24px;\n }\n\n .meta-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 16px;\n border-top: 1px solid var(--color-line);\n padding-top: 24px;\n text-align: left;\n }\n\n .meta-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .meta-key {\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.1em;\n text-transform: uppercase;\n color: var(--color-text-muted);\n }\n\n .meta-val {\n font-size: 13px;\n font-family: 'SF Mono', 'Fira Code', monospace, var(--font-geo);\n color: var(--color-text-main);\n font-weight: 500;\n word-break: break-all;\n }\n\n .footer-brand {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n color: var(--color-text-muted);\n font-size: 13px;\n font-weight: 500;\n letter-spacing: 0.05em;\n transition: color var(--transition-fast);\n cursor: default;\n }\n\n .footer-brand:hover {\n color: var(--color-text-main);\n }\n\n .brand-icon {\n width: 20px;\n height: 20px;\n stroke: currentColor;\n stroke-width: 1.5;\n stroke-linecap: round;\n stroke-linejoin: round;\n fill: none;\n }\n\n @media (max-width: 480px) {\n body {\n padding: 32px 16px;\n }\n .error-code {\n font-size: 48px;\n }\n .line-box {\n padding: 24px 16px;\n }\n .meta-grid {\n grid-template-columns: 1fr;\n }\n }\n </style>\n</head>\n<body>\n <div class=\"main-container\">\n <div class=\"line-box error-header\">\n <div class=\"error-code\" aria-label=\"Код HTTP\">{{status}}</div>\n <div class=\"error-label\">Сервер-источник недоступен</div>\n </div>\n\n <div class=\"line-box topology-wrapper\">\n <svg class=\"topology-svg\" viewBox=\"0 0 600 140\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <defs>\n <marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 1 L 8 5 L 0 9 z\" fill=\"#d4d4d4\" />\n </marker>\n <marker id=\"arrow-error\" viewBox=\"0 0 10 10\" refX=\"8\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 1 L 8 5 L 0 9 z\" fill=\"#999999\" />\n </marker>\n </defs>\n\n <line x1=\"135\" y1=\"70\" x2=\"265\" y2=\"70\" class=\"flow-line\" marker-end=\"url(#arrow)\" />\n <line x1=\"335\" y1=\"70\" x2=\"465\" y2=\"70\" class=\"flow-line error\" marker-end=\"url(#arrow-error)\" />\n\n <circle cx=\"110\" cy=\"70\" r=\"20\" class=\"node-circle\" />\n <text x=\"110\" y=\"74\" class=\"node-text\" style=\"font-size: 8px; fill: #1a1a1a;\">CLI</text>\n <text x=\"110\" y=\"115\" class=\"node-text\">КЛИЕНТ</text>\n <text x=\"110\" y=\"130\" class=\"status-text\">ЗАПРОС ОТПРАВЛЕН</text>\n\n <circle cx=\"300\" cy=\"70\" r=\"20\" class=\"node-circle\" />\n <path d=\"M296 70 L304 64 L301 70 L305 70 L296 76 L299 70 Z\" fill=\"none\" stroke=\"#1a1a1a\" stroke-width=\"1\" stroke-linejoin=\"round\"/>\n <text x=\"300\" y=\"115\" class=\"node-text\">OPENFLARE</text>\n <text x=\"300\" y=\"130\" class=\"status-text\">ПРОКСИ</text>\n\n <circle cx=\"490\" cy=\"70\" r=\"20\" class=\"node-circle error\" />\n <line x1=\"484\" y1=\"64\" x2=\"496\" y2=\"76\" stroke=\"#999\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <line x1=\"496\" y1=\"64\" x2=\"484\" y2=\"76\" stroke=\"#999\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n <text x=\"490\" y=\"115\" class=\"node-text\" style=\"fill: #999;\">ИСТОЧНИК</text>\n <text x=\"490\" y=\"130\" class=\"status-text error\">НЕДОСТУПЕН</text>\n </svg>\n </div>\n\n <div class=\"footer-brand\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\" />\n </svg>\n <span>OpenFlare</span>\n </div>\n </div>\n\n <script>\n document.addEventListener('DOMContentLoaded', () => {\n const tsEl = document.getElementById('timestamp');\n if (tsEl) {\n const now = new Date();\n tsEl.textContent = now.toISOString().replace('T', ' ').substring(0, 19) + ' UTC';\n }\n });\n </script>\n</body>\n</html>\n",
|
||
"origin_error_page_baohaus": "\n<!DOCTYPE html>\n<html lang=\"ru\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>{{status}} | OpenFlare</title>\n <style>\n :root {\n --color-red: #E53935;\n --color-yellow: #FDD835;\n --color-blue: #1E88E5;\n --color-black: #212121;\n --color-white: #FAFAFA;\n --color-grey: #9E9E9E;\n --font-primary: 'Futura', 'Century Gothic', 'Tw Cen MT', sans-serif;\n }\n\n * {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n }\n\n body {\n background-color: var(--color-white);\n color: var(--color-black);\n font-family: var(--font-primary);\n min-height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow-x: hidden;\n }\n\n body::before {\n content: \"\";\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-image: radial-gradient(var(--color-grey) 1px, transparent 1px);\n background-size: 20px 20px;\n opacity: 0.15;\n z-index: -1;\n pointer-events: none;\n }\n\n .layout-container {\n display: grid;\n grid-template-columns: 1fr 1.618fr;\n grid-template-rows: 1fr 1fr;\n min-height: 100vh;\n width: 100%;\n }\n\n .zone-left {\n grid-column: 1 / 2;\n grid-row: 1 / 3;\n border-right: 4px solid var(--color-black);\n border-bottom: 4px solid var(--color-black);\n position: relative;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: var(--color-white);\n padding: 2rem;\n z-index: 2;\n }\n\n .decor-circle {\n position: absolute;\n width: 40vh;\n height: 40vh;\n background-color: var(--color-yellow);\n border-radius: 50%;\n top: 15%;\n left: 10%;\n z-index: 1;\n }\n\n .error-number {\n font-size: clamp(6rem, 12vw, 14rem);\n font-weight: 700;\n line-height: 0.9;\n letter-spacing: -0.04em;\n color: var(--color-black);\n position: relative;\n z-index: 2;\n }\n\n .brand-footer {\n position: absolute;\n bottom: 2rem;\n left: 2rem;\n display: flex;\n align-items: center;\n gap: 10px;\n z-index: 3;\n }\n\n .brand-icon {\n width: 24px;\n height: 24px;\n fill: var(--color-black);\n }\n\n .brand-text {\n font-size: 0.85rem;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.15em;\n }\n\n .zone-top-right {\n grid-column: 2 / 3;\n grid-row: 1 / 2;\n border-bottom: 4px solid var(--color-black);\n background-color: var(--color-white);\n padding: 4rem;\n display: flex;\n flex-direction: column;\n justify-content: center;\n z-index: 2;\n }\n\n .error-title {\n font-size: clamp(1.5rem, 3vw, 2.5rem);\n text-transform: uppercase;\n font-weight: 700;\n margin-bottom: 1.5rem;\n letter-spacing: 0.05em;\n }\n\n .error-desc {\n font-size: 1.1rem;\n line-height: 1.6;\n max-width: 450px;\n color: var(--color-black);\n }\n\n .meta-data {\n margin-top: 2rem;\n font-family: monospace;\n font-size: 0.8rem;\n color: var(--color-grey);\n border-top: 1px solid var(--color-grey);\n padding-top: 1rem;\n display: flex;\n flex-direction: column;\n gap: 0.35rem;\n word-break: break-all;\n }\n\n .zone-bottom-right {\n grid-column: 2 / 3;\n grid-row: 2 / 3;\n background-color: var(--color-white);\n position: relative;\n overflow: hidden;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 2;\n }\n\n .geo-line {\n position: absolute;\n width: 100%;\n height: 3px;\n background-color: var(--color-black);\n top: 50%;\n left: 0;\n }\n\n .geo-triangle {\n position: absolute;\n right: 15%;\n bottom: 15%;\n width: 0;\n height: 0;\n border-left: 80px solid transparent;\n border-right: 80px solid transparent;\n border-bottom: 140px solid var(--color-blue);\n }\n\n .geo-rect {\n position: absolute;\n top: 40%;\n left: 20%;\n width: 150px;\n height: 30px;\n background-color: var(--color-red);\n transform: rotate(-45deg);\n }\n\n @media (max-width: 900px) {\n .layout-container {\n display: flex;\n flex-direction: column;\n }\n\n .zone-left {\n border-right: none;\n border-bottom: 4px solid var(--color-black);\n min-height: 50vh;\n padding-top: 4rem;\n }\n\n .decor-circle {\n width: 30vh;\n height: 30vh;\n top: 10%;\n }\n\n .zone-top-right {\n border-bottom: 4px solid var(--color-black);\n padding: 2rem;\n }\n\n .zone-bottom-right {\n min-height: 30vh;\n }\n\n .geo-triangle {\n border-left-width: 50px;\n border-right-width: 50px;\n border-bottom-width: 90px;\n right: 10%;\n }\n\n .geo-rect {\n width: 100px;\n height: 20px;\n left: 15%;\n }\n }\n </style>\n</head>\n<body>\n <div class=\"layout-container\">\n <div class=\"zone-left\">\n <div class=\"decor-circle\"></div>\n <div class=\"error-number\" aria-label=\"Код HTTP\">{{status}}</div>\n\n <div class=\"brand-footer\">\n <svg class=\"brand-icon\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path d=\"M13 2L3 14h9l-1 8 10-12h-9l1-8z\"/>\n </svg>\n <span class=\"brand-text\">OpenFlare</span>\n </div>\n </div>\n\n <div class=\"zone-top-right\">\n <h1 class=\"error-title\">Сервер-источник недоступен</h1>\n <p class=\"error-desc\">\n Сервер получил некорректный ответ от сервера-источника.\n <br><br>\n <strong>Форма следует функции:</strong> Соединение прервано. Проверьте состояние сервера-источника.\n </p>\n <div class=\"meta-data\">\n <div>КОД: {{status}}</div>\n <div>ХОСТ: {{host}}</div>\n <div>ПРОКСИ: OPENFLARE_EDGE</div>\n <div id=\"timestamp\">--:--:-- UTC</div>\n </div>\n </div>\n\n <div class=\"zone-bottom-right\">\n <div class=\"geo-line\"></div>\n <div class=\"geo-rect\"></div>\n <div class=\"geo-triangle\"></div>\n </div>\n </div>\n\n <script>\n document.addEventListener('DOMContentLoaded', () => {\n const tsElement = document.getElementById('timestamp');\n if (tsElement) {\n const now = new Date();\n tsElement.textContent = now.toISOString().split('T')[1].split('.')[0] + ' UTC';\n }\n });\n </script>\n</body>\n</html>\n",
|
||
"ui_accountId": "ID учётной записи",
|
||
"ui_endpointLabel": "Адрес сервиса",
|
||
"ui_regionLabel": "Регион",
|
||
"ui_bucketLabel": "Бакет",
|
||
"ui_accessKeyId": "ID ключа доступа",
|
||
"ui_secretAccessKey": "Секретный ключ доступа",
|
||
"ui_isoCode": "Код ISO",
|
||
"ui_serverUrl": "URL сервера",
|
||
"ui_commandPalette": "Палитра команд",
|
||
"ui_commandSearch": "Найти команду…",
|
||
"ui_botLabel": "Бот",
|
||
"ui_unknownLabel": "Неизвестно",
|
||
"ui_otherLabel": "Прочее",
|
||
"ui_toastRegion": "Уведомления",
|
||
"ui_closeToast": "Закрыть уведомление",
|
||
"node_type_edge": "Пограничный узел",
|
||
"node_type_relay": "Ретранслятор",
|
||
"node_type_tunnel": "Туннель",
|
||
"system_metric_day": "{count} дн.",
|
||
"system_metric_hour": "{count} ч",
|
||
"system_metric_minute": "{count} мин",
|
||
"system_metric_second": "{count} с",
|
||
"system_metric_unknown": "Неизвестно",
|
||
"system_metric_none": "Нет"
|
||
}
|
||
}
|