foxygit / RPA-Remisser Log in
commits tags

/webui/frontend/src/lib/i18n.ts · 11.08 KB

raw
// Bara app-kromet. Steg-/fält-/villkorsnamn kommer tvåspråkigt från
// /api/step-schema (rpa/schema.py) och slås upp med fieldLabel().

export type Lang = "sv" | "en";

const STRINGS = {
  en: {
    app_title: "RPA Tool",
    page_title: "RPA Tool – flow builder",
    new_flow: "New flow",
    delete_flow: "Delete flow",
    save: "Save",
    saved: "Saved",
    unsaved: "Unsaved changes",
    run: "Run flow",
    close_browser: "Close browser",
    show_trace: "Show trace",
    wiki: "Wiki",
    settings: "⚙ Settings",
    export: "Export as script",
    close_always: "Close the browser",
    close_on_success: "Keep open on error",
    close_never: "Always keep open",
    add_step: "+ Add step",
    add_step_after: "Add step after",
    add_step_in: "+ Add step",
    add_branch: "+ Add branch",
    else_toggle: "…else (else)",
    remove: "Remove",
    remove_branch: "Remove",
    branch_if: "If",
    branch_else_if: "…else if",
    branch_case: "Branch {n}",
    out_next: "next",
    start_node: "▶ start = top node",
    unknown_step: "Unknown step type",
    tab_main: "Main",
    tab_add: "New subflow",
    tab_run: "Run this tab",
    subflow_name_prompt: "Subflow name:",
    subflow_delete_confirm: "Delete this subflow?",
    subflow_in_use: "A call_flow node still targets this subflow. Delete anyway?",
    leave_unsaved: "Discard unsaved changes and open the other flow?",
    callflow_target: "Target",
    callflow_local: "This file",
    callflow_external: "Other flows",
    callflow_open: "Open",
    callflow_in: "Inputs →",
    callflow_out: "Outputs ←",
    callflow_in_name: "input name",
    callflow_in_value: "value / {var}",
    callflow_out_from: "subflow var",
    callflow_out_to: "caller var",
    callflow_add_in: "+ input",
    callflow_add_out: "+ output",
    add_field: "+ Add column",
    column_name: "Column name",
    label_ph: "Label (optional)",
    on_error_stop: "On error: stop",
    on_error_continue: "On error: continue",
    enabled_title: "Enabled (unchecked = skipped when running)",
    move_up: "Move up",
    move_down: "Move down",
    run_log: "Run log",
    variables: "Variables",
    no_vars: "No variables yet.",
    vars_hint: "Click a name to see its content (filled in once the flow finishes).",
    assist_title: "AI assistant",
    assist_hint:
      "Describe in plain language what the flow should do. The suggestion replaces the canvas (unsaved) so you can review it before saving/running.",
    assist_ph: "e.g. Go to example.com, wait for login, list all links and save them as CSV",
    assist_btn: "Suggest changes",
    assist_working: "Thinking…",
    assist_applied: "Suggestion applied — review, then Save / Run flow.",
    assist_unavailable: "Set ANTHROPIC_API_KEY (or run `ant auth login`) and restart the server to use this.",
    assist_failed: "Could not generate a flow: {msg}",
    status_running: "Running…",
    status_done: "Done",
    status_error: "Error",
    condition: "Condition",
    new_flow_prompt: "Name of new flow:",
    delete_flow_confirm: 'Delete the flow "{name}"?',
    settings_hint: "Saved with the flow, so they travel along when you export it as a standalone script.",
    cancel: "Cancel",
    fit_view: "Fit to view",
    relayout: "Auto-arrange",
    var_list: "list, {n} item(s)",
    var_object: "object",
    var_text: "text, {n} chars",
    save_failed: "Save failed: {msg}",
    menu: "Menu",
    menu_flow: "Flow",
    menu_view: "View",
    menu_run: "Run",
    menu_tools: "Tools",
    language: "Language",
    run_settings: "Run settings…",
    inspect_window: "Inspect window",
    inspect_hint: "Pick a running window to list its controls — use name / auto_id / control_type in the desktop steps.",
    inspect_pick: "Window",
    inspect_load: "Load controls",
    inspect_unavailable: "Windows only — pywinauto could not be loaded.",
    inspect_make_click: "New desktop_click",
    inspect_make_type: "New desktop_type",
    inspect_copy: "Copy selector",
    inspect_none: "No windows found.",
    palette: "Steps",
    palette_search: "Search…",
    palette_blocks: "Blocks",
    palette_toggle: "Show/hide the step palette",
    palette_click_add: "Click + (or double-click) to add, or drag onto the canvas",
    block_save_selection: "💾 Save selection as block",
    block_insert: "Insert",
    block_none: "No blocks yet. Select nodes on the canvas and save them as a block.",
    block_name_prompt: "Block name:",
    block_desc_prompt: "Short description (optional):",
    block_saved: "Block saved.",
    block_select_first: "Select one or more nodes on the canvas first.",
    change_type: "Change step type",
    run_params_menu: "Run parameters / inputs",
    runp_title: "Run parameters",
    runp_hint: "Fill in the flow's input variables, or pick a saved value set. Used as {name} in the steps.",
    runp_set: "Value set",
    runp_set_none: "(none)",
    runp_save_set: "💾 Save as set",
    runp_set_name_prompt: "Name for the value set:",
    runp_add_var: "+ Add variable",
    runp_var_name: "name",
    runp_var_value: "value",
    inputs_title: "Run parameters / inputs",
    inputs_hint: "Declare the variables the flow expects at run time. They appear in the run dialog and resolve as {name}.",
    inputs_add: "+ Add input",
    inputs_sets: "Saved value sets",
    inputs_set_rename: "Rename",
  },
  sv: {
    app_title: "RPA-verktyg",
    page_title: "RPA-verktyg – flödesbyggare",
    new_flow: "Nytt flöde",
    delete_flow: "Ta bort flöde",
    save: "Spara",
    saved: "Sparat",
    unsaved: "Osparade ändringar",
    run: "Kör flöde",
    close_browser: "Stäng webbläsare",
    show_trace: "Visa trace",
    wiki: "Wiki",
    settings: "⚙ Inställningar",
    export: "Exportera som script",
    close_always: "Stäng webbläsaren",
    close_on_success: "Håll öppen vid fel",
    close_never: "Håll alltid öppen",
    add_step: "+ Lägg till steg",
    add_step_after: "Lägg till steg efter",
    add_step_in: "+ Lägg till steg",
    add_branch: "+ Lägg till gren",
    else_toggle: "…annars (else)",
    remove: "Ta bort",
    remove_branch: "Ta bort",
    branch_if: "Om",
    branch_else_if: "…annars om",
    branch_case: "Gren {n}",
    out_next: "nästa",
    start_node: "▶ start = översta noden",
    unknown_step: "Okänd stegtyp",
    tab_main: "Main",
    tab_add: "Nytt subflöde",
    tab_run: "Kör denna flik",
    subflow_name_prompt: "Subflödets namn:",
    subflow_delete_confirm: "Ta bort det här subflödet?",
    subflow_in_use: "En call_flow-nod pekar fortfarande på det här subflödet. Ta bort ändå?",
    leave_unsaved: "Kasta osparade ändringar och öppna det andra flödet?",
    callflow_target: "Mål",
    callflow_local: "Detta flöde",
    callflow_external: "Andra flöden",
    callflow_open: "Öppna",
    callflow_in: "Indata →",
    callflow_out: "Utdata ←",
    callflow_in_name: "indata-namn",
    callflow_in_value: "värde / {var}",
    callflow_out_from: "subflödets variabel",
    callflow_out_to: "anroparens variabel",
    callflow_add_in: "+ indata",
    callflow_add_out: "+ utdata",
    add_field: "+ Lägg till kolumn",
    column_name: "Kolumnnamn",
    label_ph: "Etikett (valfri)",
    on_error_stop: "Vid fel: stanna",
    on_error_continue: "Vid fel: fortsätt",
    enabled_title: "Aktiverat (avbockad = hoppas över vid körning)",
    move_up: "Flytta upp",
    move_down: "Flytta ner",
    run_log: "Körlogg",
    variables: "Variabler",
    no_vars: "Inga variabler ännu.",
    vars_hint: "Klicka på ett namn för att se innehållet (fylls i när flödet är klart).",
    assist_title: "AI-assistent",
    assist_hint:
      "Beskriv i klartext vad flödet ska göra. Förslaget ersätter canvasen (osparat) så du kan granska det innan du sparar/kör.",
    assist_ph: "t.ex. Gå till example.com, vänta på inloggning, lista alla länkar och spara som CSV",
    assist_btn: "Föreslå ändringar",
    assist_working: "Tänker…",
    assist_applied: "Förslag infogat — granska, sedan Spara / Kör flöde.",
    assist_unavailable: "Sätt ANTHROPIC_API_KEY (eller kör `ant auth login`) och starta om servern för att använda detta.",
    assist_failed: "Kunde inte generera ett flöde: {msg}",
    status_running: "Kör…",
    status_done: "Klar",
    status_error: "Fel",
    condition: "Villkor",
    new_flow_prompt: "Namn på nytt flöde:",
    delete_flow_confirm: 'Ta bort flödet "{name}"?',
    settings_hint: "Sparas med flödet, så de följer med om du exporterar det som ett fristående script.",
    cancel: "Avbryt",
    fit_view: "Anpassa till vy",
    relayout: "Autoplacera",
    var_list: "lista, {n} post(er)",
    var_object: "objekt",
    var_text: "text, {n} tecken",
    save_failed: "Kunde inte spara: {msg}",
    menu: "Meny",
    menu_flow: "Flöde",
    menu_view: "Visning",
    menu_run: "Körning",
    menu_tools: "Verktyg",
    language: "Språk",
    run_settings: "Körningsinställningar…",
    inspect_window: "Inspektera fönster",
    inspect_hint: "Välj ett körande fönster för att lista dess kontroller — använd name / auto_id / control_type i desktop-stegen.",
    inspect_pick: "Fönster",
    inspect_load: "Hämta kontroller",
    inspect_unavailable: "Bara Windows — pywinauto kunde inte laddas.",
    inspect_make_click: "Nytt desktop_click",
    inspect_make_type: "Nytt desktop_type",
    inspect_copy: "Kopiera selector",
    inspect_none: "Inga fönster hittades.",
    palette: "Steg",
    palette_search: "Sök…",
    palette_blocks: "Block",
    palette_toggle: "Visa/dölj steg-paletten",
    palette_click_add: "Klicka + (eller dubbelklicka) för att lägga till, eller dra till canvasen",
    block_save_selection: "💾 Spara markering som block",
    block_insert: "Infoga",
    block_none: "Inga block än. Markera noder på canvasen och spara dem som ett block.",
    block_name_prompt: "Blockets namn:",
    block_desc_prompt: "Kort beskrivning (valfri):",
    block_saved: "Blocket sparat.",
    block_select_first: "Markera en eller flera noder på canvasen först.",
    change_type: "Byt stegtyp",
    run_params_menu: "Kör-parametrar / indata",
    runp_title: "Kör-parametrar",
    runp_hint: "Fyll i flödets indata-variabler, eller välj ett sparat värde-set. Används som {name} i stegen.",
    runp_set: "Värde-set",
    runp_set_none: "(inget)",
    runp_save_set: "💾 Spara som set",
    runp_set_name_prompt: "Namn på värde-setet:",
    runp_add_var: "+ Lägg till variabel",
    runp_var_name: "namn",
    runp_var_value: "värde",
    inputs_title: "Kör-parametrar / indata",
    inputs_hint: "Deklarera vilka variabler flödet förväntar sig vid körning. De dyker upp i kördialogen och löses som {name}.",
    inputs_add: "+ Lägg till indata",
    inputs_sets: "Sparade värde-set",
    inputs_set_rename: "Döp om",
  },
} as const;

export type Key = keyof (typeof STRINGS)["en"];

export function makeT(lang: Lang) {
  return (key: Key, params?: Record<string, string | number>): string => {
    let s: string = STRINGS[lang][key] ?? STRINGS.en[key] ?? key;
    if (params) for (const [k, v] of Object.entries(params)) s = s.replace(`{${k}}`, String(v));
    return s;
  };
}

export type T = ReturnType<typeof makeT>;