Full Code of lencx/Noi for AI

main 48f641ea8be5 cached
50 files
641.6 KB
220.1k tokens
2 symbols
1 requests
Download .txt
Showing preview only (665K chars total). Download the full file or copy to clipboard to get everything.
Repository: lencx/Noi
Branch: main
Commit: 48f641ea8be5
Files: 50
Total size: 641.6 KB

Directory structure:
gitextract_lr274k0q/

├── .github/
│   └── workflows/
│       └── deploy.yml
├── .gitignore
├── README.md
├── configs/
│   ├── noi.conf.json
│   ├── noi.space.json
│   └── noi_awesome.json
├── extensions/
│   └── README.md
├── locales/
│   ├── README.md
│   ├── ar/
│   │   └── app.json
│   ├── bn/
│   │   └── app.json
│   ├── de/
│   │   └── app.json
│   ├── en/
│   │   └── app.json
│   ├── es/
│   │   └── app.json
│   ├── fa/
│   │   └── app.json
│   ├── fr/
│   │   └── app.json
│   ├── hi/
│   │   └── app.json
│   ├── hu/
│   │   └── app.json
│   ├── id/
│   │   └── app.json
│   ├── it/
│   │   └── app.json
│   ├── ja/
│   │   └── app.json
│   ├── ko/
│   │   └── app.json
│   ├── ms/
│   │   └── app.json
│   ├── noi.lang.json
│   ├── pa/
│   │   └── app.json
│   ├── pl/
│   │   └── app.json
│   ├── pt/
│   │   └── app.json
│   ├── ru/
│   │   └── app.json
│   ├── sw/
│   │   └── app.json
│   ├── th/
│   │   └── app.json
│   ├── tr/
│   │   └── app.json
│   ├── ur/
│   │   └── app.json
│   ├── vi/
│   │   └── app.json
│   ├── zh-Hans/
│   │   └── app.json
│   └── zh-Hant/
│       └── app.json
├── prompts/
│   └── awesome-chatgpt.zh.json
├── resources/
│   └── README.md
└── website/
    ├── babel.config.js
    ├── blog/
    │   ├── authors.yml
    │   └── noi.md
    ├── docs/
    │   └── index.md
    ├── docusaurus.config.ts
    ├── i18n/
    │   └── zh-CN/
    │       └── docusaurus-plugin-content-blog/
    │           └── noi.md
    ├── package.json
    ├── sidebars.ts
    ├── src/
    │   ├── css/
    │   │   └── custom.css
    │   └── pages/
    │       └── index.tsx
    ├── static/
    │   ├── .nojekyll
    │   └── CNAME
    ├── tailwind.config.js
    └── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/workflows/deploy.yml
================================================
name: GitHub Pages

on:
  push:
    branches:
      - main
    paths:
      - '.github/workflows/deploy.yml'
      - 'website/**'
  pull_request:

jobs:
  deploy:
    runs-on: ubuntu-22.04
    permissions:
      contents: write
    concurrency:
      group: ${{ github.workflow }}-${{ github.ref }}
    defaults:
      run:
        working-directory: website
    steps:
      - uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Get yarn cache
        id: yarn-cache
        run: echo "YARN_CACHE_DIR=$(yarn cache dir)" >> "${GITHUB_OUTPUT}"

      - name: Cache dependencies
        uses: actions/cache@v3
        with:
          path: ${{ steps.yarn-cache.outputs.YARN_CACHE_DIR }}
          key: ${{ runner.os }}-website-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-website-

      - run: yarn install --frozen-lockfile
      - run: yarn build

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        if: github.ref == 'refs/heads/main'
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./website/build

================================================
FILE: .gitignore
================================================
# Dependencies
node_modules/

# Production
build/

# Generated files
.docusaurus
.cache-loader

# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
website/package-lock.json

================================================
FILE: README.md
================================================
<p align="center">
  <img width="160" src="https://github.com/user-attachments/assets/88e98b92-2e51-4d31-a8e5-c89de1e7b0a3" />
  <p align="center">🚀 Less chaos. More flow.</p>
</h2>

> [!TIP]
> **Noi**: *`/nɔɪ/`*  (sounds like "noy")

