04555a96b1
- citations.php + assets/js/citations.js: new tool page for browsing the FalkorDB citation graph by title/ID, with autocomplete, action pills (cites/cited_by/implements/chain), hop-by-hop navigation, and exploration trail - advocate.js: tag graph-expanded source cards with 'via citation graph' badge - DeepResearchAgent: propagate _graph_expanded flag through normalizeCorpusChunk and top_sources serialization so it reaches the frontend - tools.css: add .dr-source-tag--graph variant (green pill) - i18n.php: register 'citations' tool in all 4 languages with CIT icon Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
513 lines
36 KiB
PHP
513 lines
36 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
function dbnToolsSupportedLanguages(): array
|
|
{
|
|
return ['en', 'no', 'uk', 'pl'];
|
|
}
|
|
|
|
function dbnToolsNormalizeUiLanguage(mixed $language): string
|
|
{
|
|
$language = strtolower(trim((string)$language));
|
|
if ($language === 'nb') {
|
|
return 'no';
|
|
}
|
|
return in_array($language, dbnToolsSupportedLanguages(), true) ? $language : 'en';
|
|
}
|
|
|
|
function dbnToolsCurrentLanguage(): string
|
|
{
|
|
if (isset($_GET['lang'])) {
|
|
$lang = dbnToolsNormalizeUiLanguage($_GET['lang']);
|
|
$_SESSION['dbn_tools_lang'] = $lang;
|
|
if (!headers_sent()) {
|
|
setcookie('dbn_tools_lang', $lang, [
|
|
'expires' => time() + 60 * 60 * 24 * 180,
|
|
'path' => '/',
|
|
'secure' => dbnToolsIsHttps(),
|
|
'httponly' => false,
|
|
'samesite' => 'Lax',
|
|
]);
|
|
}
|
|
return $lang;
|
|
}
|
|
|
|
if (!empty($_SESSION['dbn_tools_lang'])) {
|
|
return dbnToolsNormalizeUiLanguage($_SESSION['dbn_tools_lang']);
|
|
}
|
|
|
|
if (!empty($_COOKIE['dbn_tools_lang'])) {
|
|
$lang = dbnToolsNormalizeUiLanguage($_COOKIE['dbn_tools_lang']);
|
|
$_SESSION['dbn_tools_lang'] = $lang;
|
|
return $lang;
|
|
}
|
|
|
|
return 'en';
|
|
}
|
|
|
|
function dbnToolsLanguageName(string $language): string
|
|
{
|
|
return match (dbnToolsNormalizeUiLanguage($language)) {
|
|
'no' => 'Norwegian',
|
|
'uk' => 'Ukrainian',
|
|
'pl' => 'Polish',
|
|
default => 'English',
|
|
};
|
|
}
|
|
|
|
function dbnToolsLanguageLabel(string $language): string
|
|
{
|
|
return match (dbnToolsNormalizeUiLanguage($language)) {
|
|
'no' => 'NO',
|
|
'uk' => 'UK',
|
|
'pl' => 'PL',
|
|
default => 'EN',
|
|
};
|
|
}
|
|
|
|
function dbnToolsTranslations(): array
|
|
{
|
|
return [
|
|
'en' => [
|
|
'meta_title' => 'Do Better Norge - AI Legal Tools',
|
|
'brand_line' => 'Do Better Norge - tools.dobetternorge.no',
|
|
'suite_title' => 'Legal Tools',
|
|
'workspace_title' => 'Case Workbench',
|
|
'session_active' => 'Session active',
|
|
'health' => 'Health',
|
|
'sign_out' => 'Sign out',
|
|
'retention' => 'Session in memory - nothing stored by default',
|
|
'disclaimer' => 'Legal information and preparation support, not final legal advice. Pasted text and uploads are processed in memory by default.',
|
|
'manifesto_eyebrow' => 'Family rights - Norway - since 2019',
|
|
'manifesto_title' => 'They took her child in twelve minutes.',
|
|
'manifesto_sub' => 'Open a tool. Build a chronology, research the law, protect privacy, and prepare your next step with cited support.',
|
|
'stat_echr' => 'ECHR violations since 2015',
|
|
'stat_loss' => 'ECHR cases lost 2017-22',
|
|
'stat_tribunal' => 'tribunal decisions analysed',
|
|
'stat_pending' => 'pending Strasbourg cases',
|
|
'reasoning_eyebrow' => 'File - Evidence trail',
|
|
'reasoning_title' => 'Reasoning',
|
|
'waiting_title' => 'Waiting',
|
|
'waiting_text' => 'Run a tool to see interpretation, retrieval, confidence, uncertainty, and next step.',
|
|
'dashboard_eyebrow' => 'Approved tools suite',
|
|
'dashboard_title' => 'Choose a legal AI tool',
|
|
'dashboard_sub' => 'Built for families, advocates, and supporters preparing Norwegian family-rights and child-welfare cases.',
|
|
'open_tool' => 'Open tool',
|
|
'landing_kicker' => 'AI legal preparation for family-rights cases in Norway',
|
|
'landing_title' => 'Legal tools for families who need the record to make sense.',
|
|
'landing_sub' => 'Transcribe meetings, build timelines, analyze Barnevernet documents, research ECHR and Norwegian sources, and prepare cited advocacy briefs.',
|
|
'primary_access' => 'Continue with Do Better Norge / Google',
|
|
'secondary_access' => 'Sign in with Caveau account',
|
|
'member_note' => 'Use your Do Better Norge account. Google login is handled on the main site, then you return here securely.',
|
|
'email' => 'Email',
|
|
'password' => 'Password',
|
|
'sign_in' => 'Sign in',
|
|
'register' => 'Register free at dobetternorge.no',
|
|
'cause_title' => 'Evidence over outrage.',
|
|
'cause_text' => 'Every tool is designed around the same principle as the movement: document the facts, cite the law, and make the next practical step visible.',
|
|
'privacy_title' => 'Private by design',
|
|
'privacy_text' => 'Uploads are processed in memory by default. The app records only operational metadata such as tool name, latency, language, and anonymous session id.',
|
|
'source_title' => 'Sources stay visible',
|
|
'source_text' => 'Research tools keep citations, sections, source excerpts, and uncertainty notes next to the answer.',
|
|
'tools_title' => 'Launched tools',
|
|
'preview_back' => '← All tools',
|
|
'preview_what_it_does' => 'What it does',
|
|
'preview_get_access' => 'Get access',
|
|
'preview_ready_title' => 'Ready to use',
|
|
'preview_free_note' => 'Free for Do Better Norge members. Documents are processed in memory and never stored.',
|
|
'preview_other_tools' => 'Other tools',
|
|
'preview_join' => 'Not a member? Join Do Better Norge',
|
|
'preview_input_label' => 'Sample input',
|
|
'preview_output_label' => 'Sample output',
|
|
'enter_workbench' => 'Open Workbench',
|
|
'signed_in_as' => 'Signed in as',
|
|
'member_card_title' => 'Already a member?',
|
|
'member_card_note' => 'Sign in with your Do Better Norge account. Google login is handled on the main site.',
|
|
'register_card_title' => 'New to Do Better Norge?',
|
|
'register_card_note' => 'Free for families navigating Norwegian child-welfare cases.',
|
|
'register_google' => 'Register with Google',
|
|
'register_email' => 'Register with email',
|
|
],
|
|
'no' => [
|
|
'meta_title' => 'Do Better Norge - juridiske AI-verktøy',
|
|
'brand_line' => 'Do Better Norge - tools.dobetternorge.no',
|
|
'suite_title' => 'Juridiske verktøy',
|
|
'workspace_title' => 'Saksarbeidsbenk',
|
|
'session_active' => 'Økt aktiv',
|
|
'health' => 'Helse',
|
|
'sign_out' => 'Logg ut',
|
|
'retention' => 'Økt i minnet - ingenting lagres som standard',
|
|
'disclaimer' => 'Juridisk informasjon og forberedelsesstøtte, ikke endelig juridisk rådgivning. Tekst og opplastinger behandles som standard i minnet.',
|
|
'manifesto_eyebrow' => 'Familierettigheter - Norge - siden 2019',
|
|
'manifesto_title' => 'De tok barnet hennes på tolv minutter.',
|
|
'manifesto_sub' => 'Åpne et verktøy. Bygg kronologi, undersøk loven, beskytt personvern og forbered neste steg med kilder.',
|
|
'stat_echr' => 'EMD-brudd siden 2015',
|
|
'stat_loss' => 'EMD-saker tapt 2017-22',
|
|
'stat_tribunal' => 'nemndsvedtak analysert',
|
|
'stat_pending' => 'saker venter i Strasbourg',
|
|
'reasoning_eyebrow' => 'Fil - evidensspor',
|
|
'reasoning_title' => 'Resonnement',
|
|
'waiting_title' => 'Venter',
|
|
'waiting_text' => 'Kjør et verktøy for å se tolkning, kilder, tillit, usikkerhet og neste steg.',
|
|
'dashboard_eyebrow' => 'Godkjent verktøypakke',
|
|
'dashboard_title' => 'Velg et juridisk AI-verktøy',
|
|
'dashboard_sub' => 'Laget for familier, støttespillere og advokater som forbereder norske familie- og barnevernssaker.',
|
|
'open_tool' => 'Åpne verktøy',
|
|
'landing_kicker' => 'Juridisk AI-forberedelse for familierettssaker i Norge',
|
|
'landing_title' => 'Juridiske verktøy for familier som trenger orden i saksbildet.',
|
|
'landing_sub' => 'Transkriber møter, bygg tidslinjer, analyser barnevernsdokumenter, undersøk EMD og norske kilder, og forbered kildebelagte prosesskriv.',
|
|
'primary_access' => 'Fortsett med Do Better Norge / Google',
|
|
'secondary_access' => 'Logg inn med Caveau-konto',
|
|
'member_note' => 'Bruk Do Better Norge-kontoen din. Google-pålogging skjer på hovedsiden, så kommer du trygt tilbake hit.',
|
|
'email' => 'E-post',
|
|
'password' => 'Passord',
|
|
'sign_in' => 'Logg inn',
|
|
'register' => 'Registrer deg gratis på dobetternorge.no',
|
|
'cause_title' => 'Bevis fremfor raseri.',
|
|
'cause_text' => 'Hvert verktøy følger samme prinsipp som bevegelsen: dokumenter fakta, vis lovgrunnlaget og gjør neste praktiske steg tydelig.',
|
|
'privacy_title' => 'Personvern først',
|
|
'privacy_text' => 'Opplastinger behandles som standard i minnet. Appen lagrer bare operasjonelle metadata som verktøy, tidsbruk, språk og anonym økt-id.',
|
|
'source_title' => 'Kildene er synlige',
|
|
'source_text' => 'Forskningsverktøyene holder sitater, paragrafer, kildeutdrag og usikkerhet ved siden av svaret.',
|
|
'tools_title' => 'Lanserte verktøy',
|
|
'preview_back' => '← Alle verktøy',
|
|
'preview_what_it_does' => 'Hva det gjør',
|
|
'preview_get_access' => 'Få tilgang',
|
|
'preview_ready_title' => 'Klar til å bruke',
|
|
'preview_free_note' => 'Gratis for Do Better Norge-medlemmer. Dokumenter behandles i minnet og lagres aldri.',
|
|
'preview_other_tools' => 'Andre verktøy',
|
|
'preview_join' => 'Ikke medlem? Bli med i Do Better Norge',
|
|
'preview_input_label' => 'Eksempel — inndata',
|
|
'preview_output_label' => 'Eksempel — utdata',
|
|
'enter_workbench' => 'Åpne arbeidsbenk',
|
|
'signed_in_as' => 'Innlogget som',
|
|
'member_card_title' => 'Allerede medlem?',
|
|
'member_card_note' => 'Logg inn med Do Better Norge-kontoen din. Google-pålogging skjer på hovedsiden.',
|
|
'register_card_title' => 'Ny bruker?',
|
|
'register_card_note' => 'Gratis for familier i norske barnevernssaker.',
|
|
'register_google' => 'Registrer med Google',
|
|
'register_email' => 'Registrer med e-post',
|
|
],
|
|
'uk' => [
|
|
'meta_title' => 'Do Better Norge - юридичні AI інструменти',
|
|
'brand_line' => 'Do Better Norge - tools.dobetternorge.no',
|
|
'suite_title' => 'Юридичні інструменти',
|
|
'workspace_title' => 'Робочий простір справи',
|
|
'session_active' => 'Сесія активна',
|
|
'health' => 'Стан',
|
|
'sign_out' => 'Вийти',
|
|
'retention' => 'Сесія в памʼяті - за замовчуванням нічого не зберігається',
|
|
'disclaimer' => 'Юридична інформація та підтримка підготовки, не остаточна юридична порада. Текст і файли за замовчуванням обробляються в памʼяті.',
|
|
'manifesto_eyebrow' => 'Права сімʼї - Норвегія - з 2019',
|
|
'manifesto_title' => 'Її дитину забрали за дванадцять хвилин.',
|
|
'manifesto_sub' => 'Відкрийте інструмент. Побудуйте хронологію, дослідіть право, захистіть приватність і підготуйте наступний крок з джерелами.',
|
|
'stat_echr' => 'порушень ЄСПЛ з 2015',
|
|
'stat_loss' => 'справ ЄСПЛ програно 2017-22',
|
|
'stat_tribunal' => 'рішень трибуналів проаналізовано',
|
|
'stat_pending' => 'справ очікують у Страсбурзі',
|
|
'reasoning_eyebrow' => 'Файл - слід доказів',
|
|
'reasoning_title' => 'Обґрунтування',
|
|
'waiting_title' => 'Очікування',
|
|
'waiting_text' => 'Запустіть інструмент, щоб побачити тлумачення, джерела, впевненість, невизначеність і наступний крок.',
|
|
'dashboard_eyebrow' => 'Схвалений набір інструментів',
|
|
'dashboard_title' => 'Оберіть юридичний AI інструмент',
|
|
'dashboard_sub' => 'Для сімей, представників і союзників, які готують справи про сімейні права та захист дітей у Норвегії.',
|
|
'open_tool' => 'Відкрити інструмент',
|
|
'landing_kicker' => 'AI підготовка для справ про сімейні права в Норвегії',
|
|
'landing_title' => 'Юридичні інструменти для сімей, яким потрібно впорядкувати матеріали справи.',
|
|
'landing_sub' => 'Транскрибуйте зустрічі, будуйте хронології, аналізуйте документи Barnevernet, досліджуйте ЄСПЛ і норвезькі джерела та готуйте аргументи з цитатами.',
|
|
'primary_access' => 'Продовжити через Do Better Norge / Google',
|
|
'secondary_access' => 'Увійти з обліковим записом Caveau',
|
|
'member_note' => 'Використайте свій обліковий запис Do Better Norge. Google-вхід відбувається на основному сайті, після чого ви безпечно повертаєтесь сюди.',
|
|
'email' => 'Email',
|
|
'password' => 'Пароль',
|
|
'sign_in' => 'Увійти',
|
|
'register' => 'Зареєструватися безкоштовно на dobetternorge.no',
|
|
'cause_title' => 'Докази важливіші за обурення.',
|
|
'cause_text' => 'Кожен інструмент побудований на тому самому принципі: задокументувати факти, процитувати право і зробити наступний практичний крок видимим.',
|
|
'privacy_title' => 'Приватність за задумом',
|
|
'privacy_text' => 'Файли за замовчуванням обробляються в памʼяті. Зберігаються лише технічні метадані: інструмент, затримка, мова та анонімний id сесії.',
|
|
'source_title' => 'Джерела залишаються видимими',
|
|
'source_text' => 'Дослідницькі інструменти показують цитати, розділи, уривки джерел і примітки про невизначеність поруч із відповіддю.',
|
|
'tools_title' => 'Запущені інструменти',
|
|
'preview_back' => '← Усі інструменти',
|
|
'preview_what_it_does' => 'Що робить',
|
|
'preview_get_access' => 'Отримати доступ',
|
|
'preview_ready_title' => 'Готові до використання',
|
|
'preview_free_note' => 'Безкоштовно для членів Do Better Norge. Документи обробляються в пам\'яті і ніколи не зберігаються.',
|
|
'preview_other_tools' => 'Інші інструменти',
|
|
'preview_join' => 'Не член? Приєднайтесь до Do Better Norge',
|
|
'preview_input_label' => 'Приклад — вхідні дані',
|
|
'preview_output_label' => 'Приклад — вихідні дані',
|
|
'enter_workbench' => 'Відкрити робочий простір',
|
|
'signed_in_as' => 'Увійшли як',
|
|
'member_card_title' => 'Вже є акаунт?',
|
|
'member_card_note' => 'Увійдіть через обліковий запис Do Better Norge. Google-вхід відбувається на основному сайті.',
|
|
'register_card_title' => 'Вперше на Do Better Norge?',
|
|
'register_card_note' => 'Безкоштовно для сімей у норвезьких справах із захисту дітей.',
|
|
'register_google' => 'Зареєструватися через Google',
|
|
'register_email' => 'Зареєструватися через email',
|
|
],
|
|
'pl' => [
|
|
'meta_title' => 'Do Better Norge - prawne narzędzia AI',
|
|
'brand_line' => 'Do Better Norge - tools.dobetternorge.no',
|
|
'suite_title' => 'Narzędzia prawne',
|
|
'workspace_title' => 'Panel pracy nad sprawą',
|
|
'session_active' => 'Sesja aktywna',
|
|
'health' => 'Stan',
|
|
'sign_out' => 'Wyloguj',
|
|
'retention' => 'Sesja w pamięci - domyślnie nic nie jest zapisywane',
|
|
'disclaimer' => 'Informacje prawne i wsparcie przygotowania, nie ostateczna porada prawna. Tekst i pliki są domyślnie przetwarzane w pamięci.',
|
|
'manifesto_eyebrow' => 'Prawa rodzinne - Norwegia - od 2019',
|
|
'manifesto_title' => 'Zabrali jej dziecko w dwanaście minut.',
|
|
'manifesto_sub' => 'Otwórz narzędzie. Zbuduj chronologię, zbadaj prawo, chroń prywatność i przygotuj kolejny krok z cytowanymi źródłami.',
|
|
'stat_echr' => 'naruszeń ETPC od 2015',
|
|
'stat_loss' => 'spraw ETPC przegranych 2017-22',
|
|
'stat_tribunal' => 'decyzji trybunałów przeanalizowano',
|
|
'stat_pending' => 'spraw oczekuje w Strasburgu',
|
|
'reasoning_eyebrow' => 'Plik - ślad dowodów',
|
|
'reasoning_title' => 'Uzasadnienie',
|
|
'waiting_title' => 'Oczekiwanie',
|
|
'waiting_text' => 'Uruchom narzędzie, aby zobaczyć interpretację, źródła, pewność, niepewność i następny krok.',
|
|
'dashboard_eyebrow' => 'Zatwierdzony pakiet narzędzi',
|
|
'dashboard_title' => 'Wybierz prawne narzędzie AI',
|
|
'dashboard_sub' => 'Dla rodzin, rzeczników i sojuszników przygotowujących norweskie sprawy rodzinne i dotyczące ochrony dzieci.',
|
|
'open_tool' => 'Otwórz narzędzie',
|
|
'landing_kicker' => 'Prawne przygotowanie AI dla spraw rodzinnych w Norwegii',
|
|
'landing_title' => 'Narzędzia prawne dla rodzin, które muszą uporządkować akta sprawy.',
|
|
'landing_sub' => 'Transkrybuj spotkania, buduj osie czasu, analizuj dokumenty Barnevernet, badaj ETPC i norweskie źródła oraz przygotowuj argumenty z cytatami.',
|
|
'primary_access' => 'Kontynuuj przez Do Better Norge / Google',
|
|
'secondary_access' => 'Zaloguj przez konto Caveau',
|
|
'member_note' => 'Użyj konta Do Better Norge. Logowanie Google odbywa się na głównej stronie, a potem bezpiecznie wracasz tutaj.',
|
|
'email' => 'Email',
|
|
'password' => 'Hasło',
|
|
'sign_in' => 'Zaloguj',
|
|
'register' => 'Zarejestruj się bezpłatnie na dobetternorge.no',
|
|
'cause_title' => 'Dowody ponad oburzenie.',
|
|
'cause_text' => 'Każde narzędzie opiera się na tej samej zasadzie: udokumentować fakty, przytoczyć prawo i pokazać następny praktyczny krok.',
|
|
'privacy_title' => 'Prywatność w projekcie',
|
|
'privacy_text' => 'Pliki są domyślnie przetwarzane w pamięci. Aplikacja zapisuje tylko metadane operacyjne, takie jak narzędzie, czas, język i anonimowy identyfikator sesji.',
|
|
'source_title' => 'Źródła pozostają widoczne',
|
|
'source_text' => 'Narzędzia badawcze pokazują cytaty, sekcje, fragmenty źródeł i notatki o niepewności obok odpowiedzi.',
|
|
'tools_title' => 'Uruchomione narzędzia',
|
|
'preview_back' => '← Wszystkie narzędzia',
|
|
'preview_what_it_does' => 'Co robi',
|
|
'preview_get_access' => 'Uzyskaj dostęp',
|
|
'preview_ready_title' => 'Gotowe do użycia',
|
|
'preview_free_note' => 'Bezpłatnie dla członków Do Better Norge. Dokumenty są przetwarzane w pamięci i nigdy nie są przechowywane.',
|
|
'preview_other_tools' => 'Inne narzędzia',
|
|
'preview_join' => 'Nie jesteś członkiem? Dołącz do Do Better Norge',
|
|
'preview_input_label' => 'Przykład — dane wejściowe',
|
|
'preview_output_label' => 'Przykład — dane wyjściowe',
|
|
'enter_workbench' => 'Otwórz panel pracy',
|
|
'signed_in_as' => 'Zalogowany jako',
|
|
'member_card_title' => 'Jesteś już członkiem?',
|
|
'member_card_note' => 'Zaloguj przez konto Do Better Norge. Logowanie Google odbywa się na głównej stronie.',
|
|
'register_card_title' => 'Nowy w Do Better Norge?',
|
|
'register_card_note' => 'Bezpłatnie dla rodzin w norweskich sprawach dotyczących ochrony dzieci.',
|
|
'register_google' => 'Zarejestruj przez Google',
|
|
'register_email' => 'Zarejestruj przez email',
|
|
],
|
|
];
|
|
}
|
|
|
|
function dbnToolsT(string $key, ?string $language = null): string
|
|
{
|
|
$language = dbnToolsNormalizeUiLanguage($language ?? dbnToolsCurrentLanguage());
|
|
$all = dbnToolsTranslations();
|
|
return (string)($all[$language][$key] ?? $all['en'][$key] ?? $key);
|
|
}
|
|
|
|
function dbnToolsWorkbenchCopy(?string $language = null): array
|
|
{
|
|
$language = dbnToolsNormalizeUiLanguage($language ?? dbnToolsCurrentLanguage());
|
|
$copy = [
|
|
'en' => [
|
|
'title' => 'Case Workbench',
|
|
'label' => 'Case Workbench',
|
|
'sub' => 'Guided case flow',
|
|
'description' => 'Plan a case, map evidence, and open the right legal tools in sequence without storing documents.',
|
|
'badge' => 'Private session',
|
|
'kicker' => 'Guided preparation',
|
|
'hero_title' => 'One calm place to organise the next legal step.',
|
|
'hero_text' => 'Use this workbench to frame the case, decide which tool to open next, and keep a local evidence map while your documents stay in memory by default.',
|
|
'privacy_title' => 'Local notes only',
|
|
'privacy_text' => 'This page saves notes in browser sessionStorage. It does not upload files or call tool APIs.',
|
|
'clear_session' => 'Clear session',
|
|
'all_tools' => 'All tools',
|
|
'intake_title' => 'Case intake',
|
|
'evidence_title' => 'Evidence map',
|
|
'flow_title' => 'Recommended tool sequence',
|
|
'outputs_title' => 'Output checklist',
|
|
'role' => 'Who are you helping?',
|
|
'choose' => 'Choose...',
|
|
'role_parent' => 'Parent',
|
|
'role_family' => 'Family member',
|
|
'role_advocate' => 'Advocate or lawyer',
|
|
'role_supporter' => 'Supporter',
|
|
'case_type' => 'Case type',
|
|
'case_barnevernet' => 'Barnevernet / child welfare',
|
|
'case_custody' => 'Custody or residence',
|
|
'case_access' => 'Contact / samvær',
|
|
'case_echr' => 'ECHR / Strasbourg preparation',
|
|
'deadline' => 'Next deadline',
|
|
'language' => 'Working language',
|
|
'main_concern' => 'Main concern',
|
|
'main_concern_hint' => 'What decision, meeting, deadline, or document are you preparing for?',
|
|
'documents' => 'Documents',
|
|
'documents_hint' => 'List letters, decisions, reports, emails, or forms.',
|
|
'meetings' => 'Meetings and audio',
|
|
'meetings_hint' => 'List recordings, meeting notes, or conversations to transcribe.',
|
|
'dates' => 'Dates and deadlines',
|
|
'dates_hint' => 'List hearings, response deadlines, visits, decisions, and events.',
|
|
'claims' => 'Claims and facts',
|
|
'claims_hint' => 'List what the other side says, what you dispute, and what you can prove.',
|
|
'missing' => 'Missing proof',
|
|
'missing_hint' => 'List records, witnesses, messages, or sources still needed.',
|
|
'bring_redact' => 'Bring back: safe text you can share with helpers.',
|
|
'bring_transcribe' => 'Bring back: speaker notes, quotes, and follow-up issues.',
|
|
'bring_timeline' => 'Bring back: dated events and urgent deadlines.',
|
|
'bring_barnevernet' => 'Bring back: red flags, parties, and cited procedural issues.',
|
|
'bring_research' => 'Bring back: legal angles, source excerpts, and uncertainty notes.',
|
|
'bring_advocate' => 'Bring back: strongest brief sections and weak points.',
|
|
'bring_corpus' => 'Bring back: source titles, sections, and exact citation context.',
|
|
'open_tool' => 'Open tool',
|
|
'output_lawyer' => 'Lawyer handoff pack',
|
|
'output_barnevernet_response' => 'Barnevernet response preparation',
|
|
'output_meeting_prep' => 'Meeting preparation note',
|
|
'output_strasbourg' => 'Strasbourg / ECHR research prep',
|
|
'next_step' => 'Next practical step',
|
|
'next_step_hint' => 'Write the next action, owner, and deadline.',
|
|
],
|
|
'no' => [
|
|
'title' => 'Saksarbeidsbenk',
|
|
'label' => 'Saksarbeidsbenk',
|
|
'sub' => 'Veiledet saksflyt',
|
|
'description' => 'Planlegg saken, kartlegg bevis og åpne riktig verktøy i riktig rekkefølge uten å lagre dokumenter.',
|
|
'badge' => 'Privat økt',
|
|
'kicker' => 'Veiledet forberedelse',
|
|
'hero_title' => 'Ett rolig sted for neste juridiske steg.',
|
|
'hero_text' => 'Bruk arbeidsbenken til å ramme inn saken, velge neste verktøy og holde et lokalt beviskart mens dokumenter behandles i minnet som standard.',
|
|
'privacy_title' => 'Kun lokale notater',
|
|
'privacy_text' => 'Denne siden lagrer notater i nettleserens sessionStorage. Den laster ikke opp filer og kaller ikke verktøy-API-er.',
|
|
],
|
|
'uk' => [
|
|
'title' => 'Робочий простір справи',
|
|
'label' => 'Робочий простір справи',
|
|
'sub' => 'Керований шлях справи',
|
|
'description' => 'Плануйте справу, картуйте докази й відкривайте потрібні інструменти по черзі без збереження документів.',
|
|
'badge' => 'Приватна сесія',
|
|
'kicker' => 'Керована підготовка',
|
|
'hero_title' => 'Одне спокійне місце для наступного юридичного кроку.',
|
|
'hero_text' => 'Використовуйте цей простір, щоб описати справу, вибрати наступний інструмент і вести локальну карту доказів.',
|
|
'privacy_title' => 'Лише локальні нотатки',
|
|
'privacy_text' => 'Сторінка зберігає нотатки в sessionStorage браузера. Вона не завантажує файли і не викликає API інструментів.',
|
|
],
|
|
'pl' => [
|
|
'title' => 'Panel pracy nad sprawą',
|
|
'label' => 'Panel pracy nad sprawą',
|
|
'sub' => 'Prowadzony tok sprawy',
|
|
'description' => 'Zaplanuj sprawę, uporządkuj dowody i otwieraj właściwe narzędzia po kolei bez zapisywania dokumentów.',
|
|
'badge' => 'Prywatna sesja',
|
|
'kicker' => 'Prowadzone przygotowanie',
|
|
'hero_title' => 'Jedno spokojne miejsce na kolejny krok prawny.',
|
|
'hero_text' => 'Użyj panelu, aby opisać sprawę, wybrać następne narzędzie i prowadzić lokalną mapę dowodów.',
|
|
'privacy_title' => 'Tylko lokalne notatki',
|
|
'privacy_text' => 'Strona zapisuje notatki w sessionStorage przeglądarki. Nie przesyła plików i nie wywołuje API narzędzi.',
|
|
],
|
|
];
|
|
|
|
return array_merge($copy['en'], $copy[$language] ?? []);
|
|
}
|
|
|
|
function dbnToolsWorkbenchMeta(?string $language = null): array
|
|
{
|
|
$copy = dbnToolsWorkbenchCopy($language);
|
|
return [
|
|
'label' => $copy['label'],
|
|
'sub' => $copy['sub'],
|
|
'description' => $copy['description'],
|
|
'badge' => $copy['badge'],
|
|
'url' => 'workbench.php',
|
|
'icon' => 'WB',
|
|
];
|
|
}
|
|
|
|
function dbnToolsLaunchedTools(?string $language = null): array
|
|
{
|
|
$language = dbnToolsNormalizeUiLanguage($language ?? dbnToolsCurrentLanguage());
|
|
$copy = [
|
|
'en' => [
|
|
'transcribe' => ['Transcribe', 'Audio and meetings', 'Turn audio or video into text with speaker separation and legal vocabulary support.', 'Whisper / GPU'],
|
|
'timeline' => ['Timeline', 'Events and deadlines', 'Extract dates, hearings, Barnevernet milestones, and legal deadlines from notes or files.', 'Process-and-forget'],
|
|
'redact' => ['Redact', 'Privacy protection', 'Remove names, ID numbers, phone numbers, and addresses before sharing documents.', 'Deterministic first'],
|
|
'barnevernet' => ['BVJ Analyzer', 'Barnevernet documents', 'Analyze child-welfare documents from your perspective with procedural red flags and citations.', 'Document + RAG'],
|
|
'advocate' => ['Advocate', 'Partisan brief', 'Choose who you represent and generate a source-grounded brief for that position.', 'ECHR + Lovdata'],
|
|
'deep-research' => ['Deep Research', 'Agent + RAG', 'Expand a question into research angles, search legal slices, and synthesize a cited brief.', 'Family-legal'],
|
|
'discrepancy' => ['Discrepancy Finder', 'Document comparison', 'Upload two versions of a Barnevernet document and find contradictions, deleted facts, and new allegations.', 'Cross-document AI'],
|
|
'corpus' => ['Corpus', 'Legal knowledge base', 'Inspect indexed sources, corpus health, legal categories, and retrieval behavior.', '~220 K passages'],
|
|
'citations' => ['Citations', 'Citation graph', 'Browse the legal citation graph — what a statute cites, what cites it, and what implements or amends it.', 'Graph topology'],
|
|
],
|
|
'no' => [
|
|
'transcribe' => ['Transkriber', 'Lyd og møter', 'Gjør lyd eller video om til tekst med talerinndeling og juridisk ordforråd.', 'Whisper / GPU'],
|
|
'timeline' => ['Tidslinje', 'Hendelser og frister', 'Hent ut datoer, møter, barnevernsmilepæler og juridiske frister fra notater eller filer.', 'Behandles og glemmes'],
|
|
'redact' => ['Sladder', 'Personvern', 'Fjern navn, ID-numre, telefonnumre og adresser før du deler dokumenter.', 'Deterministisk først'],
|
|
'barnevernet' => ['BVJ-analyse', 'Barnevernsdokumenter', 'Analyser barnevernsdokumenter fra ditt perspektiv med prosessuelle røde flagg og kilder.', 'Dokument + RAG'],
|
|
'advocate' => ['Advokatmodus', 'Partsinnlegg', 'Velg hvem du representerer og lag et kildebelagt innlegg for den posisjonen.', 'EMD + Lovdata'],
|
|
'deep-research' => ['Dyp research', 'Agent + RAG', 'Utvid et spørsmål til forskningsvinkler, søk juridiske kilder og lag et kildebelagt notat.', 'Familierett'],
|
|
'discrepancy' => ['Avviksfinner', 'Dokumentsammenligning', 'Last opp to versjoner av et barneverndokument og finn motsigelser, slettede fakta og nye påstander.', 'Kryssdokument AI'],
|
|
'corpus' => ['Korpus', 'Juridisk kunnskapsbase', 'Se indekserte kilder, korpushelse, juridiske kategorier og søkeoppsett.', '~220 K utdrag'],
|
|
'citations' => ['Siteringer', 'Siteringsgraf', 'Utforsk siteringsgrafen — hva et dokument siterer, hva som siterer det, og hva som implementerer det.', 'Grafstruktur'],
|
|
],
|
|
'uk' => [
|
|
'transcribe' => ['Транскрипція', 'Аудіо та зустрічі', 'Перетворюйте аудіо або відео на текст із розділенням мовців і юридичною лексикою.', 'Whisper / GPU'],
|
|
'timeline' => ['Хронологія', 'Події та строки', 'Витягуйте дати, слухання, етапи Barnevernet і юридичні строки з нотаток або файлів.', 'Обробити і забути'],
|
|
'redact' => ['Редагування', 'Захист приватності', 'Видаляйте імена, ідентифікаційні номери, телефони та адреси перед поширенням документів.', 'Детермінований метод'],
|
|
'barnevernet' => ['BVJ аналізатор', 'Документи Barnevernet', 'Аналізуйте документи захисту дітей з вашої позиції, з процесуальними ризиками та джерелами.', 'Документ + RAG'],
|
|
'advocate' => ['Адвокат', 'Позиційний бриф', 'Оберіть, кого представляєте, і створіть бриф із джерелами на підтримку цієї позиції.', 'ЄСПЛ + Lovdata'],
|
|
'deep-research' => ['Глибоке дослідження', 'Agent + RAG', 'Розгортає питання в дослідницькі напрями, шукає юридичні джерела та створює бриф.', 'Сімейне право'],
|
|
'discrepancy' => ['Пошук розбіжностей', 'Порівняння документів', 'Завантажте дві версії документа Barnevernet і знайдіть суперечності, видалені факти та нові твердження.', 'Міждокументний AI'],
|
|
'corpus' => ['Корпус', 'Юридична база знань', 'Переглядайте індексовані джерела, стан корпусу, категорії та поведінку пошуку.', '~220 тис. уривків'],
|
|
'citations' => ['Граф цитувань', 'Мережа посилань', 'Граф правових посилань — що цитує документ, хто цитує його, що його реалізує.', 'Граф-топологія'],
|
|
],
|
|
'pl' => [
|
|
'transcribe' => ['Transkrypcja', 'Audio i spotkania', 'Zamień audio lub wideo na tekst z rozdzieleniem mówców i słownictwem prawnym.', 'Whisper / GPU'],
|
|
'timeline' => ['Oś czasu', 'Wydarzenia i terminy', 'Wyodrębniaj daty, rozprawy, etapy Barnevernet i terminy prawne z notatek lub plików.', 'Przetwórz i zapomnij'],
|
|
'redact' => ['Redakcja', 'Ochrona prywatności', 'Usuń imiona, numery identyfikacyjne, telefony i adresy przed udostępnieniem dokumentów.', 'Metoda deterministyczna'],
|
|
'barnevernet' => ['Analizator BVJ', 'Dokumenty Barnevernet', 'Analizuj dokumenty opieki nad dziećmi z Twojej perspektywy, z ryzykami proceduralnymi i źródłami.', 'Dokument + RAG'],
|
|
'advocate' => ['Adwokat', 'Stronniczy brief', 'Wybierz, kogo reprezentujesz, i wygeneruj brief oparty na źródłach dla tej pozycji.', 'ETPC + Lovdata'],
|
|
'deep-research' => ['Głębokie badanie', 'Agent + RAG', 'Rozwija pytanie w kierunki badawcze, przeszukuje źródła prawne i tworzy brief z cytatami.', 'Prawo rodzinne'],
|
|
'discrepancy' => ['Wyszukiwacz rozbieżności', 'Porównanie dokumentów', 'Prześlij dwie wersje dokumentu Barnevernet i znajdź sprzeczności, usunięte fakty i nowe zarzuty.', 'AI Między-dokumentowe'],
|
|
'corpus' => ['Korpus', 'Prawna baza wiedzy', 'Sprawdzaj indeksowane źródła, stan korpusu, kategorie prawne i działanie wyszukiwania.', '~220 tys. fragmentów'],
|
|
'citations' => ['Graf cytowań', 'Sieć cytowań', 'Przeglądaj sieć cytowań — co cytuje dokument, kto go cytuje i co go implementuje.', 'Topologia grafu'],
|
|
],
|
|
];
|
|
|
|
$selected = $copy[$language] ?? $copy['en'];
|
|
$order = ['transcribe', 'timeline', 'redact', 'barnevernet', 'advocate', 'deep-research', 'discrepancy', 'corpus', 'citations'];
|
|
$icons = [
|
|
'transcribe' => 'TR',
|
|
'timeline' => 'TL',
|
|
'redact' => 'RX',
|
|
'barnevernet' => 'BVJ',
|
|
'advocate' => 'ADV',
|
|
'deep-research' => 'DR',
|
|
'discrepancy' => 'DC',
|
|
'corpus' => 'KB',
|
|
'citations' => 'CIT',
|
|
];
|
|
$out = [];
|
|
foreach ($order as $slug) {
|
|
[$label, $sub, $description, $badge] = $selected[$slug];
|
|
$out[$slug] = [
|
|
'label' => $label,
|
|
'sub' => $sub,
|
|
'description' => $description,
|
|
'badge' => $badge,
|
|
'url' => $slug . '.php',
|
|
'icon' => $icons[$slug],
|
|
];
|
|
}
|
|
return $out;
|
|
}
|