Legal Analysis: full language follow-through (UI + LLM)

The tool now respects the chosen UI language end-to-end — even if the
source document is Norwegian, a user on EN/UK/PL gets the analysis in
their language. Norwegian statute references (barnevernsloven § 4-25,
EMK Art. 8) and case names (Strand Lobben mot Norge 37283/13) are kept
verbatim because they are proper nouns.

LLM (LegalAnalysisAgent.php):
- extractIssues: prompt asks for question + brief_context in user's
  language; statute refs preserved
- answerIssue: Norwegian core system prompt (keeps fine-tune precision)
  + language-coercion line for non-NO; localised context/source labels
- synthesise: overall_assessment, next_steps, disclaimer in user's
  language; explicit per-language disclaimer text
- runFullAnalysis empty-case fallback also localised
- what_to_check translated per language

UI:
- 40 new la_* translation keys in i18n.php × 4 languages (NO/EN/UK/PL)
- legal-analysis.php: 4-way lang switcher, dbnToolsT() for every label,
  emits window.DBN_LA_I18N for runtime JS strings
- legal-analysis.js: t() helper reads from window.DBN_LA_I18N
- layout_footer.php: emits window.DBN_CURRENT_LANG +
  window.DBN_ADDON_I18N so the legal-analysis add-on button works in
  the page's language no matter which tool it's invoked from