[![Noi downloads](https://img.shields.io/github/downloads/lencx/Noi/total.svg?style=flat)](https://github.com/lencx/Noi/releases) [![Noi](https://img.shields.io/badge/Noi-discord-blue?style=flat&logo=discord&logoColor=f2f0ea)](https://discord.gg/kq2HXcpJSQ)

<a href="https://www.buymeacoffee.com/lencx" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-blue.png" alt="Buy Me A Coffee" style="height: 40px !important;width: 145px !important;" ></a>

### Features

* **Interaction-first workflow refresh** for a tighter, more focused browsing loop
* **Multi-window management** to run parallel workspaces side by side
* **Session isolation** to keep contexts clean, separated, and predictable
* **Local-first data**: history, prompts, and settings stay on-device
* **Prompt management for AI chats**: organize, reuse, and iterate on workflows
* **Built-in terminal** for fast local commands, scripts, and tooling
* **`noi` CLI command**: control Noi from tools like Claude Code, Codex, and Gemini CLI (more commands coming)
* **Multiple themes & visual styles** to fit different setups and vibes
* ...

[Download...](https://github.com/lencx/Noi/releases/tag/v1.1.0)

<img alt="Noi Preview" src="./website/static/readme/preview.png" />

<img alt="Noi Preview" src="./website/static/readme/nsh.png" />

## 中国用户

国内用户如果遇到使用问题或者想交流 Noi,可以关注公众号「**浮之静**」,发送 “**noi**” 进群参与讨论。如果 Noi 应用对你有帮助可以分享给更多人,或者微信扫码打赏。

<img height="240" src="https://user-images.githubusercontent.com/16164244/207228025-117b5f77-c5d2-48c2-a070-774b7a1596f2.png"> <img height="240" src="https://user-images.githubusercontent.com/16164244/207228300-ea5c4688-c916-4c55-a8c3-7f862888f351.png">


================================================
FILE: configs/noi.conf.json
================================================
{
  "language": "en",
  "theme": "dark",
  "theme_style": "haze",
  "stay_on_top": false,
  "auto_update": true,
  "app_quit_confirm": true,
  "window_bordless": false,
  "window_button_highlight": false,
  "window_anchor": "lc",
  "view_main_tabs": false,
  "view_main_pip": false,
  "view_main_bookmark": true,
  "view_left_fixed": true,
  "view_left_width": 240,
  "view_left_size": "small",
  "view_left_minibar_size": "large",
  "view_right_fixed": false,
  "view_right_width": 200,
  "view_right_bookmark": true,
  "view_right_home": "https://google.com",
  "view_bottom_fixed": false,
  "view_bottom_height": 120,
  "view_bottom_type": "ask",
  "view_bottom_toolbar": true,
  "view_about": "liquid",
  "max_history_search": 1000,
  "max_ask_prompt": 10000,
  "max_ask_log": 1000,
  "max_ask_archive": 10000,
  "max_ask_semver_menu": 30,
  "view_main_url_metadata": "link",
  "view_right_url_metadata": "link",
  "shortcut_quit": "CmdOrCtrl+Q",
  "shortcut_settings": "CmdOrCtrl+,",
  "shortcut_nsh": "Ctrl+`",
  "shortcut_noi": "CmdOrCtrl+Shift+N",
  "shortcut_noi_ask": "CmdOrCtrl+Alt+P",
  "shortcut_ask_send": "CmdOrCtrl+Shift+Enter",
  "shortcut_ask_editor_send": "CmdOrCtrl+Shift+Enter",
  "shortcut_ask_down": "Shift+]",
  "shortcut_ask_up": "Shift+[",
  "shortcut_sidebar": "CmdOrCtrl+Shift+S",
  "shortcut_sidepanel": "CmdOrCtrl+Alt+R",
  "shortcut_ask": "CmdOrCtrl+Shift+A",
  "shortcut_tabs": "CmdOrCtrl+Shift+M",
  "shortcut_pip": "CmdOrCtrl+Shift+P",
  "shortcut_toolbar": "CmdOrCtrl+Shift+B",
  "shortcut_history": "CmdOrCtrl+Y",
  "shortcut_find": "CmdOrCtrl+F",
  "shortcut_find_next": "CmdOrCtrl+G",
  "shortcut_find_previous": "CmdOrCtrl+Shift+G",
  "shortcut_find_jump": "CmdOrCtrl+J",
  "shortcut_main_new_tab": "CmdOrCtrl+T",
  "shortcut_main_reload": "CmdOrCtrl+R",
  "shortcut_main_goback": "CmdOrCtrl+[",
  "shortcut_main_goforward": "CmdOrCtrl+]",
  "shortcut_main_zoom_reset": "CmdOrCtrl+0",
  "shortcut_main_zoom_in": "CmdOrCtrl+=",
  "shortcut_main_zoom_out": "CmdOrCtrl+-",
  "shortcut_main_devtools": "CmdOrCtrl+Alt+I",
  "shortcut_right_new_tab": "CmdOrCtrl+Shift+T",
  "shortcut_right_reload": "CmdOrCtrl+Shift+R",
  "shortcut_right_goback": "CmdOrCtrl+Shift+[",
  "shortcut_right_goforward": "CmdOrCtrl+Shift+]",
  "shortcut_right_zoom_reset": "CmdOrCtrl+Shift+0",
  "shortcut_right_zoom_in": "CmdOrCtrl+Shift+=",
  "shortcut_right_zoom_out": "CmdOrCtrl+Shift+-",
  "shortcut_right_devtools": "CmdOrCtrl+Alt+Shift+I",
  "ua_view_main": "NUA",
  "ua_view_right": "NUA",
  "ua_view_view": "NUA",
  "ua_view_tray": "NUA",
  "ua_view_dialog": "NUA",
  "ua_view_tab_main": "NUA",
  "ua_view_tab_right": "NUA",
  "engine_view_main": "noi_google",
  "engine_view_right": "noi_google",
  "scan_preview": true,
  "scan_profile": "article",
  "scan_output": "markdown",
  "window_ask_mode": "prompt",
  "window_ask_layout": "ask-prompt",
  "window_ask_editor": "text",
  "window_ask_preview": false,
  "ask_mode": "prompt",
  "ask_layout": "ask-prompt",
  "ask_editor": "text",
  "ask_preview": false,
  "ask_comet_cursor": true,
  "ask_comet_trail": true,
  "ask_prompt_order": "update_desc",
  "ask_view": {
    "main": true,
    "side": "main"
  },
  "nsh": {
    "fontFamily": "\"0xProto Nerd Font Mono\", Menlo, Monaco, \"JetBrains Mono\", \"Courier New\", monospace",
    "fontSize": 12,
    "lineHeight": 1.2,
    "cursorBlink": true,
    "cursorStyle": "block",
    "cursorWidth": 1,
    "cursorInactiveStyle": "outline",
    "scrollback": 3000
  },
  "proxy_rules": "",
  "proxy_rules_enable": false,
  "proxy_bypass_rules": "",
  "proxy_bypass_rules_enable": false,
  "lock_locales": false,
  "hash": "",
  "user_agent_list": [
    {
      "id": "noi_windows",
      "name": "Windows",
      "ua": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.7204.97 Safari/537.36"
    },
    {
      "id": "noi_macos",
      "name": "macOS",
      "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.7204.97 Safari/537.36"
    },
    {
      "id": "noi_linux",
      "name": "Linux",
      "ua": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.7204.97 Safari/537.36"
    },
    {
      "id": "noi_ios",
      "name": "iOS",
      "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1"
    },
    {
      "id": "noi_android",
      "name": "Android",
      "ua": "Mozilla/5.0 (Linux; Android 14; Pixel 8 Pro) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36"
    }
  ],
  "search_engine_list": [
    {
      "id": "noi_google",
      "name": "Google",
      "url": "https://www.google.com/search?q={query}",
      "icon": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIHdpZHRoPSIyMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iPjxwYXRoIGQ9Im0xOTYgMTAyLjI3MjcyN2MwLTcuMDkwOTA4OC0uNjM2MzY0LTEzLjkwOTA5MDYtMS44MTgxODItMjAuNDU0NTQ1MmgtOTQuMTgxODE4djM4LjcyNzI3MzJoNTMuODE4MTgyYy0yLjM2MzYzNyAxMi40NTQ1NDUtOS40NTQ1NDYgMjMtMjAuMDkwOTA5IDMwLjA5MDkwOXYyNS4xODE4MThoMzIuNDU0NTQ1YzE4LjkwOTA5MS0xNy40NTQ1NDYgMjkuODE4MTgyLTQzLjA5MDkwOSAyOS44MTgxODItNzMuNTQ1NDU1eiIgZmlsbD0iIzQyODVmNCIvPjxwYXRoIGQ9Im0xMDAgMjAwYzI3IDAgNDkuNjM2MzY0LTguOTA5MDkxIDY2LjE4MTgxOC0yNC4xODE4MThsLTMyLjQ1NDU0NS0yNS4xODE4MThjLTguOTA5MDkxIDYtMjAuMjcyNzI4IDkuNjM2MzYzLTMzLjcyNzI3MyA5LjYzNjM2My0yNiAwLTQ4LjA5MDkwOTEtMTcuNTQ1NDU0LTU2LTQxLjE4MTgxOGgtMzMuMjcyNzI3M3YyNS44MTgxODJjMTYuNDU0NTQ1NSAzMi42MzYzNjQgNTAuMTgxODE4MiA1NS4wOTA5MDkgODkuMjcyNzI3MyA1NS4wOTA5MDl6IiBmaWxsPSIjMzRhODUzIi8+PHBhdGggZD0ibTQ0IDExOWMtMi02LTMuMTgxODE4Mi0xMi4zNjM2MzYtMy4xODE4MTgyLTE5IDAtNi42MzYzNjM2IDEuMTgxODE4Mi0xMyAzLjE4MTgxODItMTl2LTI1LjgxODE4MThoLTMzLjI3MjcyNzNjLTYuODE4MTgxNzkgMTMuNDU0NTQ1NC0xMC43MjcyNzI3IDI4LjYzNjM2MzYtMTAuNzI3MjcyNyA0NC44MTgxODE4IDAgMTYuMTgxODE4IDMuOTA5MDkwOTEgMzEuMzYzNjM2IDEwLjcyNzI3MjcgNDQuODE4MTgybDI1LjkwOTA5MDktMjAuMTgxODE4eiIgZmlsbD0iI2ZiYmMwNSIvPjxwYXRoIGQ9Im0xMDAgMzkuODE4MTgxOGMxNC43MjcyNzMgMCAyNy44MTgxODIgNS4wOTA5MDkxIDM4LjI3MjcyNyAxNC45MDkwOTA5bDI4LjYzNjM2NC0yOC42MzYzNjM2Yy0xNy4zNjM2MzYtMTYuMTgxODE4MTktMzkuOTA5MDkxLTI2LjA5MDkwOTEtNjYuOTA5MDkxLTI2LjA5MDkwOTEtMzkuMDkwOTA5MSAwLTcyLjgxODE4MTggMjIuNDU0NTQ1NS04OS4yNzI3MjczIDU1LjE4MTgxODJsMzMuMjcyNzI3MyAyNS44MTgxODE4YzcuOTA5MDkwOS0yMy42MzYzNjM2IDMwLTQxLjE4MTgxODIgNTYtNDEuMTgxODE4MnoiIGZpbGw9IiNlYTQzMzUiLz48L2c+PHBhdGggZD0ibTAgMGgyMDB2MjAwaC0yMDB6Ii8+PC9nPjwvc3ZnPg=="
    },
    {
      "id": "noi_chatgpt",
      "name": "ChatGPT",
      "url": "https://chatgpt.com/?q={query}",
      "icon": "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='180'%20height='180'%20fill='none'%3e%3cstyle%3e%20:root%20{%20--primary-fill:%20%23000;%20--secondary-fill:%20%23fff;%20}%20@media%20(prefers-color-scheme:%20dark)%20{%20:root%20{%20--primary-fill:%20%23fff;%20--secondary-fill:%20%23000;%20}%20}%20%3c/style%3e%3cg%20clip-path='url(%23a)'%3e%3crect%20width='180'%20height='180'%20fill='var(--primary-fill)'%20rx='90'%20/%3e%3cg%20clip-path='url(%23b)'%3e%3cpath%20fill='var(--secondary-fill)'%20d='M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z'%20/%3e%3c/g%3e%3c/g%3e%3cdefs%3e%3cclipPath%20id='a'%3e%3cpath%20d='M0%200h180v180H0z'%20/%3e%3c/clipPath%3e%3cclipPath%20id='b'%3e%3cpath%20d='M29.487%2029.964h121.035v119.954H29.487z'%20/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e"
    },
    {
      "id": "noi_claude",
      "name": "Claude",
      "url": "https://claude.ai/?q={query}",
      "icon": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMWVtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im00LjcwOSAxNS45NTUgNC43Mi0yLjY0Ny4wOC0uMjMtLjA4LS4xMjhoLS4yMjlsLS43OS0uMDQ4LTIuNjk4LS4wNzMtMi4zMzktLjA5Ny0yLjI2Ni0uMTIyLS41NzEtLjEyMS0uNTM2LS43MDUuMDU1LS4zNTIuNDgtLjMyMS42ODYuMDYgMS41Mi4xMDMgMi4yNzguMTU4IDEuNjUyLjA5NyAyLjQ0OS4yNTVoLjM4OWwuMDU1LS4xNTctLjEzNC0uMDk4LS4xMDMtLjA5Ny0yLjM1OC0xLjU5Ni0yLjU1Mi0xLjY4OC0xLjMzNi0uOTcyLS43MjQtLjQ5MS0uMzY0LS40NjItLjE1OC0xLjAwOC42NTYtLjcyMi44ODEuMDYuMjI1LjA2MS44OTMuNjg2IDEuOTA4IDEuNDc2IDIuNDkxIDEuODMzLjM2NS4zMDQuMTQ1LS4xMDMuMDE5LS4wNzMtLjE2NC0uMjc0LTEuMzU1LTIuNDQ2LTEuNDQ2LTIuNDktLjY0NC0xLjAzMi0uMTctLjYxOWEyLjk3IDIuOTcgMCAwIDEgLS4xMDQtLjcyOWwuNzQ4LTEuMDEzLjQxMy0uMTM0Ljk5Ni4xMzQuNDIuMzY0LjYyIDEuNDE0IDEuMDAyIDIuMjI5IDEuNTU1IDMuMDMuNDU2Ljg5OC4yNDMuODMyLjA5MS4yNTVoLjE1OHYtLjE0NmwuMTI4LTEuNzA2LjIzNy0yLjA5NS4yMy0yLjY5NS4wOC0uNzYuMzc2LS45MS43NDctLjQ5Mi41ODQuMjguNDguNjg1LS4wNjcuNDQ0LS4yODYgMS44NTEtLjU1OSAyLjkwMy0uMzY0IDEuOTQyaC4yMTJsLjI0My0uMjQyLjk4NS0xLjMwNiAxLjY1Mi0yLjA2NC43My0uODIuODUtLjkwNC41NDctLjQzMWgxLjAzM2wuNzYgMS4xMjktLjM0IDEuMTY2LTEuMDY0IDEuMzQ3LS44ODEgMS4xNDItMS4yNjQgMS43LS43OSAxLjM2LjA3My4xMS4xODgtLjAyIDIuODU2LS42MDYgMS41NDMtLjI4IDEuODQxLS4zMTUuODMzLjM4OC4wOTEuMzk1LS4zMjguODA3LTEuOTY5LjQ4Ni0yLjMwOS40NjItMy40MzkuODEzLS4wNDIuMDMuMDQ5LjA2MSAxLjU0OS4xNDYuNjYyLjAzNmgxLjYyMmwzLjAyLjIyNS43OS41MjIuNDc0LjYzOC0uMDc5LjQ4NS0xLjIxNS42Mi0xLjY0LS4zODktMy44MjktLjkxLTEuMzEyLS4zMjloLS4xODJ2LjExbDEuMDkzIDEuMDY4IDIuMDA2IDEuODEgMi41MDkgMi4zMy4xMjcuNTc4LS4zMjIuNDU1LS4zNC0uMDQ5LTIuMjA1LTEuNjU3LS44NTEtLjc0Ny0xLjkyNi0xLjYyaC0uMTI4di4xN2wuNDQ0LjY0OSAyLjM0NSAzLjUyMS4xMjIgMS4wOC0uMTcuMzUzLS42MDguMjEzLS42NjgtLjEyMi0xLjM3NC0xLjkyNS0xLjQxNS0yLjE2Ny0xLjE0My0xLjk0My0uMTQuMDgtLjY3NCA3LjI1NC0uMzE2LjM3LS43MjkuMjgtLjYwNy0uNDYxLS4zMjItLjc0Ny4zMjItMS40NzYuMzg5LTEuOTI0LjMxNS0xLjUzLjI4Ni0xLjkuMTctLjYzMi0uMDEyLS4wNDItLjE0LjAxOC0xLjQzNCAxLjk2Ny0yLjE4IDIuOTQ1LTEuNzI2IDEuODQ1LS40MTQuMTY0LS43MTctLjM3LjA2Ny0uNjYyLjQwMS0uNTg5IDIuMzg4LTMuMDM2IDEuNDQtMS44ODIuOTMtMS4wODYtLjAwNi0uMTU4aC0uMDU1bC02LjM0MyA0LjExNi0xLjEzLjE0Ni0uNDg3LS40NTYuMDYxLS43NDYuMjMxLS4yNDMgMS45MDgtMS4zMTJ6IiBmaWxsPSIjZDk3NzU3Ii8+PC9zdmc+"
    },
    {
      "id": "noi_grok",
      "name": "Grok",
      "url": "https://grok.com/?q={query}",
      "icon": "data:image/svg+xml;base64,PHN2ZyBmaWxsPSJ2YXIoLS1ncm9rLWZpbGwpIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjFlbSIgaGVpZ2h0PSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHN0eWxlPjpyb290ey0tZ3Jvay1maWxsOiMxZDFjMWI7fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OnJvb3R7LS1ncm9rLWZpbGw6I2ZjZmNmYzt9fTwvc3R5bGU+PHBhdGggZD0iTTkuMjcgMTUuMjlsNy45NzgtNS44OTdjLjM5MS0uMjkuOTUtLjE3NyAxLjEzNy4yNzIuOTggMi4zNjkuNTQyIDUuMjE1LTEuNDEgNy4xNjktMS45NTEgMS45NTQtNC42NjcgMi4zODItNy4xNDkgMS40MDZsLTIuNzExIDEuMjU3YzMuODg5IDIuNjYxIDguNjExIDIuMDAzIDExLjU2Mi0uOTUzIDIuMzQxLTIuMzQ0IDMuMDY2LTUuNTM5IDIuMzg4LTguNDJsLjAwNi4wMDdjLS45ODMtNC4yMzIuMjQyLTUuOTI0IDIuNzUtOS4zODMuMDYtLjA4Mi4xMi0uMTY0LjE3OS0uMjQ4bC0zLjMwMSAzLjMwNXYtLjAxTDkuMjY3IDE1LjI5Mk03LjYyMyAxNi43MjNjLTIuNzkyLTIuNjctMi4zMS02LjgwMS4wNzEtOS4xODQgMS43NjEtMS43NjMgNC42NDctMi40ODMgNy4xNjYtMS40MjVsMi43MDUtMS4yNWE3LjgwOCA3LjgwOCAwIDAwLTEuODI5LTFBOC45NzUgOC45NzUgMCAwMDUuOTg0IDUuODNjLTIuNTMzIDIuNTM2LTMuMzMgNi40MzYtMS45NjIgOS43NjQgMS4wMjIgMi40ODctLjY1MyA0LjI0Ni0yLjM0IDYuMDIyLS41OTkuNjMtMS4xOTkgMS4yNTktMS42ODIgMS45MjVsNy42Mi02LjgxNSI+PC9wYXRoPjwvc3ZnPg=="
    },
    {
      "id": "noi_bing",
      "name": "Bing",
      "url": "https://www.bing.com/search?q={query}",
      "icon": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjkzLjcxNyUiIGN5PSI3Ny44MTglIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0uNjUyMjU3MTcgLS41NDE2NjUxOSAuNzU3OTk3NzQgLS40NjYxMDI5OCAuOTU4NDIyIDEuNjQ4NDg1KSIgcj0iMTQzLjY5MSUiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzAwY2FjYyIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzA0OGZjZSIvPjwvcmFkaWFsR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMwMGJiZWMiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyNzU2YTkiLz48L2xpbmVhckdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD0iYyIgY3g9IjEzLjg5MyUiIGN5PSI3MS40NDglIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC41NTQ3NTgzMiAtLjM5NjE4NjYgLjIzOTM3NTk1IC45MTgxNzAwMSAtLjEwOTE1NCAuMTEzMzIyKSIgcj0iMTQ5LjIxJSIgeGxpbms6aHJlZj0iI2IiLz48bGluZWFyR3JhZGllbnQgaWQ9ImQiIHgxPSI1MCUiIHgyPSI1MCUiIHhsaW5rOmhyZWY9IiNiIiB5MT0iMCUiIHkyPSIxMDAlIi8+PHBhdGggZD0ibTExLjk3IDcuNTY5YS45Mi45MiAwIDAgMCAtLjgwNS44NjNjLS4wMTMuMTk1LS4wMS4yMDkuNDMgMS4zNDcgMSAyLjU5IDEuMjQyIDMuMjE0IDEuMjgzIDMuMzAyLjA5OS4yMTMuMjM3LjQxMy40MS41OTIuMTM0LjEzOC4yMjIuMjEyLjM3LjMxMS4yNi4xNzYuMzkuMjI0IDEuNDA1LjUyNy45ODkuMjk1IDEuNTI5LjQ5IDEuOTk0LjcyMy42MDMuMzAyIDEuMDI0LjY0NCAxLjI5IDEuMDUxLjE5MS4yOTIuMzYuODE1LjQzNCAxLjM0Mi4wMjkuMjA2LjAyOS42NjEgMCAuODQ3YTIuNDkxIDIuNDkxIDAgMCAxIC0uMzc2IDEuMDI2Yy0uMS4xNTEtLjA2NS4xMjYuMDgxLS4wNTguNDE1LS41Mi44MzgtMS40MDggMS4wNTQtMi4yMTNhNi43MjggNi43MjggMCAwIDAgLjEwMi0zLjAxMiA2LjYyNiA2LjYyNiAwIDAgMCAtMy4yOTEtNC41MyAxMDQuMTU3IDEwNC4xNTcgMCAwIDAgLTEuMzIyLS42OThsLS4yNTQtLjEzM2E3MzcuOTQxIDczNy45NDEgMCAwIDEgLTEuNTc1LS44MjdjLS41NDgtLjI5LS43OC0uNDA2LS44NDYtLjQyNmExLjM3NiAxLjM3NiAwIDAgMCAtLjI5LS4wNDVsLS4wOTMuMDF6IiBmaWxsPSJ1cmwoI2EpIi8+PHBhdGggZD0ibTEzLjE2NCAxNy4yNGE0LjM4NSA0LjM4NSAwIDAgMCAtLjIwMi4xMjUgNTExLjQ1IDUxMS40NSAwIDAgMCAtMS43OTUgMS4xMTUgMTYzLjA4NyAxNjMuMDg3IDAgMCAxIC0uOTg5LjYxNGwtLjQ2My4yODhhOTkuMTk4IDk5LjE5OCAwIDAgMSAtMS41MDIuOTQxYy0uMzI2LjItLjcwNC4zMzQtMS4wOS4zODctLjE4LjAyNC0uNTIuMDI0LS43IDBhMi44MDcgMi44MDcgMCAwIDEgLTEuMzE4LS41MzggMy42NjUgMy42NjUgMCAwIDEgLS41NDMtLjU0NSAyLjgzNyAyLjgzNyAwIDAgMSAtLjUwNi0xLjE0MSAyLjE2MSAyLjE2MSAwIDAgMCAtLjA0MS0uMTgyYy0uMDA4LS4wMDguMDA2LjEzOC4wMzIuMzMuMDI3LjE5OS4wODUuNDg3LjE0Ny43MzMuNDgyIDEuOTA3IDEuODUgMy40NTcgMy43MDUgNC4xOTVhNi4zMSA2LjMxIDAgMCAwIDEuNjU4LjQxMmMuMjIuMDI1Ljg0NC4wMzUgMS4wNzQuMDE3IDEuMDU0LS4wOCAxLjk3Mi0uMzkzIDIuOTEzLS45OTJhMzI1LjI4IDMyNS4yOCAwIDAgMSAuOTM3LS41OTZsLjM4NC0uMjQ0LjY4NC0uNDM1LjIzNC0uMTQ5LjAwOS0uMDA1LjAyNS0uMDE3LjAxMy0uMDA3LjE3Mi0uMTEuNTk3LS4zOGMuNzYtLjQ4MS45ODctLjY1IDEuMzQtLjk5OC4xNDgtLjE0Ni4zNy0uMzk0LjM4MS0uNDI1LjAwMi0uMDA3LjA0Mi0uMDY4LjA4OC0uMTM2YTIuNDkgMi40OSAwIDAgMCAuMzczLTEuMDIzIDQuMTgxIDQuMTgxIDAgMCAwIDAtLjg0NyA0LjMzNiA0LjMzNiAwIDAgMCAtLjMxOC0xLjEzN2MtLjIyNC0uNDcyLS43LS45LTEuMzgzLTEuMjQ1YTIuOTcyIDIuOTcyIDAgMCAwIC0uNDA2LS4xODFjLS4wMSAwLS42NDYuMzkyLTEuNDEzLjg3YTcwODkuMTcxIDcwODkuMTcxIDAgMCAwIC0xLjY1OCAxLjAzMWwtLjQzOS4yNzR6IiBmaWxsPSJ1cmwoI2MpIi8+PHBhdGggZD0ibTQuMDAzIDE0Ljk0Ni4wMDQgMy4zMy4wNDIuMTkzYy4xMzQuNjA0LjM2NiAxLjA0Ljc3IDEuNDQ1YTIuNzAxIDIuNzAxIDAgMCAwIDEuOTU1LjgxNGMuNTM2IDAgMS0uMTM1IDEuNDc5LS40M2wuNzAzLS40MzUuNTU2LS4zNDZ2LTExLjUxNGMwLTIuMzA2LS4wMDQtMy42NzUtLjAxMi0zLjc4MmEyLjczNCAyLjczNCAwIDAgMCAtLjc5Ny0xLjc2NWMtLjE0NS0uMTQ0LS4yNjgtLjI0LS42MzctLjQ5NmExNzgwLjEwMiAxNzgwLjEwMiAwIDAgMSAtMi4zMDQtMS41OThjLS4zNTYtLjI0Ny0uMzgyLS4yNjQtLjQ5MS0uMzAzYS45NDMuOTQzIDAgMCAwIC0xLjI1NC42OTZjLS4wMTQuMDYzLS4wMTcuOTA0LS4wMTcgNS40Njh2NS4zOTR6IiBmaWxsPSJ1cmwoI2QpIi8+PC9zdmc+"
    },
    {
      "id": "noi_duckduckgo",
      "name": "DuckDuckGo",
      "url": "https://duckduckgo.com/?q={query}",
      "icon": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIHdpZHRoPSIyMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSI+PHBhdGggZD0ibTIwMCAxMDBjMC01NS4yMjg0NzUtNDQuNzcxNTI1LTEwMC0xMDAtMTAwcy0xMDAgNDQuNzcxNTI1LTEwMCAxMDAgNDQuNzcxNTI1IDEwMCAxMDAgMTAwIDEwMC00NC43NzE1MjUgMTAwLTEwMHoiIGZpbGw9IiNkNTMiLz48cGF0aCBkPSJtMTg2LjMyOTk1MiA5OS45OTUzNjk2Yy0uMDA3NzI5LTQxLjE3NzkzMjctMjkuMTAwOTQxLTc2LjYxNjYwNDItNjkuNDg4NTM3LTg0LjY0NDQyNi00MC4zODc1OTU2LTguMDI3ODIxNzQtODAuODIxOTQ3MyAxMy41OTA4OTE1LTk2LjU3NjQ4OTEgNTEuNjM1NzgzNS0xNS43NTQ1NDE5IDM4LjA0NDg5MTktMi40NDE3NTgxIDgxLjkyMDc1OTkgMzEuNzk3MjY4MSAxMDQuNzk2NDY4OXM3OS44Njg5OTUgMTguMzgwNTU0IDEwOC45ODYwOTktMTAuNzM2NTdjMTYuMjE1ODM1LTE2LjE3NTEzOCAyNS4zMTQ2MDQtMzguMTQ3MzIxIDI1LjI4MTY1OS02MS4wNTEyNTY0em0tMjEuMzk5NzE1LTY0LjkxNjkxMTdjMzAuOTY5MTI0IDMwLjk3NDAzMDkgMzUuNzQ2NzExIDc5LjUxMDg4OTEgMTEuNDExMTE0IDExNS45Mjg3NDQxLTI0LjMzNTU5NiAzNi40MTc4NTQtNzEuMDA2OTg3IDUwLjU3NDQ0Mi0xMTEuNDczMTMyIDMzLjgxMjU2MS00MC40NjYxNDU1LTE2Ljc2MTg4Mi02My40NTczNDcyOC01OS43NzQxLTU0LjkxMzc1NDgyLTEwMi43MzMzMTU4IDguNTQzNTkyNDItNDIuOTU5MjE2MyA0Ni4yNDI2MTQ2Mi03My45MDE0MTkyOSA5MC4wNDI5MTYyMi03My45MDQ1NDg5NiAyNC4zNjEwMDU2LS4wMzIxOTY3NyA0Ny43Mjk5NjQ2IDkuNjQ3NjkwNDYgNjQuOTMyODU2NiAyNi44OTY1NTk2NnoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJtNzAuNDU5NDA0NyA0OS41MTIyNjIxYy0yNy45NzE4MzY1IDYuNTE3NDg4NS0xNy43MTM4NTc4IDQ1LjYwNjA0NDMtMTcuNzEzODU3OCA0NS42MDYwNDQzbDE3LjcxMzg1NzggODYuNjI2OTIwNiA2LjU1NDYxODkgMi44MDAyMjgtNi41NTQ2MTg5LTEzNS4wODIzMTk3em0tNi41NTQ2MTktMTYuNzY4NjEzOGgtNy40Mzk0OTI2bDEwLjMyMzUyNDkgMy43MzM2MzY3cy0xMC4yNTc5Nzg3IDAtMTAuMjU3OTc4NyA2LjU1MDIzOTdjMjIuMzE4NDc3Ni0uOTY2MTYwMyAzMi41NjAwNjk4IDQuNjAxNTQzNSAzMi41NjAwNjk4IDQuNjAxNTQzNWwtMjUuMTY5NzM2OS0xNC45MDE3OTU1eiIgZmlsbD0iI2RkZCIvPjxwYXRoIGQ9Im0xMjIuNjk0NTU4IDE4OS4wOTA5MDlzLTIyLjAwODYwNS0zNS4yODMwNjgtMjIuMDA4NjA1LTU4LjUxNjY2NWMwLTQzLjY0MjU5MTcgMjguNDA0OTU2LTYuNTMwODc4IDI4LjQwNDk1Ni00MC44MTc5ODcgMC0zNC4yODcxMDg4LTI4LjQwNDk1Ni00Mi43NzcyNS0yOC40MDQ5NTYtNDIuNzc3MjUtMTMuNzQzMjk0MS0xNy42MzMzNzAyLTQwLjI3OTI5MS0xMy45MjcwOTctNDAuMjc5MjkxLTEzLjkyNzA5N2w2LjQ0NDY4NjYgMy43MjI2MDA0cy02LjQ0NDY4NjYgMS44NDQ5NzMtOC4yNDkxOTg4IDMuNzA2MjczMmMtMS44MDQ1MTIzIDEuODYxMzAwMiAxNy40MTY3NjU0LTIuNzc1NjIzMSAyNS42NjU5NjQyIDQuNjUzMjUwNC0zMy45Nzk2MDk5IDIuNzU5Mjk1OS0yOC40ODU1MTQ2IDMwLjY0NjE0NDQtMjguNDg1NTE0NiAzMC42NDYxNDQ0bDE5LjI1MzUwMTEgMTExLjQ2NTc1NzZ6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0ibTEyMy4yODQxNTMgOTkuMTcxMzMwMiAzNC44MDMzMjItOS4xNzEzMzAyYzMxLjEzMzAzNiA0LjU0NTM2OTMtMjYuNTYxMjc3IDIyLjAxNzY0LTMwLjIxNTQ2NSAyMS4wOTg4OTUtMjcuNDc4ODQ5LTQuNTkzNzI0LTE5LjMxNzI5MyAxOC4zMjY1NDIgMTMuNzMxMzc1IDEwLjk5MjcwMSAzMy4wNDg2NjgtNy4zMzM4NCA4LjI0MjA0NSAxOC4zNDI2NjEtMjEuOTczNDIgOC4yNTI1ODYtNDMuMDQ1MzY2NS0xMS45MTE0NDctMjAuMTU0Mzc1LTMzLjAxMDM0MTUgMy42NTQxODgtMzEuMTcyODUxOHoiIGZpbGw9IiNmYzAiLz48cGF0aCBkPSJtMTEzLjc0NjgyNSAxNzIuNjk2NzUzIDEuODY3OTIxLTIuNzc0NDQ1YzIwLjUxNDM2OSA3LjQyNTcxOSAyMS40NDgzMyAxMC4yMDAxNjQgMjAuNTE0MzY5LTguMzU1OTc0LS45MzM5NjEtMTguNTU2MTM5IDAtMTguNTcyNDU5LTIxLjQ0ODMyOS0yLjc5MDc2NSAwLTQuNjM0OTU1LTEyLjEwODcyMS0yLjc5MDc2NS0xMy45NzY2NDMgMC0xOS41ODA0MDczLTguMzU1OTc1LTIxLjQ0ODMyOS0xMS4xNDY3MzktMjAuNTE0MzY4MiAxLjg2MDUxIDEuODY3OTIxOCAyNi45Mjg0MzMuOTMzOTYwOSAyMi4yNzcxNTggMTkuNTgwNDA3NiAxMy4wNTYyMWwxMy45NzY2NDI2LS45MzAyNTV6IiBmaWxsPSIjNmI1Ii8+PHBhdGggZD0ibTEwMC4wMTUwMjYgMTYxLjkwNDAyN3YxMS4zOTA3NTljLjg1NjQ5OSAxLjkwNDAyNyAxNC41MzA0MjkgMS45MDQwMjcgMTQuNTMwNDI5LTEuOTA0MDI3cy02LjgzNjk2NSAyLjg1NjA0MS0xMS4xMDQ0MzMuOTUyMDE0Yy00LjI2NzQ2ODMtMS45MDQwMjgtMS43MjgwMjQtMTIuMzQyNzczLTEuNzI4MDI0LTEyLjM0Mjc3M2wtMS43MTI5OTggMS45MDQwMjd6IiBmaWxsPSIjNGE0Ii8+PHBhdGggZD0ibTc4LjkzMzY0ODIgNzEuMDE2MDM1MWMtNC42NjQ2MDMyLTUuNTQwNTY3NC0xNi43NTk4Mzc0LS45MjM0Mjc5LTEzLjk3NzQ0MjYgNi40ODAxOTU3LjkzMjkyMDctMy42OTM3MTE2IDcuNDQ2OTk4MS05LjIxODA3ODQgMTMuOTc3NDQyNi02LjQ4MDE5NTd6bTI5Ljc4Nzk5MTggMGMuOTMyOTIxLTUuNTQwNTY3NCAxMC4yNDU3Ni02LjQ4MDE5NTcgMTMuMDkzNjIzLS45MjM0Mjc5LTQuMjE2NDgxLTIuMDM2MzUyMi05LjIxMTQxOC0xLjY4NDA4NDItMTMuMDkzNjIzLjkyMzQyNzl6bS0zMC43MjA5MTI1IDE0Ljc0MjQ0NTJjLjIzNDg5NDEtLjkwMDQ4MzggMS4xMDk2MDk2LTEuNDg3NjA3OCAyLjA0MTY5NzEtMS4zNzA0MjE4LjkzMjA4NzQuMTE3MTg1OSAxLjYzMDczNzMuOTAyMTIwMSAxLjYzMDczNzMgMS44MzIxMzU3IDAgLjkzMDAxNTctLjY5ODY0OTkgMS43MTQ5NDk4LTEuNjMwNzM3MyAxLjgzMjEzNTgtLjkzMjA4NzUuMTE3MTg2LTEuODA2ODAzLS40Njk5MzgtMi4wNDE2OTcxLTEuMzcwNDIxOHptLTcuNDQ2OTk4IDMuNjc3NTExYy4yNTExNDc1IDMuNDgwMTQzOCAzLjI0MDkxMzcgNi4xMzg3MzgyIDYuNzYzNTUxMSA2LjAxNDM2MzEgMy41MjI2Mzc1LS4xMjQzNzUgNi4zMTM0MzMtMi45ODcwNjU5IDYuMzEzNDMzLTYuNDc2MDc3cy0yLjc5MDc5NTUtNi4zNTE3MDE5LTYuMzEzNDMzLTYuNDc2MDc3Yy0zLjUyMjYzNzQtLjEyNDM3NTEtNi41MTI0MDM2IDIuNTM0MjE5My02Ljc2MzU1MTEgNi4wMTQzNjMxem00OC40MTM2NzA1LTYuNDgwMTk1N2MuMjM0ODk0LS45MDA0ODM4IDEuMTA5NjEtMS40ODc2MDc3IDIuMDQxNjk3LTEuMzcwNDIxOC45MzIwODguMTE3MTg2IDEuNjMwNzM4LjkwMjEyMDEgMS42MzA3MzggMS44MzIxMzU4cy0uNjk4NjUgMS43MTQ5NDk4LTEuNjMwNzM4IDEuODMyMTM1OGMtLjkzMjA4Ny4xMTcxODU5LTEuODA2ODAzLS40Njk5MzgxLTIuMDQxNjk3LTEuMzcwNDIxOXptLTUuNTk3NTIzIDMuNzI2MTEyNmMuMjUwMDUyIDIuOTU5NzY1MSAyLjgxMzQ2OSA1LjE5Nzg5NTEgNS44MTE0ODcgNS4wNzQwMzM0IDIuOTk4MDE4LS4xMjM4NjE4IDUuMzY0MDkxLTIuNTY1NjUxNSA1LjM2NDA5MS01LjUzNTc0NzRzLTIuMzY2MDczLTUuNDExODg1NS01LjM2NDA5MS01LjUzNTc0NzNjLTIuOTk4MDE4LS4xMjM4NjE3LTUuNTYxNDM1IDIuMTE0MjY4My01LjgxMTQ4NyA1LjA3NDAzMzR6IiBmaWxsPSIjMTQ4Ii8+PC9nPjwvc3ZnPg=="
    },
    {
      "id": "noi_ecosia",
      "name": "Ecosia",
      "url": "https://www.ecosia.org/search?q={query}",
      "icon": "data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIHdpZHRoPSIyMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iIzAwODAwOSIgdHJhbnNmb3JtPSJtYXRyaXgoMSAtMCAtMCAtMSAwIDIwMCkiPjxwYXRoIGQ9Im05My43MTQ4OTg5IDE5OS45MTA4MzhjLS41NDM3MzEtLjA1NzUyMS0yLjQwMzg2MzMtLjI1ODg0Ny00LjE0OTUyNi0uNDAyNjUxLTE4LjI4NjUzMTktMS43ODMxNjktMzYuMTcyNDE5OS05LjA1OTY0OC01MS4zNjgyNzA0LTIwLjg4MDMzMS00LjI2Mzk5NTctMy4zMDc0OTEtMTMuNzY0OTc5NC0xMi44MjczMTEtMTcuMDI3MzY1NC0xNy4wODM5MDgtMTEuNzMzMTQyNTctMTUuMzAwNzM5LTE4LjY4NzE3NTg0LTMyLjU1NzIxMS0yMC44MDQ4NjQ5OC01MS42MjU2MTMtLjQ4NjQ5NjE2LTQuNDU3OTIyLS40ODY0OTYxNi0xNi41Mzc0NTIzIDAtMjAuOTk1Mzc0MyAyLjE0NjMwNjU2LTE5LjM1NjAwOTggOS41MDA5ODM3Mi0zNy4zODkwMjMzIDIxLjQwNTgzMDc4LTUyLjM0NDYzMjYgMy4yNjIzODYtNC4xMTI3OTI2IDkuNzAxMzA1Ny0xMC42OTkwMTI4IDEzLjg1MDgzMTctMTQuMjA3ODI4OSAxMy4wNDk1NDM5LTExLjAxNTM4MTQgMjguMzAyNjI5Mi0xOC4zNDkzODIxNSA0NS4xNTgyOTAxLTIxLjc0MzE1NTA0IDEuMzE2NDAxNC0uMjU4ODQ3MDggMi41NDY5NTA1LS40MDI2NTEwMiAyLjc0NzI3MjQtLjM0NTEyOTQ0LjI1NzU1NjguMTE1MDQzMTUuNDI5MjYxMyAxLjE3OTE5MjI3LjU3MjM0ODQgMy40MjI1MzM2Ny40ODY0OTYyIDguMTM5MzAyNzEgMi4xMTc2ODkyIDIwLjUzNTIwMjAxIDMuMjA1MTUxMiAyNC4xMzAzMDA0MS4xMTQ0Njk3LjQwMjY1MS0uNjI5NTgzMy40ODg5MzM0LTYuNTI0NzcyLjYzMjczNzMtMTIuNjQ4OS4zNzM4OTAyLTIwLjk0Nzk1MiAxLjU1MzA4MjUtMjguOTg5NDQ3MyA0LjE0MTU1MzQtMTQuNTk0ODg0NiA0LjcxNjc2OS0yMy42Mzc5ODk2IDEzLjI1ODcyMjgtMjcuNzMwMjgwOCAyNi4yNTg1OTg2LTUuMjY1NjA1NSAxNi42ODEyNTY2LTMuMjkxMDAzNCAzMS42MDgxMDUxIDUuMzIyODQwMyA0MC4yNjUxMDIgNi43ODIzMjg3IDYuODQ1MDY2OSAxNi41NDA4NjkyIDguNDI2OTEwOSAyMy4zODA0MzI4IDMuODI1MTg0OSAxLjAwMTYwOTctLjY5MDI1OSAxLjg4ODc0OTgtMS4yMDc5NTMgMS45NDU5ODQ2LTEuMTUwNDMyLjA1NzIzNDkuMDg2MjgzLS4yMjg5MzkzIDEuMTUwNDMyLS42MDA5NjU4IDIuMzg3MTQ2LTEuNDg4MTA1OSA0Ljc3NDI5LTIuOTQ3NTk0NCAxMS4yMTY3MDctMy43Nzc0OTk2IDE2Ljc5NjI5OS0uNjg2ODE4MSA0LjY4ODAwOS0uODU4NTIyNiAxNS43MzIxNTEtLjI4NjE3NDIgMTkuOTg4NzQ3IDEuNDg4MTA1OSAxMS4yMTY3MDcgNS4yMzY5ODggMTkuMjEyMjA2IDEyLjA3NjU1MTYgMjUuNzQwOTA1IDUuNzgwNzE5IDUuNDkzMzEgMTMuMjc4NDgzMyA5LjIwMzQ1MiAyMi40OTMyOTI4IDExLjA3MjkwMyAxNy4wNTU5ODI5IDMuNDUxMjk0IDMzLjk5NzQ5NTktMS4wOTI5MSA0NS40NzMwODE5LTEyLjE2NTgxMyA2LjAwOTY1OC01Ljc4MDkxOCA5LjUyOTYwMS0xMS44MjA2ODQgMTEuNjE4NjczLTE5Ljc4NzQyMi43NzI2Ny0yLjk5MTEyMS44MDEyODgtMy40MjI1MzMuODAxMjg4LTkuNTQ4NTgxIDAtMy41MDg4MTYuMDI4NjE3LTYuMzg0ODk1LjA1NzIzNC02LjM4NDg5NS4wNTcyMzUgMCAuNjg2ODE4LjQzMTQxMiAxLjQzMDg3MS45Nzc4NjcgMy4wMDQ4MyAyLjE1NzA1OSA2LjY2Nzg1OSAzLjY1MjYyIDEwLjI3MzY1NCA0LjE5OTA3NSA1LjEyMjUxOS43NzY1NDEgMTAuNDE2NzQyLTEuMDA2NjI4IDE0LjUwOTAzMy00Ljg2MDU3MyAxLjUxNjcyMy0xLjQzODAzOSAyLjIwMzU0MS0yLjM1ODM4NSAzLjA2MjA2NC00LjE3MDMxNCAxLjUxNjcyMy0zLjI0OTk2OSAxLjg2MDEzMi00LjkxODA5NSAxLjgzMTUxNS05LjA4ODQwOSAwLTQuMjI3ODM2LS42Mjk1ODMtNy4xMzI2NzUtMi4zMTgwMTEtMTEuMTAxNjY0LTIuODkwMzYtNi43MzAwMjM5LTkuMDcxNzIzLTEzLjUxNzU2OTctMTUuNjgyMzQ3LTE3LjIyNzcxMTItMS4wMzAyMjctLjU3NTIxNTctMS44NjAxMzItMS4xNTA0MzE1LTEuODYwMTMyLTEuMjM2NzEzOCAwLS4xMTUwNDMyIDEuNTE2NzIzLS4yMDEzMjU2IDMuMzc2ODU1LS4yMzAwODYzIDguNzg1NTQ5LS4wMjg3NjA4IDE2LjcxMjU3NC00LjM0Mjg3ODkgMjAuMTc1MjgyLTEwLjk1Nzg1OTkgMy4wNjIwNjQtNS44Mzg0Mzk4IDIuNTQ2OTUxLTEyLjk3MTExNS0xLjQ4ODEwNi0yMS4wNTI4OTYyLTUuODY2NTcxLTExLjcwNTY0MDQtMTUuMTY3MjMzLTE4Ljg2NzA3NjQtMzAuMDQ4MjkyLTIzLjE4MTE5NDUtOC4wNzAxMTItMi4zMjk2MjM3LTE1LjY1MzcyOS0zLjI3ODcyOTctMjcuNzU4ODk4LTMuNTA4ODE2bC04Ljk1NzI1My0uMTcyNTY0Ny4xNzE3MDUtMi40NzM0Mjc3Yy4xMTQ0Ny0xLjM1MTc1Ny41MTUxMTMtNC40ODY2ODI4LjkxNTc1Ny02LjkzMTM0OTcuNzcyNjcxLTQuOTE4MDk0NiAzLjc0ODg4Mi0xOC40MDY5MDM3NyA0LjEyMDkwOS0xOC44MDk1NTQ3OS40ODY0OTYtLjQ4ODkzMzM4IDkuMzg2NTE0IDEuMzIyOTk2MjEgMTUuMzk2MTcyIDMuMTYzNjg2NTggMTAuOTYwNDczIDMuMzM2MjUxMzEgMjIuNDkzMjkzIDkuNDYyMjk5MDEgMzIuMzA5MDY5IDE3LjE0MTQyOTExIDMuOTQ5MjA0IDMuMDc3NDA0MiAxMS4xMzIxNzYgMTAuMDk1MDM2MyAxNC42NTIxMTkgMTQuMzIyODcyIDEyLjkwNjQ1NyAxNS40NzMzMDM1IDIwLjUxODY5MSAzMy40MjAwMzQ3IDIyLjk3OTc4OSA1NC4yMTQwODM4LjQ1Nzg3OSAzLjk5Nzc0OTQuNDU3ODc5IDE3LjExMjY2ODMgMCAyMC45OTUzNzQzLTIuMjAzNTQxIDE4LjA5MDUzNS03Ljg2OTc5MSAzMy4zMDQ5OTItMTcuNzQyODAxIDQ3LjQyNjUzOC02LjY5NjQ3NiA5LjU3NzM0Mi0xNi41MTIyNTIgMTkuMjEyMjA2LTI2LjI0MjE3NSAyNS43Njk2NjYtMTMuMTY0MDEzIDguODU4MzIyLTI3LjcwMTY2MyAxNC4yMzY1ODktNDMuOTI3NzQxIDE2LjI3ODYwNS0zLjM0ODIzOC40MzE0MTItMTUuNzk2ODE2Mi43NzY1NDEtMTguMDI4OTc1MS41MTc2OTR6Ii8+PHBhdGggZD0ibTcyLjI1MTgzMzMgOTUuNTM3OTQxN3YtNDUuNTg1ODQ3NmgyNy43NTg4OTg3IDI3Ljc1ODg5OHYxNC41MjQxOTc1IDE0LjUyNDE5NzVoLTE3LjE3MDQ1My0xNy4xNzA0NTIzdjUuNDY0NTQ5NiA1LjQ2NDU0OTVoMTEuMTYwNzk0MyAxMS4xNjA3OTR2NS42MDgzNTM1IDUuNjA4MzUzM2gtMTEuMTYwNzk0LTExLjE2MDc5NDN2NS40NjQ1NSA1LjQ2NDU0OWgxNy4xNzA0NTIzIDE3LjE3MDQ1M3YxNC41MjQxOTggMTQuNTI0MTk3aC0yNy43NTg4OTgtMjcuNzU4ODk4N3oiLz48L2c+PC9zdmc+"
    },
    {
      "id": "noi_baidu",
      "name": "Baidu",
      "url": "https://www.baidu.com/s?wd={query}",
      "icon": "data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHN0eWxlPjpyb290ey0tbG9nby1maWxsOiMyOTMyZTE7fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OnJvb3R7LS1sb2dvLWZpbGw6I2ZjZmNmYzt9fTwvc3R5bGU+PHBhdGggZD0ibTguODU5IDExLjczNWMxLjAxNy0xLjcxIDQuMDU5LTMuMDgzIDYuMjAyLjI4NiAxLjU3OSAyLjI4NCA0LjI4NCA0LjM5NyA0LjI4NCA0LjM5N3MyLjAyNyAxLjYwMS43MyA0LjY4NGMtMS4yNCAyLjk1Ni01LjY0IDEuNjA3LTYuMDA1IDEuNDlsLS4wMjQtLjAwOXMtMS43NDYtLjU2OC0zLjc3Ni0uMTEyYy0yLjAyNi40NTgtMy43NzMuMjg2LTMuNzczLjI4NmwtLjA0NS0uMDAxYy0uMzI4LS4wMS0yLjM4LS4xODctMy4wMDEtMi45NjgtLjY3NS0zLjAyOCAyLjM2NS00LjY4NyAyLjU5Mi00Ljk2OC4yMjYtLjI4OCAxLjgwMi0xLjM3IDIuODE2LTMuMDg1em0uOTg2IDEuNzM4djIuMDMyaC0xLjY0cy0xLjY0LjEzOC0yLjIxMyAyLjAxNGMtLjIgMS4yNTIuMTc3IDEuOTkuMjQyIDIuMTQ4LjA2Ny4xNTcuNTk2IDEuMDczIDEuOTI3IDEuMzQyaDMuMDc4di03LjUxNHptMy41ODggMi4xOTEtMS40NC4wMjR2My45NTZzLjA2NC45ODUgMS40NCAxLjM0NGgzLjU0MXYtNS4zaC0xLjUyOHYzLjk3OWgtMS40NnMtLjQ2Ni0uMDY4LS41NTMtLjQ0N3ptLTMuNjEzIDEuMDUxdjMuMDZoLTEuMjRzLS44NjMtLjA0NS0xLjEyNi0xLjA0OWMtLjEzNi0uNDQ1LjAyLS45NTkuMDg4LTEuMTYuMDYzLS4yMDMuMzUzLS42NzEuOTUxLS44NWgxLjMyN3ptOS41MjUtOS4wMzZjMi4wODYgMCAyLjY0NiAyLjA2IDIuNjQ2IDIuNzQyIDAgLjY4OC4yODQgMy41OTctMi4zMDkgMy42NTUtMi41OTUuMDU3LTIuNzA0LTEuNzctMi43MDQtMy4wOCAwLTEuMzc0LjI3Ny0zLjMxNyAyLjM2Ny0zLjMxN3ptLTE1LjEwNS0xLjU5OWMxLjUyMy0uMTM1IDIuNjQ1IDEuNTUgMi43NjIgMi41MTMuMDcuNjI1LjM5MyAzLjQ4Ni0xLjk3NSA0LTIuMzY0LjUxNS0zLjI0NC0yLjI0OS0yLjk4NC0zLjU0NCAwIDAgLjI4LTIuNzk3IDIuMTk3LTIuOTY5em04Ljg0Ny0xLjQ4M2MuMTQtMS4zMSAxLjY5LTMuMzE2IDIuOTMxLTMuMDI4IDEuMjM2LjI4NSAyLjM2NyAxLjk0NCAyLjEzNyAzLjM3LS4yMjQgMS40MjgtMS4zNDUgMy4zMTMtMy4wOTUgMy4wODItMS43NDgtLjIyNi0yLjE0My0xLjgyMy0xLjk3My0zLjQyNHptLTMuNjYyLTMuNTk3YzEuMzA3IDAgMi4zNjQgMS41MTkgMi4zNjQgMy4zOThzLTEuMDU3IDMuNC0yLjM2NCAzLjQtMi4zNjctMS41MjEtMi4zNjctMy40Yy0wLTEuODggMS4wNi0zLjM5OCAyLjM2Ny0zLjM5OHoiIGZpbGw9InZhcigtLWxvZ28tZmlsbCkiLz48L3N2Zz4="
    }
  ]
}


================================================
FILE: configs/noi.space.json
================================================
[
  {
    "id": "noi_awesome",
    "name": "😎 Noi Awesome",
    "theme": "dark",
    "theme_style": "haze",
    "active": true
  }
]

================================================
FILE: configs/noi_awesome.json
================================================
[
  {
    "id": "noi:google",
    "parent": 0,
    "text": "Google",
    "url": "https://google.com",
    "active": false,
    "favicon": "https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico"
  },
  {
    "id": "noi@ai",
    "text": "AI",
    "parent": 0,
    "dir": true,
    "dirOpen": true,
    "iconDir": "noi_ai",
    "iconDirOpen": "noi_ai"
  },
  {
    "id": "noi@dev",
    "text": "Dev",
    "parent": 0,
    "dir": true,
    "dirOpen": true,
    "iconDir": "noi_dev",
    "iconDirOpen": "noi_dev"
  },
  {
    "id": "noi@other",
    "text": "Other",
    "parent": 0,
    "dir": true,
    "dirOpen": false,
    "iconDir": "noi_other",
    "iconDirOpen": "noi_other"
  },
  {
    "id": "noi@fork",
    "text": "Session isolation",
    "parent": 0,
    "dir": true,
    "dirOpen": false,
    "iconDir": "noi_fork",
    "iconDirOpen": "noi_fork"
  },
  {
    "id": "noi:aiplayground",
    "parent": "noi@ai",
    "text": "AI Playground",
    "url": "noi://view",
    "active": false,
    "view": [
      { "id": "noi:chatgpt", "ask": true },
      { "id": "noi:claude", "ask": true },
      { "id": "noi:gemini", "ask": true },
      { "id": "noi:grok", "ask": true }
    ]
  },
  {
    "id": "noi:chatgpt",
    "parent": "noi@ai",
    "text": "ChatGPT",
    "url": "https://chatgpt.com",
    "active": true,
    "ask": true,
    "askFixInput": 2,
    "favicon": "https://cdn.oaistatic.com/assets/favicon-l4nq08hd.svg"
  },
  {
    "id": "noi:claude",
    "parent": "noi@ai",
    "text": "Claude",
    "url": "https://claude.ai",
    "active": false,
    "ask": true,
    "favicon": "https://claude.ai/favicon.ico",
    "askInput":"[contenteditable]",
    "askSend":"button[class*=\"Button_claude\"]"
  },
  {
    "id": "noi:gemini",
    "parent": "noi@ai",
    "text": "Gemini",
    "url": "https://gemini.google.com",
    "active": false,
    "ask": true,
    "favicon": "https://www.gstatic.com/lamda/images/gemini_sparkle_aurora_33f86dc0c0257da337c63.svg"
  },
  {
    "id": "noi:grok",
    "parent": "noi@ai",
    "text": "Grok",
    "url": "https://grok.com",
    "active": false,
    "ask": true,
    "favicon": "https://grok.com/images/favicon-dark.png"
  },
  {
    "id": "noi:grokipedia",
    "parent": "noi@ai",
    "text": "Grokipedia",
    "url": "https://grokipedia.com",
    "active": false,
    "ask": true,
    "favicon": "https://grokipedia.com/favicon.ico"
  },
  {
    "id": "noi:githubcopilot",
    "parent": "noi@ai",
    "text": "GitHub Copilot",
    "url": "https://github.com/copilot",
    "active": false,
    "ask": true,
    "favicon": "https://github.githubassets.com/favicons/favicon-dark.svg"
  },
  {
    "id": "noi:aistudio",
    "parent": "noi@ai",
    "text": "AI Studio",
    "url": "https://aistudio.google.com",
    "active": false,
    "ask": true,
    "favicon": "https://www.gstatic.com/aistudio/ai_studio_favicon_2_256x256.png"
  },
  {
    "id": "noi:notebooklm",
    "parent": "noi@ai",
    "text": "NotebookLM",
    "url": "https://notebooklm.google.com",
    "active": false,
    "ask": true,
    "favicon": "https://notebooklm.google.com/_/static/branding/v5/dark_mode/favicon/favicon.svg"
  },
  {
    "id": "noi:perplexity",
    "parent": "noi@ai",
    "text": "Perplexity",
    "url": "https://www.perplexity.ai",
    "active": false,
    "ask": true,
    "askFixInput": 1,
    "favicon": "https://www.perplexity.ai/favicon.ico",
    "askFixSend": 0
  },
  {
    "id": "noi:deepseek",
    "parent": "noi@ai",
    "text": "DeepSeek",
    "url": "https://chat.deepseek.com",
    "active": false,
    "ask": true,
    "favicon": "https://chat.deepseek.com/favicon.svg"
  },
  {
    "id": "noi:qwen",
    "text": "Qwen",
    "parent": "noi@ai",
    "url": "https://qwen.ai",
    "active": false,
    "ask": true,
    "favicon": "https://g.alicdn.com/qwenweb/qwen-ai-fe/0.0.4/favicon.ico"
  },
  {
    "id": "noi:zai",
    "text": "Z.ai",
    "parent": "noi@ai",
    "url": "https://chat.z.ai",
    "active": false,
    "ask": true,
    "favicon": "https://z-cdn.chatglm.cn/z-ai/static/logo.svg"
  },
  {
    "id": "noi:kimi",
    "parent": "noi@ai",
    "text": "Kimi",
    "url": "https://www.kimi.com",
    "active": false,
    "ask": true,
    "askFixInput": 1,
    "favicon": "https://statics.moonshot.cn/kimi-web-seo/favicon.ico"
  },
  {
    "id": "noi:nsh",
    "parent": "noi@dev",
    "text": "NSH",
    "url": "noi://nsh"
  },
  {
    "id": "noi:github",
    "parent": "noi@dev",
    "text": "GitHub",
    "url": "https://github.com",
    "active": false,
    "favicon": "https://github.githubassets.com/favicons/favicon-dark.svg"
  },
  {
    "id": "noi:huggingface",
    "parent": "noi@dev",
    "text": "Hugging Face",
    "url": "https://huggingface.co",
    "active": false,
    "favicon": "https://huggingface.co/favicon.ico"
  },
  {
    "id": "noi:vscode",
    "parent": "noi@dev",
    "text": "VS Code",
    "url": "https://vscode.dev",
    "active": false,
    "favicon": "https://vscode.dev/static/stable/favicon.ico"
  },
  {
    "id": "noi:deepwiki",
    "parent": "noi@dev",
    "text": "DeepWiki",
    "url": "https://deepwiki.com",
    "active": false,
    "favicon": "https://deepwiki.com/favicon.ico"
  },
  {
    "id": "noi:v0",
    "parent": "noi@dev",
    "text": "v0 by Vercel",
    "url": "https://v0.app",
    "active": false,
    "favicon": "https://v0.app/assets/icon.svg"
  },
  {
    "id": "noi:bolt",
    "parent": "noi@dev",
    "text": "bolt.new",
    "url": "https://bolt.new",
    "active": false,
    "favicon": "https://bolt.new/static/favicon.svg"
  },
  {
    "id": "noi_fork_google",
    "parent": "noi@fork",
    "text": "Google",
    "url": "https://google.com",
    "partition": true,
    "active": false,
    "favicon": "https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico"
  },
  {
    "id": "noi:hackernews",
    "text": "Hacker News",
    "url": "https://news.ycombinator.com",
    "active": false,
    "favicon": "https://news.ycombinator.com/y18.svg",
    "parent": "noi@other"
  },
  {
    "id": "noi:x",
    "text": "X",
    "url": "https://x.com",
    "active": false,
    "favicon": "https://abs.twimg.com/favicons/twitter.3.ico",
    "parent": "noi@other"
  },

  {
    "id": "noi@tool",
    "text": "Tool",
    "parent": "noi@other",
    "dir": true,
    "dirOpen": false,
    "iconDir": "noi_tool",
    "iconDirOpen": "noi_tool"
  },
  {
    "id": "noi@todo",
    "text": "TODO",
    "parent": "noi@other",
    "dir": true,
    "dirOpen": false,
    "iconDir": "noi_todo",
    "iconDirOpen": "noi_todo"
  },
  {
    "id": "noi@study",
    "text": "Study",
    "parent": "noi@other",
    "dir": true,
    "dirOpen": false,
    "iconDir": "noi_study",
    "iconDirOpen": "noi_study"
  },

  {
    "id": "noi@notification",
    "text": "Notification",
    "parent": "noi@other",
    "dir": true,
    "dirOpen": false,
    "iconDir": "noi_notify",
    "iconDirOpen": "noi_notify"
  },
  {
    "id": "noi@productivity",
    "text": "Productivity",
    "parent": "noi@other",
    "dir": true,
    "dirOpen": false,
    "iconDir": "noi_lightning",
    "iconDirOpen": "noi_lightning"
  },
  {
    "id": "noi@game",
    "text": "Game",
    "parent": "noi@other",
    "dir": true,
    "dirOpen": false,
    "iconDir": "noi_game",
    "iconDirOpen": "noi_game"
  }
]

================================================
FILE: extensions/README.md
================================================
# Noi Extensions

Note that Noi does not support the full range of Chrome extensions APIs. See Supported Extensions APIs for more details on what is supported.

Learn more: [electronjs/doc](https://www.electronjs.org/docs/latest/api/extensions)


================================================
FILE: locales/README.md
================================================
# Noi Localization Guide

## Locale Registry

- The locale list is defined in `locales/noi.lang.json`.
- The `locales` array mirrors the order of `Settings → Language` inside Noi—update the file to change how items appear in the menu.
- Each entry uses a language `code` and a human-readable `name`; keep both fields in sync with the corresponding translation file.

## Adding a Language

- Create a new translation file in the `locales` directory that matches the language code (for example, `fr.json`).
- Follow i18n naming conventions. If the code needs a region or script, use a hyphen (`-`) as the separator (e.g., `pt-BR`). Underscores can cause unexpected loader issues and should be avoided.
- Once the file exists, register it in `locales/noi.lang.json` so it becomes available in `Settings → Language`.

## Customizing Translations

- Enable `Settings → Lock Locales Folder` before editing files. This prevents the app from overwriting your customizations.
- To revert to the default translations, disable `Lock Locales Folder` and restart Noi; the original files will be restored.

## Current Language List

- `en`: English
- `zh-Hans`: 简体中文
- `zh-Hant`: 繁體中文
- `es`: Español
- `hi`: हिन्दी
- `ar`: العربية
- `fr`: Français
- `pt`: Português
- `bn`: বাংলা
- `ur`: اردو
- `id`: Bahasa Indonesia
- `ru`: Русский
- `de`: Deutsch
- `ja`: 日本語
- `ko`: 한국어
- `vi`: Tiếng Việt
- `fa`: فارسی
- `th`: ไทย
- `sw`: Kiswahili
- `tr`: Türkçe
- `it`: Italiano
- `ms`: Bahasa Melayu
- `pl`: Polski
- `pa`: ਪੰਜਾਬੀ
- `hu`: Magyar


================================================
FILE: locales/ar/app.json
================================================
{
  "language": "العربية",
  "engines": "محركات البحث",
  "version": "الإصدار",
  "doc": "التوثيق",
  "sponsor": "الراعي",
  "website": "الموقع الإلكتروني",
  "menu": {
    "name": "القائمة",
    "about": "حول Noi",
    "hide": "إخفاء Noi",
    "hideOthers": "إخفاء الآخرين",
    "quit": "إنهاء Noi",
    "unhide": "إظهار الكل",
    "noiHotkey": "اختصار Noi",
    "noiAskHotkey": "اختصار NoiAsk",
    "sidebar": "الشريط الجانبي",
    "checkUpdates": "التحقق من التحديثات…",
    "settings": "الإعدادات",
    "stayOnTop": "دائمًا في المقدمة",
    "services": "الخدمات",
    "newTabSidePanel": "علامة تبويب جديدة في اللوحة الجانبية",
    "newTabMain": "علامة تبويب جديدة في النافذة الرئيسية",
    "bordless": "نافذة بلا حدود",
    "theme": {
      "name": "السمة",
      "system": "حسب النظام",
      "light": "فاتح",
      "dark": "داكن",
      "style": "نمط السمة"
    },
    "find": {
      "name": "بحث",
      "next": "البحث التالي",
      "previous": "البحث السابق",
      "jumpToSelection": "الانتقال إلى التحديد"
    },
    "edit": {
      "name": "تحرير",
      "undo": "تراجع",
      "redo": "إعادة",
      "cut": "قص",
      "copy": "نسخ",
      "paste": "لصق",
      "pasteAndMatchStyle": "لصق ومطابقة النمط",
      "delete": "حذف",
      "selectAll": "تحديد الكل"
    },
    "tab": {
      "openDefault": "فتح في المتصفح الافتراضي",
      "addSidebarTemp": "إضافة إلى الشريط الجانبي (TempLink)",
      "copyUrl": "نسخ URL",
      "copyUrlMd": "نسخ URL بتنسيق Markdown"
    },
    "help": {
      "name": "مساعدة",
      "feedback": "ملاحظات"
    }
  },
  "session": {
    "clearCurrent": "مسح بيانات الجلسة",
    "clearAll": "مسح كل بيانات الجلسة",
    "clearRemovedSites": "مسح بيانات المواقع التي تمت إزالتها",
    "confirmCurrent": "هل تريد مسح بيانات الموقع «{target}»؟ سيؤدي ذلك إلى إزالة ملفات تعريف الارتباط والتخزين لهذه الجلسة.",
    "confirmAll": "هل تريد مسح بيانات الموقع لجميع الجلسات؟ قد يؤدي ذلك إلى تسجيل خروجك من بعض المواقع.",
    "confirmRemovedSites": "هل تريد إزالة بيانات الموقع لـ {count, plural, one {# جلسة} other {# جلسات}} من المواقع التي لم تعد في فهرسك؟",
    "resultNoRemovedSites": "لم يتم العثور على بيانات مخزنة للمواقع التي تمت إزالتها.",
    "helpRemovedSites": "جلسات المواقع التي تمت إزالتها هي ملفات تعريف الارتباط والتخزين المتبقي بعد إزالة تلك المواقع من الفهرس."
  },
  "view": {
    "name": "عرض",
    "tabs": "علامات تبويب Noi",
    "spaces": "{count, plural, one {مساحة Noi} other {مساحات Noi}}",
    "toolbar": "شريط أدوات Noi",
    "markdown": "Markdown",
    "minibar": "شريط مصغر",
    "manageSpaces": "إدارة المساحات",
    "reload": "إعادة تحميل",
    "goBack": "رجوع",
    "goForward": "إلى الأمام",
    "zoom": "تكبير/تصغير",
    "actualSize": "الحجم الفعلي",
    "zoomIn": "تكبير",
    "zoomOut": "تصغير",
    "devTools": "أدوات المطور",
    "newTab": "علامة تبويب جديدة",
    "newTabPlaceholder": "{hasEngine, select, true {ابحث باستخدام {engine} أو أدخل URL…} other {ابحث أو أدخل URL…}}",
    "closeTab": "إغلاق علامة التبويب",
    "closeOtherTabs": "إغلاق علامات التبويب الأخرى",
    "mute": "كتم",
    "unmute": "إلغاء الكتم",
    "incognito": "تصفح خفي",
    "sidePanel": "لوحة جانبية",
    "newFolder": "مجلد جديد",
    "addLink": "إضافة رابط",
    "mainWindow": "النافذة الرئيسية",
    "switchMainTab": "التبديل إلى علامة التبويب الرئيسية",
    "switchSideTab": "التبديل إلى علامة تبويب اللوحة الجانبية",
    "newFile": "ملف جديد",
    "bookmark": "إشارة مرجعية",
    "bookmarkTab": "وضع إشارة مرجعية لعلامة التبويب هذه",
    "copyUrlMetadata": "نسخ بيانات URL الوصفية",
    "removeNoiView": "إزالة من NoiView",
    "addNoiView": "إضافة إلى NoiView",
    "openNewWindow": "فتح في نافذة جديدة",
    "openSidePanel": "فتح في اللوحة الجانبية",
    "pin": "تثبيت",
    "unpin": "إزالة التثبيت",
    "lockLink": "قفل الرابط",
    "unlockLink": "إلغاء قفل الرابط",
    "buttonHighlight": "إبراز أزرار شريط العنوان"
  },
  "window": {
    "close": "إغلاق",
    "goMain": "الانتقال إلى النافذة الرئيسية",
    "dialog": "نافذة حوار",
    "drag": "اسحب للتحريك",
    "minimize": "تصغير",
    "maximize": "تكبير",
    "restore": "استعادة"
  },
  "ask": {
    "prompts": "{count, plural, one {موجّه} other {موجّهات}}",
    "semver": "SemVer",
    "tag": "TAG",
    "log": "LOG",
    "sync": "مزامنة",
    "manageSemVer": "إدارة SemVer",
    "manageLog": "إدارة LOG",
    "addPrompt": "إضافة موجّه",
    "lockPrompt": "قفل الموجّه",
    "unlockPrompt": "إلغاء قفل الموجّه",
    "copyPrompt": "نسخ الموجّه",
    "deletePrompt": "حذف الموجّه",
    "filterTags": "تصفية TAG",
    "filterRule": "قاعدة التصفية",
    "filterLockPrompts": "تصفية: الموجّهات المقفلة"
  },
  "history": {
    "name": "السجل",
    "clearAll": "مسح السجل بالكامل",
    "refresh": "تحديث السجل",
    "remove": "إزالة من السجل",
    "search": "البحث في السجل",
    "searchClear": "مسح البحث",
    "searchFound": "{hasQ, select, true {{count, plural, =0 {لا توجد نتائج بحث لـ «{q}»} one {تم العثور على نتيجة بحث واحدة لـ «{q}»} other {تم العثور على # نتائج بحث لـ «{q}»}}} other {{count, plural, =0 {لا توجد نتائج} one {تم العثور على نتيجة واحدة} other {تم العثور على # نتائج}}}}",
    "moreThisSite": "المزيد من هذا الموقع",
    "dialogTitle": "مسح كل السجل؟",
    "dialogMessage": "يؤدي هذا الإجراء إلى حذف جميع سجلات السجل المحفوظة نهائيًا ولا يمكن التراجع عنه.",
    "result1": "فشل تحميل السجل. {error}",
    "result2": "لا يوجد سجل بعد.",
    "result3": "لا توجد نتائج بحث",
    "result4": "لم يتم العثور على بيانات.",
    "tips": "مطابقة تقريبية عبر العناوين وعناوين URL. حسّنها بمرشحات الحقول:",
    "tip1": "العنوان يحتوي على «example»",
    "tip2": "صفحات من «example.com»",
    "tip3": "في 2024/01/01",
    "tip4": "بين 2024/01/01–2025/12/31",
    "tip5": "قبل 2024/01/01",
    "tip6": "بعد 2024/01/01",
    "tip7": "تمت الزيارة 3 مرات بالضبط",
    "tip8": "تمت الزيارة أقل من 3 مرات",
    "tip9": "تمت الزيارة أكثر من 3 مرات"
  },
  "form": {
    "editor": "المحرر",
    "partition": "عزل الجلسة",
    "name": "الاسم",
    "url": "URL",
    "small": "صغير",
    "medium": "متوسط",
    "large": "كبير",
    "icon": "أيقونة",
    "inputElement": "عنصر الإدخال",
    "sendElement": "عنصر الإرسال",
    "cssSelector": "محدد CSS",
    "lightMode": "الوضع الفاتح",
    "darkMode": "الوضع الداكن",
    "customIcon": "أيقونة مخصصة",
    "linkIcon": "أيقونة الرابط",
    "dirIcon": "أيقونة المجلد",
    "dirOpenIcon": "أيقونة المجلد المفتوح",
    "selectUA": "اختر User Agent",
    "customUA": "أو أدخل سلسلة User Agent مخصصة…",
    "rawJson": "JSON خام",
    "validation": {
      "nameRequired": "يرجى إدخال اسم.",
      "urlRequired": "يرجى إدخال URL.",
      "userAgentRequired": "يرجى إدخال سلسلة User Agent.",
      "invalidJson": "JSON غير صالح.",
      "fixJsonErrors": "يرجى إصلاح أخطاء التحقق من JSON قبل الحفظ.",
      "required": "هذا الحقل مطلوب."
    },
    "tip": {
      "agentWarning": "تحذير أمني: قد يكون السماح لصفحات الويب بالوصول إلى Noi API خطيراً."
    }
  },
  "action": {
    "name": "إجراء",
    "archive": "أرشفة",
    "back": "رجوع",
    "cancel": "إلغاء",
    "confirm": "تأكيد",
    "create": "إنشاء",
    "delete": "حذف",
    "details": "التفاصيل",
    "edit": "تحرير",
    "restore": "استعادة",
    "query": "استعلام",
    "refresh": "تحديث",
    "rename": "إعادة تسمية",
    "reset": "إعادة ضبط",
    "save": "حفظ",
    "send": "إرسال",
    "use": "استخدم",
    "clean": "حذف من القرص",
    "enable": "تمكين",
    "disable": "تعطيل",
    "importAsk": "استيراد إلى NoiAsk",
    "openLocales": "فتح مجلد Locales"
  },
  "table": {
    "active": "نشط",
    "archived": "مؤرشف",
    "color": "لون",
    "createdAt": "تاريخ الإنشاء",
    "delete": "حذف",
    "description": "الوصف",
    "details": "التفاصيل",
    "disabled": "معطل",
    "enabled": "ممكّن",
    "entries": "إدخالات",
    "fileSize": "حجم الملف",
    "mode": "الوضع",
    "status": "الحالة",
    "trash": "المحذوفات",
    "unknown": "غير معروف",
    "updatedAt": "تاريخ التحديث",
    "usageCount": "عدد مرات الاستخدام",
    "tagAdd": "إضافة TAG",
    "tagRemove": "إزالة TAG",
    "visible": "مرئي",
    "total": "الإجمالي",
    "locked": "مقفل",
    "text": "نص",
    "sendCount": "عدد مرات الإرسال",
    "addSource": "إضافة مصدر",
    "lastSynced": "آخر مزامنة",
    "message": {
      "completed": "اكتمل الإجراء.",
      "failed": "فشل الإجراء.",
      "noData": "لم يتم العثور على بيانات.",
      "dataExist": "البيانات موجودة بالفعل.",
      "dataExistOrDuplicated": "كل البيانات موجودة بالفعل أو مكررة.",
      "failedLoad": "فشل تحميل البيانات.",
      "importedCount": "تم الاستيراد: {count}.",
      "skippedCount": "تم التخطي: {count}.",
      "deleteSelected": "هل أنت متأكد من حذف الصفوف المحددة؟ لا يمكن التراجع عن هذا الإجراء.",
      "deleteItem": "هل أنت متأكد من حذف هذا العنصر؟ لا يمكن التراجع عن هذا الإجراء.",
      "deleteFile": "حذف هذا الملف من القرص؟ لا يمكن التراجع عن هذا الإجراء.",
      "removeItem": "إزالة هذا العنصر من القائمة؟ سيبقى الملف على القرص.",
      "deleteBuiltin": "لا يمكن حذف المصدر المدمج.",
      "importedAsk": "تم الاستيراد إلى NoiAsk.",
      "deleteUseTag": "هذا TAG قيد الاستخدام حاليًا ولا يمكن حذفه."
    }
  },
  "dialog": {
    "appQuit": {
      "quitConfirm": "طلب تأكيد عند الخروج",
      "title": "هل تريد إنهاء Noi الآن؟",
      "detail": "سيتم إغلاق جميع النوافذ والمهام."
    },
    "nshQuit": {
      "title": "هل تريد إغلاق الطرفية؟",
      "detail": "سيتم إنهاء المهام الجارية فوراً."
    }
  },
  "settings": {
    "general": {
      "name": "عام",
      "language": "اللغة",
      "sidebarIcon": "حجم أيقونة الشريط الجانبي",
      "homeLink": "رابط الصفحة الرئيسية",
      "limit": "حد الاستعلام",
      "cometCursor": "مؤشر مذنب NoiAsk",
      "cometTrail": "أثر مذنب NoiAsk",
      "lockLocales": "قفل مجلد Locales",
      "lockLocalesTip": "قم بقفل مجلد Locales لمنع التحديثات التلقائية من تعديل ملفات اللغة. مفيد للترجمات المخصصة.",
      "urlMetadata": "بيانات URL الوصفية",
      "sidebarAnchor": {
        "name": "مرساة الشريط الجانبي",
        "off": "إيقاف",
        "leftTop": "أعلى اليسار",
        "leftCenter": "اليسار الأوسط",
        "leftBottom": "أسفل اليسار",
        "rightTop": "أعلى اليمين",
        "rightCenter": "اليمين الأوسط",
        "rightBottom": "أسفل اليمين",
        "disableWarning": "إيقاف هذا يخفي زر التشغيل العائم. لا يمكن إعادة فتح الشريط الجانبي إلا بواسطة اختصار Noi، وتعارض الاختصارات مع المواقع شائع، لذا لا يُنصح بإيقافه.",
        "disableConfirmTitle": "تعطيل مرساة الشريط الجانبي؟"
      },
      "nsh": {
        "name": "NSH (الطرفية)",
        "fontFamily": "نوع الخط",
        "fontSize": "حجم الخط",
        "lineHeight": "ارتفاع السطر",
        "cursorBlink": "وميض المؤشر",
        "cursorStyle": "نمط المؤشر",
        "cursorWidth": "عرض المؤشر",
        "cursorInactiveStyle": "نمط المؤشر غير النشط",
        "scrollback": "التمرير للخلف",
        "tip": {
          "cursorWidth": "ينطبق فقط عندما يكون نمط المؤشر «Bar».",
          "scrollback": "عدد الصفوف التي يتم الاحتفاظ بها في السجل عند تمرير الطرفية."
        }
      },
      "proxy": {
        "name": "الوكيل",
        "rules": "قواعد الوكيل",
        "bypass": "قواعد تجاوز الوكيل"
      }
    },
    "shortcuts": {
      "name": "الاختصارات",
      "noiAskPrompt": "مطالبة NoiAsk: {action}",
      "noiAskPromptWithContext": "مطالبة NoiAsk: {action} ({context})",
      "placeholder": "اضغط الاختصار أو اكتب",
      "helpText": "اضغط مجموعة المفاتيح المطلوبة أو اكتبها (مثل Ctrl+Shift+X)",
      "conflict": "الاختصار مستخدم بالفعل"
    },
    "promptSync": {
      "option": {
        "remoteJson": "JSON عن بُعد",
        "remoteCsv": "CSV عن بُعد",
        "localJson": "JSON محلي",
        "localCsv": "CSV محلي"
      },
      "filePathMissing": "مسار الملف غير صالح.",
      "fileReadFailed": "فشل قراءة محتوى الملف.",
      "fileOpenFailed": "تعذر فتح منتقي الملفات.",
      "fileRequired": "يرجى اختيار ملف للمزامنة.",
      "notFound": "لم يتم العثور على مصدر المزامنة.",
      "error": "خطأ في مزامنة المطالبات",
      "pickLocalFile": "اختر ملفًا محليًا",
      "type": "نوع المصدر",
      "alias": "تعيين الحقول",
      "upload": "رفع ملف",
      "dragJson": "اسحب ملف JSON أو انقر للتصفح",
      "dragCsv": "اسحب ملف CSV أو انقر للتصفح",
      "browseLocal": "اختر من القرص"
    }
  },
  "errorPage": {
    "shared": {
      "defaultTryTips": [
        "تحقق من اتصال الإنترنت",
        "تحقق من الوكيل وجدار الحماية"
      ],
      "platform": {
        "windows": "تشغيل تشخيص شبكة Windows",
        "mac": "تشغيل تشخيص اللاسلكي (macOS)"
      },
      "unknownError": "حدث خطأ غير معروف",
      "site": "هذا الموقع"
    },
    "html": {
      "tryLabel": "جرّب:",
      "showDetails": "إظهار التفاصيل",
      "hideDetails": "إخفاء التفاصيل",
      "openAction": "فتح",
      "reload": "إعادة تحميل"
    },
    "offline": {
      "headline": "لا يوجد اتصال بالإنترنت",
      "message": "أنت غير متصل.",
      "tryTips": [
        "تحقق من كابل الشبكة أو المودم أو الراوتر",
        "أعد الاتصال بشبكة Wi-Fi أو بدّل إلى شبكة أخرى"
      ],
      "action": "إعادة تحميل"
    },
    "network": {
      "headline": "يتعذر الوصول إلى هذا الموقع",
      "message": "انتهت مهلة الاتصال بـ {hostname}.",
      "messageFallback": "استغرق الموقع وقتًا طويلاً في الاستجابة.",
      "messageByCode": {
        "ERR_CONNECTION_REFUSED": "رفض {hostname} الاتصال.",
        "ERR_CONNECTION_REFUSED_FALLBACK": "رفض الموقع الاتصال.",
        "ERR_CONNECTION_RESET": "تمت إعادة تعيين الاتصال.",
        "ERR_CONNECTION_TIMED_OUT": "انتهت مهلة الاتصال.",
        "ERR_TIMED_OUT": "انتهت مهلة الاتصال.",
        "ERR_ADDRESS_UNREACHABLE": "العنوان غير قابل للوصول.",
        "ERR_NETWORK_CHANGED": "تغير اتصال الشبكة لديك.",
        "ERR_CONNECTION_ABORTED": "تم إيقاف الاتصال.",
        "ERR_CONNECTION_FAILED": "فشل الاتصال.",
        "ERR_CONNECTION_CLOSED": "تم إغلاق الاتصال.",
        "ERR_HTTP2_PROTOCOL_ERROR": "تمت مقاطعة الاتصال (خطأ بروتوكول HTTP/2).",
        "ERR_QUIC_PROTOCOL_ERROR": "تمت مقاطعة الاتصال (خطأ بروتوكول QUIC)."
      },
      "tryTips": [
        "تحقق مما إذا كانت المواقع الأخرى تفتح؛ إن لم تفتح فأعد الاتصال بالشبكة",
        "أعد تشغيل الراوتر أو فعّل/أوقف وضع الطيران"
      ],
      "suggestions": [
        {
          "title": "تحقق من توفر الخادم",
          "detail": "إذا كان {site} خدمة داخلية، فتأكد من أنه متصل أو يمكن الوصول إليه من الشبكة الحالية."
        },
        {
          "title": "افحص برامج الأمان",
          "detail": "قد تعطل جدران الحماية أو برامج مكافحة الفيروسات أو عملاء VPN الطلبات—أوقف هذه الأدوات مؤقتًا وأعد المحاولة."
        }
      ],
      "action": "إعادة تحميل"
    },
    "dns": {
      "headline": "يتعذر الوصول إلى هذا الموقع",
      "message": "تعذر العثور على عنوان IP لـ {hostname}.",
      "messageFallback": "تعذر العثور على عنوان IP للخادم.",
      "messageByCode": {
        "ERR_NAME_NOT_RESOLVED": "تعذر العثور على عنوان IP لـ {hostname}.",
        "ERR_NAME_NOT_RESOLVED_FALLBACK": "تعذر العثور على عنوان IP للخادم.",
        "ERR_NAME_RESOLUTION_FAILED": "فشل بحث DNS لـ {hostname}.",
        "ERR_NAME_RESOLUTION_FAILED_FALLBACK": "فشل بحث DNS.",
        "ERR_DNS_TIMED_OUT": "انتهت مهلة خادم DNS.",
        "ERR_DNS_SERVER_FAILED": "لم يستجب خادم DNS.",
        "ERR_DNS_MALFORMED_RESPONSE": "أعاد خادم DNS استجابة غير صالحة."
      },
      "tryTips": [
        "تحقق من صحة تهجئة عنوان الويب",
        "تحقق من إعدادات الوكيل وجدار الحماية وDNS"
      ],
      "suggestions": [
        {
          "title": "تحقق من عنوان الويب",
          "detail": "تأكد من صحة كتابة {site}. إذا كان صحيحًا فقد يكون خادم DNS غير متاح مؤقتًا."
        },
        {
          "title": "مسح ذاكرة التخزين المؤقت لـ DNS",
          "detail": "امسح ذاكرة التخزين المؤقت لـ DNS وأعد التحميل (مثلاً `ipconfig /flushdns` على Windows أو `sudo killall -HUP mDNSResponder` على macOS)."
        }
      ],
      "action": "إعادة تحميل"
    },
    "ssl": {
      "headline": "اتصالك غير خاص",
      "headlineSecure": "لا يمكن لهذا الموقع توفير اتصال آمن",
      "message": "قد يحاول المهاجمون سرقة معلومات من {hostname} (مثل كلمات المرور أو الرسائل أو بطاقات الائتمان).",
      "messageSecure": "لا يستطيع Noi إنشاء اتصال آمن بـ {hostname}.",
      "messageByCode": {
        "ERR_SSL_PROTOCOL_ERROR": "يستخدم الموقع بروتوكول SSL غير صالح أو غير مدعوم.",
        "ERR_SSL_VERSION_OR_CIPHER_MISMATCH": "يستخدم الموقع بروتوكول SSL غير مدعوم أو شيفرة غير مدعومة.",
        "ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN": "سلسلة الشهادات لا تطابق المفتاح المثبت.",
        "ERR_SSL_CLIENT_AUTH_CERT_NEEDED": "مطلوب شهادة عميل للوصول إلى هذا الموقع.",
        "ERR_BAD_SSL_CLIENT_AUTH_CERT": "شهادة العميل غير صالحة أو تم رفضها.",
        "ERR_CERT_COMMON_NAME_INVALID": "الشهادة صالحة لعنوان مختلف.",
        "ERR_CERT_DATE_INVALID": "انتهت صلاحية الشهادة أو لم تصبح صالحة بعد.",
        "ERR_CERT_AUTHORITY_INVALID": "الشهادة غير موثوقة.",
        "ERR_CERT_REVOKED": "تم إلغاء الشهادة.",
        "ERR_CERT_INVALID": "الشهادة غير صالحة.",
        "ERR_CERT_WEAK_SIGNATURE_ALGORITHM": "تستخدم الشهادة خوارزمية توقيع ضعيفة.",
        "ERR_CERT_WEAK_KEY": "تستخدم الشهادة مفتاحًا ضعيفًا.",
        "ERR_CERT_NAME_CONSTRAINT_VIOLATION": "تنتهك الشهادة قيود الاسم.",
        "ERR_CERT_NON_UNIQUE_NAME": "الشهادة مشتركة بين مواقع متعددة."
      },
      "suggestions": [
        {
          "title": "تحقق من تاريخ ووقت الكمبيوتر",
          "detail": "قد يتسبب ضبط الوقت بشكل غير صحيح في أخطاء الشهادات."
        },
        {
          "title": "توخ الحذر",
          "detail": "تابع فقط إذا كنت تفهم المخاطر وتثق بالموقع."
        }
      ],
      "action": "إعادة تحميل"
    },
    "proxy": {
      "headline": "فشل اتصال الوكيل",
      "message": "حاول Noi الوصول إلى الموقع عبر الوكيل المكوَّن، لكن الاتصال لم ينجح. يستخدم هذا التبويب الآن اتصالًا مباشرًا كخيار احتياطي.",
      "messageByCode": {
        "ERR_PROXY_CONNECTION_FAILED": "رفض خادم الوكيل الاتصال.",
        "ERR_TUNNEL_CONNECTION_FAILED": "فشل نفق الوكيل.",
        "ERR_SOCKS_CONNECTION_FAILED": "رفض وكيل SOCKS الاتصال.",
        "ERR_PROXY_AUTH_REQUESTED": "يتطلب خادم الوكيل المصادقة.",
        "ERR_PROXY_AUTH_UNSUPPORTED": "طريقة مصادقة الوكيل غير مدعومة.",
        "ERR_PAC_SCRIPT_FAILED": "فشل نص التكوين التلقائي (PAC) للوكيل.",
        "ERR_NO_SUPPORTED_PROXIES": "لم يتم العثور على وكلاء مدعومين لهذا الطلب.",
        "ERR_MANDATORY_PROXY_CONFIGURATION_FAILED": "فشل تكوين الوكيل المطلوب.",
        "ERR_PROXY_REQUIRED": "يلزم وكيل للوصول إلى هذا الموقع."
      },
      "tryTips": [
        "تأكد من مضيف الوكيل والمنفذ وإعدادات المصادقة",
        "تأكد من أن خادم الوكيل يمكن الوصول إليه من الشبكة الحالية",
        "إذا كانت المؤسسة تتطلب الوكيل، فأعده وحمّل الصفحة عندما يعود للعمل"
      ],
      "suggestions": [
        {
          "title": "راجع قواعد وكيل Noi",
          "detail": "استخدم إعدادات Noi للتأكد من أن قواعد الوكيل وقائمة التجاوز مطابقة لهذه الشبكة.",
          "actionLabel": "فتح إعدادات Noi"
        },
        {
          "title": "أعد المحاولة باستخدام الوكيل لاحقًا",
          "detail": "عندما يصبح الوكيل متاحًا مرة أخرى، أعد التحميل للتبديل من الاتصال المباشر إلى الوكيل."
        }
      ],
      "action": "إعادة التحميل في الوضع المباشر"
    },
    "blocked": {
      "headline": "تم حظر هذه الصفحة",
      "message": "تم حظر الطلب بواسطة إضافة أو سياسة أمان.",
      "messageByCode": {
        "ERR_BLOCKED_BY_CLIENT": "تم حظر الطلب بواسطة عميل أو إضافة.",
        "ERR_BLOCKED_BY_RESPONSE": "تم حظر الاستجابة بواسطة الموقع أو سياسة.",
        "ERR_CLEARTEXT_NOT_PERMITTED": "يتطلب الموقع اتصالًا آمنًا (HTTPS).",
        "ERR_NETWORK_ACCESS_DENIED": "تم حظر الوصول إلى الشبكة بواسطة السياسة."
      },
      "tryTips": [
        "عطّل الإضافات أو أدوات حظر المحتوى وأعد التحميل",
        "تحقق من إعدادات جدار الحماية ومكافحة الفيروسات"
      ],
      "suggestions": [
        {
          "title": "تعطيل الإضافات أو أدوات حظر المحتوى",
          "detail": "قد تمنع الإضافات مثل مانعات الإعلانات أو المتعقبين الطلب—أوقفها مؤقتًا وأعد المحاولة."
        },
        {
          "title": "تحقق من سياسة الموقع",
          "detail": "قد تكون الاستجابة محجوبة بواسطة X-Frame-Options أو Content Security Policy."
        }
      ],
      "action": "إعادة تحميل"
    },
    "client": {
      "headline": "هذه الصفحة لا تعمل",
      "message": "أعاد الموقع استجابة غير صالحة.",
      "messageByCode": {
        "ERR_EMPTY_RESPONSE": "أرسل {hostname} استجابة غير صالحة أو فارغة.",
        "ERR_EMPTY_RESPONSE_FALLBACK": "أرسل الموقع استجابة غير صالحة أو فارغة.",
        "ERR_FILE_NOT_FOUND": "لم يتم العثور على الملف.",
        "ERR_FILE_ACCESS_DENIED": "تم رفض الوصول إلى الملف.",
        "ERR_HTTP_RESPONSE_CODE_FAILURE": "استجاب الخادم بخطأ.",
        "ERR_TOO_MANY_REDIRECTS": "الصفحة لا تعيد التوجيه بشكل صحيح.",
        "ERR_INVALID_RESPONSE": "أرسل الموقع استجابة غير صالحة.",
        "ERR_INVALID_CHUNKED_ENCODING": "أرسل الموقع استجابة غير صالحة.",
        "ERR_INCOMPLETE_CHUNKED_ENCODING": "أرسل الموقع استجابة غير مكتملة.",
        "ERR_CONTENT_LENGTH_MISMATCH": "أرسل الموقع استجابة غير صالحة.",
        "ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH": "أرسل الموقع الكثير من البيانات في رؤوس الاستجابة.",
        "ERR_CACHE_MISS": "يجب إعادة إرسال الطلب.",
        "ERR_INVALID_URL": "عنوان الويب غير صالح.",
        "ERR_DISALLOWED_URL_SCHEME": "مخطط URL هذا غير مسموح.",
        "ERR_UNKNOWN_URL_SCHEME": "مخطط URL هذا غير مدعوم.",
        "ERR_UNSAFE_PORT": "تم حظر هذا المنفذ لأسباب أمنية.",
        "ERR_INVALID_REDIRECT": "أعاد الموقع إعادة توجيه غير صالحة.",
        "ERR_UNSAFE_REDIRECT": "حاول الموقع إعادة توجيه غير آمنة.",
        "ERR_RESPONSE_HEADERS_TOO_BIG": "أعاد الموقع الكثير من البيانات في رؤوس الاستجابة.",
        "ERR_METHOD_NOT_SUPPORTED": "طريقة الطلب غير مدعومة."
      },
      "tryTips": [
        "أعد تحميل الصفحة",
        "امسح ذاكرة التخزين المؤقت للمتصفح أو بيانات الموقع المخزنة"
      ],
      "suggestions": [
        {
          "title": "مسح بيانات الموقع",
          "detail": "قم بإزالة ملفات تعريف الارتباط والملفات المخزنة لهذا الموقع، ثم أعد التحميل."
        },
        {
          "title": "الإبلاغ إلى مالك الموقع",
          "detail": "إذا استمرت المشكلة، فاتصل بمسؤول الموقع مع رمز الخطأ المعروض أدناه."
        }
      ],
      "action": "إعادة تحميل"
    },
    "unknown": {
      "headline": "هذه الصفحة لا تعمل",
      "message": "حدث خطأ غير متوقع ({code}).",
      "tryTips": [
        "أعد تحميل الصفحة",
        "إذا استمرت المشكلة، التقط رمز الخطأ واتصل بمسؤول الموقع أو فريق الدعم"
      ],
      "action": "إعادة تحميل"
    }
  }
}


================================================
FILE: locales/bn/app.json
================================================
{
  "language": "বাংলা",
  "engines": "সার্চ ইঞ্জিনসমূহ",
  "version": "সংস্করণ",
  "doc": "ডকুমেন্টেশন",
  "sponsor": "স্পনসর",
  "website": "ওয়েবসাইট",
  "menu": {
    "name": "মেনু",
    "about": "Noi সম্পর্কে",
    "hide": "Noi লুকান",
    "hideOthers": "অন্যান্য লুকান",
    "quit": "Noi থেকে বের হন",
    "unhide": "সব দেখান",
    "noiHotkey": "Noi শর্টকাট",
    "noiAskHotkey": "NoiAsk শর্টকাট",
    "sidebar": "সাইডবার",
    "checkUpdates": "আপডেট পরীক্ষা করুন…",
    "settings": "সেটিংস",
    "stayOnTop": "সবসময় উপরে রাখুন",
    "services": "সেবা",
    "newTabSidePanel": "সাইড প্যানেলে নতুন ট্যাব",
    "newTabMain": "মূল উইন্ডোতে নতুন ট্যাব",
    "bordless": "বর্ডারলেস উইন্ডো",
    "theme": {
      "name": "থিম",
      "system": "সিস্টেম অনুযায়ী",
      "light": "লাইট",
      "dark": "ডার্ক",
      "style": "থিম স্টাইল"
    },
    "find": {
      "name": "খুঁজুন",
      "next": "পরবর্তী খুঁজুন",
      "previous": "পূর্ববর্তী খুঁজুন",
      "jumpToSelection": "নির্বাচনে যান"
    },
    "edit": {
      "name": "এডিট",
      "undo": "আনডু",
      "redo": "রিডু",
      "cut": "কাট",
      "copy": "কপি",
      "paste": "পেস্ট",
      "pasteAndMatchStyle": "স্টাইল মিলিয়ে পেস্ট করুন",
      "delete": "মুছুন",
      "selectAll": "সব নির্বাচন করুন"
    },
    "tab": {
      "openDefault": "ডিফল্ট ব্রাউজারে খুলুন",
      "addSidebarTemp": "সাইডবারে যোগ করুন (TempLink)",
      "copyUrl": "URL কপি করুন",
      "copyUrlMd": "Markdown হিসেবে URL কপি করুন"
    },
    "help": {
      "name": "সাহায্য",
      "feedback": "ফিডব্যাক"
    }
  },
  "session": {
    "clearCurrent": "সেশন ডেটা মুছুন",
    "clearAll": "সব সেশনের ডেটা মুছুন",
    "clearRemovedSites": "সরানো সাইটের ডেটা মুছুন",
    "confirmCurrent": "«{target}» সাইটের ডেটা মুছবেন? এতে এই সেশনের কুকি ও স্টোরেজ মুছে যাবে।",
    "confirmAll": "সব সেশনের সাইট ডেটা মুছবেন? এতে কিছু সাইট থেকে সাইন আউট হতে পারেন।",
    "confirmRemovedSites": "যে সাইটগুলো আর আপনার ইনডেক্সে নেই, সেগুলো থেকে {count, plural, one {# সেশন} other {# সেশন}} এর সাইট ডেটা সরাবেন?",
    "resultNoRemovedSites": "সরানো সাইটের কোনো ক্যাশড ডেটা পাওয়া যায়নি।",
    "helpRemovedSites": "সরানো সাইটগুলোর সেশন হলো সেই কুকি ও স্টোরেজ যা ওই সাইটগুলো ইনডেক্স থেকে সরানোর পরও ক্যাশে রয়ে যায়।"
  },
  "view": {
    "name": "ভিউ",
    "tabs": "Noi ট্যাবসমূহ",
    "spaces": "{count, plural, one {Noi স্পেস} other {Noi স্পেস}}",
    "toolbar": "Noi টুলবার",
    "markdown": "Markdown",
    "minibar": "মিনিবার",
    "manageSpaces": "স্পেস ম্যানেজ করুন",
    "reload": "রিলোড",
    "goBack": "পেছনে",
    "goForward": "সামনে",
    "zoom": "জুম",
    "actualSize": "আসল আকার",
    "zoomIn": "জুম ইন",
    "zoomOut": "জুম আউট",
    "devTools": "ডেভেলপার টুল",
    "newTab": "নতুন ট্যাব",
    "newTabPlaceholder": "{hasEngine, select, true {{engine} দিয়ে সার্চ করুন বা URL লিখুন…} other {সার্চ করুন বা URL লিখুন…}}",
    "closeTab": "ট্যাব বন্ধ করুন",
    "closeOtherTabs": "অন্যান্য ট্যাব বন্ধ করুন",
    "mute": "শব্দ বন্ধ",
    "unmute": "শব্দ চালু",
    "incognito": "গোপন মোড",
    "sidePanel": "সাইড প্যানেল",
    "newFolder": "নতুন ফোল্ডার",
    "addLink": "লিংক যোগ করুন",
    "mainWindow": "মূল উইন্ডো",
    "switchMainTab": "মূল ট্যাবে যান",
    "switchSideTab": "সাইড প্যানেল ট্যাবে যান",
    "newFile": "নতুন ফাইল",
    "bookmark": "বুকমার্ক",
    "bookmarkTab": "এই ট্যাবটি বুকমার্ক করুন",
    "copyUrlMetadata": "URL মেটাডেটা কপি করুন",
    "removeNoiView": "NoiView থেকে সরান",
    "addNoiView": "NoiView এ যোগ করুন",
    "openNewWindow": "নতুন উইন্ডোতে খুলুন",
    "openSidePanel": "সাইড প্যানেলে খুলুন",
    "pin": "পিন করুন",
    "unpin": "আনপিন করুন",
    "lockLink": "লিংক লক করুন",
    "unlockLink": "লিংক আনলক করুন",
    "buttonHighlight": "টাইটেল-বার বোতাম হাইলাইট"
  },
  "window": {
    "close": "বন্ধ করুন",
    "goMain": "মূল উইন্ডোতে যান",
    "dialog": "ডায়ালগ উইন্ডো",
    "drag": "টেনে সরান",
    "minimize": "মিনিমাইজ",
    "maximize": "ম্যাক্সিমাইজ",
    "restore": "রিস্টোর"
  },
  "ask": {
    "prompts": "{count, plural, one {প্রম্পট} other {প্রম্পট}}",
    "semver": "SemVer",
    "tag": "TAG",
    "log": "LOG",
    "sync": "সিঙ্ক",
    "manageSemVer": "SemVer ম্যানেজ করুন",
    "manageLog": "LOG ম্যানেজ করুন",
    "addPrompt": "প্রম্পট যোগ করুন",
    "lockPrompt": "প্রম্পট লক করুন",
    "unlockPrompt": "প্রম্পট আনলক করুন",
    "copyPrompt": "প্রম্পট কপি করুন",
    "deletePrompt": "প্রম্পট মুছুন",
    "filterTags": "TAG ফিল্টার করুন",
    "filterRule": "ফিল্টার রুল",
    "filterLockPrompts": "ফিল্টার: লক করা প্রম্পট"
  },
  "history": {
    "name": "ইতিহাস",
    "clearAll": "সব ইতিহাস মুছুন",
    "refresh": "ইতিহাস রিফ্রেশ করুন",
    "remove": "ইতিহাস থেকে সরান",
    "search": "ইতিহাস অনুসন্ধান করুন",
    "searchClear": "সার্চ মুছুন",
    "searchFound": "{hasQ, select, true {{count, plural, =0 {«{q}» এর জন্য কোনো অনুসন্ধান ফলাফল নেই} one {«{q}» এর জন্য #টি অনুসন্ধান ফলাফল পাওয়া গেছে} other {«{q}» এর জন্য #টি অনুসন্ধান ফলাফল পাওয়া গেছে}}} other {{count, plural, =0 {কোনো ফলাফল নেই} one {#টি ফলাফল পাওয়া গেছে} other {#টি ফলাফল পাওয়া গেছে}}}}",
    "moreThisSite": "এই সাইট থেকে আরও দেখুন",
    "dialogTitle": "সব ইতিহাস মুছবেন?",
    "dialogMessage": "এই ক্রিয়াটি সংরক্ষিত সব ইতিহাস রেকর্ড স্থায়ীভাবে মুছে দেয় এবং এটি পূর্বাবস্থায় ফেরানো যাবে না।",
    "result1": "ইতিহাস লোড করতে ব্যর্থ। {error}",
    "result2": "এখনও কোনো ইতিহাস নেই।",
    "result3": "কোনো অনুসন্ধান ফলাফল নেই",
    "result4": "কোনো ডেটা পাওয়া যায়নি।",
    "tips": "শিরোনাম ও URL জুড়ে ফাজি ম্যাচ। ফিল্ড ফিল্টার দিয়ে নির্ভুল করুন:",
    "tip1": "শিরোনামে «example» রয়েছে",
    "tip2": "«example.com» থেকে পৃষ্ঠা",
    "tip3": "2024/01/01 তারিখে",
    "tip4": "2024/01/01–2025/12/31 এর মধ্যে",
    "tip5": "2024/01/01 এর আগে",
    "tip6": "2024/01/01 এর পরে",
    "tip7": "ঠিক 3 বার ভিজিট করা হয়েছে",
    "tip8": "3 বারের কম ভিজিট করা হয়েছে",
    "tip9": "3 বারের বেশি ভিজিট করা হয়েছে"
  },
  "form": {
    "editor": "এডিটর",
    "partition": "সেশন আইসোলেশন",
    "name": "নাম",
    "url": "URL",
    "small": "ছোট",
    "medium": "মাঝারি",
    "large": "বড়",
    "icon": "আইকন",
    "inputElement": "ইনপুট এলিমেন্ট",
    "sendElement": "সেন্ড এলিমেন্ট",
    "cssSelector": "CSS সিলেক্টর",
    "lightMode": "লাইট মোড",
    "darkMode": "ডার্ক মোড",
    "customIcon": "কাস্টম আইকন",
    "linkIcon": "লিংক আইকন",
    "dirIcon": "ফোল্ডার আইকন",
    "dirOpenIcon": "ফোল্ডার ওপেন আইকন",
    "selectUA": "User Agent নির্বাচন করুন",
    "customUA": "অথবা কাস্টম User Agent স্ট্রিং লিখুন…",
    "rawJson": "Raw JSON",
    "validation": {
      "nameRequired": "অনুগ্রহ করে একটি নাম লিখুন।",
      "urlRequired": "অনুগ্রহ করে একটি URL লিখুন।",
      "userAgentRequired": "অনুগ্রহ করে একটি User Agent স্ট্রিং লিখুন।",
      "invalidJson": "JSON সঠিক নয়।",
      "fixJsonErrors": "সেভ করার আগে JSON ভ্যালিডেশন ত্রুটিগুলো ঠিক করুন।",
      "required": "এই ফিল্ডটি আবশ্যক।"
    },
    "tip": {
      "agentWarning": "নিরাপত্তা সতর্কতা: ওয়েব পেজকে Noi API অ্যাক্সেস করতে দেওয়া ঝুঁকিপূর্ণ হতে পারে।"
    }
  },
  "action": {
    "name": "অ্যাকশন",
    "archive": "আর্কাইভ করুন",
    "back": "পেছনে",
    "cancel": "বাতিল",
    "confirm": "নিশ্চিত করুন",
    "create": "তৈরি করুন",
    "delete": "মুছুন",
    "details": "বিস্তারিত",
    "edit": "এডিট",
    "restore": "রিস্টোর",
    "query": "কুয়েরি",
    "refresh": "রিফ্রেশ",
    "rename": "নাম পরিবর্তন",
    "reset": "রিসেট",
    "save": "সেভ",
    "send": "পাঠান",
    "use": "ব্যবহার করুন",
    "clean": "ডিস্ক থেকে মুছুন",
    "enable": "সক্রিয় করুন",
    "disable": "নিষ্ক্রিয় করুন",
    "importAsk": "NoiAsk এ ইমপোর্ট করুন",
    "openLocales": "Locales ফোল্ডার খুলুন"
  },
  "table": {
    "active": "সক্রিয়",
    "archived": "আর্কাইভ করা",
    "color": "রঙ",
    "createdAt": "তৈরি হয়েছে",
    "delete": "মুছুন",
    "description": "বিবরণ",
    "details": "বিস্তারিত",
    "disabled": "নিষ্ক্রিয়",
    "enabled": "সক্রিয়",
    "entries": "এন্ট্রি",
    "fileSize": "ফাইল সাইজ",
    "mode": "মোড",
    "status": "স্ট্যাটাস",
    "trash": "ট্র্যাশ",
    "unknown": "অজানা",
    "updatedAt": "আপডেট হয়েছে",
    "usageCount": "ব্যবহারের সংখ্যা",
    "tagAdd": "TAG যোগ করুন",
    "tagRemove": "TAG সরান",
    "visible": "দৃশ্যমান",
    "total": "মোট",
    "locked": "লক করা",
    "text": "টেক্সট",
    "sendCount": "পাঠানোর সংখ্যা",
    "addSource": "সোর্স যোগ করুন",
    "lastSynced": "শেষ সিঙ্ক",
    "message": {
      "completed": "কাজ সম্পন্ন হয়েছে।",
      "failed": "কাজ ব্যর্থ হয়েছে।",
      "noData": "কোনো ডেটা পাওয়া যায়নি।",
      "dataExist": "ডেটা ইতিমধ্যেই আছে।",
      "dataExistOrDuplicated": "সব ডেটা ইতিমধ্যেই আছে অথবা ডুপ্লিকেট।",
      "failedLoad": "ডেটা লোড করতে ব্যর্থ।",
      "importedCount": "ইমপোর্ট হয়েছে: {count}।",
      "skippedCount": "স্কিপ হয়েছে: {count}।",
      "deleteSelected": "আপনি কি নির্বাচিত সারিগুলো মুছতে চান? এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না।",
      "deleteItem": "আপনি কি এই আইটেমটি মুছতে চান? এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না।",
      "deleteFile": "এই ফাইলটি ডিস্ক থেকে মুছবেন? এই কাজটি পূর্বাবস্থায় ফেরানো যাবে না।",
      "removeItem": "এই আইটেমটি তালিকা থেকে সরাবেন? ফাইলটি ডিস্কে থাকবে।",
      "deleteBuiltin": "বিল্ট-ইন সোর্স মুছা যাবে না।",
      "importedAsk": "NoiAsk এ ইমপোর্ট হয়েছে।",
      "deleteUseTag": "এই TAG বর্তমানে ব্যবহৃত হচ্ছে এবং মুছে ফেলা যাবে না।"
    }
  },
  "dialog": {
    "appQuit": {
      "quitConfirm": "প্রস্থান নিশ্চিতকরণ প্রয়োজন",
      "title": "এখনই Noi বন্ধ করবেন?",
      "detail": "সব উইন্ডো ও কাজ বন্ধ হবে।"
    },
    "nshQuit": {
      "title": "টার্মিনাল বন্ধ করবেন?",
      "detail": "চলমান কাজগুলো সঙ্গে সঙ্গে বন্ধ হয়ে যাবে।"
    }
  },
  "settings": {
    "general": {
      "name": "সাধারণ",
      "language": "ভাষা",
      "sidebarIcon": "সাইডবার আইকনের আকার",
      "homeLink": "হোম লিংক",
      "limit": "কুয়েরি সীমা",
      "cometCursor": "NoiAsk ধূমকেতু কার্সর",
      "cometTrail": "NoiAsk ধূমকেতু ট্রেইল",
      "lockLocales": "Locales ফোল্ডার লক করুন",
      "lockLocalesTip": "locales ফোল্ডার লক করলে স্বয়ংক্রিয় আপডেট ভাষার ফাইল পরিবর্তন করতে পারবে না। কাস্টম অনুবাদের জন্য উপযোগী।",
      "urlMetadata": "URL মেটাডেটা",
      "sidebarAnchor": {
        "name": "সাইডবার অ্যাঙ্কর",
        "off": "বন্ধ",
        "leftTop": "বাম ওপরে",
        "leftCenter": "বাম মাঝখানে",
        "leftBottom": "বাম নিচে",
        "rightTop": "ডান ওপরে",
        "rightCenter": "ডান মাঝখানে",
        "rightBottom": "ডান নিচে",
        "disableWarning": "এটি বন্ধ করলে ফ্লোটিং ট্রিগার লুকিয়ে যাবে। শুধু Noi শর্টকাট দিয়ে সাইডবার আবার খোলা যাবে, আর শর্টকাটের সাথে ওয়েবসাইটের সংঘাত সাধারণ, তাই বন্ধ না করাই ভালো।",
        "disableConfirmTitle": "সাইডবার অ্যাঙ্কর নিষ্ক্রিয় করবেন?"
      },
      "nsh": {
        "name": "NSH (টার্মিনাল)",
        "fontFamily": "ফন্ট ফ্যামিলি",
        "fontSize": "ফন্ট সাইজ",
        "lineHeight": "লাইন হাইট",
        "cursorBlink": "কার্সর ব্লিঙ্ক",
        "cursorStyle": "কার্সর স্টাইল",
        "cursorWidth": "কার্সর প্রস্থ",
        "cursorInactiveStyle": "নিষ্ক্রিয় কার্সর স্টাইল",
        "scrollback": "স্ক্রলব্যাক",
        "tip": {
          "cursorWidth": "কার্সর স্টাইল “Bar” হলে কেবল প্রযোজ্য।",
          "scrollback": "টার্মিনাল স্ক্রল করলে ইতিহাসে রাখা লাইনের সংখ্যা।"
        }
      },
      "proxy": {
        "name": "প্রক্সি",
        "rules": "প্রক্সি নিয়ম",
        "bypass": "প্রক্সি বাইপাস নিয়ম"
      }
    },
    "shortcuts": {
      "name": "শর্টকাট",
      "noiAskPrompt": "NoiAsk প্রম্পট: {action}",
      "noiAskPromptWithContext": "NoiAsk প্রম্পট: {action} ({context})",
      "placeholder": "কম্বো চাপুন বা টাইপ করুন",
      "helpText": "পছন্দসই কী কম্বিনেশন চাপুন, বা টাইপ করুন (যেমন Ctrl+Shift+X)",
      "conflict": "শর্টকাট ইতিমধ্যেই ব্যবহৃত হচ্ছে"
    },
    "promptSync": {
      "option": {
        "remoteJson": "রিমোট JSON",
        "remoteCsv": "রিমোট CSV",
        "localJson": "লোকাল JSON",
        "localCsv": "লোকাল CSV"
      },
      "filePathMissing": "ফাইল পাথ সঠিক নয়।",
      "fileReadFailed": "ফাইলের কনটেন্ট পড়তে ব্যর্থ।",
      "fileOpenFailed": "ফাইল পিকার খুলতে ব্যর্থ।",
      "fileRequired": "সিঙ্ক করার জন্য একটি ফাইল নির্বাচন করুন।",
      "notFound": "সিঙ্ক সোর্স পাওয়া যায়নি।",
      "error": "প্রম্পট সিঙ্ক ত্রুটি",
      "pickLocalFile": "লোকাল ফাইল বেছে নিন",
      "type": "সোর্স টাইপ",
      "alias": "ফিল্ড ম্যাপিং",
      "upload": "ফাইল আপলোড করুন",
      "dragJson": "একটি JSON ফাইল টেনে আনুন বা ক্লিক করে ব্রাউজ করুন",
      "dragCsv": "একটি CSV ফাইল টেনে আনুন বা ক্লিক করে ব্রাউজ করুন",
      "browseLocal": "ডিস্ক থেকে নির্বাচন করুন"
    }
  },
  "errorPage": {
    "shared": {
      "defaultTryTips": [
        "ইন্টারনেট সংযোগ পরীক্ষা করুন",
        "প্রক্সি এবং ফায়ারওয়াল পরীক্ষা করুন"
      ],
      "platform": {
        "windows": "Windows নেটওয়ার্ক ডায়াগনস্টিক্স চালান",
        "mac": "ওয়্যারলেস ডায়াগনস্টিক্স চালান (macOS)"
      },
      "unknownError": "একটি অজানা ত্রুটি ঘটেছে",
      "site": "এই সাইট"
    },
    "html": {
      "tryLabel": "চেষ্টা করুন:",
      "showDetails": "বিস্তারিত দেখান",
      "hideDetails": "বিস্তারিত লুকান",
      "openAction": "খুলুন",
      "reload": "রিলোড করুন"
    },
    "offline": {
      "headline": "ইন্টারনেট নেই",
      "message": "আপনি অফলাইন।",
      "tryTips": [
        "নেটওয়ার্ক কেবল, মডেম বা রাউটার পরীক্ষা করুন",
        "Wi‑Fi এ আবার সংযুক্ত হন বা অন্য নেটওয়ার্কে যান"
      ],
      "action": "রিলোড করুন"
    },
    "network": {
      "headline": "এই সাইটে পৌঁছানো যাচ্ছে না",
      "message": "{hostname} এর সাথে সংযোগের সময় শেষ হয়েছে।",
      "messageFallback": "সাইটটি প্রতিক্রিয়া দিতে অনেক সময় নিয়েছে।",
      "messageByCode": {
        "ERR_CONNECTION_REFUSED": "{hostname} সংযোগ প্রত্যাখ্যান করেছে।",
        "ERR_CONNECTION_REFUSED_FALLBACK": "সাইটটি সংযোগ প্রত্যাখ্যান করেছে।",
        "ERR_CONNECTION_RESET": "সংযোগ রিসেট হয়েছে।",
        "ERR_CONNECTION_TIMED_OUT": "সংযোগের সময় শেষ হয়েছে।",
        "ERR_TIMED_OUT": "সংযোগের সময় শেষ হয়েছে।",
        "ERR_ADDRESS_UNREACHABLE": "ঠিকানা পৌঁছানো যাচ্ছে না।",
        "ERR_NETWORK_CHANGED": "আপনার নেটওয়ার্ক সংযোগ পরিবর্তিত হয়েছে।",
        "ERR_CONNECTION_ABORTED": "সংযোগ বন্ধ করা হয়েছে।",
        "ERR_CONNECTION_FAILED": "সংযোগ ব্যর্থ হয়েছে।",
        "ERR_CONNECTION_CLOSED": "সংযোগ বন্ধ হয়েছে।",
        "ERR_HTTP2_PROTOCOL_ERROR": "সংযোগ বিঘ্নিত হয়েছে (HTTP/2 প্রোটোকল ত্রুটি)।",
        "ERR_QUIC_PROTOCOL_ERROR": "সংযোগ বিঘ্নিত হয়েছে (QUIC প্রোটোকল ত্রুটি)।"
      },
      "tryTips": [
        "অন্যান্য সাইট খোলে কি না দেখুন; না খুললে, নেটওয়ার্কে পুনরায় সংযোগ দিন",
        "রাউটার রিস্টার্ট করুন বা এয়ারপ্লেন মোড চালু/বন্ধ করুন"
      ],
      "suggestions": [
        {
          "title": "সার্ভার প্রাপ্যতা পরীক্ষা করুন",
          "detail": "যদি {site} অভ্যন্তরীণ সেবা হয়, নিশ্চিত করুন এটি অনলাইনে আছে বা বর্তমান নেটওয়ার্ক থেকে পৌঁছানো যায়।"
        },
        {
          "title": "নিরাপত্তা সফটওয়্যার পরীক্ষা করুন",
          "detail": "ফায়ারওয়াল, অ্যান্টিভাইরাস বা VPN ক্লায়েন্ট অনুরোধে বাধা দিতে পারে—সাময়িকভাবে এগুলো বন্ধ করে আবার চেষ্টা করুন।"
        }
      ],
      "action": "রিলোড করুন"
    },
    "dns": {
      "headline": "এই সাইটে পৌঁছানো যাচ্ছে না",
      "message": "{hostname} এর IP ঠিকানা খুঁজে পাওয়া যায়নি।",
      "messageFallback": "সার্ভারের IP ঠিকানা খুঁজে পাওয়া যায়নি।",
      "messageByCode": {
        "ERR_NAME_NOT_RESOLVED": "{hostname} এর IP ঠিকানা খুঁজে পাওয়া যায়নি।",
        "ERR_NAME_NOT_RESOLVED_FALLBACK": "সার্ভারের IP ঠিকানা খুঁজে পাওয়া যায়নি।",
        "ERR_NAME_RESOLUTION_FAILED": "{hostname} এর DNS লুকআপ ব্যর্থ হয়েছে।",
        "ERR_NAME_RESOLUTION_FAILED_FALLBACK": "DNS লুকআপ ব্যর্থ হয়েছে।",
        "ERR_DNS_TIMED_OUT": "DNS সার্ভার টাইম আউট হয়েছে।",
        "ERR_DNS_SERVER_FAILED": "DNS সার্ভার সাড়া দেয়নি।",
        "ERR_DNS_MALFORMED_RESPONSE": "DNS সার্ভার অবৈধ প্রতিক্রিয়া দিয়েছে।"
      },
      "tryTips": [
        "ওয়েব ঠিকানার বানান ঠিক আছে কিনা যাচাই করুন",
        "প্রক্সি, ফায়ারওয়াল ও DNS কনফিগারেশন পরীক্ষা করুন"
      ],
      "suggestions": [
        {
          "title": "ওয়েব ঠিকানা পরীক্ষা করুন",
          "detail": "নিশ্চিত করুন {site} সঠিকভাবে লেখা আছে। যদি ঠিক থাকে, DNS সার্ভার সাময়িকভাবে অনুপলব্ধ হতে পারে।"
        },
        {
          "title": "DNS ক্যাশ ফ্লাশ করুন",
          "detail": "DNS ক্যাশ ফ্লাশ করে রিলোড করুন (উদাহরণস্বরূপ, Windows এ `ipconfig /flushdns` বা macOS এ `sudo killall -HUP mDNSResponder`)."
        }
      ],
      "action": "রিলোড করুন"
    },
    "ssl": {
      "headline": "আপনার সংযোগটি ব্যক্তিগত নয়",
      "headlineSecure": "এই সাইটটি নিরাপদ সংযোগ দিতে পারছে না",
      "message": "আক্রমণকারীরা {hostname} থেকে তথ্য চুরি করার চেষ্টা করতে পারে (যেমন পাসওয়ার্ড, বার্তা বা ক্রেডিট কার্ড)।",
      "messageSecure": "Noi {hostname} এর সাথে নিরাপদ সংযোগ স্থাপন করতে পারছে না।",
      "messageByCode": {
        "ERR_SSL_PROTOCOL_ERROR": "সাইটটি অবৈধ বা সমর্থনহীন SSL প্রোটোকল ব্যবহার করছে।",
        "ERR_SSL_VERSION_OR_CIPHER_MISMATCH": "সাইটটি সমর্থনহীন SSL প্রোটোকল বা সাইফার ব্যবহার করছে।",
        "ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN": "সার্টিফিকেট চেইন পিন করা কী-এর সাথে মেলে না।",
        "ERR_SSL_CLIENT_AUTH_CERT_NEEDED": "এই সাইটে প্রবেশের জন্য ক্লায়েন্ট সার্টিফিকেট দরকার।",
        "ERR_BAD_SSL_CLIENT_AUTH_CERT": "ক্লায়েন্ট সার্টিফিকেট অবৈধ বা প্রত্যাখ্যাত হয়েছে।",
        "ERR_CERT_COMMON_NAME_INVALID": "সার্টিফিকেটটি অন্য ঠিকানার জন্য বৈধ।",
        "ERR_CERT_DATE_INVALID": "সার্টিফিকেটের মেয়াদ শেষ বা এখনও বৈধ নয়।",
        "ERR_CERT_AUTHORITY_INVALID": "সার্টিফিকেটটি বিশ্বস্ত নয়।",
        "ERR_CERT_REVOKED": "সার্টিফিকেটটি প্রত্যাহার করা হয়েছে।",
        "ERR_CERT_INVALID": "সার্টিফিকেটটি অবৈধ।",
        "ERR_CERT_WEAK_SIGNATURE_ALGORITHM": "সার্টিফিকেটটি দুর্বল সিগনেচার অ্যালগরিদম ব্যবহার করে।",
        "ERR_CERT_WEAK_KEY": "সার্টিফিকেটটি দুর্বল কী ব্যবহার করে।",
        "ERR_CERT_NAME_CONSTRAINT_VIOLATION": "সার্টিফিকেটটি নামের বিধিনিষেধ লঙ্ঘন করে।",
        "ERR_CERT_NON_UNIQUE_NAME": "সার্টিফিকেটটি একাধিক সাইটে শেয়ার করা হয়েছে।"
      },
      "suggestions": [
        {
          "title": "কম্পিউটারের তারিখ ও সময় পরীক্ষা করুন",
          "detail": "ভুল ঘড়ি সার্টিফিকেট ত্রুটি ঘটাতে পারে।"
        },
        {
          "title": "সতর্কতার সাথে এগিয়ে যান",
          "detail": "কেবল তখনই এগিয়ে যান যখন আপনি ঝুঁকিগুলো বুঝে সাইটটিকে বিশ্বাস করেন।"
        }
      ],
      "action": "রিলোড করুন"
    },
    "proxy": {
      "headline": "প্রক্সি সংযোগ ব্যর্থ",
      "message": "Noi কনফিগার করা প্রক্সির মাধ্যমে সাইটে পৌঁছানোর চেষ্টা করেছে, কিন্তু সংযোগ সফল হয়নি। এই ট্যাব এখন বিকল্প হিসেবে সরাসরি সংযোগ ব্যবহার করছে।",
      "messageByCode": {
        "ERR_PROXY_CONNECTION_FAILED": "প্রক্সি সার্ভার সংযোগ প্রত্যাখ্যান করেছে।",
        "ERR_TUNNEL_CONNECTION_FAILED": "প্রক্সি টানেল ব্যর্থ হয়েছে।",
        "ERR_SOCKS_CONNECTION_FAILED": "SOCKS প্রক্সি সংযোগ প্রত্যাখ্যান করেছে।",
        "ERR_PROXY_AUTH_REQUESTED": "প্রক্সি সার্ভার প্রমাণীকরণ চায়।",
        "ERR_PROXY_AUTH_UNSUPPORTED": "প্রক্সি প্রমাণীকরণ পদ্ধতি সমর্থিত নয়।",
        "ERR_PAC_SCRIPT_FAILED": "প্রক্সি অটো-কনফিগ (PAC) স্ক্রিপ্ট ব্যর্থ হয়েছে।",
        "ERR_NO_SUPPORTED_PROXIES": "এই অনুরোধের জন্য কোনো সমর্থিত প্রক্সি পাওয়া যায়নি।",
        "ERR_MANDATORY_PROXY_CONFIGURATION_FAILED": "প্রয়োজনীয় প্রক্সি কনফিগারেশন ব্যর্থ হয়েছে।",
        "ERR_PROXY_REQUIRED": "এই সাইটে প্রবেশের জন্য প্রক্সি প্রয়োজন।"
      },
      "tryTips": [
        "প্রক্সি হোস্ট, পোর্ট ও প্রমাণীকরণ সেটিংস নিশ্চিত করুন",
        "প্রক্সি সার্ভারটি বর্তমান নেটওয়ার্ক থেকে পৌঁছানো যায় কিনা নিশ্চিত করুন",
        "প্রতিষ্ঠানে প্রক্সি প্রয়োজন হলে, এটি পুনরুদ্ধার করে আবার লোড করুন"
      ],
      "suggestions": [
        {
          "title": "Noi প্রক্সি নিয়ম পর্যালোচনা করুন",
          "detail": "Noi সেটিংস ব্যবহার করে নিশ্চিত করুন যে প্রক্সি নিয়ম এবং বাইপাস তালিকা এই নেটওয়ার্কের সাথে মেলে।",
          "actionLabel": "Noi সেটিংস খুলুন"
        },
        {
          "title": "পরে প্রক্সি দিয়ে আবার চেষ্টা করুন",
          "detail": "প্রক্সি আবার উপলব্ধ হলে, সরাসরি মোড থেকে প্রক্সিতে সুইচ করতে রিলোড করুন।"
        }
      ],
      "action": "ডাইরেক্ট মোডে রিলোড করুন"
    },
    "blocked": {
      "headline": "এই পৃষ্ঠাটি ব্লক করা হয়েছে",
      "message": "অনুরোধটি কোনো এক্সটেনশন বা সিকিউরিটি পলিসি দ্বারা ব্লক করা হয়েছে।",
      "messageByCode": {
        "ERR_BLOCKED_BY_CLIENT": "অনুরোধটি কোনো ক্লায়েন্ট বা এক্সটেনশন দ্বারা ব্লক করা হয়েছে।",
        "ERR_BLOCKED_BY_RESPONSE": "রেসপন্সটি সাইট বা নীতিমালা দ্বারা ব্লক করা হয়েছে।",
        "ERR_CLEARTEXT_NOT_PERMITTED": "সাইটটি নিরাপদ (HTTPS) সংযোগ চায়।",
        "ERR_NETWORK_ACCESS_DENIED": "নীতিমালার কারণে নেটওয়ার্ক অ্যাক্সেস ব্লক করা হয়েছে।"
      },
      "tryTips": [
        "এক্সটেনশন বা কনটেন্ট ব্লকার বন্ধ করে রিলোড করুন",
        "ফায়ারওয়াল ও অ্যান্টিভাইরাস কনফিগারেশন পরীক্ষা করুন"
      ],
      "suggestions": [
        {
          "title": "এক্সটেনশন বা কনটেন্ট ব্লকার বন্ধ করুন",
          "detail": "বিজ্ঞাপন বা ট্র্যাকার ব্লকারের মতো এক্সটেনশন অনুরোধ আটকাতে পারে—সাময়িকভাবে এগুলো বন্ধ করে আবার চেষ্টা করুন।"
        },
        {
          "title": "সাইট নীতি পরীক্ষা করুন",
          "detail": "রেসপন্সটি X-Frame-Options বা Content Security Policy দ্বারা ব্লক হতে পারে।"
        }
      ],
      "action": "রিলোড করুন"
    },
    "client": {
      "headline": "এই পৃষ্ঠাটি কাজ করছে না",
      "message": "সাইটটি অবৈধ রেসপন্স পাঠিয়েছে।",
      "messageByCode": {
        "ERR_EMPTY_RESPONSE": "{hostname} অবৈধ বা খালি রেসপন্স পাঠিয়েছে।",
        "ERR_EMPTY_RESPONSE_FALLBACK": "সাইটটি অবৈধ বা খালি রেসপন্স পাঠিয়েছে।",
        "ERR_FILE_NOT_FOUND": "ফাইল পাওয়া যায়নি।",
        "ERR_FILE_ACCESS_DENIED": "ফাইলে অ্যাক্সেস অস্বীকৃত।",
        "ERR_HTTP_RESPONSE_CODE_FAILURE": "সার্ভার ত্রুটির সাথে সাড়া দিয়েছে।",
        "ERR_TOO_MANY_REDIRECTS": "পৃষ্ঠাটি সঠিকভাবে রিডাইরেক্ট হচ্ছে না।",
        "ERR_INVALID_RESPONSE": "সাইটটি অবৈধ রেসপন্স পাঠিয়েছে।",
        "ERR_INVALID_CHUNKED_ENCODING": "সাইটটি অবৈধ রেসপন্স পাঠিয়েছে।",
        "ERR_INCOMPLETE_CHUNKED_ENCODING": "সাইটটি অসম্পূর্ণ রেসপন্স পাঠিয়েছে।",
        "ERR_CONTENT_LENGTH_MISMATCH": "সাইটটি অবৈধ রেসপন্স পাঠিয়েছে।",
        "ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH": "সাইটটি রেসপন্স হেডারে অতিরিক্ত ডেটা পাঠিয়েছে।",
        "ERR_CACHE_MISS": "অনুরোধটি আবার পাঠাতে হবে।",
        "ERR_INVALID_URL": "ওয়েব ঠিকানা সঠিক নয়।",
        "ERR_DISALLOWED_URL_SCHEME": "এই URL স্কিম অনুমোদিত নয়।",
        "ERR_UNKNOWN_URL_SCHEME": "এই URL স্কিম সমর্থিত নয়।",
        "ERR_UNSAFE_PORT": "নিরাপত্তার কারণে এই পোর্ট ব্লক করা হয়েছে।",
        "ERR_INVALID_REDIRECT": "সাইটটি অবৈধ রিডাইরেক্ট পাঠিয়েছে।",
        "ERR_UNSAFE_REDIRECT": "সাইটটি অনিরাপদ রিডাইরেক্টের চেষ্টা করেছে।",
        "ERR_RESPONSE_HEADERS_TOO_BIG": "সাইটটি রেসপন্স হেডারে অতিরিক্ত ডেটা পাঠিয়েছে।",
        "ERR_METHOD_NOT_SUPPORTED": "অনুরোধ পদ্ধতি সমর্থিত নয়।"
      },
      "tryTips": [
        "পৃষ্ঠাটি রিলোড করুন",
        "ব্রাউজারের ক্যাশ বা সংরক্ষিত সাইট ডেটা মুছুন"
      ],
      "suggestions": [
        {
          "title": "সাইট ডেটা মুছুন",
          "detail": "এই সাইটের কুকি ও ক্যাশড ফাইল মুছে দিন, তারপর রিলোড করুন।"
        },
        {
          "title": "সাইটের মালিককে জানান",
          "detail": "যদি সমস্যা চলতেই থাকে, নিচে দেখানো ত্রুটি কোডসহ সাইট অ্যাডমিনের সাথে যোগাযোগ করুন।"
        }
      ],
      "action": "রিলোড করুন"
    },
    "unknown": {
      "headline": "এই পৃষ্ঠাটি কাজ করছে না",
      "message": "একটি অপ্রত্যাশিত ত্রুটি ঘটেছে ({code}).",
      "tryTips": [
        "পৃষ্ঠাটি রিলোড করুন",
        "সমস্যা থাকলে ত্রুটি কোডটি নোট করুন এবং সাইট অ্যাডমিন বা সাপোর্ট টিমের সাথে যোগাযোগ করুন"
      ],
      "action": "রিলোড করুন"
    }
  }
}


================================================
FILE: locales/de/app.json
================================================
{
  "language": "Deutsch",
  "engines": "Suchmaschinen",
  "version": "Version",
  "doc": "Dokumentation",
  "sponsor": "Sponsor",
  "website": "Website",
  "menu": {
    "name": "Menü",
    "about": "Über Noi",
    "hide": "Noi ausblenden",
    "hideOthers": "Andere ausblenden",
    "quit": "Noi beenden",
    "unhide": "Alle einblenden",
    "noiHotkey": "Noi-Hotkey",
    "noiAskHotkey": "NoiAsk-Hotkey",
    "sidebar": "Seitenleiste",
    "checkUpdates": "Nach Updates suchen…",
    "settings": "Einstellungen",
    "stayOnTop": "Immer im Vordergrund bleiben",
    "services": "Dienste",
    "newTabSidePanel": "Neuer Tab in der Seitenleiste",
    "newTabMain": "Neuer Tab im Hauptfenster",
    "bordless": "Fenster ohne Rahmen",
    "theme": {
      "name": "Design",
      "system": "Systemstandard",
      "light": "Hell",
      "dark": "Dunkel",
      "style": "Designstil"
    },
    "find": {
      "name": "Suchen",
      "next": "Weitersuchen",
      "previous": "Vorheriges suchen",
      "jumpToSelection": "Zur Auswahl springen"
    },
    "edit": {
      "name": "Bearbeiten",
      "undo": "Rückgängig",
      "redo": "Wiederholen",
      "cut": "Ausschneiden",
      "copy": "Kopieren",
      "paste": "Einfügen",
      "pasteAndMatchStyle": "Einfügen und Stil übernehmen",
      "delete": "Löschen",
      "selectAll": "Alles auswählen"
    },
    "tab": {
      "openDefault": "Im Standardbrowser öffnen",
      "addSidebarTemp": "Zur Seitenleiste hinzufügen (TempLink)",
      "copyUrl": "URL kopieren",
      "copyUrlMd": "URL als Markdown kopieren"
    },
    "help": {
      "name": "Hilfe",
      "feedback": "Feedback"
    }
  },
  "session": {
    "clearCurrent": "Sitzungsdaten löschen",
    "clearAll": "Alle Sitzungsdaten löschen",
    "clearRemovedSites": "Daten entfernter Websites löschen",
    "confirmCurrent": "Websitedaten für „{target}“ löschen? Dadurch werden Cookies und Speicher für diese Sitzung entfernt.",
    "confirmAll": "Websitedaten für alle Sitzungen löschen? Dadurch werden Sie möglicherweise von einigen Websites abgemeldet.",
    "confirmRemovedSites": "Websitedaten für {count, plural, one {# Sitzung} other {# Sitzungen}} von Websites entfernen, die nicht mehr in Ihrem Index sind?",
    "resultNoRemovedSites": "Keine zwischengespeicherten Daten für entfernte Websites gefunden.",
    "helpRemovedSites": "Sitzungen entfernter Websites sind Cookies und Speicher, die nach dem Entfernen dieser Websites aus Ihrem Index übrig bleiben."
  },
  "view": {
    "name": "Ansicht",
    "tabs": "Noi-Tabs",
    "spaces": "{count, plural, one {Noi-Space} other {Noi-Spaces}}",
    "toolbar": "Noi-Werkzeugleiste",
    "markdown": "Markdown",
    "minibar": "Minileiste",
    "manageSpaces": "Spaces verwalten",
    "reload": "Neu laden",
    "goBack": "Zurück",
    "goForward": "Vorwärts",
    "zoom": "Zoom",
    "actualSize": "Tatsächliche Größe",
    "zoomIn": "Vergrößern",
    "zoomOut": "Verkleinern",
    "devTools": "Entwicklertools",
    "newTab": "Neuer Tab",
    "newTabPlaceholder": "{hasEngine, select, true {Mit {engine} suchen oder URL eingeben…} other {Suchen oder URL eingeben…}}",
    "closeTab": "Tab schließen",
    "closeOtherTabs": "Andere Tabs schließen",
    "mute": "Stummschalten",
    "unmute": "Stummschaltung aufheben",
    "incognito": "Inkognito",
    "sidePanel": "Seitenleiste",
    "newFolder": "Neuer Ordner",
    "addLink": "Link hinzufügen",
    "mainWindow": "Hauptfenster",
    "switchMainTab": "Zum Haupt-Tab wechseln",
    "switchSideTab": "Zum Seitenleisten-Tab wechseln",
    "newFile": "Neue Datei",
    "bookmark": "Lesezeichen",
    "bookmarkTab": "Diesen Tab als Lesezeichen speichern",
    "copyUrlMetadata": "URL-Metadaten kopieren",
    "removeNoiView": "Aus NoiView entfernen",
    "addNoiView": "Zu NoiView hinzufügen",
    "openNewWindow": "In neuem Fenster öffnen",
    "openSidePanel": "In der Seitenleiste öffnen",
    "pin": "Anheften",
    "unpin": "Lösen",
    "lockLink": "Link sperren",
    "unlockLink": "Link entsperren",
    "buttonHighlight": "Titelleisten-Schaltflächen hervorheben"
  },
  "window": {
    "close": "Schließen",
    "goMain": "Zum Hauptfenster",
    "dialog": "Dialogfenster",
    "drag": "Zum Verschieben ziehen",
    "minimize": "Minimieren",
    "maximize": "Maximieren",
    "restore": "Wiederherstellen"
  },
  "ask": {
    "prompts": "{count, plural, one {Prompt} other {Prompts}}",
    "semver": "SemVer",
    "tag": "TAG",
    "log": "LOG",
    "sync": "Synchronisieren",
    "manageSemVer": "SemVer verwalten",
    "manageLog": "LOG verwalten",
    "addPrompt": "Prompt hinzufügen",
    "lockPrompt": "Prompt sperren",
    "unlockPrompt": "Prompt entsperren",
    "copyPrompt": "Prompt kopieren",
    "deletePrompt": "Prompt löschen",
    "filterTags": "TAG filtern",
    "filterRule": "Filterregel",
    "filterLockPrompts": "Filter: gesperrte Prompts"
  },
  "history": {
    "name": "Verlauf",
    "clearAll": "Gesamten Verlauf löschen",
    "refresh": "Verlauf aktualisieren",
    "remove": "Aus dem Verlauf entfernen",
    "search": "Im Verlauf suchen",
    "searchClear": "Suche löschen",
    "searchFound": "{hasQ, select, true {{count, plural, =0 {Keine Suchergebnisse für „{q}“} one {# Suchergebnis für „{q}“ gefunden} other {# Suchergebnisse für „{q}“ gefunden}}} other {{count, plural, =0 {Keine Ergebnisse} one {# Ergebnis gefunden} other {# Ergebnisse gefunden}}}}",
    "moreThisSite": "Mehr von dieser Website",
    "dialogTitle": "Gesamten Verlauf löschen?",
    "dialogMessage": "Diese Aktion löscht alle gespeicherten Verlaufsdaten dauerhaft und kann nicht rückgängig gemacht werden.",
    "result1": "Verlauf konnte nicht geladen werden. {error}",
    "result2": "Noch kein Verlauf.",
    "result3": "Keine Suchergebnisse",
    "result4": "Keine Daten gefunden.",
    "tips": "Fuzzy-Matching über Titel und URLs. Präzisieren Sie mit Feldfiltern:",
    "tip1": "Titel enthält „example“",
    "tip2": "Seiten von „example.com“",
    "tip3": "am 2024/01/01",
    "tip4": "zwischen 2024/01/01–2025/12/31",
    "tip5": "vor 2024/01/01",
    "tip6": "nach 2024/01/01",
    "tip7": "genau 3-mal besucht",
    "tip8": "weniger als 3-mal besucht",
    "tip9": "mehr als 3-mal besucht"
  },
  "form": {
    "editor": "Editor",
    "partition": "Sitzungsisolierung",
    "name": "Name",
    "url": "URL",
    "small": "Klein",
    "medium": "Mittel",
    "large": "Groß",
    "icon": "Symbol",
    "inputElement": "Eingabeelement",
    "sendElement": "Sendeelement",
    "cssSelector": "CSS-Selektor",
    "lightMode": "Heller Modus",
    "darkMode": "Dunkler Modus",
    "customIcon": "Benutzerdefiniertes Symbol",
    "linkIcon": "Link-Symbol",
    "dirIcon": "Ordnersymbol",
    "dirOpenIcon": "Geöffnetes Ordnersymbol",
    "selectUA": "User Agent auswählen",
    "customUA": "Oder einen benutzerdefinierten User-Agent-String eingeben…",
    "rawJson": "Raw JSON",
    "validation": {
      "nameRequired": "Bitte geben Sie einen Namen ein.",
      "urlRequired": "Bitte geben Sie eine URL ein.",
      "userAgentRequired": "Bitte geben Sie einen User-Agent-String ein.",
      "invalidJson": "JSON ist ungültig.",
      "fixJsonErrors": "Bitte beheben Sie die JSON-Validierungsfehler vor dem Speichern.",
      "required": "Dieses Feld ist erforderlich."
    },
    "tip": {
      "agentWarning": "Sicherheitswarnung: Webseiten den Zugriff auf die Noi API zu erlauben, kann gefährlich sein."
    }
  },
  "action": {
    "name": "Aktion",
    "archive": "Archivieren",
    "back": "Zurück",
    "cancel": "Abbrechen",
    "confirm": "Bestätigen",
    "create": "Erstellen",
    "delete": "Löschen",
    "details": "Details",
    "edit": "Bearbeiten",
    "restore": "Wiederherstellen",
    "query": "Abfrage",
    "refresh": "Aktualisieren",
    "rename": "Umbenennen",
    "reset": "Zurücksetzen",
    "save": "Speichern",
    "send": "Senden",
    "use": "Verwenden",
    "clean": "Vom Datenträger löschen",
    "enable": "Aktivieren",
    "disable": "Deaktivieren",
    "importAsk": "In NoiAsk importieren",
    "openLocales": "Locales-Ordner öffnen"
  },
  "table": {
    "active": "Aktiv",
    "archived": "Archiviert",
    "color": "Farbe",
    "createdAt": "Erstellt am",
    "delete": "Löschen",
    "description": "Beschreibung",
    "details": "Details",
    "disabled": "Deaktiviert",
    "enabled": "Aktiviert",
    "entries": "Einträge",
    "fileSize": "Dateigröße",
    "mode": "Modus",
    "status": "Status",
    "trash": "Papierkorb",
    "unknown": "Unbekannt",
    "updatedAt": "Aktualisiert am",
    "usageCount": "Nutzungsanzahl",
    "tagAdd": "TAG hinzufügen",
    "tagRemove": "TAG entfernen",
    "visible": "Sichtbar",
    "total": "Gesamt",
    "locked": "Gesperrt",
    "text": "Text",
    "sendCount": "Anzahl der Sendungen",
    "addSource": "Quelle hinzufügen",
    "lastSynced": "Zuletzt synchronisiert",
    "message": {
      "completed": "Aktion abgeschlossen.",
      "failed": "Aktion fehlgeschlagen.",
      "noData": "Keine Daten gefunden.",
      "dataExist": "Daten existieren bereits.",
      "dataExistOrDuplicated": "Alle Daten existieren bereits oder sind dupliziert.",
      "failedLoad": "Daten konnten nicht geladen werden.",
      "importedCount": "Importiert: {count}.",
      "skippedCount": "Übersprungen: {count}.",
      "deleteSelected": "Möchten Sie die ausgewählten Zeilen wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
      "deleteItem": "Möchten Sie dieses Element wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
      "deleteFile": "Diese Datei vom Datenträger löschen? Diese Aktion kann nicht rückgängig gemacht werden.",
      "removeItem": "Dieses Element aus der Liste entfernen? Die Datei bleibt auf dem Datenträger.",
      "deleteBuiltin": "Integrierte Quelle kann nicht gelöscht werden.",
      "importedAsk": "In NoiAsk importiert.",
      "deleteUseTag": "Dieses TAG wird derzeit verwendet und kann nicht gelöscht werden."
    }
  },
  "dialog": {
    "appQuit": {
      "quitConfirm": "Bestätigung beim Beenden erforderlich",
      "title": "Noi jetzt beenden?",
      "detail": "Alle Fenster und Aufgaben werden geschlossen."
    },
    "nshQuit": {
      "title": "Terminal schließen?",
      "detail": "Laufende Aufgaben werden sofort beendet."
    }
  },
  "settings": {
    "general": {
      "name": "Allgemein",
      "language": "Sprache",
      "sidebarIcon": "Größe der Seitenleisten-Symbole",
      "homeLink": "Startseitenlink",
      "limit": "Abfragelimit",
      "cometCursor": "NoiAsk-Kometencursor",
      "cometTrail": "NoiAsk-Kometenschweif",
      "lockLocales": "Locales-Ordner sperren",
      "lockLocalesTip": "Sperren Sie den Locales-Ordner, damit automatische Updates die Sprachdateien nicht verändern. Nützlich für benutzerdefinierte Übersetzungen.",
      "urlMetadata": "URL-Metadaten",
      "sidebarAnchor": {
        "name": "Seitenleistenanker",
        "off": "Aus",
        "leftTop": "Links oben",
        "leftCenter": "Links Mitte",
        "leftBottom": "Links unten",
        "rightTop": "Rechts oben",
        "rightCenter": "Rechts Mitte",
        "rightBottom": "Rechts unten",
        "disableWarning": "Das Deaktivieren blendet den schwebenden Trigger aus. Nur der Noi-Hotkey kann die Seitenleiste wieder öffnen, und Hotkey-Konflikte mit Websites sind häufig, daher wird das Deaktivieren nicht empfohlen.",
        "disableConfirmTitle": "Seitenleistenanker deaktivieren?"
      },
      "nsh": {
        "name": "NSH (Terminal)",
        "fontFamily": "Schriftfamilie",
        "fontSize": "Schriftgröße",
        "lineHeight": "Zeilenhöhe",
        "cursorBlink": "Cursor-Blinken",
        "cursorStyle": "Cursor-Stil",
        "cursorWidth": "Cursor-Breite",
        "cursorInactiveStyle": "Stil des inaktiven Cursors",
        "scrollback": "Scrollback",
        "tip": {
          "cursorWidth": "Gilt nur, wenn der Cursor-Stil „Bar“ ist.",
          "scrollback": "Anzahl der Zeilen, die beim Scrollen im Verlauf behalten werden."
        }
      },
      "proxy": {
        "name": "Proxy",
        "rules": "Proxy-Regeln",
        "bypass": "Proxy-Bypass-Regeln"
      }
    },
    "shortcuts": {
      "name": "Kurzbefehle",
      "noiAskPrompt": "NoiAsk-Prompt: {action}",
      "noiAskPromptWithContext": "NoiAsk-Prompt: {action} ({context})",
      "placeholder": "Kombination drücken oder tippen",
      "helpText": "Drücken Sie die gewünschte Tastenkombination oder geben Sie sie ein (z. B. Ctrl+Shift+X)",
      "conflict": "Kurzbefehl wird bereits verwendet"
    },
    "promptSync": {
      "option": {
        "remoteJson": "Remote-JSON",
        "remoteCsv": "Remote-CSV",
        "localJson": "Lokales JSON",
        "localCsv": "Lokales CSV"
      },
      "filePathMissing": "Ungültiger Dateipfad.",
      "fileReadFailed": "Dateiinhalt konnte nicht gelesen werden.",
      "fileOpenFailed": "Dateiauswahl konnte nicht geöffnet werden.",
      "fileRequired": "Bitte wählen Sie eine Datei zum Synchronisieren aus.",
      "notFound": "Synchronisierungsquelle nicht gefunden.",
      "error": "Prompt-Synchronisierungsfehler",
      "pickLocalFile": "Lokale Datei auswählen",
      "type": "Quellentyp",
      "alias": "Feldzuordnung",
      "upload": "Datei hochladen",
      "dragJson": "JSON-Datei hierher ziehen oder klicken, um zu durchsuchen",
      "dragCsv": "CSV-Datei hierher ziehen oder klicken, um zu durchsuchen",
      "browseLocal": "Vom Datenträger auswählen"
    }
  },
  "errorPage": {
    "shared": {
      "defaultTryTips": [
        "Prüfen Sie Ihre Internetverbindung",
        "Prüfen Sie Proxy und Firewall"
      ],
      "platform": {
        "windows": "Windows-Netzwerkdiagnose ausführen",
        "mac": "Drahtlosdiagnose ausführen (macOS)"
      },
      "unknownError": "Ein unbekannter Fehler ist aufgetreten",
      "site": "diese Website"
    },
    "html": {
      "tryLabel": "Versuchen Sie:",
      "showDetails": "Details anzeigen",
      "hideDetails": "Details ausblenden",
      "openAction": "Öffnen",
      "reload": "Neu laden"
    },
    "offline": {
      "headline": "Kein Internet",
      "message": "Sie sind offline.",
      "tryTips": [
        "Prüfen Sie Netzwerkkabel, Modem oder Router",
        "Verbinden Sie sich erneut mit dem WLAN oder wechseln Sie das Netzwerk"
      ],
      "action": "Neu laden"
    },
    "network": {
      "headline": "Diese Website ist nicht erreichbar",
      "message": "Die Verbindung zu {hostname} ist abgelaufen.",
      "messageFallback": "Die Website hat zu lange zum Antworten gebraucht.",
      "messageByCode": {
        "ERR_CONNECTION_REFUSED": "{hostname} hat die Verbindung abgelehnt.",
        "ERR_CONNECTION_REFUSED_FALLBACK": "Die Website hat die Verbindung abgelehnt.",
        "ERR_CONNECTION_RESET": "Die Verbindung wurde zurückgesetzt.",
        "ERR_CONNECTION_TIMED_OUT": "Die Verbindung ist abgelaufen.",
        "ERR_TIMED_OUT": "Die Verbindung ist abgelaufen.",
        "ERR_ADDRESS_UNREACHABLE": "Die Adresse ist nicht erreichbar.",
        "ERR_NETWORK_CHANGED": "Ihre Netzwerkverbindung hat sich geändert.",
        "ERR_CONNECTION_ABORTED": "Die Verbindung wurde abgebrochen.",
        "ERR_CONNECTION_FAILED": "Verbindung fehlgeschlagen.",
        "ERR_CONNECTION_CLOSED": "Die Verbindung wurde geschlossen.",
        "ERR_HTTP2_PROTOCOL_ERROR": "Die Verbindung wurde unterbrochen (HTTP/2-Protokollfehler).",
        "ERR_QUIC_PROTOCOL_ERROR": "Die Verbindung wurde unterbrochen (QUIC-Protokollfehler)."
      },
      "tryTips": [
        "Prüfen Sie, ob andere Websites geöffnet werden; wenn nicht, verbinden Sie sich erneut mit dem Netzwerk",
        "Starten Sie den Router neu oder schalten Sie den Flugmodus aus/ein"
      ],
      "suggestions": [
        {
          "title": "Serververfügbarkeit prüfen",
          "detail": "Wenn {site} ein interner Dienst ist, stellen Sie sicher, dass er online ist oder vom aktuellen Netzwerk erreichbar ist."
        },
        {
          "title": "Sicherheitssoftware prüfen",
          "detail": "Firewall, Antivirus oder VPN-Clients können Anfragen unterbrechen — pausieren Sie diese Tools vorübergehend und versuchen Sie es erneut."
        }
      ],
      "action": "Neu laden"
    },
    "dns": {
      "headline": "Diese Website ist nicht erreichbar",
      "message": "Die IP-Adresse von {hostname} konnte nicht gefunden werden.",
      "messageFallback": "Die IP-Adresse des Servers konnte nicht gefunden werden.",
      "messageByCode": {
        "ERR_NAME_NOT_RESOLVED": "Die IP-Adresse von {hostname} konnte nicht gefunden werden.",
        "ERR_NAME_NOT_RESOLVED_FALLBACK": "Die IP-Adresse des Servers konnte nicht gefunden werden.",
        "ERR_NAME_RESOLUTION_FAILED": "DNS-Abfrage für {hostname} fehlgeschlagen.",
        "ERR_NAME_RESOLUTION_FAILED_FALLBACK": "Die DNS-Abfrage ist fehlgeschlagen.",
        "ERR_DNS_TIMED_OUT": "Der DNS-Server hat nicht geantwortet.",
        "ERR_DNS_SERVER_FAILED": "Der DNS-Server hat nicht geantwortet.",
        "ERR_DNS_MALFORMED_RESPONSE": "Der DNS-Server hat eine ungültige Antwort zurückgegeben."
      },
      "tryTips": [
        "Prüfen Sie, ob die Webadresse korrekt geschrieben ist",
        "Prüfen Sie Proxy-, Firewall- und DNS-Konfiguration"
      ],
      "suggestions": [
        {
          "title": "Webadresse prüfen",
          "detail": "Stellen Sie sicher, dass {site} korrekt geschrieben ist. Wenn ja, ist der DNS-Server möglicherweise vorübergehend nicht verfügbar."
        },
        {
          "title": "DNS-Cache leeren",
          "detail": "Leeren Sie den DNS-Cache und laden Sie neu (z. B. `ipconfig /flushdns` unter Windows oder `sudo killall -HUP mDNSResponder` unter macOS)."
        }
      ],
      "action": "Neu laden"
    },
    "ssl": {
      "headline": "Ihre Verbindung ist nicht privat",
      "headlineSecure": "Diese Website kann keine sichere Verbindung bereitstellen",
      "message": "Angreifer könnten versuchen, Informationen von {hostname} zu stehlen (z. B. Passwörter, Nachrichten oder Kreditkarten).",
      "messageSecure": "Noi kann keine sichere Verbindung zu {hostname} herstellen.",
      "messageByCode": {
        "ERR_SSL_PROTOCOL_ERROR": "Die Website verwendet ein ungültiges oder nicht unterstütztes SSL-Protokoll.",
        "ERR_SSL_VERSION_OR_CIPHER_MISMATCH": "Die Website verwendet ein nicht unterstütztes SSL-Protokoll oder eine nicht unterstützte Chiffre.",
        "ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN": "Die Zertifikatskette stimmt nicht mit dem gepinnten Schlüssel überein.",
        "ERR_SSL_CLIENT_AUTH_CERT_NEEDED": "Für den Zugriff auf diese Website ist ein Client-Zertifikat erforderlich.",
        "ERR_BAD_SSL_CLIENT_AUTH_CERT": "Das Client-Zertifikat ist ungültig oder wurde abgelehnt.",
        "ERR_CERT_COMMON_NAME_INVALID": "Das Zertifikat ist für eine andere Adresse gültig.",
        "ERR_CERT_DATE_INVALID": "Das Zertifikat ist abgelaufen oder noch nicht gültig.",
        "ERR_CERT_AUTHORITY_INVALID": "Das Zertifikat ist nicht vertrauenswürdig.",
        "ERR_CERT_REVOKED": "Das Zertifikat wurde widerrufen.",
        "ERR_CERT_INVALID": "Das Zertifikat ist ungültig.",
        "ERR_CERT_WEAK_SIGNATURE_ALGORITHM": "Das Zertifikat verwendet einen schwachen Signaturalgorithmus.",
        "ERR_CERT_WEAK_KEY": "Das Zertifikat verwendet einen schwachen Schlüssel.",
        "ERR_CERT_NAME_CONSTRAINT_VIOLATION": "Das Zertifikat verletzt Namensbeschränkungen.",
        "ERR_CERT_NON_UNIQUE_NAME": "Das Zertifikat wird von mehreren Websites verwendet."
      },
      "suggestions": [
        {
          "title": "Datum und Uhrzeit des Computers prüfen",
          "detail": "Eine falsche Uhrzeit kann zu Zertifikatfehlern führen."
        },
        {
          "title": "Mit Vorsicht fortfahren",
          "detail": "Fahren Sie nur fort, wenn Sie die Risiken verstehen und der Website vertrauen."
        }
      ],
      "action": "Neu laden"
    },
    "proxy": {
      "headline": "Proxy-Verbindung fehlgeschlagen",
      "message": "Noi hat versucht, die Website über den konfigurierten Proxy zu erreichen, aber die Verbindung war nicht erfolgreich. Dieser Tab verwendet nun eine direkte Verbindung als Fallback.",
      "messageByCode": {
        "ERR_PROXY_CONNECTION_FAILED": "Der Proxyserver hat die Verbindung abgelehnt.",
        "ERR_TUNNEL_CONNECTION_FAILED": "Der Proxy-Tunnel ist fehlgeschlagen.",
        "ERR_SOCKS_CONNECTION_FAILED": "Der SOCKS-Proxy hat die Verbindung abgelehnt.",
        "ERR_PROXY_AUTH_REQUESTED": "Der Proxyserver erfordert eine Authentifizierung.",
        "ERR_PROXY_AUTH_UNSUPPORTED": "Die Proxy-Authentifizierungsmethode wird nicht unterstützt.",
        "ERR_PAC_SCRIPT_FAILED": "Das Proxy-Autokonfigurationsskript (PAC) ist fehlgeschlagen.",
        "ERR_NO_SUPPORTED_PROXIES": "Für diese Anfrage wurden keine unterstützten Proxys gefunden.",
        "ERR_MANDATORY_PROXY_CONFIGURATION_FAILED": "Eine erforderliche Proxy-Konfiguration ist fehlgeschlagen.",
        "ERR_PROXY_REQUIRED": "Für den Zugriff auf diese Website ist ein Proxy erforderlich."
      },
      "tryTips": [
        "Proxy-Host, Port und Authentifizierung bestätigen",
        "Stellen Sie sicher, dass der Proxyserver vom aktuellen Netzwerk aus erreichbar ist",
        "Wenn die Organisation einen Proxy erfordert, stellen Sie ihn wieder her und laden Sie neu, sobald er wieder verfügbar ist"
      ],
      "suggestions": [
        {
          "title": "Noi-Proxy-Regeln prüfen",
          "detail": "Verwenden Sie die Noi-Einstellungen, um zu bestätigen, dass die Proxy-Regeln und die Bypass-Liste zu diesem Netzwerk passen.",
          "actionLabel": "Noi-Einstellungen öffnen"
        },
        {
          "title": "Später mit Proxy erneut versuchen",
          "detail": "Wenn der Proxy wieder verfügbar ist, laden Sie neu, um vom direkten Modus zum Proxy-Modus zu wechseln."
        }
      ],
      "action": "Im Direktmodus neu laden"
    },
    "blocked": {
      "headline": "Diese Seite wurde blockiert",
      "message": "Die Anfrage wurde durch eine Erweiterung oder Sicherheitsrichtlinie blockiert.",
      "messageByCode": {
        "ERR_BLOCKED_BY_CLIENT": "Die Anfrage wurde durch einen Client oder eine Erweiterung blockiert.",
        "ERR_BLOCKED_BY_RESPONSE": "Die Antwort wurde von der Website oder einer Richtlinie blockiert.",
        "ERR_CLEARTEXT_NOT_PERMITTED": "Die Website erfordert eine sichere (HTTPS) Verbindung.",
        "ERR_NETWORK_ACCESS_DENIED": "Der Netzwerkzugriff ist durch eine Richtlinie blockiert."
      },
      "tryTips": [
        "Deaktivieren Sie Erweiterungen oder Inhaltsblocker und laden Sie neu",
        "Prüfen Sie die Firewall- und Antivirus-Konfiguration"
      ],
      "suggestions": [
        {
          "title": "Erweiterungen oder Inhaltsblocker deaktivieren",
          "detail": "Erweiterungen wie Werbe- oder Tracker-Blocker können die Anfrage verhindern — deaktivieren Sie sie vorübergehend und versuchen Sie es erneut."
        },
        {
          "title": "Website-Richtlinie prüfen",
          "detail": "Die Antwort könnte durch X-Frame-Options oder Content Security Policy blockiert sein."
        }
      ],
      "action": "Neu laden"
    },
    "client": {
      "headline": "Diese Seite funktioniert nicht",
      "message": "Die Website hat eine ungültige Antwort zurückgegeben.",
      "messageByCode": {
        "ERR_EMPTY_RESPONSE": "{hostname} hat eine ungültige oder leere Antwort gesendet.",
        "ERR_EMPTY_RESPONSE_FALLBACK": "Die Website hat eine ungültige oder leere Antwort gesendet.",
        "ERR_FILE_NOT_FOUND": "Die Datei wurde nicht gefunden.",
        "ERR_FILE_ACCESS_DENIED": "Der Zugriff auf die Datei wurde verweigert.",
        "ERR_HTTP_RESPONSE_CODE_FAILURE": "Der Server hat mit einem Fehler geantwortet.",
        "ERR_TOO_MANY_REDIRECTS": "Die Seite wird nicht korrekt weitergeleitet.",
        "ERR_INVALID_RESPONSE": "Die Website hat eine ungültige Antwort gesendet.",
        "ERR_INVALID_CHUNKED_ENCODING": "Die Website hat eine ungültige Antwort gesendet.",
        "ERR_INCOMPLETE_CHUNKED_ENCODING": "Die Website hat eine unvollständige Antwort gesendet.",
        "ERR_CONTENT_LENGTH_MISMATCH": "Die Website hat eine ungültige Antwort gesendet.",
        "ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH": "Die Website hat zu viele Daten in den Antwort-Headern gesendet.",
        "ERR_CACHE_MISS": "Die Anfrage muss erneut gesendet werden.",
        "ERR_INVALID_URL": "Die Webadresse ist ungültig.",
        "ERR_DISALLOWED_URL_SCHEME": "Dieses URL-Schema ist nicht zulässig.",
        "ERR_UNKNOWN_URL_SCHEME": "Dieses URL-Schema wird nicht unterstützt.",
        "ERR_UNSAFE_PORT": "Dieser Port ist aus Sicherheitsgründen blockiert.",
        "ERR_INVALID_REDIRECT": "Die Website hat eine ungültige Weiterleitung zurückgegeben.",
        "ERR_UNSAFE_REDIRECT": "Die Website hat eine unsichere Weiterleitung versucht.",
        "ERR_RESPONSE_HEADERS_TOO_BIG": "Die Website hat zu viele Daten in den Antwort-Headern gesendet.",
        "ERR_METHOD_NOT_SUPPORTED": "Die Anfragemethode wird nicht unterstützt."
      },
      "tryTips": [
        "Laden Sie die Seite neu",
        "Löschen Sie den Browser-Cache oder gespeicherte Website-Daten"
      ],
      "suggestions": [
        {
          "title": "Website-Daten löschen",
          "detail": "Entfernen Sie Cookies und zwischengespeicherte Dateien dieser Website und laden Sie dann neu."
        },
        {
          "title": "Website-Betreiber informieren",
          "detail": "Wenn das Problem weiterhin besteht, wenden Sie sich mit dem unten angezeigten Fehlercode an den Website-Administrator."
        }
      ],
      "action": "Neu laden"
    },
    "unknown": {
      "headline": "Diese Seite funktioniert nicht",
      "message": "Ein unerwarteter Fehler ist aufgetreten ({code}).",
      "tryTips": [
        "Laden Sie die Seite neu",
        "Wenn das Problem weiterhin besteht, notieren Sie den Fehlercode und wenden Sie sich an den Website-Administrator oder das Support-Team"
      ],
      "action": "Neu laden"
    }
  }
}


================================================
FILE: locales/en/app.json
================================================
{
  "language": "English",
  "engines": "Engines",
  "version": "Version",
  "doc": "Documentation",
  "sponsor": "Sponsor",
  "website": "Website",
  "menu": {
    "name": "Menu",
    "about": "About Noi",
    "hide": "Hide Noi",
    "hideOthers": "Hide Others",
    "quit": "Quit Noi",
    "unhide": "Show All",
    "noiHotkey": "Noi Hotkey",
    "noiAskHotkey": "NoiAsk Hotkey",
    "sidebar": "Sidebar",
    "checkUpdates": "Check for Updates…",
    "settings": "Settings",
    "stayOnTop": "Always on Top",
    "services": "Services",
    "newTabSidePanel": "New Tab in Side Panel",
    "newTabMain": "New Tab in Main Window",
    "bordless": "Borderless Window",
    "theme": {
      "name": "Theme",
      "system": "System",
      "light": "Light",
      "dark": "Dark",
      "style": "Theme Style"
    },
    "find": {
      "name": "Find",
      "next": "Find Next",
      "previous": "Find Previous",
      "jumpToSelection": "Jump to Selection"
    },
    "edit": {
      "name": "Edit",
      "undo": "Undo",
      "redo": "Redo",
      "cut": "Cut",
      "copy": "Copy",
      "paste": "Paste",
      "pasteAndMatchStyle": "Paste and Match Style",
      "delete": "Delete",
      "selectAll": "Select All"
    },
    "tab": {
      "openDefault": "Open in Default Browser",
      "addSidebarTemp": "Add to Sidebar (TempLink)",
      "copyUrl": "Copy URL",
      "copyUrlMd": "Copy URL as Markdown"
    },
    "help": {
      "name": "Help",
      "feedback": "Feedback"
    }
  },
  "session": {
    "clearCurrent": "Clear Session Data",
    "clearAll": "Clear All Session Data",
    "clearRemovedSites": "Clear Data for Removed Sites",
    "confirmCurrent": "Clear site data for \"{target}\"? This will remove cookies and storage for this session.",
    "confirmAll": "Clear site data for all sessions? This may sign you out of some sites.",
    "confirmRemovedSites": "Remove site data for {count, plural, one {# session} other {# sessions}} from sites that are no longer in your index?",
    "resultNoRemovedSites": "No cached data found for removed sites.",
    "helpRemovedSites": "Sessions for removed sites are cached cookies and storage left over after those sites were removed from your index."
  },
  "view": {
    "name": "View",
    "tabs": "Noi Tabs",
    "spaces": "{count, plural, one {Noi Space} other {Noi Spaces}}",
    "toolbar": "Noi Toolbar",
    "markdown": "Markdown",
    "minibar": "Minibar",
    "manageSpaces": "Manage Spaces",
    "reload": "Reload",
    "goBack": "Back",
    "goForward": "Forward",
    "zoom": "Zoom",
    "actualSize": "Actual Size",
    "zoomIn": "Zoom In",
    "zoomOut": "Zoom Out",
    "devTools": "Developer Tools",
    "newTab": "New Tab",
    "newTabPlaceholder": "{hasEngine, select, true {Search with {engine} or enter URL…} other {Search or enter URL…}}",
    "closeTab": "Close Tab",
    "closeOtherTabs": "Close Other Tabs",
    "mute": "Mute",
    "unmute": "Unmute",
    "incognito": "Incognito",
    "sidePanel": "Side Panel",
    "newFolder": "New Folder",
    "addLink": "Add Link",
    "mainWindow": "Main Window",
    "switchMainTab": "Switch to Main Tab",
    "switchSideTab": "Switch to Side Panel Tab",
    "newFile": "New File",
    "bookmark": "Bookmark",
    "bookmarkTab": "Bookmark This Tab",
    "copyUrlMetadata": "Copy URL Metadata",
    "removeNoiView": "Remove from NoiView",
    "addNoiView": "Add to NoiView",
    "openNewWindow": "Open in New Window",
    "openSidePanel": "Open in Side Panel",
    "pin": "Pin",
    "unpin": "Unpin",
    "lockLink": "Lock Link",
    "unlockLink": "Unlock Link",
    "buttonHighlight": "Title Bar Button Highlight"
  },
  "window": {
    "close": "Close",
    "goMain": "Go to Main Window",
    "dialog": "Dialog Window",
    "drag": "Drag to Move",
    "minimize": "Minimize",
    "maximize": "Maximize",
    "restore": "Restore"
  },
  "ask": {
    "prompts": "{count, plural, one {Prompt} other {Prompts}}",
    "semver": "SemVer",
    "tag": "TAG",
    "log": "LOG",
    "sync": "Sync",
    "manageSemVer": "Manage SemVer",
    "manageLog": "Manage Log",
    "addPrompt": "Add Prompt",
    "lockPrompt": "Lock Prompt",
    "unlockPrompt": "Unlock Prompt",
    "copyPrompt": "Copy Prompt",
    "deletePrompt": "Delete Prompt",
    "filterTags": "Filter TAG",
    "filterRule": "Filter Rule",
    "filterLockPrompts": "Filter: Locked Prompts"
  },
  "history": {
    "name": "History",
    "clearAll": "Clear All History",
    "refresh": "Refresh History",
    "remove": "Remove from History",
    "search": "Search History",
    "searchClear": "Clear Search",
    "searchFound": "{hasQ, select, true {{count, plural, =0 {No search results for “{q}”} one {Found # search result for “{q}”} other {Found # search results for “{q}”} }} other {{count, plural, =0 {No results} one {Found # result} other {Found # results}}}}",
    "moreThisSite": "More from This Site",
    "dialogTitle": "Clear All History?",
    "dialogMessage": "This action permanently deletes all saved history records and cannot be undone.",
    "result1": "Failed to load history. {error}",
    "result2": "No history yet.",
    "result3": "No search results",
    "result4": "No data found.",
    "tips": "Fuzzy match across titles and URLs. Refine with field filters:",
    "tip1": "title contains “example”",
    "tip2": "pages from “example.com”",
    "tip3": "on 2024/01/01",
    "tip4": "within 2024/01/01–2025/12/31",
    "tip5": "before 2024/01/01",
    "tip6": "after 2024/01/01",
    "tip7": "visited exactly 3 times",
    "tip8": "visited less than 3 times",
    "tip9": "visited more than 3 times"
  },
  "form": {
    "editor": "Editor",
    "partition": "Session Isolation",
    "name": "Name",
    "url": "URL",
    "small": "Small",
    "medium": "Medium",
    "large": "Large",
    "icon": "Icon",
    "inputElement": "Input Element",
    "sendElement": "Send Element",
    "cssSelector": "CSS Selector",
    "lightMode": "Light Mode",
    "darkMode": "Dark Mode",
    "customIcon": "Custom Icon",
    "linkIcon": "Link Icon",
    "dirIcon": "Folder Icon",
    "dirOpenIcon": "Folder Open Icon",
    "selectUA": "Select User Agent",
    "customUA": "Or enter a custom User Agent string…",
    "rawJson": "Raw JSON",
    "validation": {
      "nameRequired": "Please enter a name.",
      "urlRequired": "Please enter a URL.",
      "userAgentRequired": "Please enter a user agent string.",
      "invalidJson": "JSON is invalid.",
      "fixJsonErrors": "Please fix the JSON validation errors before saving.",
      "required": "This field is required."
    },
    "tip": {
      "agentWarning": "Security warning: Allowing web pages to access the Noi API can be dangerous."
    }
  },
  "action": {
    "name": "Action",
    "archive": "Archive",
    "back": "Back",
    "cancel": "Cancel",
    "confirm": "Confirm",
    "create": "Create",
    "delete": "Delete",
    "details": "Details",
    "edit": "Edit",
    "restore": "Restore",
    "query": "Query",
    "refresh": "Refresh",
    "rename": "Rename",
    "reset": "Reset",
    "save": "Save",
    "send": "Send",
    "use": "Use",
    "clean": "Delete from Disk",
    "enable": "Enable",
    "disable": "Disable",
    "importAsk": "Import to NoiAsk",
    "openLocales": "Open Locales Folder"
  },
  "table": {
    "active": "Active",
    "archived": "Archived",
    "color": "Color",
    "createdAt": "Created At",
    "delete": "Delete",
    "description": "Description",
    "details": "Details",
    "disabled": "Disabled",
    "enabled": "Enabled",
    "entries": "Entries",
    "fileSize": "File Size",
    "mode": "Mode",
    "status": "Status",
    "trash": "Trash",
    "unknown": "Unknown",
    "updatedAt": "Updated At",
    "usageCount": "Usage Count",
    "tagAdd": "Add TAG",
    "tagRemove": "Remove TAG",
    "visible": "Visible",
    "total": "Total",
    "locked": "Locked",
    "text": "Text",
    "sendCount": "Send Count",
    "addSource": "Add Source",
    "lastSynced": "Last Synced",
    "message": {
      "completed": "Action completed.",
      "failed": "Action failed.",
      "noData": "No data found.",
      "dataExist": "Data already exists.",
      "dataExistOrDuplicated": "All data already exists or is duplicated.",
      "failedLoad": "Failed to load data.",
      "importedCount": "Imported: {count}.",
      "skippedCount": "Skipped: {count}.",
      "deleteSelected": "Are you sure you want to delete the selected rows? This action cannot be undone.",
      "deleteItem": "Are you sure you want to delete this item? This action cannot be undone.",
      "deleteFile": "Delete this file from disk? This action cannot be undone.",
      "removeItem": "Remove this item from the list? The file will remain on disk.",
      "deleteBuiltin": "Built-in source cannot be deleted.",
      "importedAsk": "Imported to NoiAsk.",
      "deleteUseTag": "This TAG is currently in use and cannot be deleted."
    }
  },
  "dialog": {
    "appQuit": {
      "quitConfirm": "Require Quit Confirmation",
      "title": "Quit Noi now?",
      "detail": "All windows and tasks will close."
    },
    "nshQuit": {
      "title": "Close terminal?",
      "detail": "Running tasks will be terminated immediately."
    }
  },
  "settings": {
    "general": {
      "name": "General",
      "language": "Language",
      "sidebarIcon": "Sidebar Icon Size",
      "homeLink": "Home Link",
      "limit": "Query Limit",
      "cometCursor": "NoiAsk Comet Cursor",
      "cometTrail": "NoiAsk Comet Trail",
      "lockLocales": "Lock Locales Folder",
      "lockLocalesTip": "Lock the locales folder to prevent automatic updates from modifying language files. Useful for custom translations.",
      "urlMetadata": "URL Metadata",
      "sidebarAnchor": {
        "name": "Sidebar Anchor",
        "off": "Off",
        "leftTop": "Top Left",
        "leftCenter": "Center Left",
        "leftBottom": "Bottom Left",
        "rightTop": "Top Right",
        "rightCenter": "Center Right",
        "rightBottom": "Bottom Right",
        "disableWarning": "Turning this off hides the floating trigger. Only the Noi shortcut can reopen the sidebar, and shortcut conflicts with websites are common, so disabling is not recommended.",
        "disableConfirmTitle": "Disable the sidebar anchor?"
      },
      "nsh": {
        "name": "NSH (Terminal)",
        "fontFamily": "Font Family",
        "fontSize": "Font Size",
        "lineHeight": "Line Height",
        "cursorBlink": "Cursor Blink",
        "cursorStyle": "Cursor Style",
        "cursorWidth": "Cursor Width",
        "cursorInactiveStyle": "Inactive Cursor Style",
        "scrollback": "Scrollback",
        "tip": {
          "cursorWidth": "Only applies when Cursor Style is “Bar”.",
          "scrollback": "Number of rows kept in history when the terminal scrolls."
        }
      },
      "proxy": {
        "name": "Proxy",
        "rules": "Proxy Rules",
        "bypass": "Proxy Bypass Rules"
      }
    },
    "shortcuts": {
      "name": "Shortcuts",
      "noiAskPrompt": "NoiAsk Prompt: {action}",
      "noiAskPromptWithContext": "NoiAsk Prompt: {action} ({context})",
      "placeholder": "Press combo or type",
      "helpText": "Press the desired key combination, or type it in (e.g. Ctrl+Shift+X)",
      "conflict": "Shortcut already in use"
    },
    "promptSync": {
      "option": {
        "remoteJson": "Remote JSON",
        "remoteCsv": "Remote CSV",
        "localJson": "Local JSON",
        "localCsv": "Local CSV"
      },
      "filePathMissing": "Invalid file path.",
      "fileReadFailed": "Failed to read file content.",
      "fileOpenFailed": "Unable to open file picker.",
      "fileRequired": "Please select a file to sync.",
      "notFound": "Sync source not found.",
      "error": "Prompt sync error",
      "pickLocalFile": "Choose local file",
      "type": "Source Type",
      "alias": "Field Mapping",
      "upload": "Upload File",
      "dragJson": "Drag a JSON file or click to browse",
      "dragCsv": "Drag a CSV file or click to browse",
      "browseLocal": "Choose from disk"
    }
  },
  "errorPage": {
    "shared": {
      "defaultTryTips": [
        "Check your internet connection",
        "Check the proxy and firewall"
      ],
      "platform": {
        "windows": "Run Windows Network Diagnostics",
        "mac": "Run Wireless Diagnostics (macOS)"
      },
      "unknownError": "An unknown error occurred",
      "site": "this site"
    },
    "html": {
      "tryLabel": "Try:",
      "showDetails": "Show details",
      "hideDetails": "Hide details",
      "openAction": "Open",
      "reload": "Reload"
    },
    "offline": {
      "headline": "No Internet",
      "message": "You’re offline.",
      "tryTips": [
        "Check the network cables, modem, or router",
        "Reconnect to Wi-Fi or switch to a different network"
      ],
      "action": "Reload"
    },
    "network": {
      "headline": "This Site Can’t Be Reached",
      "message": "The connection to {hostname} timed out.",
      "messageFallback": "The site took too long to respond.",
      "messageByCode": {
        "ERR_CONNECTION_REFUSED": "{hostname} refused to connect.",
        "ERR_CONNECTION_REFUSED_FALLBACK": "The site refused to connect.",
        "ERR_CONNECTION_RESET": "The connection was reset.",
        "ERR_CONNECTION_TIMED_OUT": "The connection timed out.",
        "ERR_TIMED_OUT": "The connection timed out.",
        "ERR_ADDRESS_UNREACHABLE": "The address is unreachable.",
        "ERR_NETWORK_CHANGED": "Your network connection changed.",
        "ERR_CONNECTION_ABORTED": "The connection was aborted.",
        "ERR_CONNECTION_FAILED": "Failed to connect.",
        "ERR_CONNECTION_CLOSED": "The connection was closed.",
        "ERR_HTTP2_PROTOCOL_ERROR": "The connection was interrupted (HTTP/2 protocol error).",
        "ERR_QUIC_PROTOCOL_ERROR": "The connection was interrupted (QUIC protocol error)."
      },
      "tryTips": [
        "Check whether other sites open; if not, reconnect to the network",
        "Restart the router or toggle airplane mode off/on"
      ],
      "suggestions": [
        {
          "title": "Check server availability",
          "detail": "If {site} is an internal service, confirm it is online or reachable from the current network."
        },
        {
          "title": "Inspect security software",
          "detail": "Firewall, antivirus, or VPN clients can interrupt requests—temporarily pause these tools and retry."
        }
      ],
      "action": "Reload"
    },
    "dns": {
      "headline": "This Site Can’t Be Reached",
      "message": "{hostname}’s IP address could not be found.",
      "messageFallback": "The server IP address could not be found.",
      "messageByCode": {
        "ERR_NAME_NOT_RESOLVED": "{hostname}’s IP address could not be found.",
        "ERR_NAME_NOT_RESOLVED_FALLBACK": "The server IP address could not be found.",
        "ERR_NAME_RESOLUTION_FAILED": "DNS lookup failed for {hostname}.",
        "ERR_NAME_RESOLUTION_FAILED_FALLBACK": "The DNS lookup failed.",
        "ERR_DNS_TIMED_OUT": "The DNS server timed out.",
        "ERR_DNS_SERVER_FAILED": "The DNS server failed to respond.",
        "ERR_DNS_MALFORMED_RESPONSE": "The DNS server returned an invalid response."
      },
      "tryTips": [
        "Verify the web address is spelled correctly",
        "Check proxy, firewall, and DNS configuration"
      ],
      "suggestions": [
        {
          "title": "Check the web address",
          "detail": "Make sure {site} is spelled correctly. If it is, the DNS server might be temporarily unavailable."
        },
        {
          "title": "Flush DNS cache",
          "detail": "Flush the DNS cache and reload (for example, `ipconfig /flushdns` on Windows or `sudo killall -HUP mDNSResponder` on macOS)."
        }
      ],
      "action": "Reload"
    },
    "ssl": {
      "headline": "Your Connection Isn’t Private",
      "headlineSecure": "This Site Can’t Provide a Secure Connection",
      "message": "Attackers might attempt to steal information from {hostname} (for example, passwords, messages, or credit cards).",
      "messageSecure": "Noi can’t establish a secure connection to {hostname}.",
      "messageByCode": {
        "ERR_SSL_PROTOCOL_ERROR": "The site uses an invalid or unsupported SSL protocol.",
        "ERR_SSL_VERSION_OR_CIPHER_MISMATCH": "The site uses an unsupported SSL protocol or cipher.",
        "ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN": "The certificate chain does not match the pinned key.",
        "ERR_SSL_CLIENT_AUTH_CERT_NEEDED": "A client certificate is required to access this site.",
        "ERR_BAD_SSL_CLIENT_AUTH_CERT": "The client certificate is invalid or was rejected.",
        "ERR_CERT_COMMON_NAME_INVALID": "The certificate is valid for a different address.",
        "ERR_CERT_DATE_INVALID": "The certificate has expired or is not yet valid.",
        "ERR_CERT_AUTHORITY_INVALID": "The certificate is not trusted.",
        "ERR_CERT_REVOKED": "The certificate has been revoked.",
        "ERR_CERT_INVALID": "The certificate is invalid.",
        "ERR_CERT_WEAK_SIGNATURE_ALGORITHM": "The certificate uses a weak signature algorithm.",
        "ERR_CERT_WEAK_KEY": "The certificate uses a weak key.",
        "ERR_CERT_NAME_CONSTRAINT_VIOLATION": "The certificate violates name constraints.",
        "ERR_CERT_NON_UNIQUE_NAME": "The certificate is shared by multiple sites."
      },
      "suggestions": [
        {
          "title": "Check the computer’s date and time",
          "detail": "An incorrect clock can cause certificate errors."
        },
        {
          "title": "Proceed with caution",
          "detail": "Only continue if you understand the risks and trust the site."
        }
      ],
      "action": "Reload"
    },
    "proxy": {
      "headline": "Proxy Connection Failed",
      "message": "Noi attempted to reach the site through the configured proxy, but the connection did not succeed. This tab is now using a direct connection as a fallback.",
      "messageByCode": {
        "ERR_PROXY_CONNECTION_FAILED": "The proxy server refused the connection.",
        "ERR_TUNNEL_CONNECTION_FAILED": "The proxy tunnel failed.",
        "ERR_SOCKS_CONNECTION_FAILED": "The SOCKS proxy refused the connection.",
        "ERR_PROXY_AUTH_REQUESTED": "The proxy server requires authentication.",
        "ERR_PROXY_AUTH_UNSUPPORTED": "The proxy authentication method is not supported.",
        "ERR_PAC_SCRIPT_FAILED": "The proxy auto-config (PAC) script failed.",
        "ERR_NO_SUPPORTED_PROXIES": "No supported proxies were found for this request.",
        "ERR_MANDATORY_PROXY_CONFIGURATION_FAILED": "A required proxy configuration failed.",
        "ERR_PROXY_REQUIRED": "A proxy is required to access this site."
      },
      "tryTips": [
        "Confirm the proxy host, port, and authentication settings",
        "Ensure the proxy server is reachable from the current network",
        "If the organization requires the proxy, restore it and reload once it is back online"
      ],
      "suggestions": [
        {
          "title": "Review Noi proxy rules",
          "detail": "Use Noi settings to confirm the proxy rules and bypass list match this network.",
          "actionLabel": "Open Noi settings"
        },
        {
          "title": "Retry with proxy later",
          "detail": "When the proxy becomes available again, reload to switch back from direct mode."
        }
      ],
      "action": "Reload in direct mode"
    },
    "blocked": {
      "headline": "This Page Has Been Blocked",
      "message": "The request was blocked by an extension or security policy.",
      "messageByCode": {
        "ERR_BLOCKED_BY_CLIENT": "The request was blocked by a client or extension.",
        "ERR_BLOCKED_BY_RESPONSE": "The response was blocked by the site or a policy.",
        "ERR_CLEARTEXT_NOT_PERMITTED": "The site requires a secure (HTTPS) connection.",
        "ERR_NETWORK_ACCESS_DENIED": "Network access is blocked by policy."
      },
      "tryTips": [
        "Disable extensions or content blockers and reload",
        "Check firewall and antivirus configuration"
      ],
      "suggestions": [
        {
          "title": "Disable extensions or content blockers",
          "detail": "Extensions such as ad or tracker blockers might prevent the request—temporarily turn them off and retry."
        },
        {
          "title": "Check site policy",
          "detail": "The response may be blocked by X-Frame-Options or Content Security Policy."
        }
      ],
      "action": "Reload"
    },
    "client": {
      "headline": "This Page Isn’t Working",
      "message": "The site returned an invalid response.",
      "messageByCode": {
        "ERR_EMPTY_RESPONSE": "{hostname} sent an invalid or empty response.",
        "ERR_EMPTY_RESPONSE_FALLBACK": "The site sent an invalid or empty response.",
        "ERR_FILE_NOT_FOUND": "The file was not found.",
        "ERR_FILE_ACCESS_DENIED": "Access to the file was denied.",
        "ERR_HTTP_RESPONSE_CODE_FAILURE": "The server responded with an error.",
        "ERR_TOO_MANY_REDIRECTS": "The page isn’t redirecting properly.",
        "ERR_INVALID_RESPONSE": "The site sent an invalid response.",
        "ERR_INVALID_CHUNKED_ENCODING": "The site sent an invalid response.",
        "ERR_INCOMPLETE_CHUNKED_ENCODING": "The site sent an incomplete response.",
        "ERR_CONTENT_LENGTH_MISMATCH": "The site sent an invalid response.",
        "ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH": "The site sent an invalid response.",
        "ERR_CACHE_MISS": "The request needs to be resubmitted.",
        "ERR_INVALID_URL": "The web address is invalid.",
        "ERR_DISALLOWED_URL_SCHEME": "This URL scheme is not allowed.",
        "ERR_UNKNOWN_URL_SCHEME": "This URL scheme is not supported.",
        "ERR_UNSAFE_PORT": "This port is blocked for security reasons.",
        "ERR_INVALID_REDIRECT": "The site returned an invalid redirect.",
        "ERR_UNSAFE_REDIRECT": "The site attempted an unsafe redirect.",
        "ERR_RESPONSE_HEADERS_TOO_BIG": "The site returned too much data in response headers.",
        "ERR_METHOD_NOT_SUPPORTED": "The request method is not supported."
      },
      "tryTips": [
        "Reload the page",
        "Clear the browser cache or stored site data"
      ],
      "suggestions": [
        {
          "title": "Clear site data",
          "detail": "Remove cookies and cached files for this site, then reload."
        },
        {
          "title": "Report to the site owner",
          "detail": "If the problem persists, contact the site administrator with the error code shown below."
        }
      ],
      "action": "Reload"
    },
    "unknown": {
      "headline": "This Page Isn’t Working",
      "message": "An unexpected error occurred ({code}).",
      "tryTips": [
        "Reload the page",
        "If the issue continues, capture the error code and contact the site administrator or support team"
      ],
      "action": "Reload"
    }
  }
}


================================================
FILE: locales/es/app.json
================================================
{
  "language": "Español",
  "engines": "Motores de búsqueda",
  "version": "Versión",
  "doc": "Documentación",
  "sponsor": "Patrocinador",
  "website": "Sitio web",
  "menu": {
    "name": "Menú",
    "about": "Acerca de Noi",
    "hide": "Ocultar Noi",
    "hideOthers": "Ocultar otras",
    "quit": "Salir de Noi",
    "unhide": "Mostrar todo",
    "noiHotkey": "Atajo de Noi",
    "noiAskHotkey": "Atajo de NoiAsk",
    "sidebar": "Barra lateral",
    "checkUpdates": "Buscar actualizaciones…",
    "settings": "Configuración",
    "stayOnTop": "Siempre en primer plano",
    "services": "Servicios",
    "newTabSidePanel": "Nueva pestaña en el panel lateral",
    "newTabMain": "Nueva pestaña en la ventana principal",
    "bordless": "Ventana sin bordes",
    "theme": {
      "name": "Tema",
      "system": "Sistema",
      "light": "Claro",
      "dark": "Oscuro",
      "style": "Estilo del tema"
    },
    "find": {
      "name": "Buscar",
      "next": "Buscar siguiente",
      "previous": "Buscar anterior",
      "jumpToSelection": "Ir a la selección"
    },
    "edit": {
      "name": "Editar",
      "undo": "Deshacer",
      "redo": "Rehacer",
      "cut": "Cortar",
      "copy": "Copiar",
      "paste": "Pegar",
      "pasteAndMatchStyle": "Pegar y adaptar estilo",
      "delete": "Eliminar",
      "selectAll": "Seleccionar todo"
    },
    "tab": {
      "openDefault": "Abrir en el navegador predeterminado",
      "addSidebarTemp": "Agregar a la barra lateral (TempLink)",
      "copyUrl": "Copiar URL",
      "copyUrlMd": "Copiar URL como Markdown"
    },
    "help": {
      "name": "Ayuda",
      "feedback": "Comentarios"
    }
  },
  "session": {
    "clearCurrent": "Borrar datos de sesión",
    "clearAll": "Borrar todos los datos de sesión",
    "clearRemovedSites": "Borrar datos de sitios eliminados",
    "confirmCurrent": "¿Borrar los datos del sitio «{target}»? Esto eliminará las cookies y el almacenamiento de esta sesión.",
    "confirmAll": "¿Borrar los datos del sitio de todas las sesiones? Esto puede cerrar tu sesión en algunos sitios.",
    "confirmRemovedSites": "¿Eliminar los datos del sitio de {count, plural, one {# sesión} other {# sesiones}} de sitios que ya no están en tu índice?",
    "resultNoRemovedSites": "No se encontraron datos en caché de sitios eliminados.",
    "helpRemovedSites": "Las sesiones de sitios eliminados son cookies y almacenamiento en caché que quedan después de eliminar esos sitios del índice."
  },
  "view": {
    "name": "Ver",
    "tabs": "Pestañas de Noi",
    "spaces": "{count, plural, one {Espacio de Noi} other {Espacios de Noi}}",
    "toolbar": "Barra de herramientas de Noi",
    "markdown": "Markdown",
    "minibar": "Minibarra",
    "manageSpaces": "Gestionar espacios",
    "reload": "Recargar",
    "goBack": "Atrás",
    "goForward": "Adelante",
    "zoom": "Zoom",
    "actualSize": "Tamaño real",
    "zoomIn": "Acercar",
    "zoomOut": "Alejar",
    "devTools": "Herramientas de desarrollador",
    "newTab": "Nueva pestaña",
    "newTabPlaceholder": "{hasEngine, select, true {Buscar con {engine} o introducir URL…} other {Buscar o introducir URL…}}",
    "closeTab": "Cerrar pestaña",
    "closeOtherTabs": "Cerrar otras pestañas",
    "mute": "Silenciar",
    "unmute": "Activar sonido",
    "incognito": "Incógnito",
    "sidePanel": "Panel lateral",
    "newFolder": "Nueva carpeta",
    "addLink": "Agregar enlace",
    "mainWindow": "Ventana principal",
    "switchMainTab": "Cambiar a la pestaña principal",
    "switchSideTab": "Cambiar a la pestaña del panel lateral",
    "newFile": "Nuevo archivo",
    "bookmark": "Marcador",
    "bookmarkTab": "Marcar esta pestaña",
    "copyUrlMetadata": "Copiar metadatos de URL",
    "removeNoiView": "Quitar de NoiView",
    "addNoiView": "Agregar a NoiView",
    "openNewWindow": "Abrir en nueva ventana",
    "openSidePanel": "Abrir en el panel lateral",
    "pin": "Fijar",
    "unpin": "Desfijar",
    "lockLink": "Bloquear enlace",
    "unlockLink": "Desbloquear enlace",
    "buttonHighlight": "Resaltado de botones de la barra de título"
  },
  "window": {
    "close": "Cerrar",
    "goMain": "Ir a la ventana principal",
    "dialog": "Ventana de diálogo",
    "drag": "Arrastrar para mover",
    "minimize": "Minimizar",
    "maximize": "Maximizar",
    "restore": "Restaurar"
  },
  "ask": {
    "prompts": "{count, plural, one {Prompt} other {Prompts}}",
    "semver": "SemVer",
    "tag": "TAG",
    "log": "LOG",
    "sync": "Sincronizar",
    "manageSemVer": "Administrar SemVer",
    "manageLog": "Administrar LOG",
    "addPrompt": "Agregar Prompt",
    "lockPrompt": "Bloquear Prompt",
    "unlockPrompt": "Desbloquear Prompt",
    "copyPrompt": "Copiar Prompt",
    "deletePrompt": "Eliminar Prompt",
    "filterTags": "Filtrar TAG",
    "filterRule": "Regla de filtro",
    "filterLockPrompts": "Filtro: Prompts bloqueados"
  },
  "history": {
    "name": "Historial",
    "clearAll": "Borrar todo el historial",
    "refresh": "Actualizar historial",
    "remove": "Quitar del historial",
    "search": "Buscar en el historial",
    "searchClear": "Borrar búsqueda",
    "searchFound": "{hasQ, select, true {{count, plural, =0 {No hay resultados de búsqueda para «{q}»} one {Se encontró # resultado de búsqueda para «{q}»} other {Se encontraron # resultados de búsqueda para «{q}»}}} other {{count, plural, =0 {No hay resultados} one {Se encontró # resultado} other {Se encontraron # resultados}}}}",
    "moreThisSite": "Más de este sitio",
    "dialogTitle": "¿Borrar todo el historial?",
    "dialogMessage": "Esta acción elimina permanentemente todos los registros del historial guardados y no se puede deshacer.",
    "result1": "No se pudo cargar el historial. {error}",
    "result2": "Aún no hay historial.",
    "result3": "Sin resultados de búsqueda",
    "result4": "No se encontraron datos.",
    "tips": "Coincidencia aproximada en títulos y URL. Afina con filtros de campo:",
    "tip1": "el título contiene «example»",
    "tip2": "páginas de «example.com»",
    "tip3": "el 2024/01/01",
    "tip4": "entre 2024/01/01–2025/12/31",
    "tip5": "antes del 2024/01/01",
    "tip6": "después del 2024/01/01",
    "tip7": "visitado exactamente 3 veces",
    "tip8": "visitado menos de 3 veces",
    "tip9": "visitado más de 3 veces"
  },
  "form": {
    "editor": "Editor",
    "partition": "Aislamiento de sesión",
    "name": "Nombre",
    "url": "URL",
    "small": "Pequeño",
    "medium": "Mediano",
    "large": "Grande",
    "icon": "Icono",
    "inputElement": "Elemento de entrada",
    "sendElement": "Elemento de envío",
    "cssSelector": "Selector CSS",
    "lightMode": "Modo claro",
    "darkMode": "Modo oscuro",
    "customIcon": "Icono personalizado",
    "linkIcon": "Icono de enlace",
    "dirIcon": "Icono de carpeta",
    "dirOpenIcon": "Icono de carpeta abierta",
    "selectUA": "Seleccionar User Agent",
    "customUA": "O introduce una cadena de User Agent personalizada…",
    "rawJson": "JSON sin procesar",
    "validation": {
      "nameRequired": "Introduce un nombre.",
      "urlRequired": "Introduce una URL.",
      "userAgentRequired": "Introduce una cadena de User Agent.",
      "invalidJson": "El JSON no es válido.",
      "fixJsonErrors": "Corrige los errores de validación del JSON antes de guardar.",
      "required": "Este campo es obligatorio."
    },
    "tip": {
      "agentWarning": "Advertencia de seguridad: permitir que páginas web accedan a la API de Noi puede ser peligroso."
    }
  },
  "action": {
    "name": "Acción",
    "archive": "Archivar",
    "back": "Atrás",
    "cancel": "Cancelar",
    "confirm": "Confirmar",
    "create": "Crear",
    "delete": "Eliminar",
    "details": "Detalles",
    "edit": "Editar",
    "restore": "Restaurar",
    "query": "Consulta",
    "refresh": "Actualizar",
    "rename": "Renombrar",
    "reset": "Restablecer",
    "save": "Guardar",
    "send": "Enviar",
    "use": "Usar",
    "clean": "Eliminar del disco",
    "enable": "Habilitar",
    "disable": "Deshabilitar",
    "importAsk": "Importar a NoiAsk",
    "openLocales": "Abrir carpeta Locales"
  },
  "table": {
    "active": "Activo",
    "archived": "Archivado",
    "color": "Color",
    "createdAt": "Creado el",
    "delete": "Eliminar",
    "description": "Descripción",
    "details": "Detalles",
    "disabled": "Deshabilitado",
    "enabled": "Habilitado",
    "entries": "Entradas",
    "fileSize": "Tamaño de archivo",
    "mode": "Modo",
    "status": "Estado",
    "trash": "Papelera",
    "unknown": "Desconocido",
    "updatedAt": "Actualizado el",
    "usageCount": "Número de usos",
    "tagAdd": "Agregar TAG",
    "tagRemove": "Eliminar TAG",
    "visible": "Visible",
    "total": "Total",
    "locked": "Bloqueado",
    "text": "Texto",
    "sendCount": "Número de envíos",
    "addSource": "Agregar fuente",
    "lastSynced": "Última sincronización",
    "message": {
      "completed": "Acción completada.",
      "failed": "Acción fallida.",
      "noData": "No se encontraron datos.",
      "dataExist": "Los datos ya existen.",
      "dataExistOrDuplicated": "Todos los datos ya existen o están duplicados.",
      "failedLoad": "No se pudieron cargar los datos.",
      "importedCount": "Importado: {count}.",
      "skippedCount": "Omitidos: {count}.",
      "deleteSelected": "¿Seguro que quieres eliminar las filas seleccionadas? Esta acción no se puede deshacer.",
      "deleteItem": "¿Seguro que quieres eliminar este elemento? Esta acción no se puede deshacer.",
      "deleteFile": "¿Eliminar este archivo del disco? Esta acción no se puede deshacer.",
      "removeItem": "¿Quitar este elemento de la lista? El archivo permanecerá en el disco.",
      "deleteBuiltin": "La fuente integrada no se puede eliminar.",
      "importedAsk": "Importado a NoiAsk.",
      "deleteUseTag": "Este TAG está en uso y no se puede eliminar."
    }
  },
  "dialog": {
    "appQuit": {
      "quitConfirm": "Requerir confirmación al salir",
      "title": "¿Salir de Noi ahora?",
      "detail": "Se cerrarán todas las ventanas y tareas."
    },
    "nshQuit": {
      "title": "¿Cerrar terminal?",
      "detail": "Las tareas en ejecución se terminarán de inmediato."
    }
  },
  "settings": {
    "general": {
      "name": "General",
      "language": "Idioma",
      "sidebarIcon": "Tamaño del icono de la barra lateral",
      "homeLink": "Enlace de inicio",
      "limit": "Límite de consultas",
      "cometCursor": "Cursor cometa de NoiAsk",
      "cometTrail": "Estela del cometa de NoiAsk",
      "lockLocales": "Bloquear carpeta Locales",
      "lockLocalesTip": "Bloquea la carpeta Locales para evitar que las actualizaciones automáticas modifiquen los archivos de idioma. Útil para traducciones personalizadas.",
      "urlMetadata": "Metadatos de URL",
      "sidebarAnchor": {
        "name": "Ancla de la barra lateral",
        "off": "Desactivado",
        "leftTop": "Arriba a la izquierda",
        "leftCenter": "Centro a la izquierda",
        "leftBottom": "Abajo a la izquierda",
        "rightTop": "Arriba a la derecha",
        "rightCenter": "Centro a la derecha",
        "rightBottom": "Abajo a la derecha",
        "disableWarning": "Al desactivarlo se oculta el disparador flotante. Solo el atajo de Noi puede volver a abrir la barra lateral, y los conflictos con sitios web son habituales, por lo que no se recomienda desactivarlo.",
        "disableConfirmTitle": "¿Desactivar el ancla de la barra lateral?"
      },
      "nsh": {
        "name": "NSH (Terminal)",
        "fontFamily": "Familia tipográfica",
        "fontSize": "Tamaño de fuente",
        "lineHeight": "Altura de línea",
        "cursorBlink": "Parpadeo del cursor",
        "cursorStyle": "Estilo del cursor",
        "cursorWidth": "Ancho del cursor",
        "cursorInactiveStyle": "Estilo del cursor inactivo",
        "scrollback": "Historial de desplazamiento",
        "tip": {
          "cursorWidth": "Solo se aplica cuando el estilo del cursor es «Bar».",
          "scrollback": "Número de líneas que se conservan en el historial cuando el terminal se desplaza."
        }
      },
      "proxy": {
        "name": "Proxy",
        "rules": "Reglas de proxy",
        "bypass": "Reglas de exclusión de proxy"
      }
    },
    "shortcuts": {
      "name": "Atajos",
      "noiAskPrompt": "Prompt de NoiAsk: {action}",
      "noiAskPromptWithContext": "Prompt de NoiAsk: {action} ({context})",
      "placeholder": "Pulsa la combinación o escribe",
      "helpText": "Pulsa la combinación de teclas deseada o escríbela (p. ej., Ctrl+Shift+X)",
      "conflict": "El atajo ya está en uso"
    },
    "promptSync": {
      "option": {
        "remoteJson": "JSON remoto",
        "remoteCsv": "CSV remoto",
        "localJson": "JSON local",
        "localCsv": "CSV local"
      },
      "filePathMissing": "Ruta de archivo inválida.",
      "fileReadFailed": "No se pudo leer el contenido del archivo.",
      "fileOpenFailed": "No se pudo abrir el selector de archivos.",
      "fileRequired": "Selecciona un archivo para sincronizar.",
      "notFound": "No se encontró la fuente de sincronización.",
      "error": "Error de sincronización de Prompts",
      "pickLocalFile": "Elegir archivo local",
      "type": "Tipo de fuente",
      "alias": "Asignación de campos",
      "upload": "Subir archivo",
      "dragJson": "Arrastra un archivo JSON o haz clic para buscar",
      "dragCsv": "Arrastra un archivo CSV o haz clic para buscar",
      "browseLocal": "Elegir desde el disco"
    }
  },
  "errorPage": {
    "shared": {
      "defaultTryTips": [
        "Comprueba tu conexión a internet",
        "Comprueba el proxy y el cortafuegos"
      ],
      "platform": {
        "windows": "Ejecutar el diagnóstico de red de Windows",
        "mac": "Ejecutar el diagnóstico inalámbrico (macOS)"
      },
      "unknownError": "Ocurrió un error desconocido",
      "site": "este sitio"
    },
    "html": {
      "tryLabel": "Intenta:",
      "showDetails": "Mostrar detalles",
      "hideDetails": "Ocultar detalles",
      "openAction": "Abrir",
      "reload": "Recargar"
    },
    "offline": {
      "headline": "Sin Internet",
      "message": "Estás sin conexión.",
      "tryTips": [
        "Comprueba el cable de red, el módem o el router",
        "Vuelve a conectarte al Wi-Fi o cambia a otra red"
      ],
      "action": "Recargar"
    },
    "network": {
      "headline": "No se puede acceder a este sitio",
      "message": "La conexión con {hostname} agotó el tiempo de espera.",
      "messageFallback": "El sitio tardó demasiado en responder.",
      "messageByCode": {
        "ERR_CONNECTION_REFUSED": "{hostname} rechazó la conexión.",
        "ERR_CONNECTION_REFUSED_FALLBACK": "El sitio rechazó la conexión.",
        "ERR_CONNECTION_RESET": "La conexión se restableció.",
        "ERR_CONNECTION_TIMED_OUT": "La conexión agotó el tiempo de espera.",
        "ERR_TIMED_OUT": "La conexión agotó el tiempo de espera.",
        "ERR_ADDRESS_UNREACHABLE": "La dirección es inalcanzable.",
        "ERR_NETWORK_CHANGED": "Tu conexión de red cambió.",
        "ERR_CONNECTION_ABORTED": "La conexión se interrumpió.",
        "ERR_CONNECTION_FAILED": "Error al conectar.",
        "ERR_CONNECTION_CLOSED": "La conexión se cerró.",
        "ERR_HTTP2_PROTOCOL_ERROR": "La conexión se interrumpió (error de protocolo HTTP/2).",
        "ERR_QUIC_PROTOCOL_ERROR": "La conexión se interrumpió (error de protocolo QUIC)."
      },
      "tryTips": [
        "Comprueba si otros sitios se abren; si no, vuelve a conectarte a la red",
        "Reinicia el router o activa/desactiva el modo avión"
      ],
      "suggestions": [
        {
          "title": "Comprobar la disponibilidad del servidor",
          "detail": "Si {site} es un servicio interno, confirma que está en línea o accesible desde la red actual."
        },
        {
          "title": "Revisar el software de seguridad",
          "detail": "El cortafuegos, el antivirus o los clientes VPN pueden interrumpir las solicitudes: pausa temporalmente estas herramientas y vuelve a intentarlo."
        }
      ],
      "action": "Recargar"
    },
    "dns": {
      "headline": "No se puede acceder a este sitio",
      "message": "No se pudo encontrar la dirección IP de {hostname}.",
      "messageFallback": "No se pudo encontrar la dirección IP del servidor.",
      "messageByCode": {
        "ERR_NAME_NOT_RESOLVED": "No se pudo encontrar la dirección IP de {hostname}.",
        "ERR_NAME_NOT_RESOLVED_FALLBACK": "No se pudo encontrar la dirección IP del servidor.",
        "ERR_NAME_RESOLUTION_FAILED": "La búsqueda DNS falló para {hostname}.",
        "ERR_NAME_RESOLUTION_FAILED_FALLBACK": "La búsqueda DNS falló.",
        "ERR_DNS_TIMED_OUT": "El servidor DNS agotó el tiempo de espera.",
        "ERR_DNS_SERVER_FAILED": "El servidor DNS no respondió.",
        "ERR_DNS_MALFORMED_RESPONSE": "El servidor DNS devolvió una respuesta no válida."
      },
      "tryTips": [
        "Verifica que la dirección web esté bien escrita",
        "Comprueba la configuración del proxy, firewall y DNS"
      ],
      "suggestions": [
        {
          "title": "Comprobar la dirección web",
          "detail": "Asegúrate de que {site} esté bien escrito. Si lo está, el servidor DNS puede no estar disponible temporalmente."
        },
        {
          "title": "Vaciar caché DNS",
          "detail": "Vacía la caché DNS y recarga (por ejemplo, `ipconfig /flushdns` en Windows o `sudo killall -HUP mDNSResponder` en macOS)."
        }
      ],
      "action": "Recargar"
    },
    "ssl": {
      "headline": "Tu conexión no es privada",
      "headlineSecure": "Este sitio no puede proporcionar una conexión segura",
      "message": "Es posible que atacantes intenten robar información de {hostname} (por ejemplo, contraseñas, mensajes o tarjetas de crédito).",
      "messageSecure": "Noi no puede establecer una conexión segura con {hostname}.",
      "messageByCode": {
        "ERR_SSL_PROTOCOL_ERROR": "El sitio usa un protocolo SSL inválido o no compatible.",
        "ERR_SSL_VERSION_OR_CIPHER_MISMATCH": "El sitio usa un protocolo SSL o un cifrado no compatible.",
        "ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN": "La cadena de certificados no coincide con la clave anclada.",
        "ERR_SSL_CLIENT_AUTH_CERT_NEEDED": "Se requiere un certificado de cliente para acceder a este sitio.",
        "ERR_BAD_SSL_CLIENT_AUTH_CERT": "El certificado de cliente es inválido o fue rechazado.",
        "ERR_CERT_COMMON_NAME_INVALID": "El certificado es válido para una dirección diferente.",
        "ERR_CERT_DATE_INVALID": "El certificado ha caducado o aún no es válido.",
        "ERR_CERT_AUTHORITY_INVALID": "El certificado no es de confianza.",
        "ERR_CERT_REVOKED": "El certificado ha sido revocado.",
        "ERR_CERT_INVALID": "El certificado es inválido.",
        "ERR_CERT_WEAK_SIGNATURE_ALGORITHM": "El certificado usa un algoritmo de firma débil.",
        "ERR_CERT_WEAK_KEY": "El certificado usa una clave débil.",
        "ERR_CERT_NAME_CONSTRAINT_VIOLATION": "El certificado viola las restricciones de nombre.",
        "ERR_CERT_NON_UNIQUE_NAME": "El certificado está compartido por varios sitios."
      },
      "suggestions": [
        {
          "title": "Comprobar la fecha y hora del equipo",
          "detail": "Un reloj incorrecto puede causar errores de certificado."
        },
        {
          "title": "Proceder con precaución",
          "detail": "Solo continúa si entiendes los riesgos y confías en el sitio."
        }
      ],
      "action": "Recargar"
    },
    "proxy": {
      "headline": "Error de conexión con el proxy",
      "message": "Noi intentó acceder al sitio mediante el proxy configurado, pero la conexión no tuvo éxito. Esta pestaña ahora usa una conexión directa como alternativa.",
      "messageByCode": {
        "ERR_PROXY_CONNECTION_FAILED": "El servidor proxy rechazó la conexión.",
        "ERR_TUNNEL_CONNECTION_FAILED": "El túnel del proxy falló.",
        "ERR_SOCKS_CONNECTION_FAILED": "El proxy SOCKS rechazó la conexión.",
        "ERR_PROXY_AUTH_REQUESTED": "El servidor proxy requiere autenticación.",
        "ERR_PROXY_AUTH_UNSUPPORTED": "El método de autenticación del proxy no es compatible.",
        "ERR_PAC_SCRIPT_FAILED": "El script de configuración automática (PAC) del proxy falló.",
        "ERR_NO_SUPPORTED_PROXIES": "No se encontraron proxies compatibles para esta solicitud.",
        "ERR_MANDATORY_PROXY_CONFIGURATION_FAILED": "Falló una configuración de proxy obligatoria.",
        "ERR_PROXY_REQUIRED": "Se requiere un proxy para acceder a este sitio."
      },
      "tryTips": [
        "Confirma el host, el puerto y la autenticación del proxy",
        "Asegúrate de que el servidor proxy sea accesible desde la red actual",
        "Si la organización requiere el proxy, restáuralo y recarga cuando vuelva a estar en línea"
      ],
      "suggestions": [
        {
          "title": "Revisar las reglas de proxy de Noi",
          "detail": "Usa la configuración de Noi para confirmar que las reglas de proxy y la lista de exclusión coinciden con esta red.",
          "actionLabel": "Abrir la configuración de Noi"
        },
        {
          "title": "Reintentar con proxy más tarde",
          "detail": "Cuando el proxy vuelva a estar disponible, recarga para cambiar de conexión directa a proxy."
        }
      ],
      "action": "Recargar en modo directo"
    },
    "blocked": {
      "headline": "Esta página ha sido bloqueada",
      "message": "La solicitud fue bloqueada por una extensión o una política de seguridad.",
      "messageByCode": {
        "ERR_BLOCKED_BY_CLIENT": "La solicitud fue bloqueada por un cliente o una extensión.",
        "ERR_BLOCKED_BY_RESPONSE": "La respuesta fue bloqueada por el sitio o una política.",
        "ERR_CLEARTEXT_NOT_PERMITTED": "El sitio requiere una conexión segura (HTTPS).",
        "ERR_NETWORK_ACCESS_DENIED": "El acceso a la red está bloqueado por la política."
      },
      "tryTips": [
        "Desactiva extensiones o bloqueadores de contenido y recarga",
        "Comprueba la configuración del cortafuegos y el antivirus"
      ],
      "suggestions": [
        {
          "title": "Desactivar extensiones o bloqueadores de contenido",
          "detail": "Extensiones como bloqueadores de anuncios o rastreadores pueden impedir la solicitud; desactívalas temporalmente y vuelve a intentar."
        },
        {
          "title": "Comprobar la política del sitio",
          "detail": "La respuesta puede estar bloqueada por X-Frame-Options o Content Security Policy."
        }
      ],
      "action": "Recargar"
    },
    "client": {
      "headline": "Esta página no funciona",
      "message": "El sitio devolvió una respuesta inválida.",
      "messageByCode": {
        "ERR_EMPTY_RESPONSE": "{hostname} envió una respuesta inválida o vacía.",
        "ERR_EMPTY_RESPONSE_FALLBACK": "El sitio envió una respuesta inválida o vacía.",
        "ERR_FILE_NOT_FOUND": "No se encontró el archivo.",
        "ERR_FILE_ACCESS_DENIED": "Se denegó el acceso al archivo.",
        "ERR_HTTP_RESPONSE_CODE_FAILURE": "El servidor respondió con un error.",
        "ERR_TOO_MANY_REDIRECTS": "La página se está redirigiendo incorrectamente.",
        "ERR_INVALID_RESPONSE": "El sitio envió una respuesta inválida.",
        "ERR_INVALID_CHUNKED_ENCODING": "El sitio envió una respuesta inválida.",
        "ERR_INCOMPLETE_CHUNKED_ENCODING": "El sitio envió una respuesta incompleta.",
        "ERR_CONTENT_LENGTH_MISMATCH": "El sitio envió una respuesta inválida.",
        "ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH": "El sitio envió demasiados datos en los encabezados de respuesta.",
        "ERR_CACHE_MISS": "La solicitud debe reenviarse.",
        "ERR_INVALID_URL": "La dirección web es inválida.",
        "ERR_DISALLOWED_URL_SCHEME": "Este esquema de URL no está permitido.",
        "ERR_UNKNOWN_URL_SCHEME": "Este esquema de URL no es compatible.",
        "ERR_UNSAFE_PORT": "Este puerto está bloqueado por motivos de seguridad.",
        "ERR_INVALID_REDIRECT": "El sitio devolvió una redirección inválida.",
        "ERR_UNSAFE_REDIRECT": "El sitio intentó una redirección insegura.",
        "ERR_RESPONSE_HEADERS_TOO_BIG": "El sitio devolvió demasiados datos en los encabezados de respuesta.",
        "ERR_METHOD_NOT_SUPPORTED": "El método de solicitud no es compatible."
      },
      "tryTips": [
        "Recarga la página",
        "Borra la caché del navegador o los datos almacenados del sitio"
      ],
      "suggestions": [
        {
          "title": "Borrar datos del sitio",
          "detail": "Elimina cookies y archivos en caché de este sitio, y luego recarga."
        },
        {
          "title": "Informar al propietario del sitio",
          "detail": "Si el problema continúa, contacta al administrador del sitio con el código de error que aparece abajo."
        }
      ],
      "action": "Recargar"
    },
    "unknown": {
      "headline": "Esta página no funciona",
      "message": "Se produjo un error inesperado ({code}).",
      "tryTips": [
        "Recarga la página",
        "Si el problema continúa, captura el código de error y contacta al administrador del sitio o al equipo de soporte"
      ],
      "action": "Recargar"
    }
  }
}


================================================
FILE: locales/fa/app.json
================================================
{
  "language": "فارسی",
  "engines": "موتورهای جستجو",
  "version": "نسخه",
  "doc": "مستندات",
  "sponsor": "حامی",
  "website": "وب‌سایت",
  "menu": {
    "name": "منو",
    "about": "درباره Noi",
    "hide": "پنهان کردن Noi",
    "hideOthers": "پنهان کردن سایر برنامه‌ها",
    "quit": "خروج از Noi",
    "unhide": "نمایش همه",
    "noiHotkey": "میانبر Noi",
    "noiAskHotkey": "میانبر NoiAsk",
    "sidebar": "نوار کناری",
    "checkUpdates": "بررسی به‌روزرسانی‌ها…",
    "settings": "تنظیمات",
    "stayOnTop": "همیشه در بالا",
    "services": "سرویس‌ها",
    "newTabSidePanel": "تب جدید در پنل کناری",
    "newTabMain": "تب جدید در پنجره اصلی",
    "bordless": "پنجره بدون حاشیه",
    "theme": {
      "name": "تم",
      "system": "مطابق سیستم",
      "light": "روشن",
      "dark": "تیره",
      "style": "سبک تم"
    },
    "find": {
      "name": "جستجو",
      "next": "یافتن بعدی",
      "previous": "یافتن قبلی",
      "jumpToSelection": "رفتن به مورد انتخاب‌شده"
    },
    "edit": {
      "name": "ویرایش",
      "undo": "واگرد",
      "redo": "انجام دوباره",
      "cut": "برش",
      "copy": "کپی",
      "paste": "جای‌گذاری",
      "pasteAndMatchStyle": "جای‌گذاری با تطبیق سبک",
      "delete": "حذف",
      "selectAll": "انتخاب همه"
    },
    "tab": {
      "openDefault": "باز کردن در مرورگر پیش‌فرض",
      "addSidebarTemp": "افزودن به نوار کناری (TempLink)",
      "copyUrl": "کپی URL",
      "copyUrlMd": "کپی URL به‌صورت Markdown"
    },
    "help": {
      "name": "راهنما",
      "feedback": "بازخورد"
    }
  },
  "session": {
    "clearCurrent": "پاک کردن داده‌های نشست",
    "clearAll": "پاک کردن همه داده‌های نشست",
    "clearRemovedSites": "پاک کردن داده‌های سایت‌های حذف‌شده",
    "confirmCurrent": "داده‌های سایت «{target}» پاک شود؟ این کار کوکی‌ها و ذخیره‌سازی این نشست را حذف می‌کند.",
    "confirmAll": "داده‌های سایت برای همه نشست‌ها پاک شود؟ این کار ممکن است شما را از برخی سایت‌ها خارج کند.",
    "confirmRemovedSites": "داده‌های سایت برای {count, plural, one {# نشست} other {# نشست}} از سایت‌هایی که دیگر در فهرست شما نیستند حذف شود؟",
    "resultNoRemovedSites": "داده‌های کش‌شده برای سایت‌های حذف‌شده یافت نشد.",
    "helpRemovedSites": "نشست‌های سایت‌های حذف‌شده، کوکی‌ها و ذخیره‌سازی کش‌شده‌ای هستند که پس از حذف آن سایت‌ها از فهرست باقی می‌مانند."
  },
  "view": {
    "name": "نمایش",
    "tabs": "تب‌های Noi",
    "spaces": "{count, plural, one {فضای Noi} other {فضاهای Noi}}",
    "toolbar": "نوار ابزار Noi",
    "markdown": "Markdown",
    "minibar": "نوار کوچک",
    "manageSpaces": "مدیریت فضاها",
    "reload": "بارگذاری مجدد",
    "goBack": "بازگشت",
    "goForward": "رفتن به جلو",
    "zoom": "بزرگ‌نمایی",
    "actualSize": "اندازه واقعی",
    "zoomIn": "بزرگ‌نمایی +",
    "zoomOut": "کوچک‌نمایی −",
    "devTools": "ابزارهای توسعه‌دهنده",
    "newTab": "تب جدید",
    "newTabPlaceholder": "{hasEngine, select, true {با {engine} جستجو کنید یا URL وارد کنید…} other {جستجو کنید یا URL وارد کنید…}}",
    "closeTab": "بستن تب",
    "closeOtherTabs": "بستن تب‌های دیگر",
    "mute": "بی‌صدا",
    "unmute": "رفع بی‌صدا",
    "incognito": "حالت ناشناس",
    "sidePanel": "پنل کناری",
    "newFolder": "پوشه جدید",
    "addLink": "افزودن پیوند",
    "mainWindow": "پنجره اصلی",
    "switchMainTab": "تغییر به تب اصلی",
    "switchSideTab": "تغییر به تب پنل کناری",
    "newFile": "فایل جدید",
    "bookmark": "نشانک",
    "bookmarkTab": "نشانک‌گذاری این تب",
    "copyUrlMetadata": "کپی فراداده URL",
    "removeNoiView": "حذف از NoiView",
    "addNoiView": "افزودن به NoiView",
    "openNewWindow": "باز کردن در پنجره جدید",
    "openSidePanel": "باز کردن در پنل کناری",
    "pin": "سنجاق‌کردن",
    "unpin": "برداشتن سنجاق",
    "lockLink": "قفل کردن پیوند",
    "unlockLink": "باز کردن قفل پیوند",
    "buttonHighlight": "برجسته‌کردن دکمه‌های نوار عنوان"
  },
  "window": {
    "close": "بستن",
    "goMain": "رفتن به پنجره اصلی",
    "dialog": "پنجره گفت‌وگو",
    "drag": "برای جابه‌جایی بکشید",
    "minimize": "کوچک‌سازی",
    "maximize": "بزرگ‌سازی",
    "restore": "بازگردانی"
  },
  "ask": {
    "prompts": "{count, plural, one {پرامپت} other {پرامپت‌ها}}",
    "semver": "SemVer",
    "tag": "TAG",
    "log": "LOG",
    "sync": "همگام‌سازی",
    "manageSemVer": "مدیریت SemVer",
    "manageLog": "مدیریت LOG",
    "addPrompt": "افزودن پرامپت",
    "lockPrompt": "قفل کردن پرامپت",
    "unlockPrompt": "باز کردن قفل پرامپت",
    "copyPrompt": "کپی پرامپت",
    "deletePrompt": "حذف پرامپت",
    "filterTags": "فیلتر TAG",
    "filterRule": "قانون فیلتر",
    "filterLockPrompts": "فیلتر: پرامپت‌های قفل‌شده"
  },
  "history": {
    "name": "تاریخچه",
    "clearAll": "پاک کردن کل تاریخچه",
    "refresh": "تازه‌سازی تاریخچه",
    "remove": "حذف از تاریخچه",
    "search": "جستجو در تاریخچه",
    "searchClear": "پاک کردن جستجو",
    "searchFound": "{hasQ, select, true {{count, plural, =0 {هیچ نتیجه‌ای برای «{q}» یافت نشد} one {# نتیجه برای «{q}» یافت شد} other {# نتیجه برای «{q}» یافت شد}}} other {{count, plural, =0 {نتیجه‌ای یافت نشد} one {# نتیجه یافت شد} other {# نتیجه یافت شد}}}}",
    "moreThisSite": "موارد بیشتر از این سایت",
    "dialogTitle": "پاک کردن کل تاریخچه؟",
    "dialogMessage": "این اقدام همه رکوردهای تاریخچه ذخیره‌شده را برای همیشه حذف می‌کند و قابل بازگشت نیست.",
    "result1": "بارگذاری تاریخچه ناموفق بود. {error}",
    "result2": "هنوز تاریخچه‌ای وجود ندارد.",
    "result3": "نتیجه‌ای یافت نشد",
    "result4": "داده‌ای یافت نشد.",
    "tips": "تطبیق فازی روی عنوان‌ها و URLها. با فیلترهای فیلد دقیق‌تر کنید:",
    "tip1": "عنوان شامل «example» است",
    "tip2": "صفحات از «example.com»",
    "tip3": "در تاریخ 2024/01/01",
    "tip4": "بین 2024/01/01–2025/12/31",
    "tip5": "قبل از 2024/01/01",
    "tip6": "بعد از 2024/01/01",
    "tip7": "دقیقاً 3 بار بازدید شده",
    "tip8": "کمتر از 3 بار بازدید شده",
    "tip9": "بیش از 3 بار بازدید شده"
  },
  "form": {
    "editor": "ویرایشگر",
    "partition": "ایزوله‌سازی نشست",
    "name": "نام",
    "url": "URL",
    "small": "کوچک",
    "medium": "متوسط",
    "large": "بزرگ",
    "icon": "آیکون",
    "inputElement": "عنصر ورودی",
    "sendElement": "عنصر ارسال",
    "cssSelector": "انتخابگر CSS",
    "lightMode": "حالت روشن",
    "darkMode": "حالت تیره",
    "customIcon": "آیکون سفارشی",
    "linkIcon": "آیکون پیوند",
    "dirIcon": "آیکون پوشه",
    "dirOpenIcon": "آیکون پوشه باز",
    "selectUA": "انتخاب User Agent",
    "customUA": "یا رشته User Agent سفارشی را وارد کنید…",
    "rawJson": "Raw JSON",
    "validation": {
      "nameRequired": "لطفاً یک نام وارد کنید.",
      "urlRequired": "لطفاً یک URL وارد کنید.",
      "userAgentRequired": "لطفاً یک رشته User Agent وارد کنید.",
      "invalidJson": "JSON نامعتبر است.",
      "fixJsonErrors": "لطفاً قبل از ذخیره، خطاهای اعتبارسنجی JSON را برطرف کنید.",
      "required": "این فیلد الزامی است."
    },
    "tip": {
      "agentWarning": "هشدار امنیتی: اجازه دادن به صفحات وب برای دسترسی به API Noi می‌تواند خطرناک باشد."
    }
  },
  "action": {
    "name": "اقدام",
    "archive": "بایگانی",
    "back": "بازگشت",
    "cancel": "لغو",
    "confirm": "تأیید",
    "create": "ایجاد",
    "delete": "حذف",
    "details": "جزئیات",
    "edit": "ویرایش",
    "restore": "بازیابی",
    "query": "پرس‌وجو",
    "refresh": "تازه‌سازی",
    "rename": "تغییر نام",
    "reset": "بازنشانی",
    "save": "ذخیره",
    "send": "ارسال",
    "use": "استفاده",
    "clean": "حذف از دیسک",
    "enable": "فعال",
    "disable": "غیرفعال",
    "importAsk": "وارد کردن به NoiAsk",
    "openLocales": "باز کردن پوشه Locales"
  },
  "table": {
    "active": "فعال",
    "archived": "بایگانی‌شده",
    "color": "رنگ",
    "createdAt": "تاریخ ایجاد",
    "delete": "حذف",
    "description": "توضیحات",
    "details": "جزئیات",
    "disabled": "غیرفعال",
    "enabled": "فعال",
    "entries": "ورودی‌ها",
    "fileSize": "اندازه فایل",
    "mode": "حالت",
    "status": "وضعیت",
    "trash": "زباله‌دان",
    "unknown": "نامشخص",
    "updatedAt": "تاریخ به‌روزرسانی",
    "usageCount": "تعداد استفاده",
    "tagAdd": "افزودن TAG",
    "tagRemove": "حذف TAG",
    "visible": "نمایان",
    "total": "جمع",
    "locked": "قفل‌شده",
    "text": "متن",
    "sendCount": "تعداد ارسال",
    "addSource": "افزودن منبع",
    "lastSynced": "آخرین همگام‌سازی",
    "message": {
      "completed": "اقدام انجام شد.",
      "failed": "اقدام ناموفق بود.",
      "noData": "داده‌ای یافت نشد.",
      "dataExist": "داده از قبل وجود دارد.",
      "dataExistOrDuplicated": "همه داده‌ها از قبل وجود دارند یا تکراری هستند.",
      "failedLoad": "بارگذاری داده‌ها ناموفق بود.",
      "importedCount": "وارد شد: {count}.",
      "skippedCount": "رد شد: {count}.",
      "deleteSelected": "آیا مطمئنید می‌خواهید ردیف‌های انتخاب‌شده را حذف کنید؟ این اقدام قابل بازگشت نیست.",
      "deleteItem": "آیا مطمئنید می‌خواهید این مورد را حذف کنید؟ این اقدام قابل بازگشت نیست.",
      "deleteFile": "این فایل را از دیسک حذف می‌کنید؟ این اقدام قابل بازگشت نیست.",
      "removeItem": "این مورد را از فهرست حذف می‌کنید؟ فایل روی دیسک باقی می‌ماند.",
      "deleteBuiltin": "منبع داخلی قابل حذف نیست.",
      "importedAsk": "به NoiAsk وارد شد.",
      "deleteUseTag": "این TAG اکنون در حال استفاده است و قابل حذف نیست."
    }
  },
  "dialog": {
    "appQuit": {
      "quitConfirm": "نیاز به تأیید هنگام خروج",
      "title": "اکنون از Noi خارج شوید؟",
      "detail": "همه پنجره‌ها و وظایف بسته خواهند شد."
    },
    "nshQuit": {
      "title": "ترمینال بسته شود؟",
      "detail": "وظایف در حال اجرا فوراً خاتمه می‌یابند."
    }
  },
  "settings": {
    "general": {
      "name": "عمومی",
      "language": "زبان",
      "sidebarIcon": "اندازه آیکون نوار کناری",
      "homeLink": "پیوند خانه",
      "limit": "حد پرس‌وجو",
      "cometCursor": "نشانگر دنباله‌دار NoiAsk",
      "cometTrail": "دنباله دنباله‌دار NoiAsk",
      "lockLocales": "قفل کردن پوشه Locales",
      "lockLocalesTip": "پوشه Locales را قفل کنید تا به‌روزرسانی‌های خودکار فایل‌های زبان را تغییر ندهند. برای ترجمه‌های سفارشی مفید است.",
      "urlMetadata": "فراداده URL",
      "sidebarAnchor": {
        "name": "لنگر نوار کناری",
        "off": "خاموش",
        "leftTop": "بالا-چپ",
        "leftCenter": "وسط-چپ",
        "leftBottom": "پایین-چپ",
        "rightTop": "بالا-راست",
        "rightCenter": "وسط-راست",
        "rightBottom": "پایین-راست",
        "disableWarning": "خاموش کردن این گزینه محرک شناور را پنهان می‌کند. تنها میانبر Noi می‌تواند نوار کناری را دوباره باز کند و تداخل میانبرها با وب‌سایت‌ها رایج است، بنابراین خاموش کردن توصیه نمی‌شود.",
        "disableConfirmTitle": "لنگر نوار کناری غیرفعال شود؟"
      },
      "nsh": {
        "name": "NSH (ترمینال)",
        "fontFamily": "خانواده فونت",
        "fontSize": "اندازه فونت",
        "lineHeight": "ارتفاع خط",
        "cursorBlink": "چشمک‌زدن نشانگر",
        "cursorStyle": "سبک نشانگر",
        "cursorWidth": "عرض نشانگر",
        "cursorInactiveStyle": "سبک نشانگر غیرفعال",
        "scrollback": "بازگشت پیمایش",
        "tip": {
          "cursorWidth": "فقط زمانی اعمال می‌شود که سبک نشانگر «Bar» باشد.",
          "scrollback": "تعداد ردیف‌هایی که هنگام اسکرول ترمینال در تاریخچه نگه داشته می‌شوند."
        }
      },
      "proxy": {
        "name": "پراکسی",
        "rules": "قوانین پراکسی",
        "bypass": "قوانین دور زدن پراکسی"
      }
    },
    "shortcuts": {
      "name": "میانبرها",
      "noiAskPrompt": "پرامپت NoiAsk: {action}",
      "noiAskPromptWithContext": "پرامپت NoiAsk: {action} ({context})",
      "placeholder": "کلید ترکیبی را بزنید یا تایپ کنید",
      "helpText": "ترکیب کلید موردنظر را فشار دهید یا تایپ کنید (مثلاً Ctrl+Shift+X)",
      "conflict": "میانبر قبلاً استفاده شده است"
    },
    "promptSync": {
      "option": {
        "remoteJson": "JSON راه‌دور",
        "remoteCsv": "CSV راه‌دور",
        "localJson": "JSON محلی",
        "localCsv": "CSV محلی"
      },
      "filePathMissing": "مسیر فایل نامعتبر است.",
      "fileReadFailed": "خواندن محتوای فایل ناموفق بود.",
      "fileOpenFailed": "باز کردن انتخاب‌گر فایل ممکن نشد.",
      "fileRequired": "لطفاً یک فایل برای همگام‌سازی انتخاب کنید.",
      "notFound": "منبع همگام‌سازی یافت نشد.",
      "error": "خطای همگام‌سازی پرامپت",
      "pickLocalFile": "انتخاب فایل محلی",
      "type": "نوع منبع",
      "alias": "نگاشت فیلد",
      "upload": "آپلود فایل",
      "dragJson": "یک فایل JSON را بکشید یا برای مرور کلیک کنید",
      "dragCsv": "یک فایل CSV را بکشید یا برای مرور کلیک کنید",
      "browseLocal": "انتخاب از دیسک"
    }
  },
  "errorPage": {
    "shared": {
      "defaultTryTips": [
        "اتصال اینترنت خود را بررسی کنید",
        "پراکسی و فایروال را بررسی کنید"
      ],
      "platform": {
        "windows": "عیب‌یابی شبکه ویندوز را اجرا کنید",
        "mac": "عیب‌یابی بی‌سیم را اجرا کنید (macOS)"
      },
      "unknownError": "خطای نامعلومی رخ داد",
      "site": "این سایت"
    },
    "html": {
      "tryLabel": "امتحان کنید:",
      "showDetails": "نمایش جزئیات",
      "hideDetails": "پنهان کردن جزئیات",
      "openAction": "باز کردن",
      "reload": "بارگذاری مجدد"
    },
    "offline": {
      "headline": "بدون اینترنت",
      "message": "شما آفلاین هستید.",
      "tryTips": [
        "کابل شبکه، مودم یا روتر را بررسی کنید",
        "به Wi-Fi دوباره وصل شوید یا به شبکه دیگری بروید"
      ],
      "action": "بارگذاری مجدد"
    },
    "network": {
      "headline": "این سایت قابل دسترسی نیست",
      "message": "مهلت اتصال به {hostname} به پایان رسید.",
      "messageFallback": "پاسخ‌گویی سایت خیلی طول کشید.",
      "messageByCode": {
        "ERR_CONNECTION_REFUSED": "{hostname} اتصال را رد کرد.",
        "ERR_CONNECTION_REFUSED_FALLBACK": "سایت اتصال را رد کرد.",
        "ERR_CONNECTION_RESET": "اتصال بازنشانی شد.",
        "ERR_CONNECTION_TIMED_OUT": "زمان اتصال به پایان رسید.",
        "ERR_TIMED_OUT": "زمان اتصال به پایان رسید.",
        "ERR_ADDRESS_UNREACHABLE": "نشانی قابل دسترسی نیست.",
        "ERR_NETWORK_CHANGED": "اتصال شبکه شما تغییر کرد.",
        "ERR_CONNECTION_ABORTED": "اتصال قطع شد.",
        "ERR_CONNECTION_FAILED": "اتصال ناموفق بود.",
        "ERR_CONNECTION_CLOSED": "اتصال بسته شد.",
        "ERR_HTTP2_PROTOCOL_ERROR": "اتصال قطع شد (خطای پروتکل HTTP/2).",
        "ERR_QUIC_PROTOCOL_ERROR": "اتصال قطع شد (خطای پروتکل QUIC)."
      },
      "tryTips": [
        "بررسی کنید آیا سایت‌های دیگر باز می‌شوند؛ اگر نه، دوباره به شبکه وصل شوید",
        "روتر را ری‌استارت کنید یا حالت پرواز را خاموش/روشن کنید"
      ],
      "suggestions": [
        {
          "title": "بررسی دسترس‌پذیری سرور",
          "detail": "اگر {site} یک سرویس داخلی است، تأیید کنید آنلاین است یا از شبکه فعلی قابل دسترسی است."
        },
        {
          "title": "بررسی نرم‌افزارهای امنیتی",
          "detail": "فایروال، آنتی‌ویروس یا کلاینت‌های VPN ممکن است درخواست‌ها را قطع کنند — این ابزارها را موقتاً متوقف کنید و دوباره تلاش کنید."
        }
      ],
      "action": "بارگذاری مجدد"
    },
    "dns": {
      "headline": "این سایت قابل دسترسی نیست",
      "message": "نشانی IP {hostname} پیدا نشد.",
      "messageFallback": "نشانی IP سرور پیدا نشد.",
      "messageByCode": {
        "ERR_NAME_NOT_RESOLVED": "IP مربوط به {hostname} پیدا نشد.",
        "ERR_NAME_NOT_RESOLVED_FALLBACK": "IP سرور پیدا نشد.",
        "ERR_NAME_RESOLUTION_FAILED": "جستجوی DNS برای {hostname} ناموفق بود.",
        "ERR_NAME_RESOLUTION_FAILED_FALLBACK": "جستجوی DNS ناموفق بود.",
        "ERR_DNS_TIMED_OUT": "DNS سرور زمان‌بر شد.",
        "ERR_DNS_SERVER_FAILED": "DNS سرور پاسخ نداد.",
        "ERR_DNS_MALFORMED_RESPONSE": "DNS سرور پاسخ نامعتبر داد."
      },
      "tryTips": [
        "درست بودن آدرس وب را بررسی کنید",
        "تنظیمات پراکسی، فایروال و DNS را بررسی کنید"
      ],
      "suggestions": [
        {
          "title": "بررسی آدرس وب",
          "detail": "مطمئن شوید {site} درست نوشته شده است. اگر درست است، DNS سرور ممکن است موقتاً در دسترس نباشد."
        },
        {
          "title": "پاک‌سازی کش DNS",
          "detail": "کش DNS را پاک کنید و دوباره بارگذاری کنید (مثلاً `ipconfig /flushdns` در ویندوز یا `sudo killall -HUP mDNSResponder` در macOS)."
        }
      ],
      "action": "بارگذاری مجدد"
    },
    "ssl": {
      "headline": "اتصال شما خصوصی نیست",
      "headlineSecure": "این سایت نمی‌تواند اتصال امن ارائه دهد",
      "message": "ممکن است مهاجمان تلاش کنند اطلاعات را از {hostname} سرقت کنند (مثلاً گذرواژه‌ها، پیام‌ها یا کارت‌های اعتباری).",
      "messageSecure": "Noi نمی‌تواند اتصال امنی به {hostname} برقرار کند.",
      "messageByCode": {
        "ERR_SSL_PROTOCOL_ERROR": "سایت از پروتکل SSL نامعتبر یا پشتیبانی‌نشده استفاده می‌کند.",
        "ERR_SSL_VERSION_OR_CIPHER_MISMATCH": "سایت از پروتکل SSL یا رمزنگاری پشتیبانی‌نشده استفاده می‌کند.",
        "ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN": "زنجیره گواهی با کلید پین‌شده مطابقت ندارد.",
        "ERR_SSL_CLIENT_AUTH_CERT_NEEDED": "برای دسترسی به این سایت، گواهی کلاینت لازم است.",
        "ERR_BAD_SSL_CLIENT_AUTH_CERT": "گواهی کلاینت نامعتبر است یا رد شده است.",
        "ERR_CERT_COMMON_NAME_INVALID": "گواهی برای آدرس دیگری معتبر است.",
        "ERR_CERT_DATE_INVALID": "گواهی منقضی شده است یا هنوز معتبر نیست.",
        "ERR_CERT_AUTHORITY_INVALID": "گواهی قابل اعتماد نیست.",
        "ERR_CERT_REVOKED": "گواهی باطل شده است.",
        "ERR_CERT_INVALID": "گواهی نامعتبر است.",
        "ERR_CERT_WEAK_SIGNATURE_ALGORITHM": "گواهی از الگوریتم امضای ضعیف استفاده می‌کند.",
        "ERR_CERT_WEAK_KEY": "گواهی از کلید ضعیف استفاده می‌کند.",
        "ERR_CERT_NAME_CONSTRAINT_VIOLATION": "گواهی محدودیت‌های نام را نقض می‌کند.",
        "ERR_CERT_NON_UNIQUE_NAME": "گواهی بین چند سایت مشترک است."
      },
      "suggestions": [
        {
          "title": "تاریخ و زمان رایانه را بررسی کنید",
          "detail": "ساعت نادرست می‌تواند باعث خطای گواهی شود."
        },
        {
          "title": "با احتیاط ادامه دهید",
          "detail": "فقط اگر خطرات را درک می‌کنید و به سایت اعتماد دارید ادامه دهید."
        }
      ],
      "action": "بارگذاری مجدد"
    },
    "proxy": {
      "headline": "اتصال پراکسی ناموفق بود",
      "message": "Noi تلاش کرد از طریق پراکسی تنظیم‌شده به سایت برسد، اما اتصال برقرار نشد. این تب اکنون از اتصال مستقیم به‌عنوان جایگزین استفاده می‌کند.",
      "messageByCode": {
        "ERR_PROXY_CONNECTION_FAILED": "پراکسی‌سرور اتصال را رد کرد.",
        "ERR_TUNNEL_CONNECTION_FAILED": "تونل پراکسی ناموفق بود.",
        "ERR_SOCKS_CONNECTION_FAILED": "پراکسی SOCKS اتصال را رد کرد.",
        "ERR_PROXY_AUTH_REQUESTED": "پراکسی‌سرور نیاز به احراز هویت دارد.",
        "ERR_PROXY_AUTH_UNSUPPORTED": "روش احراز هویت پراکسی پشتیبانی نمی‌شود.",
        "ERR_PAC_SCRIPT_FAILED": "اسکریپت خودکار پراکسی (PAC) ناموفق بود.",
        "ERR_NO_SUPPORTED_PROXIES": "هیچ پراکسی پشتیبانی‌شده‌ای برای این درخواست یافت نشد.",
        "ERR_MANDATORY_PROXY_CONFIGURATION_FAILED": "پیکربندی اجباری پراکسی ناموفق بود.",
        "ERR_PROXY_REQUIRED": "برای دسترسی به این سایت پراکسی لازم است."
      },
      "tryTips": [
        "میزبان، پورت و احراز هویت پراکسی را تأیید کنید",
        "اطمینان حاصل کنید پراکسی‌سرور از شبکه فعلی قابل دسترسی است",
        "اگر سازمان به پراکسی نیاز دارد، آن را بازیابی کنید و پس از در دسترس شدن دوباره بارگذاری کنید"
      ],
      "suggestions": [
        {
          "title": "بررسی قوانین پراکسی Noi",
          "detail": "از تنظیمات Noi برای تأیید تطابق قوانین پراکسی و فهرست بای‌پس با این شبکه استفاده کنید.",
          "actionLabel": "باز کردن تنظیمات Noi"
        },
        {
          "title": "بعداً با پراکسی دوباره تلاش کنید",
          "detail": "وقتی پراکسی دوباره در دسترس شد، برای جابه‌جایی از حالت مستقیم به حالت پراکسی بارگذاری مجدد کنید."
        }
      ],
      "action": "بارگذاری مجدد در حالت مستقیم"
    },
    "blocked": {
      "headline": "این صفحه مسدود شده است",
      "message": "درخواست توسط یک افزونه یا سیاست امنیتی مسدود شد.",
      "messageByCode": {
        "ERR_BLOCKED_BY_CLIENT": "درخواست توسط یک کلاینت یا افزونه مسدود شد.",
        "ERR_BLOCKED_BY_RESPONSE": "پاسخ توسط سایت یا سیاست مسدود شد.",
        "ERR_CLEARTEXT_NOT_PERMITTED": "سایت به اتصال امن (HTTPS) نیاز دارد.",
        "ERR_NETWORK_ACCESS_DENIED": "دسترسی شبکه توسط سیاست مسدود شده است."
      },
      "tryTips": [
        "افزونه‌ها یا مسدودکننده‌های محتوا را غیرفعال کنید و دوباره بارگذاری کنید",
        "پیکربندی فایروال و آنتی‌ویروس را بررسی کنید"
      ],
      "suggestions": [
        {
          "title": "غیرفعال‌سازی افزونه‌ها یا مسدودکننده‌های محتوا",
          "detail": "افزونه‌هایی مانند مسدودکننده‌های تبلیغات یا ردیاب‌ها ممکن است درخواست را مسدود کنند — موقتاً غیرفعال کنید و دوباره تلاش کنید."
        },
        {
          "title": "بررسی سیاست سایت",
          "detail": "پاسخ ممکن است توسط X-Frame-Options یا Content Security Policy مسدود شده باشد."
        }
      ],
      "action": "بارگذاری مجدد"
    },
    "client": {
      "headline": "این صفحه کار نمی‌کند",
      "message": "سایت پاسخ نامعتبر بازگرداند.",
      "messageByCode": {
        "ERR_EMPTY_RESPONSE": "{hostname} پاسخ نامعتبر یا خالی ارسال کرد.",
        "ERR_EMPTY_RESPONSE_FALLBACK": "سایت پاسخ نامعتبر یا خالی ارسال کرد.",
        "ERR_FILE_NOT_FOUND": "فایل یافت نشد.",
        "ERR_FILE_ACCESS_DENIED": "دسترسی به فایل رد شد.",
        "ERR_HTTP_RESPONSE_CODE_FAILURE": "سرور با خطا پاسخ داد.",
        "ERR_TOO_MANY_REDIRECTS": "صفحه به‌درستی هدایت مجدد نمی‌شود.",
        "ERR_INVALID_RESPONSE": "سایت پاسخ نامعتبر ارسال کرد.",
        "ERR_INVALID_CHUNKED_ENCODING": "سایت پاسخ نامعتبر ارسال کرد.",
        "ERR_INCOMPLETE_CHUNKED_ENCODING": "سایت پاسخ ناقص ارسال کرد.",
        "ERR_CONTENT_LENGTH_MISMATCH": "سایت پاسخ نامعتبر ارسال کرد.",
        "ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH": "سایت داده‌های زیادی در سربرگ‌های پاسخ ارسال کرد.",
        "ERR_CACHE_MISS": "درخواست باید دوباره ارسال شود.",
        "ERR_INVALID_URL": "آدرس وب نامعتبر است.",
        "ERR_DISALLOWED_URL_SCHEME": "این طرح URL مجاز نیست.",
        "ERR_UNKNOWN_URL_SCHEME": "این طرح URL پشتیبانی نمی‌شود.",
        "ERR_UNSAFE_PORT": "این پورت به دلایل امنیتی مسدود شده است.",
        "ERR_INVALID_REDIRECT": "سایت هدایت مجدد نامعتبر برگرداند.",
        "ERR_UNSAFE_REDIRECT": "سایت تلاش به هدایت مجدد ناامن کرد.",
        "ERR_RESPONSE_HEADERS_TOO_BIG": "سایت داده‌های زیادی در سربرگ‌های پاسخ ارسال کرد.",
        "ERR_METHOD_NOT_SUPPORTED": "روش درخواست پشتیبانی نمی‌شود."
      },
      "tryTips": [
        "صفحه را دوباره بارگذاری کنید",
        "کش مرورگر یا داده‌های ذخیره‌شده سایت را پاک کنید"
      ],
      "suggestions": [
        {
          "title": "پاک کردن داده‌های سایت",
          "detail": "کوکی‌ها و فایل‌های کش‌شده این سایت را حذف کنید و سپس دوباره بارگذاری کنید."
        },
        {
          "title": "گزارش به صاحب سایت",
          "detail": "اگر مشکل ادامه داشت، با کد خطای نمایش‌داده‌شده در پایین با مدیر سایت تماس بگیرید."
        }
      ],
      "action": "بارگذاری مجدد"
    },
    "unknown": {
      "headline": "این صفحه کار نمی‌کند",
      "message": "خطای غیرمنتظره‌ای رخ داد ({code}).",
      "tryTips": [
        "صفحه را دوباره بارگذاری کنید",
        "اگر مشکل ادامه داشت، کد خطا را یادداشت کرده و با مدیر سایت یا تیم پشتیبانی تماس بگیرید"
      ],
      "action": "بارگذاری مجدد"
    }
  }
}


================================================
FILE: locales/fr/app.json
================================================
{
  "language": "Français",
  "engines": "Moteurs de recherche",
  "version": "Version",
  "doc": "Documentation",
  "sponsor": "Sponsor",
  "website": "Site web",
  "menu": {
    "name": "Menu",
    "about": "À propos de Noi",
    "hide": "Masquer Noi",
    "hideOthers": "Masquer les autres",
    "quit": "Quitter Noi",
    "unhide": "Tout afficher",
    "noiHotkey": "Raccourci Noi",
    "noiAskHotkey": "Raccourci NoiAsk",
    "sidebar": "Barre latérale",
    "checkUpdates": "Rechercher des mises à jour…",
    "settings": "Paramètres",
    "stayOnTop": "Toujours au premier plan",
    "services": "Services",
    "newTabSidePanel": "Nouvel onglet dans le panneau latéral",
    "newTabMain": "Nouvel onglet dans la fenêtre principale",
    "bordless": "Fenêtre sans bordure",
    "theme": {
      "name": "Thème",
      "system": "Selon le système",
      "light": "Clair",
      "dark": "Sombre",
      "style": "Style du thème"
    },
    "find": {
      "name": "Rechercher",
      "next": "Rechercher le suivant",
      "previous": "Rechercher le précédent",
      "jumpToSelection": "Aller à la sélection"
    },
    "edit": {
      "name": "Édition",
      "undo": "Annuler",
      "redo": "Rétablir",
      "cut": "Couper",
      "copy": "Copier",
      "paste": "Coller",
      "pasteAndMatchStyle": "Coller en adaptant le style",
      "delete": "Supprimer",
      "selectAll": "Tout sélectionner"
    },
    "tab": {
      "openDefault": "Ouvrir dans le navigateur par défaut",
      "addSidebarTemp": "Ajouter à la barre latérale (TempLink)",
      "copyUrl": "Copier l’URL",
      "copyUrlMd": "Copier l’URL en Markdown"
    },
    "help": {
      "name": "Aide",
      "feedback": "Commentaires…"
    }
  },
  "session": {
    "clearCurrent": "Effacer les données de session",
    "clearAll": "Effacer toutes les données de session",
    "clearRemovedSites": "Effacer les données des sites supprimés",
    "confirmCurrent": "Effacer les données du site « {target} » ? Cela supprimera les cookies et le stockage pour cette session.",
    "confirmAll": "Effacer les données du site pour toutes les sessions ? Cela peut vous déconnecter de certains sites.",
    "confirmRemovedSites": "Supprimer les données de site pour {count, plural, one {# session} other {# sessions}} des sites qui ne sont plus dans votre index ?",
    "resultNoRemovedSites": "Aucune donnée en cache trouvée pour les sites supprimés.",
    "helpRemovedSites": "Les sessions des sites supprimés sont des cookies et du stockage mis en cache laissés après la suppression de ces sites de votre index."
  },
  "view": {
    "name": "Affichage",
    "tabs": "Onglets Noi",
    "spaces": "{count, plural, one {Espace Noi} other {Espaces Noi}}",
    "toolbar": "Barre d’outils Noi",
    "markdown": "Markdown",
    "minibar": "Mini-barre",
    "manageSpaces": "Gérer les espaces",
    "reload": "Recharger",
    "goBack": "Retour",
    "goForward": "Avancer",
    "zoom": "Zoom",
    "actualSize": "Taille réelle",
    "zoomIn": "Zoom avant",
    "zoomOut": "Zoom arrière",
    "devTools": "Outils de développement",
    "newTab": "Nouvel onglet",
    "newTabPlaceholder": "{hasEngine, select, true {Rechercher avec {engine} ou saisir une URL…} other {Rechercher ou saisir une URL…}}",
    "closeTab": "Fermer l’onglet",
    "closeOtherTabs": "Fermer les autres onglets",
    "mute": "Couper le son",
    "unmute": "Rétablir le son",
    "incognito": "Navigation privée",
    "sidePanel": "Panneau latéral",
    "newFolder": "Nouveau dossier",
    "addLink": "Ajouter un lien",
    "mainWindow": "Fenêtre principale",
    "switchMainTab": "Passer à l’onglet principal",
    "switchSideTab": "Passer à l’onglet du panneau latéral",
    "newFile": "Nouveau fichier",
    "bookmark": "Favoris",
    "bookmarkTab": "Ajouter cet onglet aux favoris",
    "copyUrlMetadata": "Copier les métadonnées de l’URL",
    "removeNoiView": "Retirer de NoiView",
    "addNoiView": "Ajouter à NoiView",
    "openNewWindow": "Ouvrir dans une nouvelle fenêtre",
    "openSidePanel": "Ouvrir dans le panneau latéral",
    "pin": "Épingler",
    "unpin": "Désépingler",
    "lockLink": "Verrouiller le lien",
    "unlockLink": "Déverrouiller le lien",
    "buttonHighlight": "Mettre en surbrillance les boutons de la barre de titre"
  },
  "window": {
    "close": "Fermer",
    "goMain": "Aller à la fenêtre principale",
    "dialog": "Fenêtre de dialogue",
    "drag": "Glisser pour déplacer",
    "minimize": "Réduire",
    "maximize": "Agrandir",
    "restore": "Restaurer"
  },
  "ask": {
    "prompts": "{count, plural, one {Prompt} other {Prompts}}",
    "semver": "SemVer",
    "tag": "TAG",
    "log": "LOG",
    "sync": "Synchroniser",
    "manageSemVer": "Gérer SemVer",
    "manageLog": "Gérer LOG",
    "addPrompt": "Ajouter un prompt",
    "lockPrompt": "Verrouiller le prompt",
    "unlockPrompt": "Déverrouiller le prompt",
    "copyPrompt": "Copier le prompt",
    "deletePrompt": "Supprimer le prompt",
    "filterTags": "Filtrer TAG",
    "filterRule": "Règle de filtrage",
    "filterLockPrompts": "Filtre : invites verrouillées"
  },
  "history": {
    "name": "Historique",
    "clearAll": "Effacer tout l’historique",
    "refresh": "Actualiser l’historique",
    "remove": "Retirer de l’historique",
    "search": "Rechercher dans l’historique",
    "searchClear": "Effacer la recherche",
    "searchFound": "{hasQ, select, true {{count, plural, =0 {Aucun résultat de recherche pour « {q} »} one {# résultat de recherche trouvé pour « {q} »} other {# résultats de recherche trouvés pour « {q} »}}} other {{count, plural, =0 {Aucun résultat} one {# résultat trouvé} other {# résultats trouvés}}}}",
    "moreThisSite": "Plus sur ce site",
    "dialogTitle": "Effacer tout l’historique ?",
    "dialogMessage": "Cette action supprime définitivement tous les enregistrements d’historique enregistrés et ne peut pas être annulée.",
    "result1": "Échec du chargement de l’historique : {error}",
    "result2": "Aucun historique pour le moment.",
    "result3": "Aucun résultat de recherche",
    "result4": "Aucune donnée trouvée.",
    "tips": "Correspondance floue dans les titres et les URL. Affinez avec des filtres de champ :",
    "tip1": "le titre contient « example »",
    "tip2": "pages de « example.com »",
    "tip3": "le 2024/01/01",
    "tip4": "entre 2024/01/01–2025/12/31",
    "tip5": "avant le 2024/01/01",
    "tip6": "après le 2024/01/01",
    "tip7": "visité exactement 3 fois",
    "tip8": "visité moins de 3 fois",
    "tip9": "visité plus de 3 fois"
  },
  "form": {
    "editor": "Éditeur",
    "partition": "Isolation de session",
    "name": "Nom",
    "url": "URL",
    "small": "Petit",
    "medium": "Moyen",
    "large": "Grand",
    "icon": "Icône",
    "inputElement": "Élément de saisie",
    "sendElement": "Élément d’envoi",
    "cssSelector": "Sélecteur CSS",
    "lightMode": "Mode clair",
    "darkMode": "Mode sombre",
    "customIcon": "Icône personnalisée",
    "linkIcon": "Icône de lien",
    "dirIcon": "Icône de dossier",
    "dirOpenIcon": "Icône de dossier ouvert",
    "selectUA": "Sélectionner un User Agent",
    "customUA": "Ou saisir une chaîne User Agent personnalisée…",
    "rawJson": "JSON brut",
    "validation": {
      "nameRequired": "Veuillez saisir un nom.",
      "urlRequired": "Veuillez saisir une URL.",
      "userAgentRequired": "Veuillez saisir une chaîne User Agent.",
      "invalidJson": "Le JSON est invalide.",
      "fixJsonErrors": "Veuillez corriger les erreurs de validation JSON avant d’enregistrer.",
      "required": "Ce champ est obligatoire."
    },
    "tip": {
      "agentWarning": "Avertissement de sécurité : autoriser les pages web à accéder à l’API Noi peut être dangereux."
    }
  },
  "action": {
    "name": "Action",
    "archive": "Archiver",
    "back": "Retour",
    "cancel": "Annuler",
    "confirm": "Confirmer",
    "create": "Créer",
    "delete": "Supprimer",
    "details": "Détails",
    "edit": "Modifier",
    "restore": "Restaurer",
    "query": "Requête",
    "refresh": "Actualiser",
    "rename": "Renommer",
    "reset": "Réinitialiser",
    "save": "Enregistrer",
    "send": "Envoyer",
    "use": "Utiliser",
    "clean": "Supprimer du disque",
    "enable": "Activer",
    "disable": "Désactiver",
    "importAsk": "Importer dans NoiAsk",
    "openLocales": "Ouvrir le dossier Locales"
  },
  "table": {
    "active": "Actif",
    "archived": "Archivé",
    "color": "Couleur",
    "createdAt": "Créé le",
    "delete": "Supprimer",
    "description": "Description",
    "details": "Détails",
    "disabled": "Désactivé",
    "enabled": "Activé",
    "entries": "Entrées",
    "fileSize": "Taille du fichier",
    "mode": "Mode",
    "status": "Statut",
    "trash": "Corbeille",
    "unknown": "Inconnu",
    "updatedAt": "Mis à jour le",
    "usageCount": "Nombre d’utilisations",
    "tagAdd": "Ajouter un TAG",
    "tagRemove": "Retirer un TAG",
    "visible": "Visible",
    "total": "Total",
    "locked": "Verrouillé",
    "text": "Texte",
    "sendCount": "Nombre d’envois",
    "addSource": "Ajouter une source",
    "lastSynced": "Dernière synchronisation",
    "message": {
      "completed": "Action terminée.",
      "failed": "Action échouée.",
      "noData": "Aucune donnée trouvée.",
      "dataExist": "Les données existent déjà.",
      "dataExistOrDuplicated": "Toutes les données existent déjà ou sont dupliquées.",
      "failedLoad": "Échec du chargement des données.",
      "importedCount": "Importé : {count}.",
      "skippedCount": "Ignoré : {count}.",
      "deleteSelected": "Voulez-vous vraiment supprimer les lignes sélectionnées ? Cette action est irréversible.",
      "deleteItem": "Voulez-vous vraiment supprimer cet élément ? Cette action est irréversible.",
      "deleteFile": "Supprimer ce fichier du disque ? Cette action est irréversible.",
      "removeItem": "Retirer cet élément de la liste ? Le fichier restera sur le disque.",
      "deleteBuiltin": "La source intégrée ne peut pas être supprimée.",
      "importedAsk": "Importé dans NoiAsk.",
      "deleteUseTag": "Ce TAG est actuellement utilisé et ne peut pas être supprimé."
    }
  },
  "dialog": {
    "appQuit": {
      "quitConfirm": "Exiger une confirmation de sortie",
      "title": "Quitter Noi maintenant ?",
      "detail": "Toutes les fenêtres et tâches seront fermées."
    },
    "nshQuit": {
      "title": "Fermer le terminal ?",
      "detail": "Les tâches en cours seront arrêtées immédiatement."
    }
  },
  "settings": {
    "general": {
      "name": "Général",
      "language": "Langue",
      "sidebarIcon": "Taille de l’icône de la barre latérale",
      "homeLink": "Lien d’accueil",
      "limit": "Limite de requêtes",
      "cometCursor": "Curseur comète NoiAsk",
      "cometTrail": "Traînée de comète NoiAsk",
      "lockLocales": "Verrouiller le dossier Locales",
      "lockLocalesTip": "Verrouillez le dossier Locales pour empêcher les mises à jour automatiques de modifier les fichiers de langue. Utile pour les traductions personnalisées.",
      "urlMetadata": "Métadonnées de l’URL",
      "sidebarAnchor": {
        "name": "Ancre de la barre latérale",
        "off": "Désactivé",
        "leftTop": "En haut à gauche",
        "leftCenter": "Centre gauche",
        "leftBottom": "En bas à gauche",
        "rightTop": "En haut à droite",
        "rightCenter": "Centre droit",
        "rightBottom": "En bas à droite",
        "disableWarning": "La désactivation masque le déclencheur flottant. Seul le raccourci Noi peut rouvrir la barre latérale, et les conflits de raccourcis avec les sites web sont fréquents, donc il n’est pas recommandé de le désactiver.",
        "disableConfirmTitle": "Désactiver l’ancre de la barre latérale ?"
      },
      "nsh": {
        "name": "NSH (Terminal)",
        "fontFamily": "Famille de polices",
        "fontSize": "Taille de police",
        "lineHeight": "Hauteur de ligne",
        "cursorBlink": "Clignotement du curseur",
        "cursorStyle": "Style du curseur",
        "cursorWidth": "Largeur du curseur",
        "cursorInactiveStyle": "Style du curseur inactif",
        "scrollback": "Historique de défilement",
        "tip": {
          "cursorWidth": "S’applique uniquement lorsque le style du curseur est « Bar ».",
          "scrollback": "Nombre de lignes conservées dans l’historique lorsque le terminal défile."
        }
      },
      "proxy": {
        "name": "Proxy",
        "rules": "Règles du proxy",
        "bypass": "Règles de contournement du proxy"
      }
    },
    "shortcuts": {
      "name": "Raccourcis",
      "noiAskPrompt": "Prompt NoiAsk : {action}",
      "noiAskPromptWithContext": "Prompt NoiAsk : {action} ({context})",
      "placeholder": "Appuyez sur la combinaison ou saisissez",
      "helpText": "Appuyez sur la combinaison de touches souhaitée ou saisissez-la (p. ex. Ctrl+Shift+X)",
      "conflict": "Le raccourci est déjà utilisé"
    },
    "promptSync": {
      "option": {
        "remo
Download .txt
gitextract_lr274k0q/

├── .github/
│   └── workflows/
│       └── deploy.yml
├── .gitignore
├── README.md
├── configs/
│   ├── noi.conf.json
│   ├── noi.space.json
│   └── noi_awesome.json
├── extensions/
│   └── README.md
├── locales/
│   ├── README.md
│   ├── ar/
│   │   └── app.json
│   ├── bn/
│   │   └── app.json
│   ├── de/
│   │   └── app.json
│   ├── en/
│   │   └── app.json
│   ├── es/
│   │   └── app.json
│   ├── fa/
│   │   └── app.json
│   ├── fr/
│   │   └── app.json
│   ├── hi/
│   │   └── app.json
│   ├── hu/
│   │   └── app.json
│   ├── id/
│   │   └── app.json
│   ├── it/
│   │   └── app.json
│   ├── ja/
│   │   └── app.json
│   ├── ko/
│   │   └── app.json
│   ├── ms/
│   │   └── app.json
│   ├── noi.lang.json
│   ├── pa/
│   │   └── app.json
│   ├── pl/
│   │   └── app.json
│   ├── pt/
│   │   └── app.json
│   ├── ru/
│   │   └── app.json
│   ├── sw/
│   │   └── app.json
│   ├── th/
│   │   └── app.json
│   ├── tr/
│   │   └── app.json
│   ├── ur/
│   │   └── app.json
│   ├── vi/
│   │   └── app.json
│   ├── zh-Hans/
│   │   └── app.json
│   └── zh-Hant/
│       └── app.json
├── prompts/
│   └── awesome-chatgpt.zh.json
├── resources/
│   └── README.md
└── website/
    ├── babel.config.js
    ├── blog/
    │   ├── authors.yml
    │   └── noi.md
    ├── docs/
    │   └── index.md
    ├── docusaurus.config.ts
    ├── i18n/
    │   └── zh-CN/
    │       └── docusaurus-plugin-content-blog/
    │           └── noi.md
    ├── package.json
    ├── sidebars.ts
    ├── src/
    │   ├── css/
    │   │   └── custom.css
    │   └── pages/
    │       └── index.tsx
    ├── static/
    │   ├── .nojekyll
    │   └── CNAME
    ├── tailwind.config.js
    └── tsconfig.json
Download .txt
SYMBOL INDEX (2 symbols across 2 files)

FILE: website/docusaurus.config.ts
  method configurePostCss (line 37) | configurePostCss(postcssOptions) {

FILE: website/src/pages/index.tsx
  function Home (line 7) | function Home(): JSX.Element {
Condensed preview — 50 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (725K chars).
[
  {
    "path": ".github/workflows/deploy.yml",
    "chars": 1199,
    "preview": "name: GitHub Pages\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - '.github/workflows/deploy.yml'\n      - 'we"
  },
  {
    "path": ".gitignore",
    "chars": 258,
    "preview": "# Dependencies\nnode_modules/\n\n# Production\nbuild/\n\n# Generated files\n.docusaurus\n.cache-loader\n\n# Misc\n.DS_Store\n.env.lo"
  },
  {
    "path": "README.md",
    "chars": 1916,
    "preview": "<p align=\"center\">\n  <img width=\"160\" src=\"https://github.com/user-attachments/assets/88e98b92-2e51-4d31-a8e5-c89de1e7b0"
  },
  {
    "path": "configs/noi.conf.json",
    "chars": 28502,
    "preview": "{\n  \"language\": \"en\",\n  \"theme\": \"dark\",\n  \"theme_style\": \"haze\",\n  \"stay_on_top\": false,\n  \"auto_update\": true,\n  \"app_"
  },
  {
    "path": "configs/noi.space.json",
    "chars": 132,
    "preview": "[\n  {\n    \"id\": \"noi_awesome\",\n    \"name\": \"😎 Noi Awesome\",\n    \"theme\": \"dark\",\n    \"theme_style\": \"haze\",\n    \"active\""
  },
  {
    "path": "configs/noi_awesome.json",
    "chars": 7300,
    "preview": "[\n  {\n    \"id\": \"noi:google\",\n    \"parent\": 0,\n    \"text\": \"Google\",\n    \"url\": \"https://google.com\",\n    \"active\": fals"
  },
  {
    "path": "extensions/README.md",
    "chars": 245,
    "preview": "# Noi Extensions\n\nNote that Noi does not support the full range of Chrome extensions APIs. See Supported Extensions APIs"
  },
  {
    "path": "locales/README.md",
    "chars": 1523,
    "preview": "# Noi Localization Guide\n\n## Locale Registry\n\n- The locale list is defined in `locales/noi.lang.json`.\n- The `locales` a"
  },
  {
    "path": "locales/ar/app.json",
    "chars": 22467,
    "preview": "{\n  \"language\": \"العربية\",\n  \"engines\": \"محركات البحث\",\n  \"version\": \"الإصدار\",\n  \"doc\": \"التوثيق\",\n  \"sponsor\": \"الراعي"
  },
  {
    "path": "locales/bn/app.json",
    "chars": 23584,
    "preview": "{\n  \"language\": \"বাংলা\",\n  \"engines\": \"সার্চ ইঞ্জিনসমূহ\",\n  \"version\": \"সংস্করণ\",\n  \"doc\": \"ডকুমেন্টেশন\",\n  \"sponsor\": \""
  },
  {
    "path": "locales/de/app.json",
    "chars": 26193,
    "preview": "{\n  \"language\": \"Deutsch\",\n  \"engines\": \"Suchmaschinen\",\n  \"version\": \"Version\",\n  \"doc\": \"Dokumentation\",\n  \"sponsor\": "
  },
  {
    "path": "locales/en/app.json",
    "chars": 23150,
    "preview": "{\n  \"language\": \"English\",\n  \"engines\": \"Engines\",\n  \"version\": \"Version\",\n  \"doc\": \"Documentation\",\n  \"sponsor\": \"Spons"
  },
  {
    "path": "locales/es/app.json",
    "chars": 25462,
    "preview": "{\n  \"language\": \"Español\",\n  \"engines\": \"Motores de búsqueda\",\n  \"version\": \"Versión\",\n  \"doc\": \"Documentación\",\n  \"spon"
  },
  {
    "path": "locales/fa/app.json",
    "chars": 23148,
    "preview": "{\n  \"language\": \"فارسی\",\n  \"engines\": \"موتورهای جستجو\",\n  \"version\": \"نسخه\",\n  \"doc\": \"مستندات\",\n  \"sponsor\": \"حامی\",\n  "
  },
  {
    "path": "locales/fr/app.json",
    "chars": 25908,
    "preview": "{\n  \"language\": \"Français\",\n  \"engines\": \"Moteurs de recherche\",\n  \"version\": \"Version\",\n  \"doc\": \"Documentation\",\n  \"sp"
  },
  {
    "path": "locales/hi/app.json",
    "chars": 23508,
    "preview": "{\n  \"language\": \"हिन्दी\",\n  \"engines\": \"खोज इंजन\",\n  \"version\": \"संस्करण\",\n  \"doc\": \"दस्तावेज़\",\n  \"sponsor\": \"प्रायोजक\""
  },
  {
    "path": "locales/hu/app.json",
    "chars": 24803,
    "preview": "{\n  \"language\": \"Magyar\",\n  \"engines\": \"Keresőmotorok\",\n  \"version\": \"Verzió\",\n  \"doc\": \"Dokumentáció\",\n  \"sponsor\": \"Tá"
  },
  {
    "path": "locales/id/app.json",
    "chars": 23881,
    "preview": "{\n  \"language\": \"Bahasa Indonesia\",\n  \"engines\": \"Mesin pencari\",\n  \"version\": \"Versi\",\n  \"doc\": \"Dokumentasi\",\n  \"spons"
  },
  {
    "path": "locales/it/app.json",
    "chars": 25453,
    "preview": "{\n  \"language\": \"Italiano\",\n  \"engines\": \"Motori di ricerca\",\n  \"version\": \"Versione\",\n  \"doc\": \"Documentazione\",\n  \"spo"
  },
  {
    "path": "locales/ja/app.json",
    "chars": 18759,
    "preview": "{\n  \"language\": \"日本語\",\n  \"engines\": \"検索エンジン\",\n  \"version\": \"バージョン\",\n  \"doc\": \"ドキュメント\",\n  \"sponsor\": \"スポンサー\",\n  \"website\""
  },
  {
    "path": "locales/ko/app.json",
    "chars": 18610,
    "preview": "{\n  \"language\": \"한국어\",\n  \"engines\": \"검색 엔진\",\n  \"version\": \"버전\",\n  \"doc\": \"문서\",\n  \"sponsor\": \"스폰서\",\n  \"website\": \"웹사이트\",\n"
  },
  {
    "path": "locales/ms/app.json",
    "chars": 24001,
    "preview": "{\n  \"language\": \"Bahasa Melayu\",\n  \"engines\": \"Enjin Carian\",\n  \"version\": \"Versi\",\n  \"doc\": \"Dokumentasi\",\n  \"sponsor\":"
  },
  {
    "path": "locales/noi.lang.json",
    "chars": 1199,
    "preview": "{\n  \"name\": \"Noi Languages\",\n  \"link\": \"https://github.com/lencx/noi/blob/main/locales/noi.lang.json\",\n  \"version\": \"1.0"
  },
  {
    "path": "locales/pa/app.json",
    "chars": 22925,
    "preview": "{\n  \"language\": \"ਪੰਜਾਬੀ\",\n  \"engines\": \"ਖੋਜ ਇੰਜਣ\",\n  \"version\": \"ਵਰਜਨ\",\n  \"doc\": \"ਦਸਤਾਵੇਜ਼\",\n  \"sponsor\": \"ਸਪਾਂਸਰ\",\n  \"w"
  },
  {
    "path": "locales/pl/app.json",
    "chars": 24765,
    "preview": "{\n  \"language\": \"Polski\",\n\"engines\": \"Wyszukiwarki\",\n  \"version\": \"Wersja\",\n  \"doc\": \"Dokumentacja\",\n  \"sponsor\": \"Spons"
  },
  {
    "path": "locales/pt/app.json",
    "chars": 24863,
    "preview": "{\n  \"language\": \"Português\",\n  \"engines\": \"Motores de busca\",\n  \"version\": \"Versão\",\n  \"doc\": \"Documentação\",\n  \"sponsor"
  },
  {
    "path": "locales/ru/app.json",
    "chars": 24532,
    "preview": "{\n  \"language\": \"Русский\",\n  \"engines\": \"Поисковые системы\",\n  \"version\": \"Версия\",\n  \"doc\": \"Документация\",\n  \"sponsor\""
  },
  {
    "path": "locales/sw/app.json",
    "chars": 24396,
    "preview": "{\n  \"language\": \"Kiswahili\",\n  \"engines\": \"Injini za utafutaji\",\n  \"version\": \"Toleo\",\n  \"doc\": \"Nyaraka\",\n  \"sponsor\": "
  },
  {
    "path": "locales/th/app.json",
    "chars": 22383,
    "preview": "{\n  \"language\": \"ไทย\",\n  \"engines\": \"เครื่องมือค้นหา\",\n  \"version\": \"เวอร์ชัน\",\n  \"doc\": \"เอกสาร\",\n  \"sponsor\": \"ผู้สนับ"
  },
  {
    "path": "locales/tr/app.json",
    "chars": 24046,
    "preview": "{\n  \"language\": \"Türkçe\",\n  \"engines\": \"Arama motorları\",\n  \"version\": \"Sürüm\",\n  \"doc\": \"Dokümantasyon\",\n  \"sponsor\": \""
  },
  {
    "path": "locales/ur/app.json",
    "chars": 23185,
    "preview": "{\n  \"language\": \"اردو\",\n\"engines\": \"سرچ انجنز\",\n  \"version\": \"ورژن\",\n  \"doc\": \"دستاویزات\",\n  \"sponsor\": \"اسپانسر\",\n  \"we"
  },
  {
    "path": "locales/vi/app.json",
    "chars": 23343,
    "preview": "{\n  \"language\": \"Tiếng Việt\",\n  \"engines\": \"Công cụ tìm kiếm\",\n  \"version\": \"Phiên bản\",\n  \"doc\": \"Tài liệu\",\n  \"sponsor"
  },
  {
    "path": "locales/zh-Hans/app.json",
    "chars": 16484,
    "preview": "{\n  \"language\": \"简体中文\",\n  \"engines\": \"搜索引擎\",\n  \"version\": \"版本\",\n  \"doc\": \"文档\",\n  \"sponsor\": \"赞助\",\n  \"website\": \"官网\",\n  \""
  },
  {
    "path": "locales/zh-Hant/app.json",
    "chars": 16471,
    "preview": "{\n  \"language\": \"繁體中文\",\n  \"engines\": \"搜尋引擎\",\n  \"version\": \"版本\",\n\"doc\": \"說明文件\",\n  \"sponsor\": \"贊助\",\n  \"website\": \"官網\",\n  \""
  },
  {
    "path": "prompts/awesome-chatgpt.zh.json",
    "chars": 26679,
    "preview": "[\n  {\n    \"act\": \"担任雅思写作考官\",\n    \"prompt\": \"我希望你假定自己是雅思写作考官,根据雅思评判标准,按我给你的雅思考题和对应答案给我评分,并且按照雅思写作评分细则给出打分依据。此外,请给我详细的修改意见"
  },
  {
    "path": "resources/README.md",
    "chars": 201,
    "preview": "# Resources\n\n## PDF\n\n- [Prompt Engineering](./pdf/Google_Prompt_Engineering_v7.pdf)\n- [Gemini for Google Workspace Promp"
  },
  {
    "path": "website/babel.config.js",
    "chars": 89,
    "preview": "module.exports = {\n  presets: [require.resolve('@docusaurus/core/lib/babel/preset')],\n};\n"
  },
  {
    "path": "website/blog/authors.yml",
    "chars": 134,
    "preview": "lencx:\n  name: lencx\n  title: Web • Rust • Tauri • Electron\n  url: https://github.com/lencx\n  image_url: https://github."
  },
  {
    "path": "website/blog/noi.md",
    "chars": 99,
    "preview": "---\ntitle: Hello, Noi\nauthors: [lencx]\n---\n\n🚀 Power Your World with AI - Explore, Extend, Empower.\n"
  },
  {
    "path": "website/docs/index.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "website/docusaurus.config.ts",
    "chars": 3014,
    "preview": "import { themes as prismThemes } from 'prism-react-renderer';\nimport type { Config } from '@docusaurus/types';\nimport ty"
  },
  {
    "path": "website/i18n/zh-CN/docusaurus-plugin-content-blog/noi.md",
    "chars": 211,
    "preview": "---\ntitle: 你好, Noi\nauthors: [lencx]\n---\n\n🚀 用 AI 点亮您的世界 - 探索、扩展、赋能。\n\n- [Noi:跨平台定制化浏览器,最得力 AI 助手](https://mp.weixin.qq.com"
  },
  {
    "path": "website/package.json",
    "chars": 1260,
    "preview": "{\n  \"name\": \"website\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"docusaurus\": \"docusaurus\",\n    \"star"
  },
  {
    "path": "website/sidebars.ts",
    "chars": 778,
    "preview": "import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';\n\n/**\n * Creating a sidebar enables you to:\n - creat"
  },
  {
    "path": "website/src/css/custom.css",
    "chars": 1478,
    "preview": "/**\n * Any CSS included here will be global. The classic template\n * bundles Infima by default. Infima is a CSS framewor"
  },
  {
    "path": "website/src/pages/index.tsx",
    "chars": 3843,
    "preview": "// import Link from '@docusaurus/Link';\nimport useDocusaurusContext from '@docusaurus/useDocusaurusContext';\nimport Layo"
  },
  {
    "path": "website/static/.nojekyll",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "website/static/CNAME",
    "chars": 9,
    "preview": "noib.app\n"
  },
  {
    "path": "website/tailwind.config.js",
    "chars": 405,
    "preview": "/** @type {import('tailwindcss').Config} */\n\nmodule.exports = {\n  content: [\n    './src/**/*.{js,jsx,ts,tsx,md,mdx}',\n  "
  },
  {
    "path": "website/tsconfig.json",
    "chars": 176,
    "preview": "{\n  // This file is not used in compilation. It is here just for a nice editor experience.\n  \"extends\": \"@docusaurus/tsc"
  }
]

About this extraction

This page contains the full source code of the lencx/Noi GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 50 files (641.6 KB), approximately 220.1k tokens, and a symbol index with 2 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!