- tools.js add-on: reads from DBN_ADDON_I18N, passes DBN_CURRENT_LANG
  to /api/legal-analysis.php so server responds in same language

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-24 08:43:15 +02:00
parent 2509a596c1
commit 21c092e0d0
6 changed files with 397 additions and 89 deletions
+160
View File
@@ -395,6 +395,46 @@ function dbnToolsTranslations(): array
'js_field_tags' => 'Tags (comma-separated)',
'js_field_lang' => 'Language',
'js_field_author' => 'Author',
// ── Legal Analysis tool ───────────────────────────────────────────
'la_doc_type_label' => 'Document type',
'la_doc_type_auto' => 'Auto-detect',
'la_doc_type_other' => 'Other',
'la_engine_hint' => 'Engine: dbn-legal-agent-v3 (Norwegian legal fine-tune on GPU). Each issue answered separately; ~30-60s per issue, up to 5 issues per run.',
'la_input_label' => 'Pasted text',
'la_input_hint' => '(optional if file or doc selected)',
'la_input_placeholder' => 'Paste a case note, court decision, vedtak, letter, or any legal document text. You can also upload a file or select from My Docs above — at least one source is required.',
'la_run_button' => 'Run legal analysis',
'la_run_button_busy' => 'Running…',
'la_ready_title' => 'Ready',
'la_ready_intro' => 'Upload a document or paste text — the tool will extract up to 5 distinct legal issues, then ask the Norwegian-law fine-tune to answer each one with citations.',
'la_ready_pipeline' => 'Pass 1 uses Azure GPT-4o-mini to spot issues. Pass 2 calls the dbn-legal-agent-v3 fine-tune on ocelot for each one. Pass 3 synthesises the overall picture. A typical run takes 2-5 minutes.',
'la_pipeline_pass1' => 'Pass 1',
'la_pipeline_pass2' => 'Pass 2',
'la_pipeline_pass3' => 'Pass 3',
'la_pass1_extracting' => 'Extracting legal issues from your document…',
'la_pass1_found' => 'Found {n} legal issue(s)',
'la_pass2_asking' => 'Asking dbn-legal-agent-v3 about each issue…',
'la_pass2_answered' => 'Specialist answered {n} issue(s)',
'la_pass3_synthesis' => 'Synthesis complete',
'la_waiting' => 'Waiting…',
'la_searching_corpus' => 'Searching legal corpus…',
'la_asking_finetune' => 'Asking dbn-legal-agent-v3…',
'la_overall' => 'Overall assessment',
'la_next_steps' => 'Next steps',
'la_answer_header' => 'Answer',
'la_legal_basis' => 'Legal basis:',
'la_extracting_status' => 'Identifying distinct legal issues…',
'la_synthesising_status' => 'Synthesising overall assessment…',
'la_extracting_files' => 'Extracting text from {n} file(s)…',
'la_need_input' => 'Paste text, upload a file, or select a document before running.',
'la_error_prefix' => 'Error:',
'la_server_returned' => 'Server returned',
'la_empty_issues' => 'No discrete legal issues were identified.',
'la_addon_button' => '⚖️🇳🇴 Run deep legal analysis on this text',
'la_addon_button_busy' => 'Running deep legal analysis…',
'la_addon_section' => 'Deep Legal Analysis',
],
'no' => [
'meta_title' => 'Do Better Norge - juridiske AI-verktøy',
@@ -722,6 +762,46 @@ function dbnToolsTranslations(): array
'js_field_tags' => 'Tagger (komma-separert)',
'js_field_lang' => 'Språk',
'js_field_author' => 'Forfatter',
// ── Juridisk analyse ──────────────────────────────────────────────
'la_doc_type_label' => 'Dokumenttype',
'la_doc_type_auto' => 'Auto-oppdaging',
'la_doc_type_other' => 'Annet',
'la_engine_hint' => 'Motor: dbn-legal-agent-v3 (norsk juridisk fine-tune på GPU). Hvert spørsmål besvares hver for seg; ~30-60s per spørsmål, opp til 5 spørsmål per kjøring.',
'la_input_label' => 'Limt inn tekst',
'la_input_hint' => '(valgfritt hvis fil eller dokument er valgt)',
'la_input_placeholder' => 'Lim inn et saksnotat, rettsavgjørelse, vedtak, brev eller annen juridisk dokumenttekst. Du kan også laste opp en fil eller velge fra Mine dokumenter ovenfor — minst én kilde kreves.',
'la_run_button' => 'Kjør juridisk analyse',
'la_run_button_busy' => 'Kjører…',
'la_ready_title' => 'Klar',
'la_ready_intro' => 'Last opp et dokument eller lim inn tekst — verktøyet henter ut opptil 5 distinkte juridiske spørsmål og lar den norske fine-tunen svare på hvert enkelt med kilder.',
'la_ready_pipeline' => 'Pass 1 bruker Azure GPT-4o-mini for å identifisere spørsmål. Pass 2 kaller dbn-legal-agent-v3 fine-tunen på ocelot for hvert spørsmål. Pass 3 sammenfatter helhetsbildet. En typisk kjøring tar 2-5 minutter.',
'la_pipeline_pass1' => 'Pass 1',
'la_pipeline_pass2' => 'Pass 2',
'la_pipeline_pass3' => 'Pass 3',
'la_pass1_extracting' => 'Henter ut juridiske spørsmål fra dokumentet…',
'la_pass1_found' => 'Fant {n} juridisk(e) spørsmål',
'la_pass2_asking' => 'Spør dbn-legal-agent-v3 om hvert spørsmål…',
'la_pass2_answered' => 'Spesialisten besvarte {n} spørsmål',
'la_pass3_synthesis' => 'Syntese fullført',
'la_waiting' => 'Venter…',
'la_searching_corpus' => 'Søker i juridisk korpus…',
'la_asking_finetune' => 'Spør dbn-legal-agent-v3…',
'la_overall' => 'Helhetsvurdering',
'la_next_steps' => 'Neste skritt',
'la_answer_header' => 'Svar',
'la_legal_basis' => 'Lovgrunnlag:',
'la_extracting_status' => 'Identifiserer distinkte juridiske spørsmål…',
'la_synthesising_status' => 'Sammenfatter helhetsvurdering…',
'la_extracting_files' => 'Henter ut tekst fra {n} fil(er)…',
'la_need_input' => 'Lim inn tekst, last opp en fil eller velg et dokument før du kjører.',
'la_error_prefix' => 'Feil:',
'la_server_returned' => 'Server svarte',
'la_empty_issues' => 'Ingen distinkte juridiske spørsmål ble identifisert.',
'la_addon_button' => '⚖️🇳🇴 Kjør dyp juridisk analyse på denne teksten',
'la_addon_button_busy' => 'Kjører dyp juridisk analyse…',
'la_addon_section' => 'Dyp juridisk analyse',
],
'uk' => [
'meta_title' => 'Do Better Norge - юридичні AI інструменти',
@@ -1049,6 +1129,46 @@ function dbnToolsTranslations(): array
'js_field_tags' => 'Теги (через кому)',
'js_field_lang' => 'Мова',
'js_field_author' => 'Автор',
// ── Юридичний аналіз ──────────────────────────────────────────────
'la_doc_type_label' => 'Тип документа',
'la_doc_type_auto' => 'Авто-визначення',
'la_doc_type_other' => 'Інше',
'la_engine_hint' => 'Модель: dbn-legal-agent-v3 (норвезька юридична fine-tune на GPU). Кожне питання обробляється окремо; ~30-60с на питання, до 5 питань за запуск.',
'la_input_label' => 'Вставлений текст',
'la_input_hint' => '(необов’язково, якщо вибрано файл або документ)',
'la_input_placeholder' => 'Вставте судову нотатку, рішення суду, vedtak, лист або будь-який юридичний текст. Можна також завантажити файл або вибрати з Моїх документів вище — потрібне принаймні одне джерело.',
'la_run_button' => 'Запустити юридичний аналіз',
'la_run_button_busy' => 'Виконання…',
'la_ready_title' => 'Готово',
'la_ready_intro' => 'Завантажте документ або вставте текст — інструмент виявить до 5 окремих юридичних питань і попросить норвезьку fine-tune відповісти на кожне з цитатами.',
'la_ready_pipeline' => 'Прохід 1 використовує Azure GPT-4o-mini для виявлення питань. Прохід 2 викликає dbn-legal-agent-v3 для кожного. Прохід 3 синтезує загальну картину. Типовий запуск триває 2-5 хвилин.',
'la_pipeline_pass1' => 'Прохід 1',
'la_pipeline_pass2' => 'Прохід 2',
'la_pipeline_pass3' => 'Прохід 3',
'la_pass1_extracting' => 'Виявлення юридичних питань у документі…',
'la_pass1_found' => 'Знайдено {n} юридичне(их) питання',
'la_pass2_asking' => 'Запит до dbn-legal-agent-v3 для кожного питання…',
'la_pass2_answered' => 'Спеціаліст відповів на {n} питання',
'la_pass3_synthesis' => 'Синтез завершено',
'la_waiting' => 'Очікування…',
'la_searching_corpus' => 'Пошук у юридичному корпусі…',
'la_asking_finetune' => 'Запит до dbn-legal-agent-v3…',
'la_overall' => 'Загальна оцінка',
'la_next_steps' => 'Наступні кроки',
'la_answer_header' => 'Відповідь',
'la_legal_basis' => 'Правова підстава:',
'la_extracting_status' => 'Виявлення окремих юридичних питань…',
'la_synthesising_status' => 'Синтез загальної оцінки…',
'la_extracting_files' => 'Виділення тексту з {n} файл(ів)…',
'la_need_input' => 'Вставте текст, завантажте файл або виберіть документ перед запуском.',
'la_error_prefix' => 'Помилка:',
'la_server_returned' => 'Сервер повернув',
'la_empty_issues' => 'Окремих юридичних питань не виявлено.',
'la_addon_button' => '⚖️🇳🇴 Запустити глибокий юридичний аналіз цього тексту',
'la_addon_button_busy' => 'Виконується глибокий юридичний аналіз…',
'la_addon_section' => 'Глибокий юридичний аналіз',
],
'pl' => [
'meta_title' => 'Do Better Norge - prawne narzędzia AI',
@@ -1376,6 +1496,46 @@ function dbnToolsTranslations(): array
'js_field_tags' => 'Tagi (oddzielone przecinkami)',
'js_field_lang' => 'Język',
'js_field_author' => 'Autor',
// ── Analiza prawna ────────────────────────────────────────────────
'la_doc_type_label' => 'Typ dokumentu',
'la_doc_type_auto' => 'Auto-wykrywanie',
'la_doc_type_other' => 'Inny',
'la_engine_hint' => 'Silnik: dbn-legal-agent-v3 (norweski prawny fine-tune na GPU). Każda kwestia odpowiadana osobno; ~30-60s na kwestię, do 5 kwestii na uruchomienie.',
'la_input_label' => 'Wklejony tekst',
'la_input_hint' => '(opcjonalne, jeśli wybrano plik lub dokument)',
'la_input_placeholder' => 'Wklej notatkę sprawy, orzeczenie sądu, vedtak, list lub dowolny tekst prawny. Możesz też przesłać plik lub wybrać z Moich dokumentów powyżej — wymagane jest co najmniej jedno źródło.',
'la_run_button' => 'Uruchom analizę prawną',
'la_run_button_busy' => 'Uruchamianie…',
'la_ready_title' => 'Gotowe',
'la_ready_intro' => 'Prześlij dokument lub wklej tekst — narzędzie wyodrębni do 5 odrębnych kwestii prawnych i poprosi norweski fine-tune o odpowiedź na każdą z cytatami.',
'la_ready_pipeline' => 'Przebieg 1 używa Azure GPT-4o-mini do wykrycia kwestii. Przebieg 2 wywołuje dbn-legal-agent-v3 dla każdej. Przebieg 3 syntetyzuje obraz całości. Typowe uruchomienie trwa 2-5 minut.',
'la_pipeline_pass1' => 'Przebieg 1',
'la_pipeline_pass2' => 'Przebieg 2',
'la_pipeline_pass3' => 'Przebieg 3',
'la_pass1_extracting' => 'Wyodrębnianie kwestii prawnych z dokumentu…',
'la_pass1_found' => 'Znaleziono {n} kwestii prawnych',
'la_pass2_asking' => 'Pytanie dbn-legal-agent-v3 o każdą kwestię…',
'la_pass2_answered' => 'Specjalista odpowiedział na {n} kwestii',
'la_pass3_synthesis' => 'Synteza zakończona',
'la_waiting' => 'Oczekiwanie…',
'la_searching_corpus' => 'Przeszukiwanie korpusu prawnego…',
'la_asking_finetune' => 'Pytanie dbn-legal-agent-v3…',
'la_overall' => 'Ocena całościowa',
'la_next_steps' => 'Następne kroki',
'la_answer_header' => 'Odpowiedź',
'la_legal_basis' => 'Podstawa prawna:',
'la_extracting_status' => 'Identyfikowanie odrębnych kwestii prawnych…',
'la_synthesising_status' => 'Syntetyzowanie oceny całościowej…',
'la_extracting_files' => 'Wyodrębnianie tekstu z {n} plik(ów)…',
'la_need_input' => 'Wklej tekst, prześlij plik lub wybierz dokument przed uruchomieniem.',
'la_error_prefix' => 'Błąd:',
'la_server_returned' => 'Serwer zwrócił',
'la_empty_issues' => 'Nie zidentyfikowano odrębnych kwestii prawnych.',
'la_addon_button' => '⚖️🇳🇴 Uruchom głęboką analizę prawną tego tekstu',
'la_addon_button_busy' => 'Trwa głęboka analiza prawna…',
'la_addon_section' => 'Głęboka analiza prawna',
],
];
}