From 4fd53ac11533849831e8afdd20106ef68af0bb93 Mon Sep 17 00:00:00 2001
From: Matti Nannt
Date: Mon, 8 Dec 2025 14:42:54 +0100
Subject: [PATCH 01/16] refactor: centralize instance ID generation (#6952)
---
.../api/(internal)/pipeline/lib/telemetry.ts | 15 +++---
apps/web/lib/instance.ts | 50 +++++++++++++++++++
.../ee/license-check/lib/license.test.ts | 16 ++++++
.../modules/ee/license-check/lib/license.ts | 22 +++++---
4 files changed, 87 insertions(+), 16 deletions(-)
create mode 100644 apps/web/lib/instance.ts
diff --git a/apps/web/app/api/(internal)/pipeline/lib/telemetry.ts b/apps/web/app/api/(internal)/pipeline/lib/telemetry.ts
index 083a6e1a97..44454e1564 100644
--- a/apps/web/app/api/(internal)/pipeline/lib/telemetry.ts
+++ b/apps/web/app/api/(internal)/pipeline/lib/telemetry.ts
@@ -1,9 +1,9 @@
import { IntegrationType } from "@prisma/client";
-import { createHash } from "node:crypto";
import { type CacheKey, getCacheService } from "@formbricks/cache";
import { prisma } from "@formbricks/database";
import { logger } from "@formbricks/logger";
import { env } from "@/lib/env";
+import { getInstanceInfo } from "@/lib/instance";
import packageJson from "@/package.json";
const TELEMETRY_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
@@ -129,15 +129,12 @@ export const sendTelemetryEvents = async () => {
* @param lastSent - Timestamp of last telemetry send (used to calculate incremental metrics)
*/
const sendTelemetry = async (lastSent: number) => {
- // Get the oldest organization to generate a stable, anonymized instance ID.
+ // Get the instance info (hashed oldest organization ID and creation date).
// Using the oldest org ensures the ID doesn't change over time.
- const oldestOrg = await prisma.organization.findFirst({
- orderBy: { createdAt: "asc" },
- select: { id: true, createdAt: true },
- });
+ const instanceInfo = await getInstanceInfo();
+ if (!instanceInfo) return; // No organization exists, nothing to report
- if (!oldestOrg) return; // No organization exists, nothing to report
- const instanceId = createHash("sha256").update(oldestOrg.id).digest("hex");
+ const { instanceId, createdAt: instanceCreatedAt } = instanceInfo;
// Optimize database queries to reduce connection pool usage:
// Instead of 15 parallel queries (which could exhaust the connection pool),
@@ -248,7 +245,7 @@ const sendTelemetry = async (lastSent: number) => {
version: packageJson.version, // Formbricks version for compatibility tracking
},
temporal: {
- instanceCreatedAt: oldestOrg.createdAt.toISOString(), // When instance was first created
+ instanceCreatedAt: instanceCreatedAt.toISOString(), // When instance was first created
newestResponseAt: newestResponse?.createdAt.toISOString() || null, // Most recent activity
},
};
diff --git a/apps/web/lib/instance.ts b/apps/web/lib/instance.ts
new file mode 100644
index 0000000000..9a8782ea70
--- /dev/null
+++ b/apps/web/lib/instance.ts
@@ -0,0 +1,50 @@
+import "server-only";
+import { Prisma } from "@prisma/client";
+import { createHash } from "node:crypto";
+import { cache as reactCache } from "react";
+import { prisma } from "@formbricks/database";
+import { DatabaseError } from "@formbricks/types/errors";
+
+export type TInstanceInfo = {
+ instanceId: string;
+ createdAt: Date;
+};
+
+/**
+ * Returns instance info including the anonymized instance ID and creation date.
+ *
+ * The instance ID is a SHA-256 hash of the oldest organization's ID, ensuring
+ * it remains stable over time. Used for telemetry and license checks.
+ *
+ * @returns Instance info with hashed ID and creation date, or `null` if no organizations exist
+ */
+export const getInstanceInfo = reactCache(async (): Promise => {
+ try {
+ const oldestOrg = await prisma.organization.findFirst({
+ orderBy: { createdAt: "asc" },
+ select: { id: true, createdAt: true },
+ });
+
+ if (!oldestOrg) return null;
+
+ return {
+ instanceId: createHash("sha256").update(oldestOrg.id).digest("hex"),
+ createdAt: oldestOrg.createdAt,
+ };
+ } catch (error) {
+ if (error instanceof Prisma.PrismaClientKnownRequestError) {
+ throw new DatabaseError(error.message);
+ }
+ throw error;
+ }
+});
+
+/**
+ * Convenience function that returns just the instance ID.
+ *
+ * @returns Hashed instance ID, or `null` if no organizations exist
+ */
+export const getInstanceId = async (): Promise => {
+ const info = await getInstanceInfo();
+ return info?.instanceId ?? null;
+};
diff --git a/apps/web/modules/ee/license-check/lib/license.test.ts b/apps/web/modules/ee/license-check/lib/license.test.ts
index 09b8392fca..88e437f192 100644
--- a/apps/web/modules/ee/license-check/lib/license.test.ts
+++ b/apps/web/modules/ee/license-check/lib/license.test.ts
@@ -1,6 +1,7 @@
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
import type { Mock } from "vitest";
import { prisma } from "@formbricks/database";
+import { getInstanceId, getInstanceInfo } from "@/lib/instance";
import {
TEnterpriseLicenseDetails,
TEnterpriseLicenseFeatures,
@@ -55,6 +56,7 @@ vi.mock("@formbricks/database", () => ({
},
organization: {
findUnique: vi.fn(),
+ findFirst: vi.fn(),
},
},
}));
@@ -70,6 +72,11 @@ vi.mock("@formbricks/logger", () => ({
logger: mockLogger,
}));
+vi.mock("@/lib/instance", () => ({
+ getInstanceId: vi.fn(),
+ getInstanceInfo: vi.fn(),
+}));
+
// Mock constants as they are used in the original license.ts indirectly
vi.mock("@/lib/constants", async (importOriginal) => {
const actual = await importOriginal();
@@ -102,6 +109,15 @@ describe("License Core Logic", () => {
mockCache.withCache.mockImplementation(async (fn) => await fn());
vi.mocked(prisma.response.count).mockResolvedValue(100);
+ vi.mocked(prisma.organization.findFirst).mockResolvedValue({
+ id: "test-org-id",
+ createdAt: new Date("2024-01-01"),
+ } as any);
+ vi.mocked(getInstanceId).mockResolvedValue("test-hashed-instance-id");
+ vi.mocked(getInstanceInfo).mockResolvedValue({
+ instanceId: "test-hashed-instance-id",
+ createdAt: new Date("2024-01-01"),
+ });
vi.clearAllMocks();
// Mock window to be undefined for server-side tests
vi.stubGlobal("window", undefined);
diff --git a/apps/web/modules/ee/license-check/lib/license.ts b/apps/web/modules/ee/license-check/lib/license.ts
index e0eb1ba863..393f2d5f76 100644
--- a/apps/web/modules/ee/license-check/lib/license.ts
+++ b/apps/web/modules/ee/license-check/lib/license.ts
@@ -9,6 +9,7 @@ import { logger } from "@formbricks/logger";
import { cache } from "@/lib/cache";
import { env } from "@/lib/env";
import { hashString } from "@/lib/hash-string";
+import { getInstanceId } from "@/lib/instance";
import {
TEnterpriseLicenseDetails,
TEnterpriseLicenseFeatures,
@@ -260,14 +261,20 @@ const fetchLicenseFromServerInternal = async (retryCount = 0): Promise current year is fully included
const startOfNextYear = new Date(now.getFullYear() + 1, 0, 1);
- const responseCount = await prisma.response.count({
- where: {
- createdAt: {
- gte: startOfYear,
- lt: startOfNextYear,
+ const [instanceId, responseCount] = await Promise.all([
+ getInstanceId(),
+ prisma.response.count({
+ where: {
+ createdAt: {
+ gte: startOfYear,
+ lt: startOfNextYear,
+ },
},
- },
- });
+ }),
+ ]);
+
+ // No organization exists, cannot perform license check
+ if (!instanceId) return null;
const proxyUrl = env.HTTPS_PROXY ?? env.HTTP_PROXY;
const agent = proxyUrl ? new HttpsProxyAgent(proxyUrl) : undefined;
@@ -279,6 +286,7 @@ const fetchLicenseFromServerInternal = async (retryCount = 0): Promise
Date: Mon, 8 Dec 2025 15:49:44 +0100
Subject: [PATCH 02/16] feat: Add Swedish `sv-SE` translation (#6913)
Co-authored-by: Matti Nannt
---
apps/web/i18n.json | 3 +-
apps/web/lib/constants.ts | 1 +
apps/web/lib/i18n/utils.ts | 34 +-
apps/web/lib/time.test.ts | 6 +
apps/web/lib/time.ts | 4 +-
apps/web/lib/utils/locale.test.ts | 22 +
apps/web/locales/sv-SE.json | 2937 +++++++++++++++++++++++
apps/web/vitestSetup.ts | 1 +
packages/surveys/i18n.json | 2 +-
packages/surveys/locales/sv.json | 73 +
packages/surveys/src/lib/i18n.config.ts | 20 +-
packages/types/user.ts | 1 +
12 files changed, 3097 insertions(+), 7 deletions(-)
create mode 100644 apps/web/locales/sv-SE.json
create mode 100644 packages/surveys/locales/sv.json
diff --git a/apps/web/i18n.json b/apps/web/i18n.json
index 6cb4468377..9a95487332 100644
--- a/apps/web/i18n.json
+++ b/apps/web/i18n.json
@@ -17,7 +17,8 @@
"zh-Hans-CN",
"zh-Hant-TW",
"nl-NL",
- "es-ES"
+ "es-ES",
+ "sv-SE"
]
},
"version": 1.8
diff --git a/apps/web/lib/constants.ts b/apps/web/lib/constants.ts
index 42a1236aae..fb2afe4cda 100644
--- a/apps/web/lib/constants.ts
+++ b/apps/web/lib/constants.ts
@@ -176,6 +176,7 @@ export const AVAILABLE_LOCALES: TUserLocale[] = [
"ja-JP",
"zh-Hans-CN",
"es-ES",
+ "sv-SE",
];
// Billing constants
diff --git a/apps/web/lib/i18n/utils.ts b/apps/web/lib/i18n/utils.ts
index 3f386487ff..e8f4266466 100644
--- a/apps/web/lib/i18n/utils.ts
+++ b/apps/web/lib/i18n/utils.ts
@@ -140,6 +140,7 @@ export const appLanguages = [
"zh-Hans-CN": "英语(美国)",
"nl-NL": "Engels (VS)",
"es-ES": "Inglés (EE.UU.)",
+ "sv-SE": "Engelska (USA)",
},
},
{
@@ -156,6 +157,7 @@ export const appLanguages = [
"zh-Hans-CN": "德语",
"nl-NL": "Duits",
"es-ES": "Alemán",
+ "sv-SE": "Tyska",
},
},
{
@@ -172,6 +174,7 @@ export const appLanguages = [
"zh-Hans-CN": "葡萄牙语(巴西)",
"nl-NL": "Portugees (Brazilië)",
"es-ES": "Portugués (Brasil)",
+ "sv-SE": "Portugisiska (Brasilien)",
},
},
{
@@ -188,6 +191,7 @@ export const appLanguages = [
"zh-Hans-CN": "法语",
"nl-NL": "Frans",
"es-ES": "Francés",
+ "sv-SE": "Franska",
},
},
{
@@ -199,11 +203,12 @@ export const appLanguages = [
"fr-FR": "Chinois (Traditionnel)",
"zh-Hant-TW": "繁體中文",
"pt-PT": "Chinês (Tradicional)",
- "ro-RO": "Chineză (Tradicională)",
+ "ro-RO": "Chineza (Tradițională)",
"ja-JP": "中国語(繁体字)",
"zh-Hans-CN": "繁体中文",
"nl-NL": "Chinees (Traditioneel)",
"es-ES": "Chino (Tradicional)",
+ "sv-SE": "Kinesiska (traditionell)",
},
},
{
@@ -220,6 +225,7 @@ export const appLanguages = [
"zh-Hans-CN": "葡萄牙语(葡萄牙)",
"nl-NL": "Portugees (Portugal)",
"es-ES": "Portugués (Portugal)",
+ "sv-SE": "Portugisiska (Portugal)",
},
},
{
@@ -236,6 +242,7 @@ export const appLanguages = [
"zh-Hans-CN": "罗马尼亚语",
"nl-NL": "Roemeens",
"es-ES": "Rumano",
+ "sv-SE": "Rumänska",
},
},
{
@@ -252,6 +259,7 @@ export const appLanguages = [
"zh-Hans-CN": "日语",
"nl-NL": "Japans",
"es-ES": "Japonés",
+ "sv-SE": "Japanska",
},
},
{
@@ -263,11 +271,12 @@ export const appLanguages = [
"fr-FR": "Chinois (Simplifié)",
"zh-Hant-TW": "簡體中文",
"pt-PT": "Chinês (Simplificado)",
- "ro-RO": "Chineză (Simplificată)",
+ "ro-RO": "Chineza (Simplificată)",
"ja-JP": "中国語(簡体字)",
"zh-Hans-CN": "简体中文",
"nl-NL": "Chinees (Vereenvoudigd)",
"es-ES": "Chino (Simplificado)",
+ "sv-SE": "Kinesiska (förenklad)",
},
},
{
@@ -279,11 +288,12 @@ export const appLanguages = [
"fr-FR": "Néerlandais",
"zh-Hant-TW": "荷蘭語",
"pt-PT": "Holandês",
- "ro-RO": "Olandeză",
+ "ro-RO": "Olandeza",
"ja-JP": "オランダ語",
"zh-Hans-CN": "荷兰语",
"nl-NL": "Nederlands",
"es-ES": "Neerlandés",
+ "sv-SE": "Nederländska",
},
},
{
@@ -300,6 +310,24 @@ export const appLanguages = [
"zh-Hans-CN": "西班牙语",
"nl-NL": "Spaans",
"es-ES": "Español",
+ "sv-SE": "Spanska",
+ },
+ },
+ {
+ code: "sv-SE",
+ label: {
+ "en-US": "Swedish",
+ "de-DE": "Schwedisch",
+ "pt-BR": "Sueco",
+ "fr-FR": "Suédois",
+ "zh-Hant-TW": "瑞典語",
+ "pt-PT": "Sueco",
+ "ro-RO": "Suedeză",
+ "ja-JP": "スウェーデン語",
+ "zh-Hans-CN": "瑞典语",
+ "nl-NL": "Zweeds",
+ "es-ES": "Sueco",
+ "sv-SE": "Svenska",
},
},
];
diff --git a/apps/web/lib/time.test.ts b/apps/web/lib/time.test.ts
index 5b17cd0b1a..9b28d12acb 100644
--- a/apps/web/lib/time.test.ts
+++ b/apps/web/lib/time.test.ts
@@ -69,6 +69,12 @@ describe("Time Utilities", () => {
const oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000);
expect(timeSince(oneHourAgo.toISOString(), "de-DE")).toBe("vor etwa 1 Stunde");
});
+
+ test("should format time since in Swedish", () => {
+ const now = new Date();
+ const oneHourAgo = new Date(now.getTime() - 60 * 60 * 1000);
+ expect(timeSince(oneHourAgo.toISOString(), "sv-SE")).toBe("ungefär en timme sedan");
+ });
});
describe("timeSinceDate", () => {
diff --git a/apps/web/lib/time.ts b/apps/web/lib/time.ts
index 30e4276e21..08c3d0d9cb 100644
--- a/apps/web/lib/time.ts
+++ b/apps/web/lib/time.ts
@@ -1,5 +1,5 @@
import { formatDistance, intlFormat } from "date-fns";
-import { de, enUS, es, fr, ja, nl, pt, ptBR, ro, zhCN, zhTW } from "date-fns/locale";
+import { de, enUS, es, fr, ja, nl, pt, ptBR, ro, sv, zhCN, zhTW } from "date-fns/locale";
import { TUserLocale } from "@formbricks/types/user";
export const convertDateString = (dateString: string | null) => {
@@ -93,6 +93,8 @@ const getLocaleForTimeSince = (locale: TUserLocale) => {
return fr;
case "nl-NL":
return nl;
+ case "sv-SE":
+ return sv;
case "zh-Hant-TW":
return zhTW;
case "pt-PT":
diff --git a/apps/web/lib/utils/locale.test.ts b/apps/web/lib/utils/locale.test.ts
index 6c9ec1a6ff..6330d98f3f 100644
--- a/apps/web/lib/utils/locale.test.ts
+++ b/apps/web/lib/utils/locale.test.ts
@@ -1,6 +1,7 @@
import * as nextHeaders from "next/headers";
import { describe, expect, test, vi } from "vitest";
import { AVAILABLE_LOCALES, DEFAULT_LOCALE } from "@/lib/constants";
+import { appLanguages } from "@/lib/i18n/utils";
import { findMatchingLocale } from "./locale";
// Mock the Next.js headers function
@@ -84,4 +85,25 @@ describe("locale", () => {
expect(result).toBe(germanLocale);
expect(nextHeaders.headers).toHaveBeenCalled();
});
+
+ test("Swedish locale (sv-SE) is available and selectable", async () => {
+ // Verify sv-SE is in AVAILABLE_LOCALES
+ expect(AVAILABLE_LOCALES).toContain("sv-SE");
+
+ // Verify Swedish has a language entry with proper labels
+ const swedishLanguage = appLanguages.find((lang) => lang.code === "sv-SE");
+ expect(swedishLanguage).toBeDefined();
+ expect(swedishLanguage?.label["en-US"]).toBe("Swedish");
+ expect(swedishLanguage?.label["sv-SE"]).toBe("Svenska");
+
+ // Verify the locale can be matched from Accept-Language header
+ vi.mocked(nextHeaders.headers).mockReturnValue({
+ get: vi.fn().mockReturnValue("sv-SE,en-US"),
+ } as any);
+
+ const result = await findMatchingLocale();
+
+ expect(result).toBe("sv-SE");
+ expect(nextHeaders.headers).toHaveBeenCalled();
+ });
});
diff --git a/apps/web/locales/sv-SE.json b/apps/web/locales/sv-SE.json
new file mode 100644
index 0000000000..d46be0c3fb
--- /dev/null
+++ b/apps/web/locales/sv-SE.json
@@ -0,0 +1,2937 @@
+{
+ "auth": {
+ "continue_with_azure": "Fortsätt med Microsoft",
+ "continue_with_email": "Fortsätt med e-post",
+ "continue_with_github": "Fortsätt med GitHub",
+ "continue_with_google": "Fortsätt med Google",
+ "continue_with_oidc": "Fortsätt med {oidcDisplayName}",
+ "continue_with_openid": "Fortsätt med OpenID",
+ "continue_with_saml": "Fortsätt med SAML SSO",
+ "email-change": {
+ "confirm_password_description": "Vänligen bekräfta ditt lösenord innan du ändrar din e-postadress",
+ "email_change_success": "E-postadressen ändrades",
+ "email_change_success_description": "Du har ändrat din e-postadress. Vänligen logga in med din nya e-postadress.",
+ "email_verification_failed": "E-postverifiering misslyckades",
+ "email_verification_loading": "E-postverifiering pågår...",
+ "email_verification_loading_description": "Vi uppdaterar din e-postadress i vårt system. Detta kan ta några sekunder.",
+ "invalid_or_expired_token": "E-poständring misslyckades. Din token är ogiltig eller har gått ut.",
+ "new_email": "Ny e-post",
+ "old_email": "Gammal e-post"
+ },
+ "forgot-password": {
+ "back_to_login": "Tillbaka till inloggning",
+ "email-sent": {
+ "heading": "Lösenordsåterställning begärd",
+ "text": "Om ett konto med denna e-postadress finns kommer du att få instruktioner för lösenordsåterställning inom kort."
+ },
+ "reset": {
+ "confirm_password": "Bekräfta lösenord",
+ "new_password": "Nytt lösenord",
+ "no_token_provided": "Ingen token angiven",
+ "passwords_do_not_match": "Lösenorden matchar inte",
+ "success": {
+ "heading": "Lösenordet har återställts",
+ "text": "Du kan nu logga in med ditt nya lösenord"
+ }
+ },
+ "reset_password": "Återställ lösenord",
+ "reset_password_description": "Du kommer att loggas ut för att återställa ditt lösenord."
+ },
+ "invite": {
+ "create_account": "Skapa ett konto",
+ "email_does_not_match": "Hoppsan! Fel e-post 🤦",
+ "email_does_not_match_description": "E-postadressen i inbjudan matchar inte din.",
+ "go_to_app": "Gå till appen",
+ "happy_to_have_you": "Kul att ha dig här 🤗",
+ "happy_to_have_you_description": "Vänligen skapa ett konto eller logga in.",
+ "invite_expired": "Inbjudan har gått ut 😥",
+ "invite_expired_description": "Inbjudningar är giltiga i 7 dagar. Vänligen begär en ny inbjudan.",
+ "invite_not_found": "Inbjudan hittades inte 😥",
+ "invite_not_found_description": "Inbjudningskoden kan inte hittas eller har redan använts.",
+ "login": "Logga in",
+ "welcome_to_organization": "Du är med 🎉",
+ "welcome_to_organization_description": "Välkommen till organisationen."
+ },
+ "last_used": "Senast använd",
+ "login": {
+ "backup_code": "Reservkod",
+ "create_an_account": "Skapa ett konto",
+ "enter_your_backup_code": "Ange din reservkod",
+ "enter_your_two_factor_authentication_code": "Ange din tvåfaktorsautentiseringskod",
+ "forgot_your_password": "Glömt ditt lösenord?",
+ "login_to_your_account": "Logga in på ditt konto",
+ "login_with_email": "Logga in med e-post",
+ "lost_access": "Förlorad åtkomst?",
+ "new_to_formbricks": "Ny på Formbricks?",
+ "use_a_backup_code": "Använd en reservkod"
+ },
+ "saml_connection_error": "Något gick fel. Kontrollera din appkonsol för mer information.",
+ "signup": {
+ "captcha_failed": "Captcha misslyckades",
+ "have_an_account": "Har du ett konto?",
+ "log_in": "Logga in",
+ "password_validation_contain_at_least_1_number": "Innehålla minst 1 siffra",
+ "password_validation_minimum_8_and_maximum_128_characters": "Minst 8 och högst 128 tecken",
+ "password_validation_uppercase_and_lowercase": "Blandning av stora och små bokstäver",
+ "please_verify_captcha": "Vänligen verifiera reCAPTCHA",
+ "privacy_policy": "Integritetspolicy",
+ "terms_of_service": "Användarvillkor",
+ "title": "Skapa ditt Formbricks-konto"
+ },
+ "signup_without_verification_success": {
+ "user_successfully_created": "Användare skapades",
+ "user_successfully_created_info": "Vi har kontrollerat om det finns ett konto kopplat till {email}. Om inget fanns har vi skapat ett åt dig. Om ett konto redan fanns gjordes inga ändringar. Vänligen logga in nedan för att fortsätta."
+ },
+ "verification-requested": {
+ "invalid_email_address": "Ogiltig e-postadress",
+ "invalid_token": "Ogiltig token ☹️",
+ "new_email_verification_success": "Om adressen är giltig har ett verifieringsmeddelande skickats.",
+ "no_email_provided": "Ingen e-post angiven",
+ "please_confirm_your_email_address": "Vänligen bekräfta din e-postadress",
+ "resend_verification_email": "Skicka verifieringsmeddelande igen",
+ "verification_email_resent_successfully": "Verifieringsmeddelande skickat! Kontrollera din inkorg.",
+ "verification_email_successfully_sent_info": "Om det finns ett konto kopplat till {email} har vi skickat en verifieringslänk till den adressen. Kontrollera din inkorg för att slutföra registreringen.",
+ "you_didnt_receive_an_email_or_your_link_expired": "Fick du ingen e-post eller har din länk gått ut?"
+ },
+ "verify": {
+ "no_token_provided": "Ingen token angiven",
+ "verifying": "Verifierar..."
+ }
+ },
+ "billing_confirmation": {
+ "back_to_billing_overview": "Tillbaka till faktureringsöversikt",
+ "thanks_for_upgrading": "Tack så mycket för att du uppgraderar din Formbricks-prenumeration.",
+ "upgrade_successful": "Uppgradering lyckades"
+ },
+ "c": {
+ "link_expired": "Din länk har gått ut.",
+ "link_expired_description": "Länken du använde är inte längre giltig."
+ },
+ "common": {
+ "accepted": "Accepterad",
+ "account": "Konto",
+ "account_settings": "Kontoinställningar",
+ "action": "Åtgärd",
+ "actions": "Åtgärder",
+ "actions_description": "Kod- och No-Code-åtgärder används för att utlösa enkäter i appar och på webbplatser.",
+ "active_surveys": "Aktiva enkäter",
+ "activity": "Aktivitet",
+ "add": "Lägg till",
+ "add_action": "Lägg till åtgärd",
+ "add_filter": "Lägg till filter",
+ "add_logo": "Lägg till logotyp",
+ "add_member": "Lägg till medlem",
+ "add_new_project": "Lägg till nytt projekt",
+ "add_project": "Lägg till projekt",
+ "add_to_team": "Lägg till i team",
+ "all": "Alla",
+ "all_questions": "Alla frågor",
+ "allow": "Tillåt",
+ "allow_users_to_exit_by_clicking_outside_the_survey": "Tillåt användare att avsluta genom att klicka utanför enkäten",
+ "an_unknown_error_occurred_while_deleting_table_items": "Ett okänt fel uppstod vid borttagning av {type}",
+ "and": "Och",
+ "and_response_limit_of": "och svarsgräns på",
+ "anonymous": "Anonym",
+ "api_keys": "API-nycklar",
+ "app": "App",
+ "app_survey": "App-enkät",
+ "apply_filters": "Tillämpa filter",
+ "are_you_sure": "Är du säker?",
+ "attributes": "Attribut",
+ "back": "Tillbaka",
+ "billing": "Fakturering",
+ "booked": "Bokad",
+ "bottom_left": "Nedre vänster",
+ "bottom_right": "Nedre höger",
+ "cancel": "Avbryt",
+ "centered_modal": "Centrerad modal",
+ "choices": "Val",
+ "choose_environment": "Välj miljö",
+ "choose_organization": "Välj organisation",
+ "choose_project": "Välj projekt",
+ "clear_all": "Rensa allt",
+ "clear_filters": "Rensa filter",
+ "clear_selection": "Rensa urval",
+ "click": "Klicka",
+ "click_to_filter": "Klicka för att filtrera",
+ "clicks": "Klick",
+ "close": "Stäng",
+ "code": "Kod",
+ "collapse_rows": "Dölj rader",
+ "completed": "Slutförd",
+ "configuration": "Konfiguration",
+ "confirm": "Bekräfta",
+ "connect": "Anslut",
+ "connect_formbricks": "Anslut Formbricks",
+ "connected": "Ansluten",
+ "contacts": "Kontakter",
+ "continue": "Fortsätt",
+ "copied": "Kopierad",
+ "copied_to_clipboard": "Kopierad till urklipp",
+ "copy": "Kopiera",
+ "copy_code": "Kopiera kod",
+ "copy_link": "Kopiera länk",
+ "count_contacts": "{value, plural, one {{value} kontakt} other {{value} kontakter}}",
+ "count_responses": "{value, plural, one {{value} svar} other {{value} svar}}",
+ "create_new_organization": "Skapa ny organisation",
+ "create_project": "Skapa projekt",
+ "create_segment": "Skapa segment",
+ "create_survey": "Skapa enkät",
+ "created": "Skapad",
+ "created_at": "Skapad",
+ "created_by": "Skapad av",
+ "customer_success": "Kundframgång",
+ "dark_overlay": "Mörkt överlägg",
+ "date": "Datum",
+ "default": "Standard",
+ "delete": "Ta bort",
+ "description": "Beskrivning",
+ "dev_env": "Utvecklingsmiljö",
+ "development_environment_banner": "Du är i en utvecklingsmiljö. Konfigurera den för att testa enkäter, åtgärder och attribut.",
+ "disable": "Inaktivera",
+ "disallow": "Tillåt inte",
+ "discard": "Förkasta",
+ "dismissed": "Avvisad",
+ "docs": "Dokumentation",
+ "documentation": "Dokumentation",
+ "download": "Ladda ner",
+ "draft": "Utkast",
+ "duplicate": "Duplicera",
+ "e_commerce": "E-handel",
+ "edit": "Redigera",
+ "email": "E-post",
+ "ending_card": "Avslutningskort",
+ "enter_url": "Ange URL",
+ "enterprise_license": "Företagslicens",
+ "environment_not_found": "Miljö hittades inte",
+ "environment_notice": "Du är för närvarande i {environment}-miljön.",
+ "error": "Fel",
+ "error_component_description": "Denna resurs finns inte eller så har du inte de nödvändiga rättigheterna för att komma åt den.",
+ "error_component_title": "Fel vid laddning av resurser",
+ "error_rate_limit_description": "Maximalt antal förfrågningar har nåtts. Försök igen senare.",
+ "error_rate_limit_title": "Begränsningsgräns överskriden",
+ "expand_rows": "Visa rader",
+ "failed_to_copy_to_clipboard": "Misslyckades att kopiera till urklipp",
+ "failed_to_load_organizations": "Misslyckades att ladda organisationer",
+ "failed_to_load_projects": "Misslyckades att ladda projekt",
+ "finish": "Slutför",
+ "follow_these": "Följ dessa",
+ "formbricks_version": "Formbricks-version",
+ "full_name": "Fullständigt namn",
+ "gathering_responses": "Samlar in svar",
+ "general": "Allmänt",
+ "generate": "Generera",
+ "go_back": "Gå tillbaka",
+ "go_to_dashboard": "Gå till instrumentpanelen",
+ "hidden": "Dold",
+ "hidden_field": "Dolt fält",
+ "hidden_fields": "Dolda fält",
+ "hide_column": "Dölj kolumn",
+ "image": "Bild",
+ "images": "Bilder",
+ "import": "Importera",
+ "impressions": "Visningar",
+ "imprint": "Impressum",
+ "in_progress": "Pågående",
+ "inactive_surveys": "Inaktiva enkäter",
+ "input_type": "Inmatningstyp",
+ "integration": "integration",
+ "integrations": "Integrationer",
+ "invalid_date": "Ogiltigt datum",
+ "invalid_file_name": "Ogiltigt filnamn, vänligen byt namn på din fil och försök igen",
+ "invalid_file_type": "Ogiltig filtyp",
+ "invite": "Bjud in",
+ "invite_them": "Bjud in dem",
+ "key": "Nyckel",
+ "label": "Etikett",
+ "language": "Språk",
+ "learn_more": "Läs mer",
+ "light_overlay": "Ljust överlägg",
+ "limits_reached": "Gränser nådda",
+ "link": "Länk",
+ "link_survey": "Länkenkät",
+ "link_surveys": "Länkenkäter",
+ "load_more": "Ladda mer",
+ "loading": "Laddar",
+ "logo": "Logotyp",
+ "logout": "Logga ut",
+ "look_and_feel": "Utseende",
+ "manage": "Hantera",
+ "marketing": "Marknadsföring",
+ "maximum": "Maximum",
+ "member": "Medlem",
+ "members": "Medlemmar",
+ "membership_not_found": "Medlemskap hittades inte",
+ "metadata": "Metadata",
+ "minimum": "Minimum",
+ "mobile_overlay_app_works_best_on_desktop": "Formbricks fungerar bäst på en större skärm. Byt till en annan enhet för att hantera eller bygga enkäter.",
+ "mobile_overlay_surveys_look_good": "Oroa dig inte – dina enkäter ser bra ut på alla enheter och skärmstorlekar!",
+ "mobile_overlay_title": "Hoppsan, liten skärm upptäckt!",
+ "move_down": "Flytta ner",
+ "move_up": "Flytta upp",
+ "multiple_languages": "Flera språk",
+ "name": "Namn",
+ "new": "Ny",
+ "new_version_available": "Formbricks {version} är här. Uppgradera nu!",
+ "next": "Nästa",
+ "no_background_image_found": "Ingen bakgrundsbild hittades.",
+ "no_code": "Ingen kod",
+ "no_files_uploaded": "Inga filer laddades upp",
+ "no_quotas_found": "Inga kvoter hittades",
+ "no_result_found": "Inget resultat hittades",
+ "no_results": "Inga resultat",
+ "no_surveys_found": "Inga enkäter hittades.",
+ "none_of_the_above": "Inget av ovanstående",
+ "not_authenticated": "Du är inte autentiserad för att utföra denna åtgärd.",
+ "not_authorized": "Ej behörig",
+ "not_connected": "Ej ansluten",
+ "note": "Anteckning",
+ "notifications": "Aviseringar",
+ "number": "Nummer",
+ "off": "Av",
+ "on": "På",
+ "only_one_file_allowed": "Endast en fil är tillåten",
+ "only_owners_managers_and_manage_access_members_can_perform_this_action": "Endast ägare och chefer kan utföra denna åtgärd.",
+ "option_id": "Alternativ-ID",
+ "option_ids": "Alternativ-ID:n",
+ "or": "eller",
+ "organization": "Organisation",
+ "organization_id": "Organisations-ID",
+ "organization_not_found": "Organisation hittades inte",
+ "organization_settings": "Organisationsinställningar",
+ "organization_teams_not_found": "Organisationsteam hittades inte",
+ "other": "Annat",
+ "others": "Andra",
+ "overview": "Översikt",
+ "password": "Lösenord",
+ "paused": "Pausad",
+ "pending_downgrade": "Väntande nedgradering",
+ "people_manager": "Personalchef",
+ "person": "Person",
+ "phone": "Telefon",
+ "photo_by": "Foto av",
+ "pick_a_date": "Välj ett datum",
+ "picture": "Bild",
+ "placeholder": "Platshållare",
+ "please_select_at_least_one_survey": "Vänligen välj minst en enkät",
+ "please_select_at_least_one_trigger": "Vänligen välj minst en utlösare",
+ "please_upgrade_your_plan": "Vänligen uppgradera din plan.",
+ "preview": "Förhandsgranska",
+ "preview_survey": "Förhandsgranska enkät",
+ "privacy": "Integritetspolicy",
+ "product_manager": "Produktchef",
+ "profile": "Profil",
+ "profile_id": "Profil-ID",
+ "progress": "Framsteg",
+ "project_configuration": "Projektkonfiguration",
+ "project_creation_description": "Organisera enkäter i projekt för bättre åtkomstkontroll.",
+ "project_id": "Projekt-ID",
+ "project_name": "Projektnamn",
+ "project_name_placeholder": "t.ex. Formbricks",
+ "project_not_found": "Projekt hittades inte",
+ "project_permission_not_found": "Projektbehörighet hittades inte",
+ "projects": "Projekt",
+ "question": "fråga",
+ "question_id": "Fråge-ID",
+ "questions": "Frågor",
+ "quota": "Kvot",
+ "quotas": "Kvoter",
+ "quotas_description": "Begränsa antalet svar du får från deltagare som uppfyller vissa kriterier.",
+ "read_docs": "Läs dokumentation",
+ "recipients": "Mottagare",
+ "remove": "Ta bort",
+ "reorder_and_hide_columns": "Ordna om och dölj kolumner",
+ "report_survey": "Rapportera enkät",
+ "request_pricing": "Begär prissättning",
+ "request_trial_license": "Begär provlicens",
+ "reset_to_default": "Återställ till standard",
+ "response": "Svar",
+ "responses": "Svar",
+ "restart": "Starta om",
+ "role": "Roll",
+ "role_organization": "Roll (Organisation)",
+ "saas": "SaaS",
+ "sales": "Försäljning",
+ "save": "Spara",
+ "save_changes": "Spara ändringar",
+ "saving": "Sparar",
+ "search": "Sök",
+ "security": "Säkerhet",
+ "segment": "Segment",
+ "segments": "Segment",
+ "select": "Välj",
+ "select_all": "Välj alla",
+ "select_filter": "Välj filter",
+ "select_survey": "Välj enkät",
+ "select_teams": "Välj team",
+ "selected": "Vald",
+ "selected_questions": "Valda frågor",
+ "selection": "Urval",
+ "selections": "Urval",
+ "send_test_email": "Skicka testmeddelande",
+ "session_not_found": "Session hittades inte",
+ "settings": "Inställningar",
+ "share_feedback": "Dela feedback",
+ "show": "Visa",
+ "show_response_count": "Visa antal svar",
+ "shown": "Visad",
+ "size": "Storlek",
+ "skipped": "Överhoppad",
+ "skips": "Överhoppningar",
+ "some_files_failed_to_upload": "Några filer misslyckades att laddas upp",
+ "something_went_wrong": "Något gick fel",
+ "something_went_wrong_please_try_again": "Något gick fel. Försök igen.",
+ "sort_by": "Sortera efter",
+ "start_free_trial": "Starta gratis provperiod",
+ "status": "Status",
+ "step_by_step_manual": "Steg-för-steg-manual",
+ "storage_not_configured": "Fillagring är inte konfigurerad, uppladdningar kommer sannolikt att misslyckas",
+ "styling": "Styling",
+ "submit": "Skicka",
+ "summary": "Sammanfattning",
+ "survey": "Enkät",
+ "survey_completed": "Enkät slutförd.",
+ "survey_id": "Enkät-ID",
+ "survey_languages": "Enkätspråk",
+ "survey_live": "Enkät live",
+ "survey_not_found": "Enkät hittades inte",
+ "survey_paused": "Enkät pausad.",
+ "survey_type": "Enkättyp",
+ "surveys": "Enkäter",
+ "switch_to": "Byt till {environment}",
+ "table_items_deleted_successfully": "{type} borttagna",
+ "table_settings": "Tabellinställningar",
+ "tags": "Taggar",
+ "targeting": "Målgrupp",
+ "team": "Team",
+ "team_access": "Teamåtkomst",
+ "team_id": "Team-ID",
+ "team_name": "Teamnamn",
+ "teams": "Åtkomstkontroll",
+ "teams_not_found": "Team hittades inte",
+ "text": "Text",
+ "time": "Tid",
+ "time_to_finish": "Tid att slutföra",
+ "title": "Titel",
+ "top_left": "Övre vänster",
+ "top_right": "Övre höger",
+ "try_again": "Försök igen",
+ "type": "Typ",
+ "unlock_more_projects_with_a_higher_plan": "Lås upp fler projekt med en högre plan.",
+ "update": "Uppdatera",
+ "updated": "Uppdaterad",
+ "updated_at": "Uppdaterad",
+ "upload": "Ladda upp",
+ "upload_failed": "Uppladdning misslyckades. Vänligen försök igen.",
+ "upload_input_description": "Klicka eller dra för att ladda upp filer.",
+ "url": "URL",
+ "user": "Användare",
+ "user_id": "Användar-ID",
+ "user_not_found": "Användare hittades inte",
+ "variable": "Variabel",
+ "variable_ids": "Variabel-ID:n",
+ "variables": "Variabler",
+ "verified_email": "Verifierad e-post",
+ "video": "Video",
+ "warning": "Varning",
+ "we_were_unable_to_verify_your_license_because_the_license_server_is_unreachable": "Vi kunde inte verifiera din licens eftersom licensservern inte kan nås.",
+ "webhook": "Webhook",
+ "webhooks": "Webhooks",
+ "website_and_app_connection": "Webbplats- och appanslutning",
+ "website_app_survey": "Webbplats- och appenkät",
+ "website_survey": "Webbplatsenkät",
+ "welcome_card": "Välkomstkort",
+ "you": "Du",
+ "you_are_downgraded_to_the_community_edition": "Du har nedgraderats till Community Edition.",
+ "you_are_not_authorised_to_perform_this_action": "Du är inte behörig att utföra denna åtgärd.",
+ "you_have_reached_your_limit_of_project_limit": "Du har nått din gräns på {projectLimit} projekt.",
+ "you_have_reached_your_monthly_miu_limit_of": "Du har nått din månatliga MIU-gräns på",
+ "you_have_reached_your_monthly_response_limit_of": "Du har nått din månatliga svarsgräns på",
+ "you_will_be_downgraded_to_the_community_edition_on_date": "Du kommer att nedgraderas till Community Edition den {date}."
+ },
+ "emails": {
+ "accept": "Acceptera",
+ "click_or_drag_to_upload_files": "Klicka eller dra för att ladda upp filer.",
+ "email_customization_preview_email_heading": "Hej {userName}",
+ "email_customization_preview_email_subject": "Formbricks förhandsgranskning av e-postanpassning",
+ "email_customization_preview_email_text": "Detta är en förhandsgranskning av e-post för att visa vilken logotyp som kommer att renderas i e-postmeddelandena.",
+ "email_footer_text_1": "Ha en bra dag!",
+ "email_footer_text_2": "Formbricks-teamet",
+ "email_template_text_1": "Detta e-postmeddelande skickades via Formbricks.",
+ "embed_survey_preview_email_didnt_request": "Begärde du inte detta?",
+ "embed_survey_preview_email_environment_id": "Miljö-ID",
+ "embed_survey_preview_email_fight_spam": "Hjälp oss bekämpa spam och vidarebefordra detta meddelande till hola@formbricks.com",
+ "embed_survey_preview_email_heading": "Förhandsgranska e-postinbäddning",
+ "embed_survey_preview_email_subject": "Formbricks förhandsgranskning av e-postenkät",
+ "embed_survey_preview_email_text": "Så här ser kodsnutten ut inbäddad i ett e-postmeddelande:",
+ "forgot_password_email_change_password": "Ändra lösenord",
+ "forgot_password_email_did_not_request": "Om du inte begärde detta, vänligen ignorera detta e-postmeddelande.",
+ "forgot_password_email_heading": "Ändra lösenord",
+ "forgot_password_email_link_valid_for_24_hours": "Länken är giltig i 24 timmar.",
+ "forgot_password_email_subject": "Återställ ditt Formbricks-lösenord",
+ "forgot_password_email_text": "Du har begärt en länk för att ändra ditt lösenord. Du kan göra detta genom att klicka på länken nedan:",
+ "imprint": "Impressum",
+ "invite_accepted_email_heading": "Hej",
+ "invite_accepted_email_subject": "Du har fått en ny organisationsmedlem!",
+ "invite_accepted_email_text_par1": "Vi vill bara meddela dig att",
+ "invite_accepted_email_text_par2": "accepterade din inbjudan. Ha kul med samarbetet!",
+ "invite_email_button_label": "Gå med i organisation",
+ "invite_email_heading": "Hej",
+ "invite_email_text_par1": "Din kollega",
+ "invite_email_text_par2": "bjöd in dig att gå med dem på Formbricks. För att acceptera inbjudan, vänligen klicka på länken nedan:",
+ "invite_member_email_subject": "Du är inbjuden att samarbeta på Formbricks!",
+ "new_email_verification_text": "För att verifiera din nya e-postadress, vänligen klicka på knappen nedan:",
+ "password_changed_email_heading": "Lösenord ändrat",
+ "password_changed_email_text": "Ditt lösenord har ändrats.",
+ "password_reset_notify_email_subject": "Ditt Formbricks-lösenord har ändrats",
+ "privacy_policy": "Integritetspolicy",
+ "reject": "Avvisa",
+ "render_email_response_value_file_upload_response_link_not_included": "Länk till uppladdad fil ingår inte av dataskyddsskäl",
+ "response_finished_email_subject": "Ett svar för {surveyName} har slutförts ✅",
+ "response_finished_email_subject_with_email": "{personEmail} har precis slutfört din {surveyName}-enkät ✅",
+ "schedule_your_meeting": "Boka ditt möte",
+ "select_a_date": "Välj ett datum",
+ "survey_response_finished_email_congrats": "Grattis, du har fått ett nytt svar på din enkät! Någon har precis slutfört din enkät: {surveyName}",
+ "survey_response_finished_email_dont_want_notifications": "Vill du inte få dessa aviseringar?",
+ "survey_response_finished_email_hey": "Hej 👋",
+ "survey_response_finished_email_turn_off_notifications_for_all_new_forms": "Stäng av aviseringar för alla nyskapade formulär",
+ "survey_response_finished_email_turn_off_notifications_for_this_form": "Stäng av aviseringar för detta formulär",
+ "survey_response_finished_email_view_more_responses": "Visa {responseCount} fler svar",
+ "survey_response_finished_email_view_survey_summary": "Visa enkätsammanfattning",
+ "verification_email_click_on_this_link": "Du kan också klicka på denna länk:",
+ "verification_email_heading": "Nästan där!",
+ "verification_email_hey": "Hej 👋",
+ "verification_email_if_expired_request_new_token": "Om den har gått ut, vänligen begär en ny token här:",
+ "verification_email_link_valid_for_24_hours": "Länken är giltig i 24 timmar.",
+ "verification_email_request_new_verification": "Begär ny verifiering",
+ "verification_email_subject": "Vänligen verifiera din e-post för att använda Formbricks",
+ "verification_email_survey_name": "Enkätnamn",
+ "verification_email_take_survey": "Ta enkäten",
+ "verification_email_text": "För att börja använda Formbricks, vänligen verifiera din e-post nedan:",
+ "verification_email_thanks": "Tack för att du verifierade din e-post!",
+ "verification_email_to_fill_survey": "För att fylla i enkäten, vänligen klicka på knappen nedan:",
+ "verification_email_verify_email": "Verifiera e-post",
+ "verification_new_email_subject": "Verifiering av e-postbyte",
+ "verification_security_notice": "Om du inte begärde denna e-poständring, vänligen ignorera detta e-postmeddelande eller kontakta support omedelbart.",
+ "verified_link_survey_email_subject": "Din enkät är redo att fyllas i."
+ },
+ "environments": {
+ "actions": {
+ "action_copied_successfully": "Åtgärd kopierad",
+ "action_copy_failed": "Kopiering av åtgärd misslyckades",
+ "action_created_successfully": "Åtgärd skapad",
+ "action_deleted_successfully": "Åtgärd borttagen",
+ "action_type": "Åtgärdstyp",
+ "action_updated_successfully": "Åtgärd uppdaterad",
+ "action_with_key_already_exists": "Åtgärd med nyckel {key} finns redan",
+ "action_with_name_already_exists": "Åtgärd med namn {name} finns redan",
+ "add_css_class_or_id": "Lägg till CSS-klass eller id",
+ "add_regular_expression_here": "Lägg till ett reguljärt uttryck här",
+ "add_url": "Lägg till URL",
+ "and": "OCH",
+ "click": "Klick",
+ "contains": "Innehåller",
+ "create_action": "Skapa åtgärd",
+ "css_selector": "CSS-selektor",
+ "delete_action_text": "Är du säker på att du vill ta bort denna åtgärd? Detta tar även bort denna åtgärd som utlösare från alla dina enkäter.",
+ "does_not_contain": "Innehåller inte",
+ "does_not_exactly_match": "Matchar inte exakt",
+ "eg_clicked_download": "T.ex. Klickade Ladda ner",
+ "eg_download_cta_click_on_home": "t.ex. download_cta_click_on_home",
+ "eg_install_app": "T.ex. Installera App",
+ "ends_with": "Slutar med",
+ "enter_a_url_to_see_if_a_user_visiting_it_would_be_tracked": "Ange en URL för att se om en användare som besöker den skulle spåras.",
+ "enter_url": "t.ex. https://app.com/dashboard",
+ "exactly_matches": "Matchar exakt",
+ "exit_intent": "Avslutsavsikt",
+ "fifty_percent_scroll": "50% Scrollning",
+ "how_do_code_actions_work": "Hur fungerar kodåtgärder?",
+ "if_a_user_clicks_a_button_with_a_specific_css_class_or_id": "Om en användare klickar på en knapp med en specifik CSS-klass eller id",
+ "if_a_user_clicks_a_button_with_a_specific_text": "Om en användare klickar på en knapp med en specifik text",
+ "in_your_code_read_more_in_our": "i din kod. Läs mer i vår",
+ "inner_text": "Inre text",
+ "invalid_action_type_code": "Ogiltig åtgärdstyp för kodåtgärd.",
+ "invalid_action_type_no_code": "Ogiltig åtgärdstyp för noCode-åtgärd.",
+ "invalid_css_selector": "Ogiltig CSS-selektor",
+ "invalid_match_type": "Det valda alternativet är inte tillgängligt.",
+ "invalid_regex": "Vänligen använd ett giltigt reguljärt uttryck.",
+ "limit_the_pages_on_which_this_action_gets_captured": "Begränsa sidorna där denna åtgärd registreras",
+ "limit_to_specific_pages": "Begränsa till specifika sidor",
+ "matches_regex": "Matchar regex",
+ "on_all_pages": "På alla sidor",
+ "or": "ELLER",
+ "page_filter": "Sidfilter",
+ "page_view": "Sidvisning",
+ "select_match_type": "Välj matchningstyp",
+ "starts_with": "Börjar med",
+ "test_match": "Testa matchning",
+ "test_your_url": "Testa din URL",
+ "this_action_was_created_automatically_you_cannot_make_changes_to_it": "Denna åtgärd skapades automatiskt. Du kan inte göra ändringar i den.",
+ "this_action_will_be_triggered_when_the_page_is_loaded": "Denna åtgärd utlöses när sidan laddas.",
+ "this_action_will_be_triggered_when_the_user_scrolls_50_percent_of_the_page": "Denna åtgärd utlöses när användaren scrollar 50% av sidan.",
+ "this_action_will_be_triggered_when_the_user_tries_to_leave_the_page": "Denna åtgärd utlöses när användaren försöker lämna sidan.",
+ "this_is_a_code_action_please_make_changes_in_your_code_base": "Detta är en kodåtgärd. Vänligen gör ändringar i din kodbas.",
+ "track_new_user_action": "Spåra ny användaråtgärd",
+ "track_user_action_to_display_surveys_or_create_user_segment": "Spåra användaråtgärder för att visa enkäter eller skapa användarsegment.",
+ "url": "URL",
+ "user_actions": "Användaråtgärder",
+ "user_clicked_download_button": "Användaren klickade på Ladda ner-knappen",
+ "what_did_your_user_do": "Vad gjorde din användare?",
+ "what_is_the_user_doing": "Vad gör användaren?",
+ "you_can_track_code_action_anywhere_in_your_app_using": "Du kan spåra kodåtgärder var som helst i din app med",
+ "your_survey_would_be_shown_on_this_url": "Din enkät skulle visas på denna URL.",
+ "your_survey_would_not_be_shown": "Din enkät skulle inte visas."
+ },
+ "connect": {
+ "congrats": "Grattis!",
+ "connection_successful_message": "Bra gjort! Vi är anslutna.",
+ "do_it_later": "Jag gör det senare",
+ "finish_onboarding": "Slutför introduktionen",
+ "headline": "Anslut din app eller webbplats",
+ "import_formbricks_and_initialize_the_widget_in_your_component": "Importera Formbricks och initiera widgeten i din komponent (t.ex. App.tsx):",
+ "insert_this_code_into_the_head_tag_of_your_website": "Infoga denna kod i head-taggen på din webbplats:",
+ "subtitle": "Det tar mindre än 4 minuter.",
+ "waiting_for_your_signal": "Väntar på din signal..."
+ },
+ "contacts": {
+ "contact_deleted_successfully": "Kontakt borttagen",
+ "contact_not_found": "Ingen sådan kontakt hittades",
+ "contacts_table_refresh": "Uppdatera kontakter",
+ "contacts_table_refresh_success": "Kontakter uppdaterade",
+ "delete_contact_confirmation": "Detta kommer att ta bort alla enkätsvar och kontaktattribut som är kopplade till denna kontakt. All målgruppsinriktning och personalisering baserad på denna kontakts data kommer att gå förlorad.",
+ "delete_contact_confirmation_with_quotas": "{value, plural, one {Detta kommer att ta bort alla enkätsvar och kontaktattribut som är kopplade till denna kontakt. All målgruppsinriktning och personalisering baserad på denna kontakts data kommer att gå förlorad. Om denna kontakt har svar som räknas mot enkätkvoter, kommer kvotantalet att minskas men kvotgränserna förblir oförändrade.} other {Detta kommer att ta bort alla enkätsvar och kontaktattribut som är kopplade till dessa kontakter. All målgruppsinriktning och personalisering baserad på dessa kontakters data kommer att gå förlorad. Om dessa kontakter har svar som räknas mot enkätkvoter, kommer kvotantalet att minskas men kvotgränserna förblir oförändrade.}}",
+ "generate_personal_link": "Generera personlig länk",
+ "generate_personal_link_description": "Välj en publicerad enkät för att generera en personlig länk för denna kontakt.",
+ "no_published_link_surveys_available": "Inga publicerade länkenkäter tillgängliga. Vänligen publicera en länkenkät först.",
+ "no_published_surveys": "Inga publicerade enkäter",
+ "no_responses_found": "Inga svar hittades",
+ "not_provided": "Ej angiven",
+ "personal_link_generated": "Personlig länk genererad",
+ "personal_link_generated_but_clipboard_failed": "Personlig länk genererad men kunde inte kopieras till urklipp: {url}",
+ "personal_survey_link": "Personlig enkätlänk",
+ "please_select_a_survey": "Vänligen välj en enkät",
+ "search_contact": "Sök kontakt",
+ "select_a_survey": "Välj en enkät",
+ "select_attribute": "Välj attribut",
+ "unlock_contacts_description": "Hantera kontakter och skicka ut riktade enkäter",
+ "unlock_contacts_title": "Lås upp kontakter med en högre plan",
+ "upload_contacts_modal_attributes_description": "Mappa kolumnerna i din CSV till attributen i Formbricks.",
+ "upload_contacts_modal_attributes_new": "Nytt attribut",
+ "upload_contacts_modal_attributes_search_or_add": "Sök eller lägg till attribut",
+ "upload_contacts_modal_attributes_should_be_mapped_to": "ska mappas till",
+ "upload_contacts_modal_attributes_title": "Attribut",
+ "upload_contacts_modal_description": "Ladda upp en CSV för att snabbt importera kontakter med attribut",
+ "upload_contacts_modal_download_example_csv": "Ladda ner exempel-CSV",
+ "upload_contacts_modal_duplicates_description": "Hur ska vi hantera om en kontakt redan finns i dina kontakter?",
+ "upload_contacts_modal_duplicates_overwrite_description": "Skriver över befintliga kontakter",
+ "upload_contacts_modal_duplicates_overwrite_title": "Skriv över",
+ "upload_contacts_modal_duplicates_skip_description": "Hoppar över dubbletter",
+ "upload_contacts_modal_duplicates_skip_title": "Hoppa över",
+ "upload_contacts_modal_duplicates_title": "Dubbletter",
+ "upload_contacts_modal_duplicates_update_description": "Uppdaterar befintliga kontakter",
+ "upload_contacts_modal_duplicates_update_title": "Uppdatera",
+ "upload_contacts_modal_pick_different_file": "Välj en annan fil",
+ "upload_contacts_modal_preview": "Här är en förhandsgranskning av dina data.",
+ "upload_contacts_modal_upload_btn": "Ladda upp kontakter",
+ "upload_contacts_success": "Kontakter uppladdade"
+ },
+ "formbricks_logo": "Formbricks-logotyp",
+ "integrations": {
+ "activepieces_integration_description": "Koppla direkt Formbricks med populära appar för att automatisera uppgifter utan kod.",
+ "additional_settings": "Ytterligare inställningar",
+ "airtable": {
+ "airtable_base": "Airtable-bas",
+ "airtable_integration": "Airtable-integration",
+ "airtable_integration_description": "Synka svar direkt med Airtable.",
+ "airtable_integration_is_not_configured": "Airtable-integration är inte konfigurerad",
+ "airtable_logo": "Airtable-logotyp",
+ "connect_with_airtable": "Anslut med Airtable",
+ "link_airtable_table": "Länka Airtable-tabell",
+ "link_new_table": "Länka ny tabell",
+ "no_bases_found": "Inga Airtable-baser hittades",
+ "no_integrations_yet": "Dina Airtable-integrationer visas här så snart du lägger till dem. ⏲️",
+ "please_create_a_base": "Vänligen skapa en bas på Airtable",
+ "please_select_a_base": "Vänligen välj en bas",
+ "please_select_a_table": "Vänligen välj en tabell",
+ "sync_responses_with_airtable": "Synka svar med en Airtable",
+ "table_name": "Tabellnamn"
+ },
+ "airtable_integration_description": "Fyll direkt din Airtable-tabell med enkätdata",
+ "connected_with_email": "Ansluten med {email}",
+ "connecting_integration_failed_please_try_again": "Anslutning av integration misslyckades. Vänligen försök igen!",
+ "create_survey_warning": "Du måste skapa en enkät för att kunna konfigurera denna integration",
+ "delete_integration": "Ta bort integration",
+ "delete_integration_confirmation": "Är du säker på att du vill ta bort denna integration?",
+ "google_sheet_integration_description": "Fyll direkt dina kalkylblad med enkätdata",
+ "google_sheets": {
+ "connect_with_google_sheets": "Anslut med Google Kalkylark",
+ "enter_a_valid_spreadsheet_url_error": "Vänligen ange en giltig kalkylblads-URL",
+ "google_connection": "Google-anslutning",
+ "google_connection_deletion_description": "Synka svar direkt med Google Kalkylark.",
+ "google_sheet_integration_is_not_configured": "Google Kalkylark-integration är inte konfigurerad i din Formbricks-instans.",
+ "google_sheet_logo": "Google Kalkylark-logotyp",
+ "google_sheet_name": "Google Kalkylark-namn",
+ "google_sheets_integration": "Google Kalkylark-integration",
+ "google_sheets_integration_description": "Synka svar direkt med Google Kalkylark.",
+ "link_google_sheet": "Länka Google Kalkylark",
+ "link_new_sheet": "Länka nytt kalkylark",
+ "no_integrations_yet": "Dina Google Kalkylark-integrationer visas här så snart du lägger till dem. ⏲️",
+ "spreadsheet_url": "Kalkylblads-URL"
+ },
+ "include_created_at": "Inkludera Skapad vid",
+ "include_hidden_fields": "Inkludera dolda fält",
+ "include_metadata": "Inkludera metadata (webbläsare, land, etc.)",
+ "include_variables": "Inkludera variabler",
+ "integration_added_successfully": "Integration tillagd",
+ "integration_removed_successfully": "Integration borttagen",
+ "integration_updated_successfully": "Integration uppdaterad",
+ "make_integration_description": "Integrera Formbricks med 1000+ appar via Make",
+ "manage_webhooks": "Hantera webhooks",
+ "n8n_integration_description": "Integrera Formbricks med 350+ appar via n8n",
+ "notion": {
+ "col_name_of_type_is_not_supported": "{col_name} av typen {type} stöds inte av Notion API. Data kommer inte att visas i din Notion-databas.",
+ "connect_with_notion": "Anslut med Notion",
+ "connected_with_workspace": "Ansluten med {workspace} arbetsyta",
+ "create_at_least_one_database_to_setup_this_integration": "Du måste skapa minst en databas för att kunna konfigurera denna integration",
+ "database_name": "Databasnamn",
+ "duplicate_connection_warning": "En anslutning med denna databas är aktiv. Vänligen gör ändringar med försiktighet.",
+ "link_database": "Länka databas",
+ "link_new_database": "Länka ny databas",
+ "link_notion_database": "Länka Notion-databas",
+ "map_formbricks_fields_to_notion_property": "Mappa Formbricks-fält till Notion-egenskap",
+ "no_databases_found": "Dina Notion-integrationer visas här så snart du lägger till dem. ⏲️",
+ "notion_integration": "Notion-integration",
+ "notion_integration_description": "Skicka svar direkt till Notion.",
+ "notion_integration_is_not_configured": "Notion-integration är inte konfigurerad i din Formbricks-instans.",
+ "notion_logo": "Notion-logotyp",
+ "please_complete_mapping_fields_with_notion_property": "Vänligen slutför mappning av fält med Notion-egenskap",
+ "please_resolve_mapping_errors": "Vänligen åtgärda mappningsfelen",
+ "please_select_a_database": "Vänligen välj en databas",
+ "please_select_at_least_one_mapping": "Vänligen välj minst en mappning",
+ "que_name_of_type_cant_be_mapped_to": "{que_name} av typen {question_label} kan inte mappas till kolumnen {col_name} av typen {col_type}. Använd istället kolumn av typen {mapped_type}.",
+ "select_a_database": "Välj databas",
+ "select_a_field_to_map": "Välj ett fält att mappa",
+ "select_a_survey_question": "Välj en enkätfråga",
+ "update_connection": "Återanslut Notion",
+ "update_connection_tooltip": "Återanslut integrationen för att inkludera nyligen tillagda databaser. Dina befintliga integrationer förblir intakta."
+ },
+ "notion_integration_description": "Skicka data till din Notion-databas",
+ "please_select_a_survey_error": "Vänligen välj en enkät",
+ "select_at_least_one_question_error": "Vänligen välj minst en fråga",
+ "slack": {
+ "already_connected_another_survey": "Du har redan anslutit en annan enkät till denna kanal.",
+ "channel_name": "Kanalnamn",
+ "connect_with_slack": "Anslut med Slack",
+ "connect_your_first_slack_channel": "Anslut din första Slack-kanal för att komma igång.",
+ "connected_with_team": "Ansluten med {team}",
+ "create_at_least_one_channel_error": "Du måste skapa minst en kanal för att kunna konfigurera denna integration",
+ "dont_see_your_channel": "Ser du inte din kanal?",
+ "link_channel": "Länka kanal",
+ "link_slack_channel": "Länka Slack-kanal",
+ "please_select_a_channel": "Vänligen välj en kanal",
+ "select_channel": "Välj kanal",
+ "slack_integration": "Slack-integration",
+ "slack_integration_description": "Skicka svar direkt till Slack.",
+ "slack_integration_is_not_configured": "Slack-integration är inte konfigurerad i din Formbricks-instans.",
+ "slack_logo": "Slack-logotyp",
+ "slack_reconnect_button": "Återanslut",
+ "slack_reconnect_button_description": "Obs: Vi ändrade nyligen vår Slack-integration för att även stödja privata kanaler. Vänligen återanslut din Slack-arbetsyta."
+ },
+ "slack_integration_description": "Anslut direkt din Slack-arbetsyta med Formbricks",
+ "to_configure_it": "för att konfigurera den.",
+ "webhook_integration_description": "Utlös webhooks baserat på åtgärder i dina enkäter",
+ "webhooks": {
+ "add_webhook": "Lägg till webhook",
+ "add_webhook_description": "Skicka enkätsvardata till en anpassad endpoint",
+ "all_current_and_new_surveys": "Alla nuvarande och nya enkäter",
+ "created_by_third_party": "Skapad av tredje part",
+ "discord_webhook_not_supported": "Discord-webhooks stöds för närvarande inte.",
+ "empty_webhook_message": "Dina webhooks visas här så snart du lägger till dem. ⏲️",
+ "endpoint_pinged": "Ja! Vi kan nå webhooken!",
+ "endpoint_pinged_error": "Kunde inte nå webhooken!",
+ "please_check_console": "Vänligen kontrollera konsolen för mer information",
+ "please_enter_a_url": "Vänligen ange en URL",
+ "response_created": "Svar skapat",
+ "response_finished": "Svar slutfört",
+ "response_updated": "Svar uppdaterat",
+ "source": "Källa",
+ "test_endpoint": "Testa endpoint",
+ "triggers": "Utlösare",
+ "webhook_added_successfully": "Webhook tillagd",
+ "webhook_delete_confirmation": "Är du säker på att du vill ta bort denna webhook? Detta kommer att stoppa alla ytterligare notifieringar.",
+ "webhook_deleted_successfully": "Webhook borttagen",
+ "webhook_name_placeholder": "Valfritt: Namnge din webhook för enkel identifiering",
+ "webhook_test_failed_due_to": "Webhook-test misslyckades på grund av",
+ "webhook_updated_successfully": "Webhook uppdaterad.",
+ "webhook_url_placeholder": "Klistra in URL:en där du vill att händelsen ska utlösas"
+ },
+ "website_or_app_integration_description": "Integrera Formbricks i din webbplats eller app",
+ "zapier_integration_description": "Integrera Formbricks med 5000+ appar via Zapier"
+ },
+ "project": {
+ "api_keys": {
+ "add_api_key": "Lägg till API-nyckel",
+ "api_key": "API-nyckel",
+ "api_key_copied_to_clipboard": "API-nyckel kopierad till urklipp",
+ "api_key_created": "API-nyckel skapad",
+ "api_key_deleted": "API-nyckel borttagen",
+ "api_key_label": "API-nyckeletikett",
+ "api_key_security_warning": "Av säkerhetsskäl visas API-nyckeln endast en gång efter skapandet. Vänligen kopiera den till din destination direkt.",
+ "api_key_updated": "API-nyckel uppdaterad",
+ "delete_api_key_confirmation": "Alla applikationer som använder denna nyckel kommer inte längre att kunna komma åt dina Formbricks-data.",
+ "duplicate_access": "Dubblerad projektåtkomst är inte tillåten",
+ "no_api_keys_yet": "Du har inga API-nycklar än",
+ "no_env_permissions_found": "Inga miljöbehörigheter hittades",
+ "organization_access": "Organisationsåtkomst",
+ "organization_access_description": "Välj läs- eller skrivbehörigheter för organisationsomfattande resurser.",
+ "permissions": "Behörigheter",
+ "project_access": "Projektåtkomst",
+ "secret": "Hemlighet",
+ "unable_to_delete_api_key": "Kunde inte ta bort API-nyckel"
+ },
+ "app-connection": {
+ "app_connection": "Appanslutning",
+ "app_connection_description": "Anslut din app eller webbplats till Formbricks.",
+ "cache_update_delay_description": "När du gör uppdateringar av enkäter, kontakter, åtgärder eller annan data kan det ta upp till 1 minut innan ändringarna visas i din lokala app som kör Formbricks SDK.",
+ "cache_update_delay_title": "Ändringar visas efter ~1 minut på grund av cachning",
+ "environment_id": "Ditt miljö-ID",
+ "environment_id_description": "Detta ID identifierar unikt denna Formbricks-miljö.",
+ "formbricks_sdk_connected": "Formbricks SDK är anslutet",
+ "formbricks_sdk_not_connected": "Formbricks SDK är ännu inte anslutet.",
+ "formbricks_sdk_not_connected_description": "Lägg till Formbricks SDK på din webbplats eller i din app för att ansluta den med Formbricks",
+ "how_to_setup": "Hur man konfigurerar",
+ "how_to_setup_description": "Följ dessa steg för att konfigurera Formbricks-widgeten i din app.",
+ "receiving_data": "Tar emot data 💃🕺",
+ "recheck": "Kontrollera igen",
+ "sdk_connection_details": "SDK-anslutningsdetaljer",
+ "sdk_connection_details_description": "Ditt unika miljö-ID och SDK-anslutnings-URL för att integrera Formbricks med din applikation.",
+ "setup_alert_description": "Följ denna steg-för-steg-guide för att ansluta din app eller webbplats på under 5 minuter.",
+ "setup_alert_title": "Hur man ansluter",
+ "webapp_url": "SDK-anslutnings-URL"
+ },
+ "general": {
+ "cannot_delete_only_project": "Detta är ditt enda projekt, det kan inte tas bort. Skapa ett nytt projekt först.",
+ "delete_project": "Ta bort projekt",
+ "delete_project_confirmation": "Är du säker på att du vill ta bort {projectName}? Denna åtgärd kan inte ångras.",
+ "delete_project_name_includes_surveys_responses_people_and_more": "Ta bort {projectName} inkl. alla enkäter, svar, personer, åtgärder och attribut.",
+ "delete_project_settings_description": "Ta bort projekt med alla enkäter, svar, personer, åtgärder och attribut. Detta kan inte ångras.",
+ "error_saving_project_information": "Fel vid sparande av projektinformation",
+ "only_owners_or_managers_can_delete_projects": "Endast ägare eller administratörer kan ta bort projekt",
+ "project_deleted_successfully": "Projekt borttaget",
+ "project_name_settings_description": "Ändra ditt projekts namn.",
+ "project_name_updated_successfully": "Projektnamn uppdaterat",
+ "recontact_waiting_time": "Projektomfattande väntetid mellan enkäter",
+ "recontact_waiting_time_settings_description": "Kontrollera hur ofta användare kan enkäteras i alla appenkäter.",
+ "this_action_cannot_be_undone": "Denna åtgärd kan inte ångras.",
+ "wait_x_days_before_showing_next_survey": "Vänta X dagar innan nästa enkät visas:",
+ "waiting_period_updated_successfully": "Vänteperiod uppdaterad",
+ "whats_your_project_called": "Vad heter ditt projekt?"
+ },
+ "languages": {
+ "add_language": "Lägg till språk",
+ "alias": "Alias",
+ "alias_tooltip": "Aliaset är ett alternativt namn för att identifiera språket i länkenkäter och SDK (valfritt)",
+ "cannot_remove_language_warning": "Du kan inte ta bort detta språk eftersom det fortfarande används i dessa enkäter:",
+ "conflict_between_identifier_and_alias": "Det finns en konflikt mellan identifieraren för ett tillagt språk och ett av dina alias. Alias och identifierare kan inte vara identiska.",
+ "conflict_between_selected_alias_and_another_language": "Det finns en konflikt mellan det valda aliaset och ett annat språk som har denna identifierare. Vänligen lägg till språket med denna identifierare till ditt projekt istället för att undvika inkonsekvenser.",
+ "delete_language_confirmation": "Är du säker på att du vill ta bort detta språk? Denna åtgärd kan inte ångras.",
+ "duplicate_language_or_language_id": "Duplicerat språk eller språk-ID",
+ "edit_languages": "Redigera språk",
+ "identifier": "Identifierare (ISO)",
+ "incomplete_translations": "Ofullständiga översättningar",
+ "language": "Språk",
+ "language_deleted_successfully": "Språk borttaget",
+ "languages_updated_successfully": "Språk uppdaterade",
+ "multi_language_surveys": "Flerspråkiga enkäter",
+ "multi_language_surveys_description": "Lägg till språk för att skapa flerspråkiga enkäter.",
+ "no_language_found": "Inget språk hittades. Lägg till ditt första språk nedan.",
+ "please_select_a_language": "Vänligen välj ett språk",
+ "remove_language": "Ta bort språk",
+ "remove_language_from_surveys_to_remove_it_from_project": "Vänligen ta bort språket från dessa enkäter för att kunna ta bort det från projektet.",
+ "search_items": "Sök objekt",
+ "translate": "Översätt"
+ },
+ "look": {
+ "add_background_color": "Lägg till bakgrundsfärg",
+ "add_background_color_description": "Lägg till en bakgrundsfärg till logotypbehållaren.",
+ "app_survey_placement": "Placering av appenkät",
+ "app_survey_placement_settings_description": "Ändra var enkäter visas i din webbapp eller webbplats.",
+ "centered_modal_overlay_color": "Centrerad modal överläggsfärg",
+ "email_customization": "E-postanpassning",
+ "email_customization_description": "Ändra utseendet på e-postmeddelanden som Formbricks skickar för din räkning.",
+ "enable_custom_styling": "Aktivera anpassad styling",
+ "enable_custom_styling_description": "Tillåt användare att åsidosätta detta tema i enkätredigeraren.",
+ "failed_to_remove_logo": "Misslyckades med att ta bort logotypen",
+ "failed_to_update_logo": "Misslyckades med att uppdatera logotypen",
+ "formbricks_branding": "Formbricks-varumärke",
+ "formbricks_branding_hidden": "Formbricks-varumärke är dolt.",
+ "formbricks_branding_settings_description": "Vi uppskattar ditt stöd men förstår om du stänger av det.",
+ "formbricks_branding_shown": "Formbricks-varumärke visas.",
+ "logo_removed_successfully": "Logotyp borttagen",
+ "logo_settings_description": "Ladda upp din företagslogotyp för att märka enkäter och länkförhandsvisningar.",
+ "logo_updated_successfully": "Logotyp uppdaterad",
+ "logo_upload_failed": "Logotypuppladdning misslyckades. Vänligen försök igen.",
+ "placement_updated_successfully": "Placering uppdaterad",
+ "remove_branding_with_a_higher_plan": "Ta bort varumärke med en högre plan",
+ "remove_logo": "Ta bort logotyp",
+ "remove_logo_confirmation": "Är du säker på att du vill ta bort logotypen?",
+ "replace_logo": "Ersätt logotyp",
+ "reset_styling": "Återställ styling",
+ "reset_styling_confirmation": "Är du säker på att du vill återställa stylingen till standard?",
+ "show_formbricks_branding_in": "Visa Formbricks-varumärke i {type}-enkäter",
+ "show_powered_by_formbricks": "Visa 'Drivs av Formbricks'-signatur",
+ "styling_updated_successfully": "Styling uppdaterad",
+ "theme": "Tema",
+ "theme_settings_description": "Skapa ett stiltema för alla enkäter. Du kan aktivera anpassad styling för varje enkät."
+ },
+ "tags": {
+ "add": "Lägg till",
+ "add_tag": "Lägg till tagg",
+ "count": "Antal",
+ "delete_tag_confirmation": "Är du säker på att du vill ta bort denna tagg?",
+ "manage_tags": "Hantera taggar",
+ "manage_tags_description": "Slå ihop och ta bort svarstaggar.",
+ "merge": "Slå ihop",
+ "no_tag_found": "Ingen tagg hittades",
+ "search_tags": "Sök taggar...",
+ "tag": "Tagg",
+ "tag_already_exists": "Tagg finns redan",
+ "tag_deleted": "Tagg borttagen",
+ "tag_updated": "Tagg uppdaterad",
+ "tags_merged": "Taggar sammanslagna"
+ },
+ "teams": {
+ "manage_teams": "Hantera team",
+ "no_teams_found": "Inga team hittades",
+ "only_organization_owners_and_managers_can_manage_teams": "Endast organisationsägare och administratörer kan hantera team.",
+ "permission": "Behörighet",
+ "team_name": "Teamnamn",
+ "team_settings_description": "Se vilka team som kan komma åt detta projekt."
+ }
+ },
+ "segments": {
+ "add_filter_below": "Lägg till filter nedan",
+ "add_your_first_filter_to_get_started": "Lägg till ditt första filter för att komma igång",
+ "cannot_delete_segment_used_in_surveys": "Du kan inte ta bort detta segment eftersom det fortfarande används i dessa enkäter:",
+ "clone_and_edit_segment": "Klona och redigera segment",
+ "create_group": "Skapa grupp",
+ "create_your_first_segment": "Skapa ditt första segment för att komma igång",
+ "delete_segment": "Ta bort segment",
+ "desktop": "Dator",
+ "devices": "Enheter",
+ "edit_segment": "Redigera segment",
+ "error_resetting_filters": "Fel vid återställning av filter",
+ "error_saving_segment": "Fel vid sparande av segment",
+ "ex_fully_activated_recurring_users": "T.ex. Fullt aktiverade återkommande användare",
+ "ex_power_users": "T.ex. Superanvändare",
+ "filters_reset_successfully": "Filter återställda",
+ "here": "här",
+ "hide_filters": "Dölj filter",
+ "identifying_users": "identifiera användare",
+ "invalid_segment": "Ogiltigt segment",
+ "invalid_segment_filters": "Ogiltiga filter. Vänligen kontrollera filtren och försök igen.",
+ "load_segment": "Ladda segment",
+ "most_active_users_in_the_last_30_days": "Mest aktiva användare de senaste 30 dagarna",
+ "no_attributes_yet": "Inga attribut ännu!",
+ "no_filters_yet": "Det finns inga filter ännu!",
+ "no_segments_yet": "Du har för närvarande inga sparade segment.",
+ "person_and_attributes": "Person och attribut",
+ "phone": "Telefon",
+ "please_remove_the_segment_from_these_surveys_in_order_to_delete_it": "Vänligen ta bort segmentet från dessa enkäter för att kunna ta bort det.",
+ "pre_segment_users": "Försegmentera dina användare med attributfilter.",
+ "remove_all_filters": "Ta bort alla filter",
+ "reset_all_filters": "Återställ alla filter",
+ "save_as_new_segment": "Spara som nytt segment",
+ "save_your_filters_as_a_segment_to_use_it_in_other_surveys": "Spara dina filter som ett segment för att använda det i andra enkäter",
+ "segment_created_successfully": "Segment skapat!",
+ "segment_deleted_successfully": "Segment borttaget!",
+ "segment_id": "Segment-ID",
+ "segment_saved_successfully": "Segment sparat",
+ "segment_updated_successfully": "Segment uppdaterat!",
+ "segments_help_you_target_users_with_same_characteristics_easily": "Segment hjälper dig att enkelt rikta in dig på användare med samma egenskaper",
+ "target_audience": "Målgrupp",
+ "this_action_resets_all_filters_in_this_survey": "Denna åtgärd återställer alla filter i denna enkät.",
+ "this_segment_is_used_in_other_surveys": "Detta segment används i andra enkäter. Gör ändringar",
+ "title_is_required": "Titel krävs.",
+ "unknown_filter_type": "Okänd filtertyp",
+ "unlock_segments_description": "Organisera kontakter i segment för att rikta in dig på specifika användargrupper",
+ "unlock_segments_title": "Lås upp segment med en högre plan",
+ "user_targeting_is_currently_only_available_when": "Användarinriktning är för närvarande endast tillgänglig när",
+ "value_cannot_be_empty": "Värdet kan inte vara tomt.",
+ "value_must_be_a_number": "Värdet måste vara ett nummer.",
+ "view_filters": "Visa filter",
+ "where": "Där",
+ "with_the_formbricks_sdk": "med Formbricks SDK"
+ },
+ "settings": {
+ "api_keys": {
+ "add_api_key": "Lägg till API-nyckel",
+ "add_permission": "Lägg till behörighet",
+ "api_keys_description": "Hantera API-nycklar för åtkomst till Formbricks hanterings-API:er"
+ },
+ "billing": {
+ "1000_monthly_responses": "1 000 svar per månad",
+ "1_project": "1 projekt",
+ "2000_contacts": "2 000 kontakter",
+ "3_projects": "3 projekt",
+ "5000_monthly_responses": "5 000 svar per månad",
+ "7500_contacts": "7 500 kontakter",
+ "all_integrations": "Alla integrationer",
+ "annually": "Årligen",
+ "api_webhooks": "API och webhooks",
+ "app_surveys": "Appenkäter",
+ "attribute_based_targeting": "Attributbaserad inriktning",
+ "current": "Nuvarande",
+ "current_plan": "Nuvarande plan",
+ "current_tier_limit": "Nuvarande nivågräns",
+ "custom": "Anpassad och skalbar",
+ "custom_contacts_limit": "Anpassad kontaktgräns",
+ "custom_project_limit": "Anpassad projektgräns",
+ "custom_response_limit": "Anpassad svarsgräns",
+ "email_embedded_surveys": "E-postinbäddade enkäter",
+ "email_follow_ups": "E-postuppföljningar",
+ "enterprise_description": "Premiumsupport och anpassade gränser.",
+ "everybody_has_the_free_plan_by_default": "Alla har gratisplanen som standard!",
+ "everything_in_free": "Allt i Gratis",
+ "everything_in_startup": "Allt i Startup",
+ "free": "Gratis",
+ "free_description": "Obegränsade enkäter, teammedlemmar och mer.",
+ "get_2_months_free": "Få 2 månader gratis",
+ "hosted_in_frankfurt": "Hostat i Frankfurt",
+ "ios_android_sdks": "iOS och Android SDK för mobilenkäter",
+ "link_surveys": "Länkenkäter (delbara)",
+ "logic_jumps_hidden_fields_recurring_surveys": "Logikhopp, dolda fält, återkommande enkäter, etc.",
+ "manage_card_details": "Hantera kortuppgifter",
+ "manage_subscription": "Hantera prenumeration",
+ "monthly": "Månadsvis",
+ "monthly_identified_users": "Månadsvis identifierade användare",
+ "plan_upgraded_successfully": "Plan uppgraderad",
+ "premium_support_with_slas": "Premiumsupport med SLA",
+ "remove_branding": "Ta bort varumärke",
+ "startup": "Startup",
+ "startup_description": "Allt i Gratis med ytterligare funktioner.",
+ "switch_plan": "Byt plan",
+ "team_access_roles": "Teamåtkomstroller",
+ "unable_to_upgrade_plan": "Kunde inte uppgradera plan",
+ "unlimited_miu": "Obegränsad MIU",
+ "unlimited_projects": "Obegränsade projekt",
+ "unlimited_responses": "Obegränsade svar",
+ "unlimited_surveys": "Obegränsade enkäter",
+ "unlimited_team_members": "Obegränsade teammedlemmar",
+ "upgrade": "Uppgradera",
+ "uptime_sla_99": "Drifttids-SLA (99%)",
+ "website_surveys": "Webbplatsenkäter"
+ },
+ "enterprise": {
+ "audit_logs": "Granskningsloggar",
+ "coming_soon": "Kommer snart",
+ "contacts_and_segments": "Kontakthantering och segment",
+ "enterprise_features": "Enterprise-funktioner",
+ "get_an_enterprise_license_to_get_access_to_all_features": "Skaffa en Enterprise-licens för att få tillgång till alla funktioner.",
+ "keep_full_control_over_your_data_privacy_and_security": "Behåll full kontroll över din datasekretess och säkerhet.",
+ "no_call_needed_no_strings_attached_request_a_free_30_day_trial_license_to_test_all_features_by_filling_out_this_form": "Inget samtal behövs, inga åtaganden: Begär en gratis 30-dagars provlicens för att testa alla funktioner genom att fylla i detta formulär:",
+ "no_credit_card_no_sales_call_just_test_it": "Inget kreditkort. Inget säljsamtal. Testa bara :)",
+ "on_request": "På begäran",
+ "organization_roles": "Organisationsroller (Admin, Redaktör, Utvecklare, etc.)",
+ "questions_please_reach_out_to": "Frågor? Kontakta",
+ "request_30_day_trial_license": "Begär 30-dagars provlicens",
+ "saml_sso": "SAML SSO",
+ "service_level_agreement": "Servicenivåavtal",
+ "soc2_hipaa_iso_27001_compliance_check": "SOC2, HIPAA, ISO 27001 efterlevnadskontroll",
+ "sso": "SSO (Google, Microsoft, OpenID Connect)",
+ "teams": "Team och åtkomstroller (Läs, Läs och skriv, Hantera)",
+ "unlock_the_full_power_of_formbricks_free_for_30_days": "Lås upp Formbricks fulla kraft. Gratis i 30 dagar.",
+ "your_enterprise_license_is_active_all_features_unlocked": "Din Enterprise-licens är aktiv. Alla funktioner upplåsta."
+ },
+ "general": {
+ "bulk_invite_warning_description": "På gratisplanen tilldelas alla organisationsmedlemmar alltid rollen \"Ägare\".",
+ "cannot_delete_only_organization": "Detta är din enda organisation, den kan inte tas bort. Skapa en ny organisation först.",
+ "cannot_leave_only_organization": "Du kan inte lämna denna organisation eftersom det är din enda organisation. Skapa en ny organisation först.",
+ "copy_invite_link_to_clipboard": "Kopiera inbjudningslänk till urklipp",
+ "create_new_organization": "Skapa ny organisation",
+ "create_new_organization_description": "Skapa en ny organisation för att hantera en annan uppsättning projekt.",
+ "customize_email_with_a_higher_plan": "Anpassa e-post med en högre plan",
+ "delete_member_confirmation": "Borttagna medlemmar förlorar åtkomst till alla projekt och enkäter i din organisation.",
+ "delete_organization": "Ta bort organisation",
+ "delete_organization_description": "Ta bort organisation med alla dess projekt inklusive alla enkäter, svar, personer, åtgärder och attribut",
+ "delete_organization_warning": "Innan du fortsätter med att ta bort denna organisation, var medveten om följande konsekvenser:",
+ "delete_organization_warning_1": "Permanent borttagning av alla projekt kopplade till denna organisation.",
+ "delete_organization_warning_2": "Denna åtgärd kan inte ångras. När det är borta, är det borta.",
+ "delete_organization_warning_3": "Vänligen ange {organizationName} i följande fält för att bekräfta den definitiva borttagningen av denna organisation:",
+ "eliminate_branding_with_whitelabel": "Eliminera Formbricks-varumärke och aktivera ytterligare white-label-anpassningsalternativ.",
+ "email_customization_preview_email_heading": "Hej {userName}",
+ "email_customization_preview_email_text": "Detta är en förhandsgranskning av e-post för att visa vilken logotyp som kommer att renderas i e-postmeddelandena.",
+ "error_deleting_organization_please_try_again": "Fel vid borttagning av organisation. Vänligen försök igen.",
+ "from_your_organization": "från din organisation",
+ "invitation_sent_once_more": "Inbjudan skickad igen.",
+ "invite_deleted_successfully": "Inbjudan borttagen",
+ "invited_on": "Inbjuden den {date}",
+ "invites_failed": "Inbjudningar misslyckades",
+ "leave_organization": "Lämna organisation",
+ "leave_organization_description": "Du kommer att lämna denna organisation och förlora åtkomst till alla enkäter och svar. Du kan endast återansluta om du blir inbjuden igen.",
+ "leave_organization_ok_btn_text": "Ja, lämna organisationen",
+ "leave_organization_title": "Är du säker?",
+ "logo_in_email_header": "Logotyp i e-posthuvud",
+ "logo_removed_successfully": "Logotyp borttagen",
+ "logo_saved_successfully": "Logotyp sparad",
+ "manage_members": "Hantera medlemmar",
+ "manage_members_description": "Lägg till eller ta bort medlemmar i din organisation.",
+ "member_deleted_successfully": "Medlem borttagen",
+ "member_invited_successfully": "Medlem inbjuden",
+ "once_its_gone_its_gone": "När det är borta, är det borta.",
+ "only_org_owner_can_perform_action": "Endast organisationsägare kan komma åt denna inställning.",
+ "organization_created_successfully": "Organisation skapad!",
+ "organization_deleted_successfully": "Organisation borttagen.",
+ "organization_invite_link_ready": "Din organisationsinbjudningslänk är redo!",
+ "organization_name": "Organisationsnamn",
+ "organization_name_description": "Ge din organisation ett beskrivande namn.",
+ "organization_name_placeholder": "t.ex. Power Puff Girls",
+ "organization_name_updated_successfully": "Organisationsnamn uppdaterat",
+ "organization_settings": "Organisationsinställningar",
+ "please_add_a_logo": "Vänligen lägg till en logotyp",
+ "please_check_csv_file": "Vänligen kontrollera CSV-filen och se till att den följer vårt format",
+ "please_save_logo_before_sending_test_email": "Vänligen spara logotypen innan du skickar ett test-e-postmeddelande.",
+ "remove_logo": "Ta bort logotyp",
+ "replace_logo": "Ersätt logotyp",
+ "resend_invitation_email": "Skicka inbjudningsmejl igen",
+ "share_invite_link": "Dela inbjudningslänk",
+ "share_this_link_to_let_your_organization_member_join_your_organization": "Dela denna länk för att låta din organisationsmedlem gå med i din organisation:",
+ "test_email_sent_successfully": "Test-e-post skickat",
+ "use_multi_language_surveys_with_a_higher_plan": "Använd flerspråkiga enkäter med en högre plan",
+ "use_multi_language_surveys_with_a_higher_plan_description": "Enkätera dina användare på olika språk."
+ },
+ "notifications": {
+ "auto_subscribe_to_new_surveys": "Prenumerera automatiskt på nya enkäter",
+ "email_alerts_surveys": "E-postvarningar (Enkäter)",
+ "every_response": "Varje svar",
+ "every_response_tooltip": "Skickar kompletta svar, inga delsvar.",
+ "need_slack_or_discord_notifications": "Behöver du Slack- eller Discord-notifieringar",
+ "notification_settings_updated": "Notifieringsinställningar uppdaterade",
+ "set_up_an_alert_to_get_an_email_on_new_responses": "Ställ in en avisering för att få e-post vid nya svar",
+ "use_the_integration": "Använd integrationen",
+ "want_to_loop_in_organization_mates": "Vill du inkludera organisationskollegor",
+ "you_will_not_be_auto_subscribed_to_this_organizations_surveys_anymore": "Du kommer inte längre att automatiskt prenumerera på denna organisations enkäter!",
+ "you_will_not_receive_any_more_emails_for_responses_on_this_survey": "Du kommer inte att få fler e-postmeddelanden för svar på denna enkät!"
+ },
+ "profile": {
+ "account_deletion_consequences_warning": "Konsekvenser av kontoborttagning",
+ "backup_code": "Reservkod",
+ "confirm_delete_account": "Ta bort ditt konto med all din personliga information och data",
+ "confirm_delete_my_account": "Ta bort mitt konto",
+ "confirm_your_current_password_to_get_started": "Bekräfta ditt nuvarande lösenord för att komma igång.",
+ "delete_account": "Ta bort konto",
+ "disable_two_factor_authentication": "Inaktivera tvåfaktorsautentisering",
+ "disable_two_factor_authentication_description": "Om du behöver inaktivera 2FA rekommenderar vi att du aktiverar det igen så snart som möjligt.",
+ "each_backup_code_can_be_used_exactly_once_to_grant_access_without_your_authenticator": "Varje reservkod kan användas exakt en gång för att ge åtkomst utan din autentiserare.",
+ "email_change_initiated": "Din begäran om e-poständring har initierats.",
+ "enable_two_factor_authentication": "Aktivera tvåfaktorsautentisering",
+ "enter_the_code_from_your_authenticator_app_below": "Ange koden från din autentiseringsapp nedan.",
+ "lost_access": "Förlorad åtkomst",
+ "or_enter_the_following_code_manually": "Eller ange följande kod manuellt:",
+ "organizations_delete_message": "Du är den enda ägaren av dessa organisationer, så de kommer också att tas bort.",
+ "permanent_removal_of_all_of_your_personal_information_and_data": "Permanent borttagning av all din personliga information och data",
+ "personal_information": "Personlig information",
+ "please_enter_email_to_confirm_account_deletion": "Vänligen ange {email} i följande fält för att bekräfta den definitiva borttagningen av ditt konto:",
+ "profile_updated_successfully": "Din profil uppdaterades",
+ "save_the_following_backup_codes_in_a_safe_place": "Spara följande reservkoder på ett säkert ställe.",
+ "scan_the_qr_code_below_with_your_authenticator_app": "Skanna QR-koden nedan med din autentiseringsapp.",
+ "security_description": "Hantera ditt lösenord och andra säkerhetsinställningar som tvåfaktorsautentisering (2FA).",
+ "two_factor_authentication": "Tvåfaktorsautentisering",
+ "two_factor_authentication_description": "Lägg till ett extra säkerhetslager till ditt konto om ditt lösenord blir stulet.",
+ "two_factor_authentication_enabled_please_enter_the_six_digit_code_from_your_authenticator_app": "Tvåfaktorsautentisering aktiverad. Vänligen ange den sexsiffriga koden från din autentiseringsapp.",
+ "two_factor_code": "Tvåfaktorskod",
+ "unlock_two_factor_authentication": "Lås upp tvåfaktorsautentisering med en högre plan",
+ "update_personal_info": "Uppdatera din personliga information",
+ "warning_cannot_delete_account": "Du är den enda ägaren av denna organisation. Vänligen överför ägarskapet till en annan medlem först.",
+ "warning_cannot_undo": "Detta kan inte ångras"
+ },
+ "teams": {
+ "add_members_description": "Lägg till medlemmar i teamet och bestäm deras roll.",
+ "add_projects_description": "Kontrollera vilka projekt teammedlemmarna kan komma åt.",
+ "all_members_added": "Alla medlemmar tillagda i detta team.",
+ "all_projects_added": "Alla projekt tillagda i detta team.",
+ "are_you_sure_you_want_to_delete_this_team": "Är du säker på att du vill ta bort detta team? Detta tar även bort åtkomsten till alla projekt och enkäter kopplade till detta team.",
+ "billing_role_description": "Har endast åtkomst till faktureringsinformation.",
+ "bulk_invite": "Massinbjudning",
+ "contributor": "Bidragsgivare",
+ "create": "Skapa",
+ "create_first_team_message": "Du måste skapa ett team först.",
+ "create_new_team": "Skapa nytt team",
+ "delete_team": "Ta bort team",
+ "empty_teams_state": "Skapa ditt första team.",
+ "enter_team_name": "Ange teamnamn",
+ "individual": "Individuell",
+ "invite_member": "Bjud in medlem",
+ "invite_member_description": "Lägg till dina kollegor i denna organisation.",
+ "manage": "Hantera",
+ "manage_team": "Hantera team",
+ "manage_team_disabled": "Endast organisationsägare, administratörer och teamadministratörer kan hantera team.",
+ "manager_role_description": "Administratörer kan komma åt alla projekt och lägga till och ta bort medlemmar.",
+ "member_role_description": "Medlemmar kan arbeta i valda projekt.",
+ "member_role_info_message": "För att ge nya medlemmar åtkomst till ett projekt, vänligen lägg till dem i ett team nedan. Med team kan du hantera vem som har åtkomst till vilket projekt.",
+ "owner_role_description": "Ägare har full kontroll över organisationen.",
+ "please_fill_all_member_fields": "Vänligen fyll i alla fält för att lägga till en ny medlem.",
+ "please_fill_all_project_fields": "Vänligen fyll i alla fält för att lägga till ett nytt projekt.",
+ "read": "Läs",
+ "read_write": "Läs och skriv",
+ "team_admin": "Teamadministratör",
+ "team_created_successfully": "Team skapat.",
+ "team_deleted_successfully": "Team borttaget.",
+ "team_deletion_not_allowed": "Du har inte behörighet att ta bort detta team.",
+ "team_name": "Teamnamn",
+ "team_name_settings_title": "{teamName}-inställningar",
+ "team_select_placeholder": "Sök teamnamn...",
+ "team_settings_description": "Hantera teammedlemmar, åtkomsträttigheter och mer.",
+ "team_updated_successfully": "Team uppdaterat",
+ "teams": "Team",
+ "teams_description": "Tilldela medlemmar till team och ge team åtkomst till projekt.",
+ "unlock_teams_description": "Hantera vilka organisationsmedlemmar som har åtkomst till specifika projekt och enkäter.",
+ "unlock_teams_title": "Lås upp team med en högre plan.",
+ "upgrade_plan_notice_message": "Lås upp organisationsroller med en högre plan.",
+ "you_are_a_member": "Du är medlem"
+ }
+ },
+ "surveys": {
+ "all_set_time_to_create_first_survey": "Allt klart! Dags att skapa din första enkät",
+ "alphabetical": "Alfabetisk",
+ "copy_survey": "Kopiera enkät",
+ "copy_survey_description": "Kopiera denna enkät till en annan miljö",
+ "copy_survey_error": "Misslyckades med att kopiera enkät",
+ "copy_survey_link_to_clipboard": "Kopiera enkätlänk till urklipp",
+ "copy_survey_partially_success": "{success} enkäter kopierade, {error} misslyckades.",
+ "copy_survey_success": "Enkät kopierad!",
+ "delete_survey_and_responses_warning": "Är du säker på att du vill ta bort denna enkät och alla dess svar?",
+ "edit": {
+ "1_choose_the_default_language_for_this_survey": "1. Välj standardspråk för denna enkät:",
+ "2_activate_translation_for_specific_languages": "2. Aktivera översättning för specifika språk:",
+ "add": "Lägg till +",
+ "add_a_delay_or_auto_close_the_survey": "Lägg till fördröjning eller stäng enkäten automatiskt",
+ "add_a_four_digit_pin": "Lägg till en fyrsiffrig PIN",
+ "add_a_variable_to_calculate": "Lägg till en variabel att beräkna",
+ "add_action_below": "Lägg till åtgärd nedan",
+ "add_block": "Lägg till block",
+ "add_choice_below": "Lägg till val nedan",
+ "add_color_coding": "Lägg till färgkodning",
+ "add_color_coding_description": "Lägg till röda, orange och gröna färgkoder till alternativen.",
+ "add_column": "Lägg till kolumn",
+ "add_condition_below": "Lägg till villkor nedan",
+ "add_custom_styles": "Lägg till anpassade stilar",
+ "add_delay_before_showing_survey": "Lägg till fördröjning innan enkäten visas",
+ "add_description": "Lägg till beskrivning",
+ "add_ending": "Lägg till avslutning",
+ "add_ending_below": "Lägg till avslutning nedan",
+ "add_fallback_placeholder": "Lägg till en platshållare att visa om det inte finns något värde att återkalla.",
+ "add_hidden_field_id": "Lägg till dolt fält-ID",
+ "add_highlight_border": "Lägg till markerad kant",
+ "add_highlight_border_description": "Lägg till en yttre kant till ditt enkätkort.",
+ "add_logic": "Lägg till logik",
+ "add_none_of_the_above": "Lägg till \"Inget av ovanstående\"",
+ "add_option": "Lägg till alternativ",
+ "add_other": "Lägg till \"Annat\"",
+ "add_photo_or_video": "Lägg till foto eller video",
+ "add_pin": "Lägg till PIN",
+ "add_question_below": "Lägg till fråga nedan",
+ "add_question_to_block": "Lägg till fråga till block",
+ "add_row": "Lägg till rad",
+ "add_variable": "Lägg till variabel",
+ "address_fields": "Adressfält",
+ "address_line_1": "Adressrad 1",
+ "address_line_2": "Adressrad 2",
+ "adjust_survey_closed_message": "Justera meddelande för 'Enkät stängd'",
+ "adjust_survey_closed_message_description": "Ändra meddelandet besökare ser när enkäten är stängd.",
+ "adjust_the_theme_in_the": "Justera temat i",
+ "all_other_answers_will_continue_to": "Alla andra svar fortsätter till",
+ "allow_file_type": "Tillåt filtyp",
+ "allow_multi_select": "Tillåt flerval",
+ "allow_multiple_files": "Tillåt flera filer",
+ "allow_users_to_select_more_than_one_image": "Tillåt användare att välja mer än en bild",
+ "and_launch_surveys_in_your_website_or_app": "och starta enkäter på din webbplats eller i din app.",
+ "animation": "Animering",
+ "app_survey_description": "Bädda in en enkät i din webbapp eller webbplats för att samla in svar.",
+ "assign": "Tilldela =",
+ "audience": "Målgrupp",
+ "auto_close_on_inactivity": "Stäng automatiskt vid inaktivitet",
+ "automatically_close_survey_after": "Stäng enkäten automatiskt efter",
+ "automatically_close_the_survey_after_a_certain_number_of_responses": "Stäng enkäten automatiskt efter ett visst antal svar.",
+ "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Stäng enkäten automatiskt om användaren inte svarar efter ett visst antal sekunder.",
+ "automatically_mark_the_survey_as_complete_after": "Markera enkäten automatiskt som slutförd efter",
+ "back_button_label": "\"Tillbaka\"-knappens etikett",
+ "background_styling": "Bakgrundsstil",
+ "block_duplicated": "Block duplicerat.",
+ "bold": "Fet",
+ "brand_color": "Varumärkesfärg",
+ "brightness": "Ljusstyrka",
+ "button_external": "Aktivera extern länk",
+ "button_external_description": "Lägg till en knapp som öppnar en extern URL i en ny flik",
+ "button_label": "Knappetikett",
+ "button_url": "Knapp-URL",
+ "cal_username": "Cal.com-användarnamn eller användarnamn/händelse",
+ "calculate": "Beräkna",
+ "capture_a_new_action_to_trigger_a_survey_on": "Fånga en ny åtgärd att utlösa en enkät på.",
+ "capture_new_action": "Fånga ny åtgärd",
+ "card_arrangement_for_survey_type_derived": "Kortarrangemang för {surveyTypeDerived}-enkäter",
+ "card_background_color": "Kortets bakgrundsfärg",
+ "card_border_color": "Kortets kantfärg",
+ "card_styling": "Kortstil",
+ "casual": "Avslappnad",
+ "caution_edit_duplicate": "Duplicera och redigera",
+ "caution_edit_published_survey": "Redigera en publicerad enkät?",
+ "caution_explanation_intro": "Vi förstår att du kanske fortfarande vill göra ändringar. Här är vad som händer om du gör det: ",
+ "caution_explanation_new_responses_separated": "Svar före ändringen kanske inte eller endast delvis inkluderas i enkätsammanfattningen.",
+ "caution_explanation_only_new_responses_in_summary": "All data, inklusive tidigare svar, förblir tillgänglig som nedladdning på enkätsammanfattningssidan.",
+ "caution_explanation_responses_are_safe": "Äldre och nyare svar blandas vilket kan leda till vilseledande datasammanfattningar.",
+ "caution_recommendation": "Detta kan orsaka datainkonsekvenser i enkätsammanfattningen. Vi rekommenderar att duplicera enkäten istället.",
+ "caution_text": "Ändringar kommer att leda till inkonsekvenser",
+ "centered_modal_overlay_color": "Centrerad modal överläggsfärg",
+ "change_anyway": "Ändra ändå",
+ "change_background": "Ändra bakgrund",
+ "change_question_type": "Ändra frågetyp",
+ "change_survey_type": "Byte av enkättyp påverkar befintlig åtkomst",
+ "change_the_background_color_of_the_card": "Ändra kortets bakgrundsfärg.",
+ "change_the_background_color_of_the_input_fields": "Ändra inmatningsfältens bakgrundsfärg.",
+ "change_the_background_to_a_color_image_or_animation": "Ändra bakgrunden till en färg, bild eller animering.",
+ "change_the_border_color_of_the_card": "Ändra kortets kantfärg.",
+ "change_the_border_color_of_the_input_fields": "Ändra inmatningsfältens kantfärg.",
+ "change_the_border_radius_of_the_card_and_the_inputs": "Ändra kantradie för kortet och inmatningsfälten.",
+ "change_the_brand_color_of_the_survey": "Ändra enkätens varumärkesfärg.",
+ "change_the_placement_of_this_survey": "Ändra placeringen av denna enkät.",
+ "change_the_question_color_of_the_survey": "Ändra enkätens frågefärg.",
+ "changes_saved": "Ändringar sparade.",
+ "changing_survey_type_will_remove_existing_distribution_channels": "Att ändra enkättypen påverkar hur den kan delas. Om respondenter redan har åtkomstlänkar för den nuvarande typen kan de förlora åtkomst efter bytet.",
+ "character_limit_toggle_description": "Begränsa hur kort eller långt ett svar kan vara.",
+ "character_limit_toggle_title": "Lägg till teckengränser",
+ "checkbox_label": "Kryssruteetikett",
+ "choose_the_actions_which_trigger_the_survey": "Välj de åtgärder som utlöser enkäten.",
+ "choose_the_first_question_on_your_block": "Välj den första frågan i ditt block",
+ "choose_where_to_run_the_survey": "Välj var enkäten ska köras.",
+ "city": "Stad",
+ "close_survey_on_response_limit": "Stäng enkät vid svarsgräns",
+ "color": "Färg",
+ "column_used_in_logic_error": "Denna kolumn används i logiken för fråga {questionIndex}. Vänligen ta bort den från logiken först.",
+ "columns": "Kolumner",
+ "company": "Företag",
+ "company_logo": "Företagslogotyp",
+ "completed_responses": "slutförda svar.",
+ "concat": "Sammanfoga +",
+ "conditional_logic": "Villkorlig logik",
+ "confirm_default_language": "Bekräfta standardspråk",
+ "confirm_survey_changes": "Bekräfta enkätändringar",
+ "contact_fields": "Kontaktfält",
+ "contains": "Innehåller",
+ "continue_to_settings": "Fortsätt till inställningar",
+ "control_which_file_types_can_be_uploaded": "Kontrollera vilka filtyper som kan laddas upp.",
+ "convert_to_multiple_choice": "Konvertera till flerval",
+ "convert_to_single_choice": "Konvertera till enkelval",
+ "country": "Land",
+ "create_group": "Skapa grupp",
+ "create_your_own_survey": "Skapa din egen enkät",
+ "css_selector": "CSS-selektor",
+ "cta_button_label": "\"CTA\"-knappetikett",
+ "custom_hostname": "Anpassat värdnamn",
+ "customize_survey_logo": "Anpassa undersökningens logotyp",
+ "darken_or_lighten_background_of_your_choice": "Gör bakgrunden mörkare eller ljusare efter eget val.",
+ "date_format": "Datumformat",
+ "days_before_showing_this_survey_again": "dagar efter att någon enkät visats innan denna enkät kan visas.",
+ "delete_block": "Ta bort block",
+ "delete_choice": "Ta bort val",
+ "disable_the_visibility_of_survey_progress": "Inaktivera synligheten av enkätens framsteg.",
+ "display_an_estimate_of_completion_time_for_survey": "Visa en uppskattning av tid för att slutföra enkäten",
+ "display_number_of_responses_for_survey": "Visa antal svar för enkäten",
+ "divide": "Dividera /",
+ "does_not_contain": "Innehåller inte",
+ "does_not_end_with": "Slutar inte med",
+ "does_not_equal": "Är inte lika med",
+ "does_not_include_all_of": "Inkluderar inte alla av",
+ "does_not_include_one_of": "Inkluderar inte en av",
+ "does_not_start_with": "Börjar inte med",
+ "duplicate_block": "Duplicera block",
+ "duplicate_question": "Duplicera fråga",
+ "edit_link": "Redigera länk",
+ "edit_recall": "Redigera återkallning",
+ "edit_translations": "Redigera {lang} översättningar",
+ "element_not_found": "Fråga hittades inte",
+ "enable_participants_to_switch_the_survey_language_at_any_point_during_the_survey": "Tillåt respondenter att byta språk när som helst. Kräver minst 2 aktiva språk.",
+ "enable_recaptcha_to_protect_your_survey_from_spam": "Spamskydd använder reCAPTCHA v3 för att filtrera bort spam-svar.",
+ "enable_spam_protection": "Spamskydd",
+ "end_screen_card": "Avslutningsskärmkort",
+ "ending_card": "Avslutningskort",
+ "ending_card_used_in_logic": "Detta avslutningskort används i logiken för fråga {questionIndex}.",
+ "ending_used_in_quota": "Denna avslutning används i kvoten \"{quotaName}\"",
+ "ends_with": "Slutar med",
+ "enter_fallback_value": "Ange reservvärde",
+ "equals": "Är lika med",
+ "equals_one_of": "Är lika med en av",
+ "error_publishing_survey": "Ett fel uppstod vid publicering av enkäten.",
+ "error_saving_changes": "Fel vid sparande av ändringar",
+ "even_after_they_submitted_a_response_e_g_feedback_box": "Tillåt flera svar; fortsätt visa även efter ett svar (t.ex. feedbackruta).",
+ "everyone": "Alla",
+ "external_urls_paywall_tooltip": "Vänligen uppgradera till Startup-planen för att anpassa externa URL:er. Detta hjälper oss att förhindra nätfiske.",
+ "fallback_missing": "Reservvärde saknas",
+ "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{fieldId} används i logiken för fråga {questionIndex}. Vänligen ta bort den från logiken först.",
+ "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "Dolt fält \"{fieldId}\" används i kvoten \"{quotaName}\"",
+ "field_name_eg_score_price": "Fältnamn t.ex. score, price",
+ "first_name": "Förnamn",
+ "five_points_recommended": "5 poäng (rekommenderat)",
+ "follow_ups": "Uppföljningar",
+ "follow_ups_delete_modal_text": "Är du säker på att du vill ta bort denna uppföljning?",
+ "follow_ups_delete_modal_title": "Ta bort uppföljning?",
+ "follow_ups_empty_description": "Skicka meddelanden till respondenter, dig själv eller teamkollegor.",
+ "follow_ups_empty_heading": "Skicka automatiska uppföljningar",
+ "follow_ups_ending_card_delete_modal_text": "Detta avslutningskort används i uppföljningar. Att ta bort det kommer att ta bort det från alla uppföljningar. Är du säker på att du vill ta bort det?",
+ "follow_ups_ending_card_delete_modal_title": "Ta bort avslutningskort?",
+ "follow_ups_hidden_field_error": "Dolt fält används i en uppföljning. Vänligen ta bort det från uppföljningen först.",
+ "follow_ups_item_ending_tag": "Avslutning(ar)",
+ "follow_ups_item_issue_detected_tag": "Problem upptäckt",
+ "follow_ups_item_response_tag": "Alla svar",
+ "follow_ups_item_send_email_tag": "Skicka e-post",
+ "follow_ups_modal_action_attach_response_data_description": "Lägg till data från enkätsvaret i uppföljningen",
+ "follow_ups_modal_action_attach_response_data_label": "Bifoga svarsdata",
+ "follow_ups_modal_action_body_label": "Brödtext",
+ "follow_ups_modal_action_body_placeholder": "E-postmeddelandets brödtext",
+ "follow_ups_modal_action_email_content": "E-postinnehåll",
+ "follow_ups_modal_action_email_settings": "E-postinställningar",
+ "follow_ups_modal_action_from_description": "E-postadress att skicka e-post från",
+ "follow_ups_modal_action_from_label": "Från",
+ "follow_ups_modal_action_label": "Åtgärd",
+ "follow_ups_modal_action_replyTo_description": "Om mottagaren svarar kommer följande e-postadress att ta emot det",
+ "follow_ups_modal_action_replyTo_label": "Svara till",
+ "follow_ups_modal_action_subject": "Tack för dina svar!",
+ "follow_ups_modal_action_subject_label": "Ämne",
+ "follow_ups_modal_action_subject_placeholder": "E-postens ämne",
+ "follow_ups_modal_action_to_description": "E-postadress att skicka e-post till",
+ "follow_ups_modal_action_to_label": "Till",
+ "follow_ups_modal_action_to_warning": "Inga giltiga alternativ hittades för att skicka e-post, vänligen lägg till några öppna text-/kontaktinfo-frågor eller dolda fält",
+ "follow_ups_modal_create_heading": "Skapa en ny uppföljning",
+ "follow_ups_modal_created_successfull_toast": "Uppföljning skapad och sparas när du sparar enkäten.",
+ "follow_ups_modal_edit_heading": "Redigera denna uppföljning",
+ "follow_ups_modal_edit_no_id": "Inget enkätuppföljnings-ID angivet, kan inte uppdatera enkätuppföljningen",
+ "follow_ups_modal_name_label": "Uppföljningsnamn",
+ "follow_ups_modal_name_placeholder": "Namnge din uppföljning",
+ "follow_ups_modal_subheading": "Skicka meddelanden till respondenter, dig själv eller teamkollegor",
+ "follow_ups_modal_trigger_description": "När ska denna uppföljning utlösas?",
+ "follow_ups_modal_trigger_label": "Utlösare",
+ "follow_ups_modal_trigger_type_ending": "Respondenten ser en specifik avslutning",
+ "follow_ups_modal_trigger_type_ending_select": "Välj avslutningar: ",
+ "follow_ups_modal_trigger_type_ending_warning": "Vänligen välj minst en avslutning eller ändra utlösartypen",
+ "follow_ups_modal_trigger_type_response": "Respondenten slutför enkäten",
+ "follow_ups_modal_updated_successfull_toast": "Uppföljning uppdaterad och sparas när du sparar enkäten.",
+ "follow_ups_new": "Ny uppföljning",
+ "follow_ups_upgrade_button_text": "Uppgradera för att aktivera uppföljningar",
+ "form_styling": "Formulärstil",
+ "formbricks_sdk_is_not_connected": "Formbricks SDK är inte anslutet",
+ "four_points": "4 poäng",
+ "heading": "Rubrik",
+ "hidden_field_added_successfully": "Dolt fält tillagt",
+ "hidden_field_used_in_recall": "Dolt fält \"{hiddenField}\" återkallas i fråga {questionIndex}.",
+ "hidden_field_used_in_recall_ending_card": "Dolt fält \"{hiddenField}\" återkallas i avslutningskortet",
+ "hidden_field_used_in_recall_welcome": "Dolt fält \"{hiddenField}\" återkallas i välkomstkortet.",
+ "hide_back_button": "Dölj 'Tillbaka'-knapp",
+ "hide_back_button_description": "Visa inte tillbakaknappen i enkäten",
+ "hide_block_settings": "Dölj blockinställningar",
+ "hide_logo": "Dölj logotyp",
+ "hide_logo_from_survey": "Dölj logotypen från denna undersökning",
+ "hide_progress_bar": "Dölj framstegsindikator",
+ "hide_question_settings": "Dölj frågeinställningar",
+ "hostname": "Värdnamn",
+ "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "Hur coola vill du att dina kort ska vara i {surveyTypeDerived}-enkäter",
+ "if_you_need_more_please": "Om du behöver fler, vänligen",
+ "if_you_really_want_that_answer_ask_until_you_get_it": "Fortsätt visa när villkoren är uppfyllda tills ett svar skickas in.",
+ "ignore_global_waiting_time": "Ignorera projektomfattande väntetid",
+ "ignore_global_waiting_time_description": "Denna enkät kan visas när dess villkor är uppfyllda, även om en annan enkät nyligen visats.",
+ "image": "Bild",
+ "includes_all_of": "Inkluderar alla av",
+ "includes_one_of": "Inkluderar en av",
+ "initial_value": "Initialt värde",
+ "inner_text": "Inre text",
+ "input_border_color": "Inmatningsfältets kantfärg",
+ "input_color": "Inmatningsfärg",
+ "insert_link": "Infoga länk",
+ "invalid_targeting": "Ogiltig målgruppsinriktning: Vänligen kontrollera dina målgruppsfilter",
+ "invalid_video_url_warning": "Vänligen ange en giltig YouTube-, Vimeo- eller Loom-URL. Vi stöder för närvarande inte andra videohostingleverantörer.",
+ "invalid_youtube_url": "Ogiltig YouTube-URL",
+ "is_accepted": "Är accepterad",
+ "is_after": "Är efter",
+ "is_any_of": "Är någon av",
+ "is_before": "Är före",
+ "is_booked": "Är bokad",
+ "is_clicked": "Är klickad",
+ "is_completely_submitted": "Är helt inskickad",
+ "is_empty": "Är tom",
+ "is_not_clicked": "Är inte klickad",
+ "is_not_empty": "Är inte tom",
+ "is_not_set": "Är inte satt",
+ "is_partially_submitted": "Är delvis inskickad",
+ "is_set": "Är satt",
+ "is_skipped": "Är överhoppad",
+ "is_submitted": "Är inskickad",
+ "italic": "Kursiv",
+ "jump_to_block": "Hoppa till block",
+ "keep_current_order": "Behåll nuvarande ordning",
+ "keep_showing_while_conditions_match": "Fortsätt visa medan villkoren matchar",
+ "key": "Nyckel",
+ "last_name": "Efternamn",
+ "let_people_upload_up_to_25_files_at_the_same_time": "Låt personer ladda upp upp till 25 filer samtidigt.",
+ "limit_file_types": "Begränsa filtyper",
+ "limit_the_maximum_file_size": "Begränsa maximal filstorlek",
+ "limit_upload_file_size_to": "Begränsa uppladdningsfilstorlek till",
+ "link_survey_description": "Dela en länk till en enkätsida eller bädda in den på en webbsida eller i e-post.",
+ "load_segment": "Ladda segment",
+ "logic_error_warning": "Ändring kommer att orsaka logikfel",
+ "logic_error_warning_text": "Att ändra frågetypen kommer att ta bort logikvillkoren från denna fråga",
+ "logo_settings": "Inställningar för logotyp",
+ "long_answer": "Långt svar",
+ "long_answer_toggle_description": "Tillåt respondenter att skriva längre svar på flera rader.",
+ "lower_label": "Lägre etikett",
+ "manage_languages": "Hantera språk",
+ "matrix_all_fields": "Alla fält",
+ "matrix_rows": "Rader",
+ "max_file_size": "Max filstorlek",
+ "max_file_size_limit_is": "Maxgräns för filstorlek är",
+ "move_question_to_block": "Flytta fråga till block",
+ "multiply": "Multiplicera *",
+ "needed_for_self_hosted_cal_com_instance": "Behövs för en självhostad Cal.com-instans",
+ "next_block": "Nästa block",
+ "next_button_label": "\"Nästa\"-knappetikett",
+ "no_hidden_fields_yet_add_first_one_below": "Inga dolda fält ännu. Lägg till det första nedan.",
+ "no_images_found_for": "Inga bilder hittades för ''{query}\"",
+ "no_languages_found_add_first_one_to_get_started": "Inga språk hittades. Lägg till det första för att komma igång.",
+ "no_option_found": "Inget alternativ hittat",
+ "no_recall_items_found": "Inga återkallningsobjekt hittades ",
+ "no_variables_yet_add_first_one_below": "Inga variabler ännu. Lägg till den första nedan.",
+ "number": "Nummer",
+ "once_set_the_default_language_for_this_survey_can_only_be_changed_by_disabling_the_multi_language_option_and_deleting_all_translations": "När det är satt kan standardspråket för denna enkät endast ändras genom att inaktivera flerspråksalternativet och ta bort alla översättningar.",
+ "only_display_the_survey_to_a_subset_of_the_users": "Visa endast enkäten för en delmängd av användarna",
+ "only_lower_case_letters_numbers_and_underscores_are_allowed": "Endast små bokstäver, siffror och understreck är tillåtna.",
+ "only_people_who_match_your_targeting_can_be_surveyed": "Endast personer som matchar din målgruppsinriktning kan enkäteras.",
+ "option_idx": "Alternativ {choiceIndex}",
+ "option_used_in_logic_error": "Detta alternativ används i logiken för fråga {questionIndex}. Vänligen ta bort det från logiken först.",
+ "optional": "Valfritt",
+ "options": "Alternativ",
+ "override_theme_with_individual_styles_for_this_survey": "Åsidosätt temat med individuella stilar för denna enkät.",
+ "overwrite_global_waiting_time": "Ställ in anpassad väntetid",
+ "overwrite_global_waiting_time_description": "Åsidosätt projektkonfigurationen endast för denna enkät.",
+ "overwrite_placement": "Åsidosätt placering",
+ "overwrite_survey_logo": "Ange anpassad logotyp för undersökningen",
+ "overwrite_the_global_placement_of_the_survey": "Åsidosätt den globala placeringen av enkäten",
+ "pick_a_background_from_our_library_or_upload_your_own": "Välj en bakgrund från vårt bibliotek eller ladda upp din egen.",
+ "picture_idx": "Bild {idx}",
+ "pin_can_only_contain_numbers": "PIN kan endast innehålla siffror.",
+ "pin_must_be_a_four_digit_number": "PIN måste vara ett fyrsiffrigt nummer.",
+ "please_enter_a_file_extension": "Vänligen ange en filändelse.",
+ "please_enter_a_valid_url": "Vänligen ange en giltig URL (t.ex. https://example.com)",
+ "please_set_a_survey_trigger": "Vänligen ställ in en enkätutlösare",
+ "please_specify": "Vänligen specificera",
+ "prevent_double_submission": "Förhindra dubbelinskickning",
+ "prevent_double_submission_description": "Tillåt endast 1 svar per e-postadress",
+ "protect_survey_with_pin": "Skydda enkäten med en PIN",
+ "protect_survey_with_pin_description": "Endast användare som har PIN-koden kan komma åt enkäten.",
+ "publish": "Publicera",
+ "question": "Fråga",
+ "question_color": "Frågefärg",
+ "question_deleted": "Fråga borttagen.",
+ "question_duplicated": "Fråga duplicerad.",
+ "question_id_updated": "Fråge-ID uppdaterat",
+ "question_used_in_logic": "Denna fråga används i logiken för fråga {questionIndex}.",
+ "question_used_in_quota": "Denna fråga används i kvoten \"{quotaName}\"",
+ "question_used_in_recall": "Denna fråga återkallas i fråga {questionIndex}.",
+ "question_used_in_recall_ending_card": "Denna fråga återkallas i avslutningskortet",
+ "quotas": {
+ "add_quota": "Lägg till kvot",
+ "change_quota_for_public_survey": "Ändra kvot för publik enkät?",
+ "confirm_quota_changes": "Bekräfta kvotändringar",
+ "confirm_quota_changes_body": "Du har osparade ändringar i din kvot. Vill du spara dem innan du lämnar?",
+ "continue_survey_normally": "Fortsätt enkäten normalt",
+ "count_partial_submissions": "Räkna delsvar",
+ "count_partial_submissions_description": "Inkludera respondenter som matchar kvotkriterier men inte slutförde enkäten",
+ "create_quota_for_public_survey": "Skapa kvot för publik enkät?",
+ "create_quota_for_public_survey_description": "Endast framtida svar kommer att räknas in i kvoten",
+ "create_quota_for_public_survey_text": "Denna enkät är redan publik. Befintliga svar kommer inte att tas med i beräkningen för den nya kvoten.",
+ "delete_quota_confirmation_text": "Detta kommer permanent att ta bort kvoten {quotaName}.",
+ "duplicate_quota": "Duplicera kvot",
+ "edit_quota": "Redigera kvot",
+ "end_survey_for_matching_participants": "Avsluta enkäten för matchande deltagare",
+ "inclusion_criteria": "Inklusionskriterier",
+ "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, one {Du har redan {value} svar för denna kvot, så gränsen måste vara större än {value}.} other {Du har redan {value} svar för denna kvot, så gränsen måste vara större än {value}.}}",
+ "limited_to_x_responses": "Begränsad till {limit}",
+ "new_quota": "Ny kvot",
+ "quota_created_successfull_toast": "Kvot skapad",
+ "quota_deleted_successfull_toast": "Kvot borttagen",
+ "quota_duplicated_successfull_toast": "Kvot duplicerad",
+ "quota_name_placeholder": "t.ex. Deltagare ålder 18-25",
+ "quota_updated_successfull_toast": "Kvot uppdaterad",
+ "response_limit": "Gränser",
+ "save_changes_confirmation_body": "Alla ändringar av inklusionskriterierna påverkar endast framtida svar. \nVi rekommenderar att antingen duplicera en befintlig eller skapa en ny kvot.",
+ "save_changes_confirmation_text": "Befintliga svar stannar i kvoten",
+ "select_ending_card": "Välj avslutningskort",
+ "upgrade_prompt_title": "Använd kvoter med en högre plan",
+ "when_quota_has_been_reached": "När kvoten har nåtts"
+ },
+ "randomize_all": "Slumpa alla",
+ "randomize_all_except_last": "Slumpa alla utom sista",
+ "range": "Intervall",
+ "recall_data": "Återkalla data",
+ "recall_information_from": "Återkalla information från ...",
+ "recontact_options_section": "Återkontaktalternativ",
+ "recontact_options_section_description": "Om väntetiden tillåter, välj hur ofta denna enkät kan visas för en person.",
+ "redirect_thank_you_card": "Omdirigera tackkortet",
+ "redirect_to_url": "Omdirigera till URL",
+ "remove_description": "Ta bort beskrivning",
+ "remove_translations": "Ta bort översättningar",
+ "require_answer": "Kräv svar",
+ "required": "Obligatorisk",
+ "reset_to_theme_styles": "Återställ till temastil",
+ "reset_to_theme_styles_main_text": "Är du säker på att du vill återställa stilen till temastilen? Detta kommer att ta bort all anpassad styling.",
+ "respect_global_waiting_time": "Använd projektomfattande väntetid",
+ "respect_global_waiting_time_description": "Denna enkät följer väntetiden som är inställd i projektkonfigurationen. Den visas endast om ingen annan enkät har visats under den perioden.",
+ "response_limit_can_t_be_set_to_0": "Svarsgränsen kan inte sättas till 0",
+ "response_limit_needs_to_exceed_number_of_received_responses": "Svarsgränsen måste överstiga antalet mottagna svar ({responseCount}).",
+ "response_limits_redirections_and_more": "Svarsgränser, omdirigeringar och mer.",
+ "response_options": "Svarsalternativ",
+ "roundness": "Rundhet",
+ "row_used_in_logic_error": "Denna rad används i logiken för fråga {questionIndex}. Vänligen ta bort den från logiken först.",
+ "rows": "Rader",
+ "save_and_close": "Spara och stäng",
+ "scale": "Skala",
+ "search_for_images": "Sök efter bilder",
+ "seconds_after_trigger_the_survey_will_be_closed_if_no_response": "sekunder efter utlösning stängs enkäten om inget svar",
+ "seconds_before_showing_the_survey": "sekunder innan enkäten visas.",
+ "select_or_type_value": "Välj eller skriv värde",
+ "select_ordering": "Välj ordning",
+ "select_saved_action": "Välj sparad åtgärd",
+ "select_type": "Välj typ",
+ "send_survey_to_audience_who_match": "Skicka enkät till målgrupp som matchar...",
+ "send_your_respondents_to_a_page_of_your_choice": "Skicka dina respondenter till en sida du väljer.",
+ "set_the_global_placement_in_the_look_feel_settings": "Ställ in den globala placeringen i Utseende och känsla-inställningarna.",
+ "settings_saved_successfully": "Inställningar sparade.",
+ "seven_points": "7 poäng",
+ "show_block_settings": "Visa blockinställningar",
+ "show_button": "Visa knapp",
+ "show_language_switch": "Visa språkväxlare",
+ "show_multiple_times": "Visa ett begränsat antal gånger",
+ "show_only_once": "Visa endast en gång",
+ "show_question_settings": "Visa frågeinställningar",
+ "show_survey_maximum_of": "Visa enkät maximalt",
+ "show_survey_to_users": "Visa enkät för % av användare",
+ "show_to_x_percentage_of_targeted_users": "Visa för {percentage}% av målgruppens användare",
+ "simple": "Enkel",
+ "six_points": "6 poäng",
+ "smiley": "Smiley",
+ "spam_protection_note": "Spamskydd fungerar inte för enkäter som visas med iOS, React Native och Android SDK:er. Det kommer att bryta enkäten.",
+ "spam_protection_threshold_description": "Ställ in värde mellan 0 och 1, svar under detta värde kommer att avvisas.",
+ "spam_protection_threshold_heading": "Svarströskel",
+ "star": "Stjärna",
+ "starts_with": "Börjar med",
+ "state": "Delstat",
+ "straight": "Rak",
+ "style_the_question_texts_descriptions_and_input_fields": "Styla frågetexter, beskrivningar och inmatningsfält.",
+ "style_the_survey_card": "Styla enkätkortet.",
+ "styling_set_to_theme_styles": "Styling inställd på temastil",
+ "subheading": "Underrubrik",
+ "subtract": "Subtrahera -",
+ "suggest_colors": "Föreslå färger",
+ "survey_completed_heading": "Enkät slutförd",
+ "survey_completed_subheading": "Denna gratis och öppenkällkodsenkät har stängts",
+ "survey_display_settings": "Visningsinställningar för enkät",
+ "survey_placement": "Enkätplacering",
+ "survey_trigger": "Enkätutlösare",
+ "switch_multi_lanugage_on_to_get_started": "Aktivera flerspråk för att komma igång 👉",
+ "target_block_not_found": "Målblock hittades inte",
+ "targeted": "Riktad",
+ "ten_points": "10 poäng",
+ "the_survey_will_be_shown_multiple_times_until_they_respond": "Visa högst det angivna antalet gånger, eller tills de svarar (det som kommer först).",
+ "the_survey_will_be_shown_once_even_if_person_doesnt_respond": "Visa en enda gång, även om de inte svarar.",
+ "then": "Sedan",
+ "this_action_will_remove_all_the_translations_from_this_survey": "Denna åtgärd kommer att ta bort alla översättningar från denna enkät.",
+ "this_extension_is_already_added": "Denna filändelse är redan tillagd.",
+ "this_file_type_is_not_supported": "Denna filtyp stöds inte.",
+ "three_points": "3 poäng",
+ "times": "gånger",
+ "to_keep_the_placement_over_all_surveys_consistent_you_can": "För att hålla placeringen konsekvent över alla enkäter kan du",
+ "trigger_survey_when_one_of_the_actions_is_fired": "Utlös enkät när en av åtgärderna aktiveras...",
+ "try_lollipop_or_mountain": "Prova 'lollipop' eller 'mountain'...",
+ "type_field_id": "Skriv fält-ID",
+ "underline": "Understruken",
+ "unlock_targeting_description": "Rikta in dig på specifika användargrupper baserat på attribut eller enhetsinformation",
+ "unlock_targeting_title": "Lås upp målgruppsinriktning med en högre plan",
+ "unsaved_changes_warning": "Du har osparade ändringar i din enkät. Vill du spara dem innan du lämnar?",
+ "until_they_submit_a_response": "Fråga tills de skickar in ett svar",
+ "untitled_block": "Namnlöst block",
+ "upgrade_notice_description": "Skapa flerspråkiga enkäter och lås upp många fler funktioner",
+ "upgrade_notice_title": "Lås upp flerspråkiga enkäter med en högre plan",
+ "upload": "Ladda upp",
+ "upload_at_least_2_images": "Ladda upp minst 2 bilder",
+ "upper_label": "Övre etikett",
+ "url_filters": "URL-filter",
+ "url_not_supported": "URL stöds inte",
+ "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{variable} används i logiken för fråga {questionIndex}. Vänligen ta bort den från logiken först.",
+ "variable_is_used_in_quota_please_remove_it_from_quota_first": "Variabel \"{variableName}\" används i kvoten \"{quotaName}\"",
+ "variable_name_is_already_taken_please_choose_another": "Variabelnamnet är redan taget, vänligen välj ett annat.",
+ "variable_name_must_start_with_a_letter": "Variabelnamnet måste börja med en bokstav.",
+ "variable_used_in_recall": "Variabel \"{variable}\" återkallas i fråga {questionIndex}.",
+ "variable_used_in_recall_ending_card": "Variabel {variable} återkallas i avslutningskortet",
+ "variable_used_in_recall_welcome": "Variabel \"{variable}\" återkallas i välkomstkortet.",
+ "verify_email_before_submission": "Verifiera e-post före inskickning",
+ "verify_email_before_submission_description": "Låt endast personer med en riktig e-post svara.",
+ "visibility_and_recontact": "Synlighet och återkontakt",
+ "visibility_and_recontact_description": "Kontrollera när denna enkät kan visas och hur ofta den kan visas igen.",
+ "wait": "Vänta",
+ "wait_a_few_seconds_after_the_trigger_before_showing_the_survey": "Vänta några sekunder efter utlösningen innan enkäten visas",
+ "waiting_time_across_surveys": "Projektomfattande väntetid",
+ "waiting_time_across_surveys_description": "För att förhindra enkättrötthet, välj hur denna enkät interagerar med den projektomfattande väntetiden.",
+ "welcome_message": "Välkomstmeddelande",
+ "without_a_filter_all_of_your_users_can_be_surveyed": "Utan ett filter kan alla dina användare enkäteras.",
+ "you_have_not_created_a_segment_yet": "Du har inte skapat ett segment ännu",
+ "you_need_to_have_two_or_more_languages_set_up_in_your_project_to_work_with_translations": "Du måste ha två eller fler språk konfigurerade i ditt projekt för att arbeta med översättningar.",
+ "your_description_here_recall_information_with": "Din beskrivning här. Återkalla information med @",
+ "your_question_here_recall_information_with": "Din fråga här. Återkalla information med @",
+ "your_web_app": "Din webbapp",
+ "zip": "Postnummer"
+ },
+ "error_deleting_survey": "Ett fel uppstod vid borttagning av enkät",
+ "filter": {
+ "complete_and_partial_responses": "Kompletta och delvisa svar",
+ "complete_responses": "Kompletta svar",
+ "partial_responses": "Delvisa svar"
+ },
+ "new_survey": "Ny enkät",
+ "no_surveys_created_yet": "Inga enkäter skapade ännu",
+ "open_options": "Öppna alternativ",
+ "preview_survey_in_a_new_tab": "Förhandsgranska enkät i en ny flik",
+ "read_only_user_not_allowed_to_create_survey_warning": "Som skrivskyddad användare har du inte behörighet att skapa enkäter. Be en användare med skrivåtkomst att skapa en enkät eller en administratör att uppgradera din roll.",
+ "relevance": "Relevans",
+ "responses": {
+ "address_line_1": "Adressrad 1",
+ "address_line_2": "Adressrad 2",
+ "an_error_occurred_adding_the_tag": "Ett fel uppstod när taggen lades till",
+ "an_error_occurred_creating_the_tag": "Ett fel uppstod när taggen skapades",
+ "an_error_occurred_deleting_the_tag": "Ett fel uppstod när taggen togs bort",
+ "browser": "Webbläsare",
+ "bulk_delete_response_quotas": "Svaren är del av kvoter för denna enkät. Hur vill du hantera kvoterna?",
+ "city": "Stad",
+ "company": "Företag",
+ "completed": "Slutförd ✅",
+ "country": "Land",
+ "decrement_quotas": "Minska alla gränser för kvoter inklusive detta svar",
+ "delete_response_confirmation": "Detta kommer att ta bort enkätsvaret, inklusive alla svar, taggar, bifogade dokument och svarsmetadata.",
+ "delete_response_quotas": "Svaret är del av kvoter för denna enkät. Hur vill du hantera kvoterna?",
+ "device": "Enhet",
+ "device_info": "Enhetsinformation",
+ "email": "E-post",
+ "error_downloading_responses": "Ett fel uppstod vid nedladdning av svar",
+ "first_name": "Förnamn",
+ "how_to_identify_users": "Hur man identifierar användare",
+ "last_name": "Efternamn",
+ "not_completed": "Inte slutförd ⏳",
+ "os": "OS",
+ "person_attributes": "Personattribut vid tidpunkten för inskickning",
+ "phone": "Telefon",
+ "respondent_skipped_questions": "Respondenten hoppade över dessa frågor.",
+ "response_deleted_successfully": "Svar borttaget.",
+ "single_use_id": "Engångs-ID",
+ "source": "Källa",
+ "state_region": "Delstat / Region",
+ "survey_closed": "Enkät stängd",
+ "tag_already_exists": "Tagg finns redan",
+ "this_response_is_in_progress": "Detta svar pågår.",
+ "zip_post_code": "Postnummer"
+ },
+ "search_by_survey_name": "Sök efter enkätnamn",
+ "share": {
+ "anonymous_links": {
+ "custom_single_use_id_description": "Om du inte krypterar engångs-ID:n fungerar vilket värde som helst för \"suid=...\" för ett svar.",
+ "custom_single_use_id_title": "Du kan ange vilket värde som helst som engångs-ID i URL:en.",
+ "custom_start_point": "Anpassad startpunkt",
+ "data_prefilling": "Dataförfyllning",
+ "description": "Svar från dessa länkar kommer att vara anonyma",
+ "disable_multi_use_link_modal_button": "Inaktivera fleranvändarlänk",
+ "disable_multi_use_link_modal_description": "Att inaktivera fleranvändarlänken kommer att förhindra att någon skickar in ett svar via länken.",
+ "disable_multi_use_link_modal_description_subtext": "Detta kommer också att bryta alla aktiva inbäddningar på webbplatser, e-post, sociala medier och QR-koder som använder denna fleranvändarlänk.",
+ "disable_multi_use_link_modal_title": "Är du säker? Detta kan bryta aktiva inbäddningar",
+ "disable_single_use_link_modal_button": "Inaktivera engångslänkar",
+ "disable_single_use_link_modal_description": "Om du delade engångslänkar kommer deltagarna inte längre att kunna svara på enkäten.",
+ "generate_and_download_links": "Generera och ladda ner länkar",
+ "generate_links_error": "Engångslänkar kunde inte genereras. Vänligen arbeta direkt med API:t",
+ "multi_use_link": "Fleranvändarlänk",
+ "multi_use_link_description": "Samla in flera svar från anonyma respondenter med en länk.",
+ "multi_use_powers_other_channels_description": "Om du inaktiverar den kommer dessa andra distributionskanaler också att inaktiveras.",
+ "multi_use_powers_other_channels_title": "Denna länk driver webbplatsinbäddningar, e-postinbäddningar, delning på sociala medier och QR-koder.",
+ "nav_title": "Anonyma länkar",
+ "number_of_links_label": "Antal länkar (1 - 5 000)",
+ "single_use_link": "Engångslänkar",
+ "single_use_link_description": "Tillåt endast ett svar per enkätlänk.",
+ "single_use_links": "Engångslänkar",
+ "source_tracking": "Källspårning",
+ "url_encryption_description": "Inaktivera endast om du behöver ange ett anpassat engångs-ID.",
+ "url_encryption_label": "URL-kryptering av engångs-ID"
+ },
+ "dynamic_popup": {
+ "alert_button": "Redigera enkät",
+ "alert_description": "Denna enkät är för närvarande konfigurerad som en länkenkät, vilket inte stöder dynamiska popup-fönster. Du kan ändra detta i inställningsfliken i enkätredigeraren.",
+ "alert_title": "Ändra enkättyp till in-app",
+ "attribute_based_targeting": "Attributbaserad målgruppsinriktning",
+ "code_no_code_triggers": "Kod- och no-code-utlösare",
+ "description": "Formbricks-enkäter kan bäddas in som ett popup-fönster baserat på användarinteraktion.",
+ "nav_title": "Dynamisk (popup)",
+ "recontact_options": "Återkontaktalternativ"
+ },
+ "embed_on_website": {
+ "description": "Formbricks-enkäter kan bäddas in som ett statiskt element.",
+ "embed_code_copied_to_clipboard": "Inbäddningskod kopierad till urklipp!",
+ "embed_mode": "Inbäddningsläge",
+ "embed_mode_description": "Bädda in din enkät med en minimalistisk design, utan utfyllnad och bakgrund.",
+ "nav_title": "Webbplatsinbäddning"
+ },
+ "link_settings": {
+ "description": "Ge länkar en anpassad titel, beskrivning och bild för delning offentligt.",
+ "language_help_text": "Metadata laddas baserat på 'lang'-värdet i URL:en.",
+ "link_description": "Länkbeskrivning",
+ "link_description_description": "Beskrivningar mellan 55-200 tecken presterar bäst.",
+ "link_title": "Länktitel",
+ "link_title_description": "Korta titlar presterar bäst som metatitlar.",
+ "preview_image": "Förhandsgranskningsbild",
+ "preview_image_description": "Landskapsbilder med små filstorlekar (<4MB) presterar bäst.",
+ "title": "Länkinställningar"
+ },
+ "personal_links": {
+ "create_and_manage_segments": "Skapa och hantera dina segment under Kontakter > Segment",
+ "description": "Generera personliga länkar för ett segment och matcha enkätsvar till varje kontakt.",
+ "error_generating_links": "Misslyckades med att generera länkar, vänligen försök igen",
+ "expiry_date_description": "När länken går ut kan mottagaren inte längre svara på enkäten.",
+ "expiry_date_optional": "Utgångsdatum (valfritt)",
+ "generate_and_download_links": "Generera och ladda ner länkar",
+ "generating_links": "Genererar länkar",
+ "generating_links_toast": "Genererar länkar, nedladdning startar snart…",
+ "links_generated_success_toast": "Länkar genererade, din nedladdning startar snart.",
+ "nav_title": "Personliga länkar",
+ "no_segments_available": "Inga segment tillgängliga",
+ "select_segment": "Välj segment",
+ "upgrade_prompt_description": "Generera personliga länkar för ett segment och koppla enkätsvar till varje kontakt.",
+ "upgrade_prompt_title": "Använd personliga länkar med en högre plan",
+ "work_with_segments": "Personliga länkar fungerar med segment."
+ },
+ "send_email": {
+ "copy_embed_code": "Kopiera inbäddningskod",
+ "description": "Bädda in din enkät i ett e-postmeddelande för att få svar från din målgrupp.",
+ "email_preview_tab": "E-postförhandsgranskning",
+ "email_sent": "E-post skickat!",
+ "email_subject_label": "Ämne",
+ "email_to_label": "Till",
+ "embed_code_copied_to_clipboard": "Inbäddningskod kopierad till urklipp!",
+ "embed_code_copied_to_clipboard_failed": "Kopiering misslyckades, vänligen försök igen",
+ "embed_code_tab": "Inbäddningskod",
+ "formbricks_email_survey_preview": "Formbricks e-postenkätförhandsgranskning",
+ "nav_title": "E-postinbäddning",
+ "send_preview": "Skicka förhandsgranskning",
+ "send_preview_email": "Skicka förhandsgransknings-e-post"
+ },
+ "share_settings_title": "Delningsinställningar",
+ "share_view_title": "Dela via",
+ "social_media": {
+ "description": "Få svar från dina kontakter på olika sociala medienätverk.",
+ "source_tracking_enabled": "Källspårning aktiverad",
+ "source_tracking_enabled_alert_description": "När du delar från denna dialog kommer det sociala medienätverket att läggas till i enkätlänken så att du vet vilka svar som kom via varje nätverk.",
+ "title": "Sociala medier"
+ }
+ },
+ "summary": {
+ "added_filter_for_responses_where_answer_to_question": "Lade till filter för svar där svar på fråga {questionIdx} är {filterComboBoxValue} - {filterValue} ",
+ "added_filter_for_responses_where_answer_to_question_is_skipped": "Lade till filter för svar där svar på fråga {questionIdx} är överhoppad",
+ "aggregated": "Aggregerad",
+ "all_responses_csv": "Alla svar (CSV)",
+ "all_responses_excel": "Alla svar (Excel)",
+ "all_time": "All tid",
+ "almost_there": "Nästan där! Installera widget för att börja ta emot svar.",
+ "average": "Genomsnitt",
+ "completed": "Slutförd",
+ "completed_tooltip": "Antal gånger enkäten har slutförts.",
+ "configure_alerts": "Konfigurera aviseringar",
+ "congrats": "Grattis! Din enkät är live.",
+ "connect_your_website_or_app_with_formbricks_to_get_started": "Anslut din webbplats eller app med Formbricks för att komma igång.",
+ "current_count": "Nuvarande antal",
+ "custom_range": "Anpassat intervall...",
+ "delete_all_existing_responses_and_displays": "Ta bort alla befintliga svar och visningar",
+ "download_qr_code": "Ladda ner QR-kod",
+ "downloading_qr_code": "Laddar ner QR-kod",
+ "drop_offs": "Avhopp",
+ "drop_offs_tooltip": "Antal gånger enkäten har startats men inte slutförts.",
+ "failed_to_copy_link": "Misslyckades med att kopiera länk",
+ "filter_added_successfully": "Filter tillagt",
+ "filter_updated_successfully": "Filter uppdaterat",
+ "filtered_responses_csv": "Filtrerade svar (CSV)",
+ "filtered_responses_excel": "Filtrerade svar (Excel)",
+ "generating_qr_code": "Genererar QR-kod",
+ "impressions": "Visningar",
+ "impressions_tooltip": "Antal gånger enkäten har visats.",
+ "in_app": {
+ "connection_description": "Enkäten kommer att visas för användare på din webbplats som matchar kriterierna nedan",
+ "connection_title": "Formbricks SDK är anslutet",
+ "description": "Formbricks-enkäter kan bäddas in som ett popup-fönster baserat på användarinteraktion.",
+ "display_criteria": "Visningskriterier",
+ "display_criteria.audience_description": "Målgrupp",
+ "display_criteria.code_trigger": "Kodåtgärd",
+ "display_criteria.everyone": "Alla",
+ "display_criteria.no_code_trigger": "No-Code",
+ "display_criteria.overwritten": "Åsidosatt",
+ "display_criteria.randomizer": "{percentage}% Slumpning",
+ "display_criteria.randomizer_description": "Endast {percentage}% av personerna som utför åtgärden kan enkäteras.",
+ "display_criteria.recontact_description": "Återkontaktalternativ",
+ "display_criteria.targeted": "Riktad",
+ "display_criteria.time_based_always": "Visa alltid enkät",
+ "display_criteria.time_based_day": "Dag",
+ "display_criteria.time_based_days": "Dagar",
+ "display_criteria.time_based_description": "Global väntetid",
+ "display_criteria.trigger_description": "Enkätutlösare",
+ "documentation_title": "Distribuera interceptenkäter på alla plattformar",
+ "html_embed": "HTML-inbäddning i ",
+ "ios_sdk": "iOS SDK för Apple-appar",
+ "javascript_sdk": "JavaScript SDK",
+ "kotlin_sdk": "Kotlin SDK för Android-appar",
+ "no_connection_description": "Anslut din webbplats eller app med Formbricks för att publicera interceptenkäter.",
+ "no_connection_title": "Du är inte ansluten ännu!",
+ "react_native_sdk": "React Native SDK för RN-appar.",
+ "title": "Inställningar för interceptenkät"
+ },
+ "includes_all": "Inkluderar alla",
+ "includes_either": "Inkluderar antingen",
+ "individual": "Individuell",
+ "is_equal_to": "Är lika med",
+ "is_less_than": "Är mindre än",
+ "last_30_days": "Senaste 30 dagarna",
+ "last_6_months": "Senaste 6 månaderna",
+ "last_7_days": "Senaste 7 dagarna",
+ "last_month": "Senaste månaden",
+ "last_quarter": "Senaste kvartalet",
+ "last_year": "Senaste året",
+ "limit": "Gräns",
+ "no_responses_found": "Inga svar hittades",
+ "other_values_found": "Andra värden hittades",
+ "overall": "Övergripande",
+ "promoters": "Ambassadörer",
+ "qr_code": "QR-kod",
+ "qr_code_description": "Svar som samlas in via QR-kod är anonyma.",
+ "qr_code_download_failed": "QR-kod-nedladdning misslyckades",
+ "qr_code_download_with_start_soon": "QR-kod-nedladdning startar snart",
+ "qr_code_generation_failed": "Det uppstod ett problem med att ladda enkätens QR-kod. Vänligen försök igen.",
+ "quotas_completed": "Kvoter slutförda",
+ "quotas_completed_tooltip": "Antalet kvoter som slutförts av respondenterna.",
+ "reset_survey": "Återställ enkät",
+ "reset_survey_warning": "Att återställa en enkät tar bort alla svar och visningar kopplade till denna enkät. Detta kan inte ångras.",
+ "satisfied": "Nöjd",
+ "selected_responses_csv": "Valda svar (CSV)",
+ "selected_responses_excel": "Valda svar (Excel)",
+ "setup_integrations": "Konfigurera integrationer",
+ "share_survey": "Dela enkät",
+ "show_all_responses_that_match": "Visa alla svar som matchar",
+ "starts": "Starter",
+ "starts_tooltip": "Antal gånger enkäten har startats.",
+ "survey_reset_successfully": "Enkät återställd! {responseCount} svar och {displayCount} visningar togs bort.",
+ "this_month": "Denna månad",
+ "this_quarter": "Detta kvartal",
+ "this_year": "Detta år",
+ "time_to_complete": "Tid att slutföra",
+ "ttc_tooltip": "Genomsnittlig tid för att slutföra frågan.",
+ "unknown_question_type": "Okänd frågetyp",
+ "use_personal_links": "Använd personliga länkar",
+ "whats_next": "Vad händer nu?",
+ "your_survey_is_public": "Din enkät är publik",
+ "youre_not_plugged_in_yet": "Du är inte ansluten ännu!"
+ },
+ "survey_deleted_successfully": "Enkät borttagen!",
+ "survey_duplicated_successfully": "Enkät duplicerad.",
+ "survey_duplication_error": "Misslyckades med att duplicera enkäten.",
+ "templates": {
+ "all_channels": "Alla kanaler",
+ "all_industries": "Alla branscher",
+ "all_roles": "Alla roller",
+ "create_a_new_survey": "Skapa en ny enkät",
+ "multiple_industries": "Flera branscher",
+ "use_this_template": "Använd denna mall",
+ "uses_branching_logic": "Denna enkät använder förgreningslogik."
+ }
+ },
+ "xm-templates": {
+ "ces": "CES",
+ "ces_description": "Utnyttja varje kontaktpunkt för att förstå hur enkel kundinteraktionen är.",
+ "csat": "CSAT",
+ "csat_description": "Implementera bästa praxis för att mäta kundnöjdhet.",
+ "enps": "eNPS",
+ "enps_description": "Universell feedback för att förstå medarbetarengagemang och tillfredsställelse.",
+ "five_star_rating": "5-stjärnigt betyg",
+ "five_star_rating_description": "Universell feedbacklösning för att mäta övergripande tillfredsställelse.",
+ "headline": "Vilken typ av feedback vill du få?",
+ "nps": "NPS",
+ "nps_description": "Implementera beprövade bästa metoder för att förstå VARFÖR människor köper.",
+ "smileys": "Smileys",
+ "smileys_description": "Använd visuella indikatorer för att fånga feedback över kundkontaktpunkter."
+ }
+ },
+ "organizations": {
+ "landing": {
+ "no_projects_warning_subtitle": "Kontakta din organisationsägare för att få åtkomst till projekt. Eller skapa en egen organisation för att komma igång.",
+ "no_projects_warning_title": "Ditt konto har inte åtkomst till några projekt ännu."
+ },
+ "projects": {
+ "new": {
+ "channel": {
+ "channel_select_subtitle": "Dela en länk eller visa din enkät i appar eller på webbplatser.",
+ "channel_select_title": "Vilken typ av enkäter behöver du?",
+ "in_product_surveys": "Produktinbäddade enkäter",
+ "in_product_surveys_description": "Inbäddade i appar eller webbplatser.",
+ "link_and_email_surveys": "Länk- och e-postenkäter",
+ "link_and_email_surveys_description": "Nå människor var som helst online."
+ },
+ "mode": {
+ "formbricks_cx": "Formbricks CX",
+ "formbricks_cx_description": "Enkäter och rapporter för att förstå vad dina kunder behöver.",
+ "formbricks_surveys": "Formbricks Surveys",
+ "formbricks_surveys_description": "Universell enkätplattform för webb-, app- och e-postenkäter.",
+ "what_are_you_here_for": "Vad är du här för?"
+ },
+ "settings": {
+ "brand_color": "Varumärkesfärg",
+ "brand_color_description": "Matcha enkäternas huvudfärg med ditt varumärke.",
+ "create_new_team": "Skapa nytt team",
+ "project_creation_failed": "Projektskapande misslyckades",
+ "project_name": "Produktnamn",
+ "project_name_description": "Vad heter din produkt?",
+ "project_settings_subtitle": "När människor känner igen ditt varumärke är de mycket mer benägna att börja och slutföra svar.",
+ "project_settings_title": "Låt respondenter veta att det är du",
+ "team_description": "Vem kan komma åt detta projekt?"
+ }
+ }
+ }
+ },
+ "s": {
+ "check_inbox_or_spam": "Vänligen kontrollera även din skräppost om du inte ser e-postmeddelandet i din inkorg.",
+ "completed": "Denna enkät är stängd.",
+ "create_your_own": "Skapa din egen öppenkällkodsenkät",
+ "enter_pin": "Denna enkät är skyddad. Ange PIN nedan",
+ "just_curious": "Bara nyfiken?",
+ "link_invalid": "Denna enkät kan endast tas via inbjudan.",
+ "paused": "Denna enkät är tillfälligt pausad.",
+ "please_try_again_with_the_original_link": "Vänligen försök igen med den ursprungliga länken",
+ "preview_survey_questions": "Förhandsgranska enkätfrågor.",
+ "question_preview": "Frågeförhandsgranskning",
+ "response_already_received": "Vi har redan fått ett svar för denna e-postadress.",
+ "response_submitted": "Ett svar kopplat till denna enkät och kontakt finns redan",
+ "survey_already_answered_heading": "Enkäten har redan besvarats.",
+ "survey_already_answered_subheading": "Du kan endast använda denna länk en gång.",
+ "survey_sent_to": "Enkät skickad till {email}",
+ "this_looks_fishy": "Detta ser misstänkt ut.",
+ "verify_email": "Verifiera e-post.",
+ "verify_email_before_submission": "Verifiera din e-post för att svara",
+ "verify_email_before_submission_button": "Verifiera",
+ "verify_email_before_submission_description": "För att svara på denna enkät, vänligen verifiera din e-post",
+ "want_to_respond": "Vill du svara?"
+ },
+ "setup": {
+ "intro": {
+ "get_started": "Kom igång",
+ "made_with_love_in_kiel": "Gjort med 🤍 i Tyskland",
+ "paragraph_1": "Formbricks är en Experience Management Suite byggd av den snabbast växande öppenkällkods enkätplattformen i världen.",
+ "paragraph_2": "Kör riktade enkäter på webbplatser, i appar eller var som helst online. Samla värdefulla insikter för att skapa oemotståndliga upplevelser för kunder, användare och anställda.",
+ "paragraph_3": "Vi är engagerade i högsta grad av dataintegritet. Självhosta för att behålla full kontroll över dina data.",
+ "welcome_to_formbricks": "Välkommen till Formbricks!"
+ },
+ "invite": {
+ "add_another_member": "Lägg till en annan medlem",
+ "continue": "Fortsätt",
+ "failed_to_invite": "Misslyckades med att bjuda in",
+ "invitation_sent_to": "Inbjudan skickad till",
+ "invite_your_organization_members": "Bjud in dina organisationsmedlemmar",
+ "life_s_no_fun_alone": "Livet är inte roligt ensam.",
+ "skip": "Hoppa över",
+ "smtp_not_configured": "SMTP inte konfigurerat",
+ "smtp_not_configured_description": "Inbjudningar kan inte skickas just nu eftersom e-posttjänsten inte är konfigurerad. Du kan kopiera inbjudningslänken i organisationsinställningarna senare."
+ },
+ "organization": {
+ "create": {
+ "continue": "Fortsätt",
+ "delete_account": "Ta bort konto",
+ "delete_account_description": "Om du vill ta bort ditt konto kan du göra det genom att klicka på knappen nedan.",
+ "description": "Gör den till din egen.",
+ "no_membership_found": "Inget medlemskap hittades!",
+ "no_membership_found_description": "Du är för närvarande inte medlem i någon organisation. Om du tror att detta är ett misstag, vänligen kontakta organisationsägaren.",
+ "title": "Konfigurera din organisation"
+ }
+ },
+ "signup": {
+ "create_administrator": "Skapa administratör",
+ "this_user_has_all_the_power": "Denna användare har all makt."
+ }
+ },
+ "templates": {
+ "address": "Adress",
+ "address_description": "Fråga efter en postadress",
+ "alignment_and_engagement_survey_description": "Mät medarbetares överensstämmelse med företagets vision, strategi och kommunikation, samt teamsamarbete.",
+ "alignment_and_engagement_survey_name": "Överensstämmelse och engagemang med företagets vision",
+ "alignment_and_engagement_survey_question_1_headline": "Jag förstår hur min roll bidrar till företagets övergripande strategi.",
+ "alignment_and_engagement_survey_question_1_lower_label": "Ingen förståelse",
+ "alignment_and_engagement_survey_question_1_upper_label": "Fullständig förståelse",
+ "alignment_and_engagement_survey_question_2_headline": "Jag känner att mina värderingar överensstämmer med företagets mission och kultur.",
+ "alignment_and_engagement_survey_question_2_lower_label": "Inte överensstämmande",
+ "alignment_and_engagement_survey_question_3_headline": "Jag samarbetar effektivt med mitt team för att uppnå våra mål.",
+ "alignment_and_engagement_survey_question_3_lower_label": "Dåligt samarbete",
+ "alignment_and_engagement_survey_question_3_upper_label": "Utmärkt samarbete",
+ "alignment_and_engagement_survey_question_4_headline": "Hur kan företaget förbättra sin vision och strategiöverensstämmelse?",
+ "alignment_and_engagement_survey_question_4_placeholder": "Skriv ditt svar här...",
+ "back": "Tillbaka",
+ "book_interview": "Boka intervju",
+ "build_product_roadmap_description": "Identifiera det EN sak dina användare vill ha mest och bygg den.",
+ "build_product_roadmap_name": "Bygg produktroadmap",
+ "build_product_roadmap_question_1_headline": "Hur nöjd är du med funktionerna i $[projectName]?",
+ "build_product_roadmap_question_1_lower_label": "Inte alls nöjd",
+ "build_product_roadmap_question_1_upper_label": "Extremt nöjd",
+ "build_product_roadmap_question_2_headline": "Vilken EN förändring kunde vi göra för att förbättra din $[projectName]-upplevelse mest?",
+ "build_product_roadmap_question_2_placeholder": "Skriv ditt svar här...",
+ "card_abandonment_survey": "Kundkorg-övergivningsenkät",
+ "card_abandonment_survey_description": "Förstå orsakerna bakom övergivna kundkorgar i din webbshop.",
+ "card_abandonment_survey_question_1_button_label": "Visst!",
+ "card_abandonment_survey_question_1_headline": "Har du 2 minuter att hjälpa oss förbättra?",
+ "card_abandonment_survey_question_1_html": "
Vi märkte att du lämnade några varor i din kundkorg. Vi skulle gärna vilja förstå varför.
",
+ "card_abandonment_survey_question_2_choice_1": "Höga fraktkostnader",
+ "card_abandonment_survey_question_2_choice_2": "Hittade ett bättre pris någon annanstans",
+ "card_abandonment_survey_question_2_choice_3": "Bara tittar",
+ "card_abandonment_survey_question_2_choice_4": "Bestämde mig för att inte köpa",
+ "card_abandonment_survey_question_2_choice_5": "Betalningsproblem",
+ "card_abandonment_survey_question_2_choice_6": "Annat",
+ "card_abandonment_survey_question_2_headline": "Vad var den främsta anledningen till att du inte slutförde ditt köp?",
+ "card_abandonment_survey_question_2_subheader": "Vänligen välj ett av följande alternativ:",
+ "card_abandonment_survey_question_3_headline": "Vänligen utveckla din anledning till att inte slutföra köpet:",
+ "card_abandonment_survey_question_4_headline": "Hur skulle du betygsätta din övergripande shoppingupplevelse?",
+ "card_abandonment_survey_question_4_lower_label": "Mycket missnöjd",
+ "card_abandonment_survey_question_4_upper_label": "Mycket nöjd",
+ "card_abandonment_survey_question_5_choice_1": "Lägre fraktkostnader",
+ "card_abandonment_survey_question_5_choice_2": "Rabatter eller kampanjer",
+ "card_abandonment_survey_question_5_choice_3": "Fler betalningsalternativ",
+ "card_abandonment_survey_question_5_choice_4": "Bättre produktbeskrivningar",
+ "card_abandonment_survey_question_5_choice_5": "Förbättrad webbplatsnavigering",
+ "card_abandonment_survey_question_5_choice_6": "Annat",
+ "card_abandonment_survey_question_5_headline": "Vilka faktorer skulle uppmuntra dig att slutföra ditt köp i framtiden?",
+ "card_abandonment_survey_question_5_subheader": "Vänligen välj alla som gäller:",
+ "card_abandonment_survey_question_6_headline": "Vill du få en rabattkod via e-post?",
+ "card_abandonment_survey_question_6_label": "Ja, vänligen kontakta mig.",
+ "card_abandonment_survey_question_7_headline": "Vänligen dela din e-postadress:",
+ "card_abandonment_survey_question_8_headline": "Några ytterligare kommentarer eller förslag?",
+ "career_development_survey_description": "Bedöm medarbetares nöjdhet med karriärtillväxt och utvecklingsmöjligheter.",
+ "career_development_survey_name": "Karriärutvecklingsenkät",
+ "career_development_survey_question_1_headline": "Jag är nöjd med möjligheterna för personlig och professionell tillväxt på $[projectName].",
+ "career_development_survey_question_1_lower_label": "Håller inte alls med",
+ "career_development_survey_question_1_upper_label": "Håller helt med",
+ "career_development_survey_question_2_headline": "Jag är nöjd med karriäravancemangsmöjligheterna som finns tillgängliga för mig på $[projectName].",
+ "career_development_survey_question_2_lower_label": "Håller inte alls med",
+ "career_development_survey_question_2_upper_label": "Håller helt med",
+ "career_development_survey_question_3_headline": "Jag är nöjd med den arbetsrelaterade utbildning min organisation erbjuder.",
+ "career_development_survey_question_3_lower_label": "Håller inte alls med",
+ "career_development_survey_question_3_upper_label": "Håller helt med",
+ "career_development_survey_question_4_headline": "Jag är nöjd med den investering min organisation gör i utbildning.",
+ "career_development_survey_question_4_lower_label": "Håller inte alls med",
+ "career_development_survey_question_4_upper_label": "Håller helt med",
+ "career_development_survey_question_5_choice_1": "Produktutveckling",
+ "career_development_survey_question_5_choice_2": "Marknadsföring",
+ "career_development_survey_question_5_choice_3": "PR",
+ "career_development_survey_question_5_choice_4": "Ekonomi",
+ "career_development_survey_question_5_choice_5": "Drift",
+ "career_development_survey_question_5_choice_6": "Annat",
+ "career_development_survey_question_5_headline": "Vilken funktion arbetar du inom?",
+ "career_development_survey_question_5_subheader": "Vänligen välj ett av följande",
+ "career_development_survey_question_6_choice_1": "Individuell medarbetare",
+ "career_development_survey_question_6_choice_2": "Chef",
+ "career_development_survey_question_6_choice_3": "Senior chef",
+ "career_development_survey_question_6_choice_4": "Vice VD",
+ "career_development_survey_question_6_choice_5": "Direktör",
+ "career_development_survey_question_6_choice_6": "Annat",
+ "career_development_survey_question_6_headline": "Vilket av följande beskriver bäst din nuvarande jobbnivå?",
+ "career_development_survey_question_6_subheader": "Vänligen välj ett av följande",
+ "cess_survey_name": "CES-enkät",
+ "cess_survey_question_1_headline": "$[projectName] gör det enkelt för mig att [LÄGG TILL MÅL]",
+ "cess_survey_question_1_lower_label": "Håller inte alls med",
+ "cess_survey_question_1_upper_label": "Håller helt med",
+ "cess_survey_question_2_headline": "Tack! Hur kunde vi göra det enklare för dig att [LÄGG TILL MÅL]?",
+ "cess_survey_question_2_placeholder": "Skriv ditt svar här...",
+ "changing_subscription_experience_description": "Ta reda på vad som går genom människors huvuden när de ändrar sina prenumerationer.",
+ "changing_subscription_experience_name": "Upplevelse vid prenumerationsändring",
+ "changing_subscription_experience_question_1_choice_1": "Extremt svårt",
+ "changing_subscription_experience_question_1_choice_2": "Det tog ett tag, men jag klarade det",
+ "changing_subscription_experience_question_1_choice_3": "Det var okej",
+ "changing_subscription_experience_question_1_choice_4": "Ganska enkelt",
+ "changing_subscription_experience_question_1_choice_5": "Mycket enkelt, älskar det!",
+ "changing_subscription_experience_question_1_headline": "Hur enkelt var det att ändra din plan?",
+ "changing_subscription_experience_question_2_choice_1": "Ja, mycket tydligt.",
+ "changing_subscription_experience_question_2_choice_2": "Jag var förvirrad först, men hittade det jag behövde.",
+ "changing_subscription_experience_question_2_choice_3": "Ganska komplicerat.",
+ "changing_subscription_experience_question_2_headline": "Är prisinformationen lätt att förstå?",
+ "churn_survey": "Uppsägningsenkät",
+ "churn_survey_description": "Ta reda på varför människor säger upp sina prenumerationer. Dessa insikter är guld värda!",
+ "churn_survey_question_1_choice_1": "Svår att använda",
+ "churn_survey_question_1_choice_2": "Det är för dyrt",
+ "churn_survey_question_1_choice_3": "Jag saknar funktioner",
+ "churn_survey_question_1_choice_4": "Dålig kundservice",
+ "churn_survey_question_1_choice_5": "Jag behövde det bara inte längre",
+ "churn_survey_question_1_headline": "Varför avslutade du din prenumeration?",
+ "churn_survey_question_1_subheader": "Vi är ledsna att se dig gå. Hjälp oss att bli bättre:",
+ "churn_survey_question_2_button_label": "Skicka",
+ "churn_survey_question_2_headline": "Vad skulle ha gjort $[projectName] enklare att använda?",
+ "churn_survey_question_3_button_label": "Få 30% rabatt",
+ "churn_survey_question_3_headline": "Få 30% rabatt för nästa år!",
+ "churn_survey_question_3_html": "
Vi skulle gärna behålla dig som kund. Gärna erbjuder vi 30% rabatt för nästa år.
",
+ "churn_survey_question_4_headline": "Vilka funktioner saknar du?",
+ "churn_survey_question_5_button_label": "Skicka e-post till VD",
+ "churn_survey_question_5_headline": "Så tråkigt att höra 😔 Prata direkt med vår VD!",
+ "churn_survey_question_5_html": "
Vi strävar efter att ge bästa möjliga kundservice. Vänligen maila vår VD så hanterar hon personligen ditt ärende.
",
+ "collect_feedback_description": "Samla omfattande feedback om din produkt eller tjänst.",
+ "collect_feedback_name": "Samla feedback",
+ "collect_feedback_question_1_headline": "Hur betygsätter du din övergripande upplevelse?",
+ "collect_feedback_question_1_lower_label": "Inte bra",
+ "collect_feedback_question_1_subheader": "Oroa dig inte, var ärlig.",
+ "collect_feedback_question_1_upper_label": "Mycket bra",
+ "collect_feedback_question_2_headline": "Underbart! Vad gillade du med det?",
+ "collect_feedback_question_2_placeholder": "Skriv ditt svar här...",
+ "collect_feedback_question_3_headline": "Tack för att du delade! Vad gillade du inte?",
+ "collect_feedback_question_3_placeholder": "Skriv ditt svar här...",
+ "collect_feedback_question_4_headline": "Hur betygsätter du vår kommunikation?",
+ "collect_feedback_question_4_lower_label": "Inte bra",
+ "collect_feedback_question_4_upper_label": "Mycket bra",
+ "collect_feedback_question_5_headline": "Något annat du vill dela med vårt team?",
+ "collect_feedback_question_5_placeholder": "Skriv ditt svar här...",
+ "collect_feedback_question_6_choice_1": "Google",
+ "collect_feedback_question_6_choice_2": "Sociala medier",
+ "collect_feedback_question_6_choice_3": "Vänner",
+ "collect_feedback_question_6_choice_4": "Podcast",
+ "collect_feedback_question_6_choice_5": "Annat",
+ "collect_feedback_question_6_headline": "Hur hörde du talas om oss?",
+ "collect_feedback_question_7_headline": "Slutligen vill vi gärna svara på din feedback. Vänligen dela din e-post:",
+ "collect_feedback_question_7_placeholder": "exempel@email.com",
+ "consent": "Samtycke",
+ "consent_description": "Be om godkännande av villkor, bestämmelser eller dataanvändning",
+ "contact_info": "Kontaktinfo",
+ "contact_info_description": "Fråga efter namn, efternamn, e-post, telefonnummer och företag tillsammans",
+ "csat_description": "Mät kundnöjdhetspoängen för din produkt eller tjänst.",
+ "csat_name": "Kundnöjdhetspoäng (CSAT)",
+ "csat_question_10_headline": "Har du några andra kommentarer, frågor eller funderingar?",
+ "csat_question_10_placeholder": "Skriv ditt svar här...",
+ "csat_question_1_headline": "Hur troligt är det att du skulle rekommendera $[projectName] till en vän eller kollega?",
+ "csat_question_1_lower_label": "Inte troligt",
+ "csat_question_1_upper_label": "Mycket troligt",
+ "csat_question_2_choice_1": "Ganska nöjd",
+ "csat_question_2_choice_2": "Mycket nöjd",
+ "csat_question_2_choice_3": "Varken nöjd eller missnöjd",
+ "csat_question_2_choice_4": "Ganska missnöjd",
+ "csat_question_2_choice_5": "Mycket missnöjd",
+ "csat_question_2_headline": "Sammantaget, hur nöjd eller missnöjd är du med vår $[projectName]",
+ "csat_question_2_subheader": "Vänligen välj ett:",
+ "csat_question_3_choice_1": "Ineffektiv",
+ "csat_question_3_choice_10": "Unik",
+ "csat_question_3_choice_2": "Användbar",
+ "csat_question_3_choice_3": "Opraktisk",
+ "csat_question_3_choice_4": "Överprissatt",
+ "csat_question_3_choice_5": "Hög kvalitet",
+ "csat_question_3_choice_6": "Pålitlig",
+ "csat_question_3_choice_7": "Bra värde för pengarna",
+ "csat_question_3_choice_8": "Dålig kvalitet",
+ "csat_question_3_choice_9": "Opålitlig",
+ "csat_question_3_headline": "Vilka av följande ord skulle du använda för att beskriva vår $[projectName]?",
+ "csat_question_3_subheader": "Välj alla som gäller:",
+ "csat_question_4_choice_1": "Extremt bra",
+ "csat_question_4_choice_2": "Mycket bra",
+ "csat_question_4_choice_3": "Ganska bra",
+ "csat_question_4_choice_4": "Inte så bra",
+ "csat_question_4_choice_5": "Inte alls bra",
+ "csat_question_4_headline": "Hur väl uppfyller vår $[projectName] dina behov?",
+ "csat_question_4_subheader": "Välj ett alternativ:",
+ "csat_question_5_choice_1": "Mycket hög kvalitet",
+ "csat_question_5_choice_2": "Hög kvalitet",
+ "csat_question_5_choice_3": "Låg kvalitet",
+ "csat_question_5_choice_4": "Mycket låg kvalitet",
+ "csat_question_5_choice_5": "Varken hög eller låg",
+ "csat_question_5_headline": "Hur skulle du betygsätta kvaliteten på $[projectName]?",
+ "csat_question_5_subheader": "Välj ett alternativ:",
+ "csat_question_6_choice_1": "Utmärkt",
+ "csat_question_6_choice_2": "Över genomsnittet",
+ "csat_question_6_choice_3": "Genomsnitt",
+ "csat_question_6_choice_4": "Under genomsnittet",
+ "csat_question_6_choice_5": "Dålig",
+ "csat_question_6_headline": "Hur skulle du betygsätta värdet för pengarna för $[projectName]?",
+ "csat_question_6_subheader": "Vänligen välj ett:",
+ "csat_question_7_choice_1": "Extremt responsiv",
+ "csat_question_7_choice_2": "Mycket responsiv",
+ "csat_question_7_choice_3": "Ganska responsiv",
+ "csat_question_7_choice_4": "Inte så responsiv",
+ "csat_question_7_choice_5": "Inte alls responsiv",
+ "csat_question_7_headline": "Hur responsiva har vi varit på dina frågor om våra tjänster?",
+ "csat_question_7_subheader": "Vänligen välj ett:",
+ "csat_question_8_choice_1": "Detta är mitt första köp",
+ "csat_question_8_choice_2": "Mindre än sex månader",
+ "csat_question_8_choice_3": "Sex månader till ett år",
+ "csat_question_8_choice_4": "1 - 2 år",
+ "csat_question_8_choice_5": "3 eller fler år",
+ "csat_question_8_headline": "Hur länge har du varit kund hos $[projectName]?",
+ "csat_question_8_subheader": "Vänligen välj ett:",
+ "csat_question_9_choice_1": "Extremt troligt",
+ "csat_question_9_choice_2": "Mycket troligt",
+ "csat_question_9_choice_3": "Ganska troligt",
+ "csat_question_9_choice_4": "Inte så troligt",
+ "csat_question_9_choice_5": "Inte alls troligt",
+ "csat_question_9_headline": "Hur troligt är det att du köper någon av våra $[projectName] igen?",
+ "csat_question_9_subheader": "Välj ett alternativ:",
+ "csat_survey_name": "$[projectName] CSAT",
+ "csat_survey_question_1_headline": "Hur nöjd är du med din $[projectName]-upplevelse?",
+ "csat_survey_question_1_lower_label": "Extremt missnöjd",
+ "csat_survey_question_1_upper_label": "Extremt nöjd",
+ "csat_survey_question_2_headline": "Underbart! Finns det något vi kan göra för att förbättra din upplevelse?",
+ "csat_survey_question_2_placeholder": "Skriv ditt svar här...",
+ "csat_survey_question_3_headline": "Aj, förlåt! Finns det något vi kan göra för att förbättra din upplevelse?",
+ "csat_survey_question_3_placeholder": "Skriv ditt svar här...",
+ "cta_description": "Visa information och uppmana användare att vidta en specifik åtgärd",
+ "custom_survey_block_1_name": "Block 1",
+ "custom_survey_description": "Skapa en enkät utan mall.",
+ "custom_survey_name": "Börja från början",
+ "custom_survey_question_1_headline": "Vad vill du veta?",
+ "custom_survey_question_1_placeholder": "Skriv ditt svar här...",
+ "customer_effort_score_description": "Bestäm hur enkelt det är att använda en funktion.",
+ "customer_effort_score_name": "Customer Effort Score (CES)",
+ "customer_effort_score_question_1_headline": "$[projectName] gör det enkelt för mig att [LÄGG TILL MÅL]",
+ "customer_effort_score_question_1_lower_label": "Håller inte alls med",
+ "customer_effort_score_question_1_upper_label": "Håller helt med",
+ "customer_effort_score_question_2_headline": "Tack! Hur kunde vi göra det enklare för dig att [LÄGG TILL MÅL]?",
+ "customer_effort_score_question_2_placeholder": "Skriv ditt svar här...",
+ "date": "Datum",
+ "date_description": "Fråga efter ett datumval",
+ "default_ending_card_button_label": "Skapa din egen enkät",
+ "default_ending_card_headline": "Tack!",
+ "default_ending_card_subheader": "Vi uppskattar din feedback.",
+ "default_welcome_card_button_label": "Nästa",
+ "default_welcome_card_headline": "Välkommen!",
+ "default_welcome_card_html": "Tack för att du ger din feedback - låt oss köra igång!",
+ "docs_feedback_description": "Mät hur tydlig varje sida i din utvecklardokumentation är.",
+ "docs_feedback_name": "Dokumentationsfeedback",
+ "docs_feedback_question_1_choice_1": "Ja 👍",
+ "docs_feedback_question_1_choice_2": "Nej 👎",
+ "docs_feedback_question_1_headline": "Var denna sida hjälpsam?",
+ "docs_feedback_question_2_headline": "Vänligen utveckla:",
+ "docs_feedback_question_3_headline": "Sid-URL",
+ "earned_advocacy_score_description": "EAS är en variant av NPS men frågar om faktiskt tidigare beteende istället för högtflygande avsikter.",
+ "earned_advocacy_score_name": "Earned Advocacy Score (EAS)",
+ "earned_advocacy_score_question_1_choice_1": "Ja",
+ "earned_advocacy_score_question_1_choice_2": "Nej",
+ "earned_advocacy_score_question_1_headline": "Har du aktivt rekommenderat $[projectName] till andra?",
+ "earned_advocacy_score_question_2_headline": "Varför rekommenderade du oss?",
+ "earned_advocacy_score_question_2_placeholder": "Skriv ditt svar här...",
+ "earned_advocacy_score_question_3_headline": "Så tråkigt. Varför inte?",
+ "earned_advocacy_score_question_3_placeholder": "Skriv ditt svar här...",
+ "earned_advocacy_score_question_4_choice_1": "Ja",
+ "earned_advocacy_score_question_4_choice_2": "Nej",
+ "earned_advocacy_score_question_4_headline": "Har du aktivt avrådit andra från att välja $[projectName]?",
+ "earned_advocacy_score_question_5_headline": "Vad fick dig att avråda dem?",
+ "earned_advocacy_score_question_5_placeholder": "Skriv ditt svar här...",
+ "employee_satisfaction_description": "Mät medarbetarnöjdhet och identifiera förbättringsområden.",
+ "employee_satisfaction_name": "Medarbetarnöjdhet",
+ "employee_satisfaction_question_1_headline": "Hur nöjd är du med din nuvarande roll?",
+ "employee_satisfaction_question_1_lower_label": "Inte nöjd",
+ "employee_satisfaction_question_1_upper_label": "Mycket nöjd",
+ "employee_satisfaction_question_2_choice_1": "Extremt meningsfullt",
+ "employee_satisfaction_question_2_choice_2": "Mycket meningsfullt",
+ "employee_satisfaction_question_2_choice_3": "Måttligt meningsfullt",
+ "employee_satisfaction_question_2_choice_4": "Något meningsfullt",
+ "employee_satisfaction_question_2_choice_5": "Inte alls meningsfullt",
+ "employee_satisfaction_question_2_headline": "Hur meningsfullt tycker du att ditt arbete är?",
+ "employee_satisfaction_question_3_headline": "Vad tycker du mest om med att arbeta här?",
+ "employee_satisfaction_question_3_placeholder": "Skriv ditt svar här...",
+ "employee_satisfaction_question_5_headline": "Betygsätt stödet du får från din chef.",
+ "employee_satisfaction_question_5_lower_label": "Dåligt",
+ "employee_satisfaction_question_5_upper_label": "Utmärkt",
+ "employee_satisfaction_question_6_headline": "Vilka förbättringar skulle du föreslå för vår arbetsplats?",
+ "employee_satisfaction_question_6_placeholder": "Skriv ditt svar här...",
+ "employee_satisfaction_question_7_choice_1": "Extremt troligt",
+ "employee_satisfaction_question_7_choice_2": "Mycket troligt",
+ "employee_satisfaction_question_7_choice_3": "Måttligt troligt",
+ "employee_satisfaction_question_7_choice_4": "Något troligt",
+ "employee_satisfaction_question_7_choice_5": "Inte alls troligt",
+ "employee_satisfaction_question_7_headline": "Hur troligt är det att du skulle rekommendera vårt företag till en vän?",
+ "employee_well_being_description": "Bedöm dina medarbetares välbefinnande genom balans mellan arbete och privatliv, arbetsbelastning och miljö.",
+ "employee_well_being_name": "Medarbetarvälbefinnande",
+ "employee_well_being_question_1_headline": "Jag känner att jag har en bra balans mellan mitt arbete och privatliv.",
+ "employee_well_being_question_1_lower_label": "Mycket dålig balans",
+ "employee_well_being_question_1_upper_label": "Utmärkt balans",
+ "employee_well_being_question_2_headline": "Min arbetsbelastning är hanterbar, vilket gör att jag kan vara produktiv utan att känna mig överväldigad.",
+ "employee_well_being_question_2_lower_label": "Överväldigande arbetsbelastning",
+ "employee_well_being_question_2_upper_label": "Helt hanterbart",
+ "employee_well_being_question_3_headline": "Arbetsmiljön stödjer mitt fysiska och mentala välbefinnande.",
+ "employee_well_being_question_3_lower_label": "Inte stödjande",
+ "employee_well_being_question_3_upper_label": "Mycket stödjande",
+ "employee_well_being_question_4_headline": "Vilka förändringar, om några, skulle förbättra ditt övergripande välbefinnande på jobbet?",
+ "employee_well_being_question_4_placeholder": "Skriv ditt svar här...",
+ "enps_survey_name": "eNPS-enkät",
+ "enps_survey_question_1_headline": "Hur troligt är det att du skulle rekommendera att arbeta på detta företag till en vän eller kollega?",
+ "enps_survey_question_1_lower_label": "Inte alls troligt",
+ "enps_survey_question_1_upper_label": "Extremt troligt",
+ "enps_survey_question_2_headline": "För att hjälpa oss förbättra, kan du beskriva anledningen/anledningarna till ditt betyg?",
+ "enps_survey_question_3_headline": "Några andra kommentarer, feedback eller funderingar?",
+ "evaluate_a_product_idea_description": "Enkäta användare om produkt- eller funktionsidéer. Få feedback snabbt.",
+ "evaluate_a_product_idea_name": "Utvärdera en produktidé",
+ "evaluate_a_product_idea_question_1_button_label": "Kör på!",
+ "evaluate_a_product_idea_question_1_headline": "Vi älskar hur du använder $[projectName]! Vi skulle gärna vilja höra dina tankar om en funktionsidé. Har du en minut?",
+ "evaluate_a_product_idea_question_1_html": "
Vi respekterar din tid och höll det kort 🤸
",
+ "evaluate_a_product_idea_question_2_headline": "Tack! Hur svårt eller enkelt är det för dig att [PROBLEMOMRÅDE] idag?",
+ "evaluate_a_product_idea_question_2_lower_label": "Mycket svårt",
+ "evaluate_a_product_idea_question_2_upper_label": "Mycket enkelt",
+ "evaluate_a_product_idea_question_3_headline": "Vad är svårast för dig när det gäller [PROBLEMOMRÅDE]?",
+ "evaluate_a_product_idea_question_3_placeholder": "Skriv ditt svar här...",
+ "evaluate_a_product_idea_question_4_button_label": "Nästa",
+ "evaluate_a_product_idea_question_4_headline": "Vi arbetar på en idé för att hjälpa med [PROBLEMOMRÅDE].",
+ "evaluate_a_product_idea_question_4_html": "
Infoga konceptbeskrivning här. Lägg till nödvändiga detaljer men håll det koncist och lätt att förstå.
",
+ "evaluate_a_product_idea_question_5_headline": "Hur värdefullt skulle denna funktion vara för dig?",
+ "evaluate_a_product_idea_question_5_lower_label": "Inte värdefullt",
+ "evaluate_a_product_idea_question_5_upper_label": "Mycket värdefullt",
+ "evaluate_a_product_idea_question_6_headline": "Förstår. Varför skulle denna funktion inte vara värdefull för dig?",
+ "evaluate_a_product_idea_question_6_placeholder": "Skriv ditt svar här...",
+ "evaluate_a_product_idea_question_7_headline": "Vad skulle vara mest värdefullt för dig i denna funktion?",
+ "evaluate_a_product_idea_question_7_placeholder": "Skriv ditt svar här...",
+ "evaluate_a_product_idea_question_8_headline": "Något annat vi bör tänka på?",
+ "evaluate_a_product_idea_question_8_placeholder": "Skriv ditt svar här...",
+ "evaluate_content_quality_description": "Mät om ditt innehållsmarknadsföringsmaterial träffar rätt.",
+ "evaluate_content_quality_name": "Utvärdera innehållskvalitet",
+ "evaluate_content_quality_question_1_headline": "Hur väl adresserade denna artikel det du hoppades lära dig?",
+ "evaluate_content_quality_question_1_lower_label": "Inte alls bra",
+ "evaluate_content_quality_question_1_upper_label": "Extremt bra",
+ "evaluate_content_quality_question_2_headline": "Hmpft! Vad hoppades du på?",
+ "evaluate_content_quality_question_2_placeholder": "Skriv ditt svar här...",
+ "evaluate_content_quality_question_3_headline": "Härligt! Finns det något annat du vill att vi ska ta upp?",
+ "evaluate_content_quality_question_3_placeholder": "Ämnen, trender, handledningar...",
+ "fake_door_follow_up_description": "Följ upp med användare som stötte på ett av dina Fake Door-experiment.",
+ "fake_door_follow_up_name": "Fake Door-uppföljning",
+ "fake_door_follow_up_question_1_headline": "Hur viktigt är det för dig att vi bygger [funktion]?",
+ "fake_door_follow_up_question_1_lower_label": "Inte viktigt",
+ "fake_door_follow_up_question_1_upper_label": "Mycket viktigt",
+ "fake_door_follow_up_question_2_choice_1": "Aspekt 1",
+ "fake_door_follow_up_question_2_choice_2": "Aspekt 2",
+ "fake_door_follow_up_question_2_choice_3": "Aspekt 3",
+ "fake_door_follow_up_question_2_choice_4": "Aspekt 4",
+ "fake_door_follow_up_question_2_headline": "Vad bör vi definitivt inkludera när vi bygger detta?",
+ "feature_chaser_description": "Följ upp med användare som just använt en specifik funktion.",
+ "feature_chaser_name": "Funktionsuppföljare",
+ "feature_chaser_question_1_headline": "Hur viktig är [LÄGG TILL FUNKTION] för dig?",
+ "feature_chaser_question_1_lower_label": "Inte viktigt",
+ "feature_chaser_question_1_upper_label": "Mycket viktigt",
+ "feature_chaser_question_2_choice_1": "Aspekt 1",
+ "feature_chaser_question_2_choice_2": "Aspekt 2",
+ "feature_chaser_question_2_choice_3": "Aspekt 3",
+ "feature_chaser_question_2_choice_4": "Aspekt 4",
+ "feature_chaser_question_2_headline": "Vilken aspekt är viktigast?",
+ "feedback_box_description": "Ge dina användare möjlighet att smidigt dela vad de har på hjärtat.",
+ "feedback_box_name": "Feedbackruta",
+ "feedback_box_question_1_choice_1": "Buggrapport 🐞",
+ "feedback_box_question_1_choice_2": "Funktionsförfrågan 💡",
+ "feedback_box_question_1_headline": "Vad har du på hjärtat?",
+ "feedback_box_question_1_subheader": "Tack för att du delar. Vi återkommer så snart som möjligt.",
+ "feedback_box_question_2_headline": "Vad är trasigt?",
+ "feedback_box_question_2_subheader": "Ju mer detaljer, desto bättre :)",
+ "feedback_box_question_3_button_label": "Ja, meddela mig",
+ "feedback_box_question_3_headline": "Vill du hållas uppdaterad?",
+ "feedback_box_question_3_html": "
Vi fixar detta så snart som möjligt. Vill du bli meddelad när vi har gjort det?
",
+ "feedback_box_question_4_button_label": "Begär funktion",
+ "feedback_box_question_4_headline": "Härligt, berätta mer!",
+ "feedback_box_question_4_placeholder": "Skriv ditt svar här...",
+ "feedback_box_question_4_subheader": "Vilket problem vill du att vi löser?",
+ "file_upload": "Filuppladdning",
+ "file_upload_description": "Låt respondenter ladda upp dokument, bilder eller andra filer",
+ "finish": "Slutför",
+ "follow_ups_modal_action_body": "
Hej 👋
Tack för att du tog dig tid att svara, vi återkommer snart.
Ha en fin dag!
",
+ "free_text": "Fritext",
+ "free_text_description": "Samla öppna återkopplingar",
+ "free_text_placeholder": "Skriv ditt svar här...",
+ "gauge_feature_satisfaction_description": "Utvärdera nöjdheten med specifika funktioner i din produkt.",
+ "gauge_feature_satisfaction_name": "Mät funktionsnöjdhet",
+ "gauge_feature_satisfaction_question_1_headline": "Hur enkelt var det att uppnå ... ?",
+ "gauge_feature_satisfaction_question_1_lower_label": "Inte enkelt",
+ "gauge_feature_satisfaction_question_1_upper_label": "Mycket enkelt",
+ "gauge_feature_satisfaction_question_2_headline": "Vad är en sak vi kunde göra bättre?",
+ "identify_customer_goals_description": "Förstå bättre om din kommunikation skapar rätt förväntningar på värdet din produkt ger.",
+ "identify_customer_goals_name": "Identifiera kundmål",
+ "identify_sign_up_barriers_description": "Erbjud en rabatt för att samla insikter om registreringshinder.",
+ "identify_sign_up_barriers_name": "Identifiera registreringshinder",
+ "identify_sign_up_barriers_question_1_button_label": "Få 10% rabatt",
+ "identify_sign_up_barriers_question_1_headline": "Svara på denna korta enkät, få 10% rabatt!",
+ "identify_sign_up_barriers_question_1_html": "Du verkar överväga att registrera dig. Svara på fyra frågor och få 10% på valfri plan.",
+ "identify_sign_up_barriers_question_2_headline": "Hur troligt är det att du registrerar dig för $[projectName]?",
+ "identify_sign_up_barriers_question_2_lower_label": "Inte alls troligt",
+ "identify_sign_up_barriers_question_2_upper_label": "Mycket troligt",
+ "identify_sign_up_barriers_question_3_choice_1_label": "Kanske inte har vad jag letar efter",
+ "identify_sign_up_barriers_question_3_choice_2_label": "Jämför fortfarande alternativ",
+ "identify_sign_up_barriers_question_3_choice_3_label": "Verkar komplicerat",
+ "identify_sign_up_barriers_question_3_choice_4_label": "Prissättning är ett bekymmer",
+ "identify_sign_up_barriers_question_3_choice_5_label": "Något annat",
+ "identify_sign_up_barriers_question_3_headline": "Vad håller dig tillbaka från att prova $[projectName]?",
+ "identify_sign_up_barriers_question_4_headline": "Vad behöver du som $[projectName] inte erbjuder?",
+ "identify_sign_up_barriers_question_4_placeholder": "Skriv ditt svar här...",
+ "identify_sign_up_barriers_question_5_headline": "Vilka alternativ tittar du på?",
+ "identify_sign_up_barriers_question_5_placeholder": "Skriv ditt svar här...",
+ "identify_sign_up_barriers_question_6_headline": "Vad verkar komplicerat för dig?",
+ "identify_sign_up_barriers_question_6_placeholder": "Skriv ditt svar här...",
+ "identify_sign_up_barriers_question_7_headline": "Vad oroar dig angående prissättningen?",
+ "identify_sign_up_barriers_question_7_placeholder": "Skriv ditt svar här...",
+ "identify_sign_up_barriers_question_8_headline": "Vänligen förklara:",
+ "identify_sign_up_barriers_question_8_placeholder": "Skriv ditt svar här...",
+ "identify_sign_up_barriers_question_9_button_label": "Registrera dig",
+ "identify_sign_up_barriers_question_9_headline": "Tack! Här är din kod: SIGNUPNOW10",
+ "identify_sign_up_barriers_question_9_html": "
Tack så mycket för att du tog dig tid att dela feedback 🙏
",
+ "identify_upsell_opportunities_description": "Ta reda på hur mycket tid din produkt sparar för användaren. Använd det för merförsäljning.",
+ "identify_upsell_opportunities_name": "Identifiera merförsäljningsmöjligheter",
+ "identify_upsell_opportunities_question_1_choice_1": "Mindre än 1 timme",
+ "identify_upsell_opportunities_question_1_choice_2": "1 till 2 timmar",
+ "identify_upsell_opportunities_question_1_choice_3": "3 till 5 timmar",
+ "identify_upsell_opportunities_question_1_choice_4": "5+ timmar",
+ "identify_upsell_opportunities_question_1_headline": "Hur många timmar sparar ditt team per vecka genom att använda $[projectName]?",
+ "improve_activation_rate_description": "Identifiera svagheter i ditt onboardingflöde för att öka användaraktivering.",
+ "improve_activation_rate_name": "Förbättra aktiveringsgrad",
+ "improve_activation_rate_question_1_choice_1": "Verkade inte användbart för mig",
+ "improve_activation_rate_question_1_choice_2": "Svårt att konfigurera eller använda",
+ "improve_activation_rate_question_1_choice_3": "Saknade funktioner/funktionalitet",
+ "improve_activation_rate_question_1_choice_4": "Har bara inte haft tid",
+ "improve_activation_rate_question_1_choice_5": "Något annat",
+ "improve_activation_rate_question_1_headline": "Vad är huvudanledningen till att du inte har slutfört konfigurationen av $[projectName]?",
+ "improve_activation_rate_question_2_headline": "Vad fick dig att tro att $[projectName] inte skulle vara användbart?",
+ "improve_activation_rate_question_2_placeholder": "Skriv ditt svar här...",
+ "improve_activation_rate_question_3_headline": "Vad var svårt med att konfigurera eller använda $[projectName]?",
+ "improve_activation_rate_question_3_placeholder": "Skriv ditt svar här...",
+ "improve_activation_rate_question_4_headline": "Vilka funktioner eller funktionalitet saknades?",
+ "improve_activation_rate_question_4_placeholder": "Skriv ditt svar här...",
+ "improve_activation_rate_question_5_headline": "Hur kunde vi göra det enklare för dig att komma igång?",
+ "improve_activation_rate_question_5_placeholder": "Skriv ditt svar här...",
+ "improve_activation_rate_question_6_headline": "Vad var det? Vänligen förklara:",
+ "improve_activation_rate_question_6_placeholder": "Skriv ditt svar här...",
+ "improve_activation_rate_question_6_subheader": "Vi är angelägna att fixa det så snart som möjligt.",
+ "improve_newsletter_content_description": "Ta reda på hur dina prenumeranter tycker om ditt nyhetsbrevinnehåll.",
+ "improve_newsletter_content_name": "Förbättra nyhetsbrevsinnehåll",
+ "improve_newsletter_content_question_1_headline": "Hur skulle du betygsätta denna veckas nyhetsbrev?",
+ "improve_newsletter_content_question_1_lower_label": "Meh",
+ "improve_newsletter_content_question_1_upper_label": "Utmärkt",
+ "improve_newsletter_content_question_2_headline": "Vad skulle ha gjort denna veckas nyhetsbrev mer hjälpsamt?",
+ "improve_newsletter_content_question_2_placeholder": "Skriv ditt svar här...",
+ "improve_newsletter_content_question_3_button_label": "Hjälper gärna till!",
+ "improve_newsletter_content_question_3_headline": "Tack! ❤️ Sprid kärleken till EN vän.",
+ "improve_newsletter_content_question_3_html": "
Vem tänker som du? Du skulle göra oss en enorm tjänst om du delade denna veckas avsnitt med din tankevän!
",
+ "improve_trial_conversion_description": "Ta reda på varför folk avslutade sin testperiod. Dessa insikter hjälper dig förbättra din tratt.",
+ "improve_trial_conversion_name": "Förbättra testkonvertering",
+ "improve_trial_conversion_question_1_choice_1": "Jag fick inte mycket värde av det",
+ "improve_trial_conversion_question_1_choice_2": "Jag förväntade mig något annat",
+ "improve_trial_conversion_question_1_choice_3": "Det är för dyrt för vad det gör",
+ "improve_trial_conversion_question_1_choice_4": "Jag saknar en funktion",
+ "improve_trial_conversion_question_1_choice_5": "Jag bara tittade runt",
+ "improve_trial_conversion_question_1_headline": "Varför avslutade du din testperiod?",
+ "improve_trial_conversion_question_1_subheader": "Hjälp oss förstå dig bättre:",
+ "improve_trial_conversion_question_2_button_label": "Nästa",
+ "improve_trial_conversion_question_2_headline": "Tråkigt att höra. Vad var det största problemet med att använda $[projectName]?",
+ "improve_trial_conversion_question_4_button_label": "Få 20% rabatt",
+ "improve_trial_conversion_question_4_headline": "Tråkigt att höra! Få 20% rabatt första året.",
+ "improve_trial_conversion_question_4_html": "
Vi erbjuder dig gärna 20% rabatt på en årsplan.
",
+ "improve_trial_conversion_question_5_button_label": "Nästa",
+ "improve_trial_conversion_question_5_headline": "Vad vill du uppnå?",
+ "improve_trial_conversion_question_5_subheader": "Vänligen välj ett av följande alternativ:",
+ "improve_trial_conversion_question_6_headline": "Hur löser du ditt problem nu?",
+ "improve_trial_conversion_question_6_subheader": "Vänligen nämn alternativa lösningar:",
+ "integration_setup_survey_description": "Utvärdera hur enkelt användare kan lägga till integrationer i din produkt. Hitta blinda fläckar.",
+ "integration_setup_survey_name": "Integrationsanvändningsenkät",
+ "integration_setup_survey_question_1_headline": "Hur enkelt var det att konfigurera denna integration?",
+ "integration_setup_survey_question_1_lower_label": "Inte enkelt",
+ "integration_setup_survey_question_1_upper_label": "Mycket enkelt",
+ "integration_setup_survey_question_2_headline": "Varför var det svårt?",
+ "integration_setup_survey_question_2_placeholder": "Skriv ditt svar här...",
+ "integration_setup_survey_question_3_headline": "Vilka andra verktyg skulle du vilja använda med $[projectName]?",
+ "integration_setup_survey_question_3_subheader": "Vi fortsätter bygga integrationer, din kan bli nästa:",
+ "interview_prompt_description": "Bjud in en specifik undergrupp av dina användare att boka en intervju med ditt produktteam.",
+ "interview_prompt_name": "Intervjuförfrågan",
+ "interview_prompt_question_1_button_label": "Boka tid",
+ "interview_prompt_question_1_headline": "Har du 15 min att prata med oss? 🙏",
+ "interview_prompt_question_1_html": "Du är en av våra poweranvändare. Vi skulle gärna vilja intervjua dig kort!",
+ "long_term_retention_check_in_description": "Mät långsiktig användarnöjdhet, lojalitet och förbättringsområden för att behålla lojala användare.",
+ "long_term_retention_check_in_name": "Långsiktig retentionsuppföljning",
+ "long_term_retention_check_in_question_10_headline": "Någon ytterligare feedback eller kommentarer?",
+ "long_term_retention_check_in_question_10_placeholder": "Dela eventuella tankar eller feedback som kan hjälpa oss förbättra...",
+ "long_term_retention_check_in_question_1_headline": "Hur nöjd är du med $[projectName] överlag?",
+ "long_term_retention_check_in_question_1_lower_label": "Inte nöjd",
+ "long_term_retention_check_in_question_1_upper_label": "Mycket nöjd",
+ "long_term_retention_check_in_question_2_headline": "Vad tycker du är mest värdefullt med $[projectName]?",
+ "long_term_retention_check_in_question_2_placeholder": "Beskriv funktionen eller fördelen du värdesätter mest...",
+ "long_term_retention_check_in_question_3_choice_1": "Funktioner",
+ "long_term_retention_check_in_question_3_choice_2": "Kundsupport",
+ "long_term_retention_check_in_question_3_choice_3": "Användarupplevelse",
+ "long_term_retention_check_in_question_3_choice_4": "Prissättning",
+ "long_term_retention_check_in_question_3_choice_5": "Pålitlighet och drifttid",
+ "long_term_retention_check_in_question_3_headline": "Vilken aspekt av $[projectName] tycker du är mest väsentlig för din upplevelse?",
+ "long_term_retention_check_in_question_4_headline": "Hur väl uppfyller $[projectName] dina förväntningar?",
+ "long_term_retention_check_in_question_4_lower_label": "Når inte upp",
+ "long_term_retention_check_in_question_4_upper_label": "Överträffar förväntningarna",
+ "long_term_retention_check_in_question_5_headline": "Vilka utmaningar eller frustrationer har du mött när du använt $[projectName]?",
+ "long_term_retention_check_in_question_5_placeholder": "Beskriv eventuella utmaningar eller förbättringar du vill se...",
+ "long_term_retention_check_in_question_6_headline": "Hur troligt är det att du skulle rekommendera $[projectName] till en vän eller kollega?",
+ "long_term_retention_check_in_question_6_lower_label": "Inte troligt",
+ "long_term_retention_check_in_question_6_upper_label": "Mycket troligt",
+ "long_term_retention_check_in_question_7_choice_1": "Nya funktioner och förbättringar",
+ "long_term_retention_check_in_question_7_choice_2": "Förbättrad kundsupport",
+ "long_term_retention_check_in_question_7_choice_3": "Bättre prissättningsalternativ",
+ "long_term_retention_check_in_question_7_choice_4": "Fler integrationer",
+ "long_term_retention_check_in_question_7_choice_5": "Förfining av användarupplevelse",
+ "long_term_retention_check_in_question_7_headline": "Vad skulle göra dig mer benägen att förbli en långsiktig användare?",
+ "long_term_retention_check_in_question_8_headline": "Om du kunde ändra en sak med $[projectName], vad skulle det vara?",
+ "long_term_retention_check_in_question_8_placeholder": "Dela eventuella ändringar eller funktioner du önskar att vi skulle överväga...",
+ "long_term_retention_check_in_question_9_headline": "Hur nöjd är du med våra produktuppdateringar och frekvensen på dem?",
+ "long_term_retention_check_in_question_9_lower_label": "Inte nöjd",
+ "long_term_retention_check_in_question_9_upper_label": "Mycket nöjd",
+ "market_attribution_description": "Lär dig hur användare först hörde om din produkt.",
+ "market_attribution_name": "Marknadsföringsattribuering",
+ "market_attribution_question_1_choice_1": "Rekommendation",
+ "market_attribution_question_1_choice_2": "Sociala medier",
+ "market_attribution_question_1_choice_3": "Annonser",
+ "market_attribution_question_1_choice_4": "Google-sökning",
+ "market_attribution_question_1_choice_5": "I en podcast",
+ "market_attribution_question_1_headline": "Hur hörde du om oss först?",
+ "market_attribution_question_1_subheader": "Vänligen välj ett av följande alternativ:",
+ "market_site_clarity_description": "Identifiera användare som lämnar din marknadsföringssida. Förbättra ditt budskap.",
+ "market_site_clarity_name": "Marknadsföringswebbplatsens tydlighet",
+ "market_site_clarity_question_1_choice_1": "Ja, absolut",
+ "market_site_clarity_question_1_choice_2": "Typ...",
+ "market_site_clarity_question_1_choice_3": "Nej, inte alls",
+ "market_site_clarity_question_1_headline": "Har du all information du behöver för att prova $[projectName]?",
+ "market_site_clarity_question_2_headline": "Vad saknas eller är oklart för dig om $[projectName]?",
+ "market_site_clarity_question_3_button_label": "Få rabatt",
+ "market_site_clarity_question_3_headline": "Tack för ditt svar! Få 25% rabatt på dina första 6 månader:",
+ "matrix": "Matris",
+ "matrix_description": "Skapa ett rutnät för att betygsätta flera objekt på samma kriterier",
+ "measure_search_experience_description": "Mät hur relevanta dina sökresultat är.",
+ "measure_search_experience_name": "Mät sökupplevelse",
+ "measure_search_experience_question_1_headline": "Hur relevanta är dessa sökresultat?",
+ "measure_search_experience_question_1_lower_label": "Inte alls relevanta",
+ "measure_search_experience_question_1_upper_label": "Mycket relevanta",
+ "measure_search_experience_question_2_headline": "Usch! Vad gör resultaten irrelevanta för dig?",
+ "measure_search_experience_question_2_placeholder": "Skriv ditt svar här...",
+ "measure_search_experience_question_3_headline": "Härligt! Finns det något vi kan göra för att förbättra din upplevelse?",
+ "measure_search_experience_question_3_placeholder": "Skriv ditt svar här...",
+ "measure_task_accomplishment_description": "Se om användare får sina uppgifter gjorda. Framgångsrika användare är bättre kunder.",
+ "measure_task_accomplishment_name": "Mät uppgiftsgenomförande",
+ "measure_task_accomplishment_question_1_headline": "Kunde du utföra det du kom hit för att göra idag?",
+ "measure_task_accomplishment_question_1_option_1_label": "Ja",
+ "measure_task_accomplishment_question_1_option_2_label": "Jobbar på det",
+ "measure_task_accomplishment_question_1_option_3_label": "Nej",
+ "measure_task_accomplishment_question_2_headline": "Hur enkelt var det att uppnå ditt mål?",
+ "measure_task_accomplishment_question_2_lower_label": "Mycket svårt",
+ "measure_task_accomplishment_question_2_upper_label": "Mycket enkelt",
+ "measure_task_accomplishment_question_3_headline": "Vad gjorde det svårt?",
+ "measure_task_accomplishment_question_3_placeholder": "Skriv ditt svar här...",
+ "measure_task_accomplishment_question_4_button_label": "Skicka",
+ "measure_task_accomplishment_question_4_headline": "Utmärkt! Vad kom du hit för att göra idag?",
+ "measure_task_accomplishment_question_5_button_label": "Skicka",
+ "measure_task_accomplishment_question_5_headline": "Vad hindrade dig?",
+ "measure_task_accomplishment_question_5_placeholder": "Skriv ditt svar här...",
+ "multi_select": "Flerval",
+ "multi_select_description": "Be respondenter välja ett eller flera alternativ",
+ "new_integration_survey_description": "Ta reda på vilka integrationer dina användare vill se härnäst.",
+ "new_integration_survey_name": "Ny integrationsenkät",
+ "new_integration_survey_question_1_choice_1": "PostHog",
+ "new_integration_survey_question_1_choice_2": "Segment",
+ "new_integration_survey_question_1_choice_3": "Hubspot",
+ "new_integration_survey_question_1_choice_4": "Twilio",
+ "new_integration_survey_question_1_choice_5": "Annat",
+ "new_integration_survey_question_1_headline": "Vilka andra verktyg använder du?",
+ "next": "Nästa",
+ "nps": "Net Promoter Score (NPS)",
+ "nps_description": "Mät Net-Promoter-Score (0-10)",
+ "nps_lower_label": "Inte alls troligt",
+ "nps_name": "Net Promoter Score (NPS)",
+ "nps_question_1_headline": "Hur troligt är det att du skulle rekommendera $[projectName] till en vän eller kollega?",
+ "nps_question_1_lower_label": "Inte troligt",
+ "nps_question_1_upper_label": "Mycket troligt",
+ "nps_question_2_headline": "Vad fick dig att ge det betyget?",
+ "nps_survey_name": "NPS-enkät",
+ "nps_survey_question_1_headline": "Hur troligt är det att du skulle rekommendera $[projectName] till en vän eller kollega?",
+ "nps_survey_question_1_lower_label": "Inte alls troligt",
+ "nps_survey_question_1_upper_label": "Extremt troligt",
+ "nps_survey_question_2_headline": "För att hjälpa oss förbättra, kan du beskriva anledningen/anledningarna till ditt betyg?",
+ "nps_survey_question_3_headline": "Några andra kommentarer, feedback eller funderingar?",
+ "nps_upper_label": "Extremt troligt",
+ "onboarding_segmentation": "Onboardingsegmentering",
+ "onboarding_segmentation_description": "Lär dig mer om vem som registrerade sig för din produkt och varför.",
+ "onboarding_segmentation_question_1_choice_1": "Grundare",
+ "onboarding_segmentation_question_1_choice_2": "Chef",
+ "onboarding_segmentation_question_1_choice_3": "Produktchef",
+ "onboarding_segmentation_question_1_choice_4": "Produktägare",
+ "onboarding_segmentation_question_1_choice_5": "Mjukvaruutvecklare",
+ "onboarding_segmentation_question_1_headline": "Vilken är din roll?",
+ "onboarding_segmentation_question_1_subheader": "Vänligen välj ett av följande alternativ:",
+ "onboarding_segmentation_question_2_choice_1": "bara jag",
+ "onboarding_segmentation_question_2_choice_2": "1-5 anställda",
+ "onboarding_segmentation_question_2_choice_3": "6-10 anställda",
+ "onboarding_segmentation_question_2_choice_4": "11-100 anställda",
+ "onboarding_segmentation_question_2_choice_5": "över 100 anställda",
+ "onboarding_segmentation_question_2_headline": "Vad är din företagsstorlek?",
+ "onboarding_segmentation_question_2_subheader": "Vänligen välj ett av följande alternativ:",
+ "onboarding_segmentation_question_3_choice_1": "Rekommendation",
+ "onboarding_segmentation_question_3_choice_2": "Sociala medier",
+ "onboarding_segmentation_question_3_choice_3": "Annonser",
+ "onboarding_segmentation_question_3_choice_4": "Google-sökning",
+ "onboarding_segmentation_question_3_choice_5": "I en podcast",
+ "onboarding_segmentation_question_3_headline": "Hur hörde du om oss först?",
+ "onboarding_segmentation_question_3_subheader": "Vänligen välj ett av följande alternativ:",
+ "picture_selection": "Bildval",
+ "picture_selection_description": "Be respondenter välja en eller flera bilder",
+ "preview_survey_ending_card_description": "Vänligen fortsätt din onboarding.",
+ "preview_survey_ending_card_headline": "Du klarade det!",
+ "preview_survey_name": "Ny enkät",
+ "preview_survey_question_1_headline": "Hur skulle du betygsätta {projectName}?",
+ "preview_survey_question_1_lower_label": "Inte bra",
+ "preview_survey_question_1_subheader": "Detta är en förhandsvisning av enkäten.",
+ "preview_survey_question_1_upper_label": "Mycket bra",
+ "preview_survey_question_2_back_button_label": "Tillbaka",
+ "preview_survey_question_2_choice_1_label": "Ja, håll mig informerad.",
+ "preview_survey_question_2_choice_2_label": "Nej, tack!",
+ "preview_survey_question_2_headline": "Vill du hållas uppdaterad?",
+ "preview_survey_welcome_card_headline": "Välkommen!",
+ "prioritize_features_description": "Identifiera vilka funktioner dina användare behöver mest och minst.",
+ "prioritize_features_name": "Prioritera funktioner",
+ "prioritize_features_question_1_choice_1": "Funktion 1",
+ "prioritize_features_question_1_choice_2": "Funktion 2",
+ "prioritize_features_question_1_choice_3": "Funktion 3",
+ "prioritize_features_question_1_choice_4": "Annat",
+ "prioritize_features_question_1_headline": "Vilken av dessa funktioner skulle vara MEST värdefull för dig?",
+ "prioritize_features_question_2_choice_1": "Funktion 1",
+ "prioritize_features_question_2_choice_2": "Funktion 2",
+ "prioritize_features_question_2_choice_3": "Funktion 3",
+ "prioritize_features_question_2_headline": "Vilken av dessa funktioner skulle vara MINST värdefull för dig?",
+ "prioritize_features_question_3_headline": "Hur skulle vi annars kunna förbättra din upplevelse med $[projectName]?",
+ "prioritize_features_question_3_placeholder": "Skriv ditt svar här...",
+ "product_market_fit_short_description": "Mät PMF genom att bedöma hur besvikna användare skulle bli om din produkt försvann.",
+ "product_market_fit_short_name": "Product Market Fit-enkät (Kort)",
+ "product_market_fit_short_question_1_choice_1": "Inte alls besviken",
+ "product_market_fit_short_question_1_choice_2": "Något besviken",
+ "product_market_fit_short_question_1_choice_3": "Mycket besviken",
+ "product_market_fit_short_question_1_headline": "Hur besviken skulle du bli om du inte längre kunde använda $[projectName]?",
+ "product_market_fit_short_question_1_subheader": "Vänligen välj ett av följande alternativ:",
+ "product_market_fit_short_question_2_headline": "Hur kan vi förbättra $[projectName] för dig?",
+ "product_market_fit_short_question_2_subheader": "Var så specifik som möjligt.",
+ "product_market_fit_superhuman": "Product Market Fit (Superhuman)",
+ "product_market_fit_superhuman_description": "Mät PMF genom att bedöma hur besvikna användare skulle bli om din produkt försvann.",
+ "product_market_fit_superhuman_question_1_button_label": "Hjälper gärna till!",
+ "product_market_fit_superhuman_question_1_headline": "Du är en av våra poweranvändare! Har du 5 minuter?",
+ "product_market_fit_superhuman_question_1_html": "
Vi skulle gärna vilja förstå din användarupplevelse bättre. Att dela dina insikter hjälper mycket.
",
+ "product_market_fit_superhuman_question_2_choice_1": "Inte alls besviken",
+ "product_market_fit_superhuman_question_2_choice_2": "Något besviken",
+ "product_market_fit_superhuman_question_2_choice_3": "Mycket besviken",
+ "product_market_fit_superhuman_question_2_headline": "Hur besviken skulle du bli om du inte längre kunde använda $[projectName]?",
+ "product_market_fit_superhuman_question_2_subheader": "Vänligen välj ett av följande alternativ:",
+ "product_market_fit_superhuman_question_3_choice_1": "Grundare",
+ "product_market_fit_superhuman_question_3_choice_2": "Chef",
+ "product_market_fit_superhuman_question_3_choice_3": "Produktchef",
+ "product_market_fit_superhuman_question_3_choice_4": "Produktägare",
+ "product_market_fit_superhuman_question_3_choice_5": "Mjukvaruutvecklare",
+ "product_market_fit_superhuman_question_3_headline": "Vilken är din roll?",
+ "product_market_fit_superhuman_question_3_subheader": "Vänligen välj ett av följande alternativ:",
+ "product_market_fit_superhuman_question_4_headline": "Vilken typ av personer tror du skulle ha mest nytta av $[projectName]?",
+ "product_market_fit_superhuman_question_5_headline": "Vilken är den största fördelen du får från $[projectName]?",
+ "product_market_fit_superhuman_question_6_headline": "Hur kan vi förbättra $[projectName] för dig?",
+ "product_market_fit_superhuman_question_6_subheader": "Var så specifik som möjligt.",
+ "professional_development_growth_survey_description": "Bedöm medarbetarnas nöjdhet med professionell tillväxt och utvecklingsmöjligheter.",
+ "professional_development_growth_survey_name": "Enkät om professionell utveckling och tillväxt",
+ "professional_development_growth_survey_question_1_headline": "Jag känner att jag har möjligheter att växa och utveckla mina färdigheter på jobbet.",
+ "professional_development_growth_survey_question_1_lower_label": "Inga tillväxtmöjligheter",
+ "professional_development_growth_survey_question_1_upper_label": "Många tillväxtmöjligheter",
+ "professional_development_growth_survey_question_2_headline": "Jag har tillräcklig autonomi för att fatta beslut om hur jag utför mitt jobb.",
+ "professional_development_growth_survey_question_2_lower_label": "Ingen autonomi",
+ "professional_development_growth_survey_question_2_upper_label": "Fullständig autonomi",
+ "professional_development_growth_survey_question_3_headline": "Mina mål på jobbet är tydliga och i linje med min utveckling.",
+ "professional_development_growth_survey_question_3_lower_label": "Otydliga mål",
+ "professional_development_growth_survey_question_3_upper_label": "Tydliga och anpassade mål",
+ "professional_development_growth_survey_question_4_headline": "Vad kunde förbättras för att stödja din professionella tillväxt?",
+ "professional_development_growth_survey_question_4_placeholder": "Skriv ditt svar här...",
+ "professional_development_survey_description": "Bedöm medarbetarnas nöjdhet med professionell tillväxt och utvecklingsmöjligheter.",
+ "professional_development_survey_name": "Enkät om professionell utveckling",
+ "professional_development_survey_question_1_choice_1": "Ja",
+ "professional_development_survey_question_1_choice_2": "Nej",
+ "professional_development_survey_question_1_headline": "Är du intresserad av aktiviteter för professionell utveckling?",
+ "professional_development_survey_question_2_choice_1": "Nätverksevenemang",
+ "professional_development_survey_question_2_choice_2": "Konferenser eller seminarier",
+ "professional_development_survey_question_2_choice_3": "Kurser eller workshops",
+ "professional_development_survey_question_2_choice_4": "Mentorskap",
+ "professional_development_survey_question_2_choice_5": "Individuell forskning",
+ "professional_development_survey_question_2_choice_6": "Annat",
+ "professional_development_survey_question_2_headline": "Vilka typer av aktiviteter för professionell utveckling tror du skulle vara mest värdefulla för din tillväxt?",
+ "professional_development_survey_question_2_subheader": "Välj alla som gäller",
+ "professional_development_survey_question_3_choice_1": "Ja",
+ "professional_development_survey_question_3_choice_2": "Nej",
+ "professional_development_survey_question_3_headline": "Har du ägnat tid åt din professionella utveckling tidigare?",
+ "professional_development_survey_question_4_headline": "Hur mycket stöd känner du att du får på din arbetsplats när det gäller att satsa på professionell utveckling?",
+ "professional_development_survey_question_4_lower_label": "Inte alls stöttad",
+ "professional_development_survey_question_4_upper_label": "Extremt stöttad",
+ "professional_development_survey_question_5_choice_1": "För min egen kunskap",
+ "professional_development_survey_question_5_choice_2": "För att få mer ansvar",
+ "professional_development_survey_question_5_choice_3": "Förbättra mina färdigheter",
+ "professional_development_survey_question_5_choice_4": "Avancera på min nuvarande karriärväg",
+ "professional_development_survey_question_5_choice_5": "Letar efter ett nytt jobb",
+ "professional_development_survey_question_5_choice_6": "Annat",
+ "professional_development_survey_question_5_headline": "Vilka är dina främsta anledningar till att vilja lägga tid på professionell utveckling?",
+ "ranking": "Rangordning",
+ "ranking_description": "Be respondenter ordna objekt efter preferens eller viktighet",
+ "rate_checkout_experience_description": "Låt kunder betygsätta kassaupplevelsen för att justera konvertering.",
+ "rate_checkout_experience_name": "Betygsätt kassaupplevelsen",
+ "rate_checkout_experience_question_1_headline": "Hur enkelt eller svårt var det att slutföra kassan?",
+ "rate_checkout_experience_question_1_lower_label": "Mycket svårt",
+ "rate_checkout_experience_question_1_upper_label": "Mycket enkelt",
+ "rate_checkout_experience_question_2_headline": "Tyvärr! Vad skulle ha gjort det enklare för dig?",
+ "rate_checkout_experience_question_2_placeholder": "Skriv ditt svar här...",
+ "rate_checkout_experience_question_3_headline": "Härligt! Finns det något vi kan göra för att förbättra din upplevelse?",
+ "rate_checkout_experience_question_3_placeholder": "Skriv ditt svar här...",
+ "rating": "Betyg",
+ "rating_description": "Be respondenter om ett betyg (stjärnor, smileys, siffror)",
+ "rating_lower_label": "Inte bra",
+ "rating_upper_label": "Mycket bra",
+ "recognition_and_reward_survey_description": "Utvärdera medarbetarnas nöjdhet med erkännande, belöningar, ledarskapsstöd och yttrandefrihet.",
+ "recognition_and_reward_survey_name": "Erkännande och belöning",
+ "recognition_and_reward_survey_question_1_headline": "När jag presterar bra uppmärksammas mina bidrag av organisationen.",
+ "recognition_and_reward_survey_question_1_lower_label": "Inte alls uppmärksammad",
+ "recognition_and_reward_survey_question_1_upper_label": "Mycket uppmärksammad",
+ "recognition_and_reward_survey_question_2_headline": "Jag känner mig rättvist belönad för det arbete jag utför.",
+ "recognition_and_reward_survey_question_2_lower_label": "Inte rättvist belönad",
+ "recognition_and_reward_survey_question_2_upper_label": "Mycket rättvist belönad",
+ "recognition_and_reward_survey_question_3_headline": "Jag känner mig bekväm med att dela mina åsikter öppet på jobbet.",
+ "recognition_and_reward_survey_question_3_lower_label": "Inte bekväm",
+ "recognition_and_reward_survey_question_3_upper_label": "Mycket bekväm",
+ "recognition_and_reward_survey_question_4_headline": "Hur kunde organisationen förbättra erkännande och belöningar?",
+ "recognition_and_reward_survey_question_4_placeholder": "Skriv ditt svar här...",
+ "review_prompt_description": "Bjud in användare som älskar din produkt att recensera den offentligt.",
+ "review_prompt_name": "Recensionsförfrågan",
+ "review_prompt_question_1_headline": "Hur tycker du om $[projectName]?",
+ "review_prompt_question_1_lower_label": "Inte bra",
+ "review_prompt_question_1_upper_label": "Mycket nöjd",
+ "review_prompt_question_2_button_label": "Skriv recension",
+ "review_prompt_question_2_headline": "Kul att höra 🙏 Vänligen skriv en recension åt oss!",
+ "review_prompt_question_2_html": "
Detta hjälper oss väldigt mycket.
",
+ "review_prompt_question_3_button_label": "Skicka",
+ "review_prompt_question_3_headline": "Tråkigt att höra! Vad är EN sak vi kan göra bättre?",
+ "review_prompt_question_3_placeholder": "Skriv ditt svar här...",
+ "review_prompt_question_3_subheader": "Hjälp oss förbättra din upplevelse.",
+ "schedule_a_meeting": "Boka ett möte",
+ "schedule_a_meeting_description": "Be respondenter boka en tid för möten eller samtal",
+ "single_select": "Enkelval",
+ "single_select_description": "Erbjud en lista med alternativ (välj ett)",
+ "site_abandonment_survey": "Enkät om webbplatsavhopp",
+ "site_abandonment_survey_description": "Förstå anledningarna bakom webbplatsavhopp i din webbutik.",
+ "site_abandonment_survey_question_1_html": "
Vi märkte att du lämnar vår webbplats utan att göra ett köp. Vi skulle gärna vilja förstå varför.
",
+ "site_abandonment_survey_question_2_button_label": "Absolut!",
+ "site_abandonment_survey_question_2_headline": "Har du en minut?",
+ "site_abandonment_survey_question_3_choice_1": "Hittar inte vad jag letar efter",
+ "site_abandonment_survey_question_3_choice_2": "Hittade en bättre webbplats",
+ "site_abandonment_survey_question_3_choice_3": "Webbplatsen är för långsam",
+ "site_abandonment_survey_question_3_choice_4": "Bara tittar",
+ "site_abandonment_survey_question_3_choice_5": "Hittade ett bättre pris någon annanstans",
+ "site_abandonment_survey_question_3_choice_6": "Annat",
+ "site_abandonment_survey_question_3_headline": "Vad är huvudanledningen till att du lämnar vår webbplats?",
+ "site_abandonment_survey_question_3_subheader": "Vänligen välj ett av följande alternativ:",
+ "site_abandonment_survey_question_4_headline": "Vänligen utveckla din anledning till att lämna webbplatsen:",
+ "site_abandonment_survey_question_5_headline": "Hur skulle du betygsätta din övergripande upplevelse på vår webbplats?",
+ "site_abandonment_survey_question_5_lower_label": "Mycket missnöjd",
+ "site_abandonment_survey_question_5_upper_label": "Mycket nöjd",
+ "site_abandonment_survey_question_6_choice_1": "Snabbare laddningstider",
+ "site_abandonment_survey_question_6_choice_2": "Bättre produktsökfunktionalitet",
+ "site_abandonment_survey_question_6_choice_3": "Mer produktvariation",
+ "site_abandonment_survey_question_6_choice_4": "Förbättrad webbplatsdesign",
+ "site_abandonment_survey_question_6_choice_5": "Fler kundrecensioner",
+ "site_abandonment_survey_question_6_headline": "Vilka förbättringar skulle uppmuntra dig att stanna längre på vår webbplats?",
+ "site_abandonment_survey_question_6_subheader": "Vänligen välj alla som gäller:",
+ "site_abandonment_survey_question_7_headline": "Vill du få uppdateringar om nya produkter och kampanjer?",
+ "site_abandonment_survey_question_7_label": "Ja, vänligen kontakta mig.",
+ "site_abandonment_survey_question_8_headline": "Vänligen dela din e-postadress:",
+ "site_abandonment_survey_question_9_headline": "Några ytterligare kommentarer eller förslag?",
+ "smileys_survey_name": "Smiley-enkät",
+ "smileys_survey_question_1_headline": "Hur tycker du om $[projectName]?",
+ "smileys_survey_question_1_lower_label": "Inte bra",
+ "smileys_survey_question_1_upper_label": "Mycket nöjd",
+ "smileys_survey_question_2_button_label": "Skriv recension",
+ "smileys_survey_question_2_headline": "Kul att höra 🙏 Vänligen skriv en recension åt oss!",
+ "smileys_survey_question_2_html": "
Detta hjälper oss väldigt mycket.
",
+ "smileys_survey_question_3_button_label": "Skicka",
+ "smileys_survey_question_3_headline": "Tråkigt att höra! Vad är EN sak vi kan göra bättre?",
+ "smileys_survey_question_3_placeholder": "Skriv ditt svar här...",
+ "smileys_survey_question_3_subheader": "Hjälp oss förbättra din upplevelse.",
+ "star_rating_survey_name": "$[projectName]s betygenkät",
+ "star_rating_survey_question_1_headline": "Hur tycker du om $[projectName]?",
+ "star_rating_survey_question_1_lower_label": "Extremt missnöjd",
+ "star_rating_survey_question_1_upper_label": "Extremt nöjd",
+ "star_rating_survey_question_2_button_label": "Skriv recension",
+ "star_rating_survey_question_2_headline": "Kul att höra 🙏 Vänligen skriv en recension åt oss!",
+ "star_rating_survey_question_2_html": "
Detta hjälper oss väldigt mycket.
",
+ "star_rating_survey_question_3_button_label": "Skicka",
+ "star_rating_survey_question_3_headline": "Tråkigt att höra! Vad är EN sak vi kan göra bättre?",
+ "star_rating_survey_question_3_placeholder": "Skriv ditt svar här...",
+ "star_rating_survey_question_3_subheader": "Hjälp oss förbättra din upplevelse.",
+ "statement_call_to_action": "Påstående (Call to Action)",
+ "strongly_agree": "Instämmer helt",
+ "strongly_disagree": "Instämmer inte alls",
+ "supportive_work_culture_survey_description": "Bedöm medarbetarnas uppfattning om ledarskapsstöd, kommunikation och den övergripande arbetsmiljön.",
+ "supportive_work_culture_survey_name": "Stödjande arbetskultur",
+ "supportive_work_culture_survey_question_1_headline": "Min chef ger mig det stöd jag behöver för att slutföra mitt arbete.",
+ "supportive_work_culture_survey_question_1_lower_label": "Inte stöttad",
+ "supportive_work_culture_survey_question_1_upper_label": "Mycket stöttad",
+ "supportive_work_culture_survey_question_2_headline": "Kommunikationen inom organisationen är öppen och effektiv.",
+ "supportive_work_culture_survey_question_2_lower_label": "Dålig kommunikation",
+ "supportive_work_culture_survey_question_2_upper_label": "Utmärkt kommunikation",
+ "supportive_work_culture_survey_question_3_headline": "Arbetsmiljön är positiv och stödjer mitt välbefinnande.",
+ "supportive_work_culture_survey_question_3_lower_label": "Inte stödjande",
+ "supportive_work_culture_survey_question_3_upper_label": "Mycket stödjande",
+ "supportive_work_culture_survey_question_4_headline": "Hur kunde arbetskulturen förbättras för att bättre stödja dig?",
+ "supportive_work_culture_survey_question_4_placeholder": "Skriv ditt svar här...",
+ "uncover_strengths_and_weaknesses_description": "Ta reda på vad användare gillar och inte gillar med din produkt eller tjänst.",
+ "uncover_strengths_and_weaknesses_name": "Upptäck styrkor och svagheter",
+ "uncover_strengths_and_weaknesses_question_1_choice_1": "Enkelt att använda",
+ "uncover_strengths_and_weaknesses_question_1_choice_2": "Bra värde för pengarna",
+ "uncover_strengths_and_weaknesses_question_1_choice_3": "Det är öppen källkod",
+ "uncover_strengths_and_weaknesses_question_1_choice_4": "Grundarna är gulliga",
+ "uncover_strengths_and_weaknesses_question_1_choice_5": "Annat",
+ "uncover_strengths_and_weaknesses_question_1_headline": "Vad värderar du mest med $[projectName]?",
+ "uncover_strengths_and_weaknesses_question_2_choice_1": "Dokumentation",
+ "uncover_strengths_and_weaknesses_question_2_choice_2": "Anpassningsbarhet",
+ "uncover_strengths_and_weaknesses_question_2_choice_3": "Prissättning",
+ "uncover_strengths_and_weaknesses_question_2_choice_4": "Annat",
+ "uncover_strengths_and_weaknesses_question_2_headline": "Vad bör vi förbättra?",
+ "uncover_strengths_and_weaknesses_question_2_subheader": "Vänligen välj ett av följande alternativ:",
+ "uncover_strengths_and_weaknesses_question_3_headline": "Vill du lägga till något?",
+ "uncover_strengths_and_weaknesses_question_3_subheader": "Säg fritt vad du tycker, det gör vi också.",
+ "understand_low_engagement_description": "Identifiera anledningar till lågt engagemang för att förbättra användaradoption.",
+ "understand_low_engagement_name": "Förstå lågt engagemang",
+ "understand_low_engagement_question_1_choice_1": "Svårt att använda",
+ "understand_low_engagement_question_1_choice_2": "Hittade ett bättre alternativ",
+ "understand_low_engagement_question_1_choice_3": "Har bara inte haft tid",
+ "understand_low_engagement_question_1_choice_4": "Saknade funktioner jag behöver",
+ "understand_low_engagement_question_1_choice_5": "Annat",
+ "understand_low_engagement_question_1_headline": "Vad är huvudanledningen till att du inte har varit tillbaka till $[projectName] nyligen?",
+ "understand_low_engagement_question_2_headline": "Vad är svårt med att använda $[projectName]?",
+ "understand_low_engagement_question_2_placeholder": "Skriv ditt svar här...",
+ "understand_low_engagement_question_3_headline": "Förstår. Vilket alternativ använder du istället?",
+ "understand_low_engagement_question_3_placeholder": "Skriv ditt svar här...",
+ "understand_low_engagement_question_4_headline": "Förstår. Hur kunde vi göra det enklare för dig att komma igång?",
+ "understand_low_engagement_question_4_placeholder": "Skriv ditt svar här...",
+ "understand_low_engagement_question_5_headline": "Förstår. Vilka funktioner eller funktionalitet saknades?",
+ "understand_low_engagement_question_5_placeholder": "Skriv ditt svar här...",
+ "understand_low_engagement_question_6_headline": "Vänligen lägg till mer detaljer:",
+ "understand_low_engagement_question_6_placeholder": "Skriv ditt svar här...",
+ "understand_purchase_intention_description": "Ta reda på hur nära dina besökare är att köpa eller prenumerera.",
+ "understand_purchase_intention_name": "Förstå köpavsikt",
+ "understand_purchase_intention_question_1_headline": "Hur troligt är det att du handlar hos oss idag?",
+ "understand_purchase_intention_question_1_lower_label": "Inte alls troligt",
+ "understand_purchase_intention_question_1_upper_label": "Extremt troligt",
+ "understand_purchase_intention_question_2_headline": "Förstår. Vad är din främsta anledning till att besöka oss idag?",
+ "understand_purchase_intention_question_2_placeholder": "Skriv ditt svar här...",
+ "understand_purchase_intention_question_3_headline": "Vad, om något, håller dig tillbaka från att göra ett köp idag?",
+ "understand_purchase_intention_question_3_placeholder": "Skriv ditt svar här...",
+ "usability_question_10_headline": "Jag behövde lära mig mycket innan jag kunde börja använda systemet ordentligt.",
+ "usability_question_1_headline": "Jag skulle förmodligen använda detta system ofta.",
+ "usability_question_2_headline": "Systemet kändes mer komplicerat än det behövde vara.",
+ "usability_question_3_headline": "Systemet var lätt att förstå.",
+ "usability_question_4_headline": "Jag tror jag skulle behöva hjälp från en teknikexpert för att använda detta system.",
+ "usability_question_5_headline": "Allt i systemet verkade fungera bra tillsammans.",
+ "usability_question_6_headline": "Systemet kändes inkonsekvent i hur saker fungerade.",
+ "usability_question_7_headline": "Jag tror de flesta skulle kunna lära sig använda detta system snabbt.",
+ "usability_question_8_headline": "Att använda systemet kändes besvärligt.",
+ "usability_question_9_headline": "Jag kände mig trygg när jag använde systemet.",
+ "usability_rating_description": "Mät upplevd användbarhet genom att be användare betygsätta sin upplevelse med din produkt med en standardiserad 10-frågors enkät.",
+ "usability_score_name": "System Usability Score (SUS)"
+ }
+}
diff --git a/apps/web/vitestSetup.ts b/apps/web/vitestSetup.ts
index fca5228acc..78eddf9cb9 100644
--- a/apps/web/vitestSetup.ts
+++ b/apps/web/vitestSetup.ts
@@ -220,6 +220,7 @@ vi.mock("@/lib/constants", () => ({
"ja-JP",
"zh-Hans-CN",
"es-ES",
+ "sv-SE",
],
DEFAULT_LOCALE: "en-US",
BREVO_API_KEY: "mock-brevo-api-key",
diff --git a/packages/surveys/i18n.json b/packages/surveys/i18n.json
index 92f96f878b..a89fefc602 100644
--- a/packages/surveys/i18n.json
+++ b/packages/surveys/i18n.json
@@ -7,7 +7,7 @@
},
"locale": {
"source": "en",
- "targets": ["de", "it", "fr", "es", "ar", "pt", "ru", "uz", "ro", "ja", "zh-Hans", "hi", "nl"]
+ "targets": ["de", "it", "fr", "es", "ar", "pt", "ru", "uz", "ro", "ja", "zh-Hans", "hi", "nl", "sv"]
},
"version": 1.8
}
diff --git a/packages/surveys/locales/sv.json b/packages/surveys/locales/sv.json
new file mode 100644
index 0000000000..7daa3738c8
--- /dev/null
+++ b/packages/surveys/locales/sv.json
@@ -0,0 +1,73 @@
+{
+ "common": {
+ "and": "och",
+ "apply": "Tillämpa",
+ "auto_close_wrapper": "Automatisk stängning",
+ "back": "Tillbaka",
+ "click_or_drag_to_upload_files": "Klicka eller dra för att ladda upp filer.",
+ "close_survey": "Stäng enkät",
+ "company_logo": "Företagslogotyp",
+ "delete_file": "Ta bort fil",
+ "file_upload": "Ladda upp fil",
+ "finish": "Slutför",
+ "language_switch": "Språkväxlare",
+ "less_than_x_minutes": "{count, plural, one {mindre än 1 minut} other {mindre än {count} minuter}}",
+ "move_down": "Flytta {item} nedåt",
+ "move_up": "Flytta {item} uppåt",
+ "next": "Nästa",
+ "open_in_new_tab": "Öppna i ny flik",
+ "optional": "Valfritt",
+ "options": "Alternativ",
+ "people_responded": "{count, plural, one {1 person har svarat} other {{count} personer har svarat}}",
+ "please_retry_now_or_try_again_later": "Försök igen nu eller försök igen senare.",
+ "powered_by": "Drivs av",
+ "privacy_policy": "Integritetspolicy",
+ "protected_by_reCAPTCHA_and_the_Google": "Skyddas av reCAPTCHA och Googles",
+ "question": "Fråga",
+ "question_video": "Frågevideo",
+ "ranking_items": "Rangordna objekt",
+ "respondents_will_not_see_this_card": "Respondenter kommer inte att se detta kort",
+ "retry": "Försök igen",
+ "select_a_date": "Välj ett datum",
+ "select_for_ranking": "Välj {item} för rangordning",
+ "sending_responses": "Skickar svar...",
+ "takes": "Tar",
+ "terms_of_service": "Användarvillkor",
+ "the_servers_cannot_be_reached_at_the_moment": "Servrarna kan inte nås för tillfället.",
+ "they_will_be_redirected_immediately": "De kommer att omdirigeras omedelbart",
+ "upload_files_by_clicking_or_dragging_them_here": "Ladda upp filer genom att klicka eller dra dem hit",
+ "uploading": "Laddar upp",
+ "x_minutes": "{count, plural, one {1 minut} other {{count} minuter}}",
+ "x_plus_minutes": "{count}+ minuter",
+ "you_have_selected_x_date": "Du har valt {date}",
+ "you_have_successfully_uploaded_the_file": "Du har framgångsrikt laddat upp filen {fileName}",
+ "your_feedback_is_stuck": "Din feedback fastnade :("
+ },
+ "errors": {
+ "file_input": {
+ "duplicate_files": "Följande filer är redan uppladdade: {duplicateNames}. Dubbletter av filer är inte tillåtna.",
+ "file_size_exceeded": "Följande filer överstiger maxstorleken på {maxSizeInMB} MB och togs bort: {fileNames}",
+ "file_size_exceeded_alert": "Filen måste vara mindre än {maxSizeInMB} MB",
+ "no_valid_file_types_selected": "Inga giltiga filtyper valda. Vänligen välj en giltig filtyp.",
+ "only_one_file_can_be_uploaded_at_a_time": "Endast en fil kan laddas upp åt gången.",
+ "upload_failed": "Uppladdning misslyckades! Försök igen.",
+ "you_can_only_upload_a_maximum_of_files": "Du kan ladda upp maximalt {FILE_LIMIT} filer."
+ },
+ "invalid_device_error": {
+ "message": "Vänligen inaktivera skräppostskyddet i enkätinställningarna för att fortsätta använda denna enhet.",
+ "title": "Denna enhet stöder inte skräppostskydd."
+ },
+ "please_book_an_appointment": "Vänligen boka ett möte",
+ "please_enter_a_valid_email_address": "Vänligen ange en giltig e-postadress",
+ "please_enter_a_valid_phone_number": "Vänligen ange ett giltigt telefonnummer",
+ "please_enter_a_valid_url": "Vänligen ange en giltig URL",
+ "please_fill_out_this_field": "Vänligen fyll i detta fält",
+ "please_rank_all_items_before_submitting": "Vänligen rangordna alla objekt innan du skickar",
+ "please_select_a_date": "Vänligen välj ett datum",
+ "please_upload_a_file": "Vänligen ladda upp en fil",
+ "recaptcha_error": {
+ "message": "Ditt svar kunde inte skickas eftersom det flaggades som automatiserad aktivitet. Om du andas, försök igen.",
+ "title": "Vi kunde inte verifiera att du är människa."
+ }
+ }
+}
diff --git a/packages/surveys/src/lib/i18n.config.ts b/packages/surveys/src/lib/i18n.config.ts
index d91fe5c536..ac56e99619 100644
--- a/packages/surveys/src/lib/i18n.config.ts
+++ b/packages/surveys/src/lib/i18n.config.ts
@@ -13,6 +13,7 @@ import nlTranslations from "../../locales/nl.json";
import ptTranslations from "../../locales/pt.json";
import roTranslations from "../../locales/ro.json";
import ruTranslations from "../../locales/ru.json";
+import svTranslations from "../../locales/sv.json";
import uzTranslations from "../../locales/uz.json";
import zhHansTranslations from "../../locales/zh-Hans.json";
@@ -21,7 +22,23 @@ i18n
.use(initReactI18next)
.init({
fallbackLng: "en",
- supportedLngs: ["en", "de", "it", "fr", "es", "ar", "pt", "ro", "ja", "ru", "uz", "zh-Hans", "hi", "nl"],
+ supportedLngs: [
+ "en",
+ "de",
+ "it",
+ "fr",
+ "es",
+ "ar",
+ "pt",
+ "ro",
+ "ja",
+ "ru",
+ "uz",
+ "zh-Hans",
+ "hi",
+ "nl",
+ "sv",
+ ],
resources: {
en: { translation: enTranslations },
@@ -36,6 +53,7 @@ i18n
nl: { translation: nlTranslations },
ru: { translation: ruTranslations },
uz: { translation: uzTranslations },
+ sv: { translation: svTranslations },
"zh-Hans": { translation: zhHansTranslations },
hi: { translation: hiTranslations },
},
diff --git a/packages/types/user.ts b/packages/types/user.ts
index c25642e585..d3f7b87817 100644
--- a/packages/types/user.ts
+++ b/packages/types/user.ts
@@ -12,6 +12,7 @@ export const ZUserLocale = z.enum([
"ja-JP",
"zh-Hans-CN",
"es-ES",
+ "sv-SE",
]);
export type TUserLocale = z.infer;
From be38d76ccff89ac70f856f2cc9ebb4eed03915ec Mon Sep 17 00:00:00 2001
From: Anshuman Pandey <54475686+pandeymangg@users.noreply.github.com>
Date: Tue, 9 Dec 2025 15:22:01 +0530
Subject: [PATCH 03/16] fix: removes empty imageUrl and videoUrl keys from
elements (#6950)
---
.../migration.ts | 99 +++++++++++++++++++
.../types.ts | 22 +++++
packages/types/surveys/types.ts | 14 +--
3 files changed, 128 insertions(+), 7 deletions(-)
create mode 100644 packages/database/migration/20251208033316_remove_empty_image_and_video_urls_from_elements/migration.ts
create mode 100644 packages/database/migration/20251208033316_remove_empty_image_and_video_urls_from_elements/types.ts
diff --git a/packages/database/migration/20251208033316_remove_empty_image_and_video_urls_from_elements/migration.ts b/packages/database/migration/20251208033316_remove_empty_image_and_video_urls_from_elements/migration.ts
new file mode 100644
index 0000000000..707aa1aad7
--- /dev/null
+++ b/packages/database/migration/20251208033316_remove_empty_image_and_video_urls_from_elements/migration.ts
@@ -0,0 +1,99 @@
+import { Prisma } from "@prisma/client";
+import { logger } from "@formbricks/logger";
+import type { MigrationScript } from "../../src/scripts/migration-runner";
+import { type SurveyRecord } from "./types";
+
+export const removeEmptyImageAndVideoUrlsFromElements: MigrationScript = {
+ type: "data",
+ id: "ohw7fb1f64yfh2vax294agp0",
+ name: "20251208033316_remove_empty_image_and_video_urls_from_elements",
+ run: async ({ tx }) => {
+ // Find all surveys with empty imageUrl or videoUrl
+ const surveysFindQuery = `
+ SELECT s.id, s.blocks, s."welcomeCard", s.endings
+ FROM "Survey" AS s
+ WHERE EXISTS (
+ SELECT 1
+ FROM unnest(s.blocks) AS block
+ CROSS JOIN jsonb_array_elements(block->'elements') AS element
+ WHERE element->>'imageUrl' = ''
+ OR element->>'videoUrl' = ''
+ ) OR s."welcomeCard"->>'fileUrl' = ''
+ OR s."welcomeCard"->>'videoUrl' = ''
+ OR EXISTS (
+ SELECT 1
+ FROM unnest(s.endings) AS ending
+ WHERE ending->>'imageUrl' = ''
+ OR ending->>'videoUrl' = ''
+ )
+ `;
+ const surveysWithEmptyUrls: SurveyRecord[] = await tx.$queryRaw`${Prisma.raw(surveysFindQuery)}`;
+
+ logger.info(`Found ${surveysWithEmptyUrls.length.toString()} surveys with empty imageUrl or videoUrl`);
+
+ // Process in batches to avoid overwhelming the connection pool
+ const BATCH_SIZE = 1000;
+
+ for (let i = 0; i < surveysWithEmptyUrls.length; i += BATCH_SIZE) {
+ const batch = surveysWithEmptyUrls.slice(i, i + BATCH_SIZE);
+
+ const batchPromises = batch.map((survey) => {
+ // Clean the blocks
+ const cleanedBlocks = survey.blocks.map((block) => {
+ const cleanedElements = block.elements.map((element) => {
+ const cleanedElement = { ...element };
+ if (cleanedElement.imageUrl === "") {
+ delete cleanedElement.imageUrl;
+ }
+ if (cleanedElement.videoUrl === "") {
+ delete cleanedElement.videoUrl;
+ }
+ return cleanedElement;
+ });
+
+ return { ...block, elements: cleanedElements };
+ });
+
+ const cleanedWelcomeCard = { ...survey.welcomeCard };
+ if (cleanedWelcomeCard.fileUrl === "") {
+ delete cleanedWelcomeCard.fileUrl;
+ }
+ if (cleanedWelcomeCard.videoUrl === "") {
+ delete cleanedWelcomeCard.videoUrl;
+ }
+
+ const cleanedEndings = survey.endings.map((ending) => {
+ const cleanedEnding = { ...ending };
+ if (cleanedEnding.imageUrl === "") {
+ delete cleanedEnding.imageUrl;
+ }
+ if (cleanedEnding.videoUrl === "") {
+ delete cleanedEnding.videoUrl;
+ }
+ return cleanedEnding;
+ });
+
+ // Convert JSON arrays to PostgreSQL jsonb[] using array_agg + jsonb_array_elements
+ const blocksJson = JSON.stringify(cleanedBlocks);
+ const endingsJson = JSON.stringify(cleanedEndings);
+ const welcomeCardJson = JSON.stringify(cleanedWelcomeCard);
+
+ return tx.$executeRaw`
+ UPDATE "Survey"
+ SET
+ blocks = (SELECT array_agg(elem) FROM jsonb_array_elements(${blocksJson}::jsonb) AS elem),
+ endings = (SELECT array_agg(elem) FROM jsonb_array_elements(${endingsJson}::jsonb) AS elem),
+ "welcomeCard" = ${welcomeCardJson}::jsonb
+ WHERE id = ${survey.id}
+ `;
+ });
+
+ await Promise.all(batchPromises);
+ logger.info(
+ `Processed batch ${(Math.floor(i / BATCH_SIZE) + 1).toString()}/${Math.ceil(surveysWithEmptyUrls.length / BATCH_SIZE).toString()}`
+ );
+ }
+
+ logger.info(`Successfully cleaned ${surveysWithEmptyUrls.length.toString()} surveys`);
+ },
+};
diff --git a/packages/database/migration/20251208033316_remove_empty_image_and_video_urls_from_elements/types.ts b/packages/database/migration/20251208033316_remove_empty_image_and_video_urls_from_elements/types.ts
new file mode 100644
index 0000000000..6e66d45f38
--- /dev/null
+++ b/packages/database/migration/20251208033316_remove_empty_image_and_video_urls_from_elements/types.ts
@@ -0,0 +1,22 @@
+export interface SurveyElement {
+ id: string;
+ imageUrl?: string;
+ videoUrl?: string;
+}
+export interface Block {
+ id: string;
+ elements: SurveyElement[];
+}
+
+export interface SurveyRecord {
+ id: string;
+ blocks: Block[];
+ welcomeCard: {
+ fileUrl?: string;
+ videoUrl?: string;
+ };
+ endings: {
+ imageUrl?: string;
+ videoUrl?: string;
+ }[];
+}
diff --git a/packages/types/surveys/types.ts b/packages/types/surveys/types.ts
index ed04289ee9..336165ebe5 100644
--- a/packages/types/surveys/types.ts
+++ b/packages/types/surveys/types.ts
@@ -1,7 +1,7 @@
import { type ZodIssue, z } from "zod";
import { ZSurveyFollowUp } from "@formbricks/database/types/survey-follow-up";
import { ZActionClass, ZActionClassNoCodeConfig } from "../action-classes";
-import { ZColor, ZId, ZPlacement, getZSafeUrl } from "../common";
+import { ZColor, ZId, ZPlacement, ZUrl, getZSafeUrl } from "../common";
import { ZContactAttributes } from "../contact-attribute";
import { type TI18nString, ZI18nString } from "../i18n";
import { ZLanguage } from "../project";
@@ -60,16 +60,16 @@ export const ZSurveyEndScreenCard = ZSurveyEndingBase.extend({
headline: ZI18nString.optional(),
subheader: ZI18nString.optional(),
buttonLabel: ZI18nString.optional(),
- buttonLink: z.string().optional(),
- imageUrl: z.string().optional(),
- videoUrl: z.string().optional(),
+ buttonLink: ZUrl.optional(),
+ imageUrl: ZUrl.optional(),
+ videoUrl: ZUrl.optional(),
});
export type TSurveyEndScreenCard = z.infer;
export const ZSurveyRedirectUrlCard = ZSurveyEndingBase.extend({
type: z.literal("redirectToUrl"),
- url: z.string().optional(),
+ url: ZUrl.optional(),
label: z.string().optional(),
});
@@ -143,11 +143,11 @@ export const ZSurveyWelcomeCard = z
enabled: z.boolean(),
headline: ZI18nString.optional(),
subheader: ZI18nString.optional(),
- fileUrl: z.string().optional(),
+ fileUrl: ZUrl.optional(),
buttonLabel: ZI18nString.optional(),
timeToFinish: z.boolean().default(true),
showResponseCount: z.boolean().default(false),
- videoUrl: z.string().optional(),
+ videoUrl: ZUrl.optional(),
})
.refine((schema) => !(schema.enabled && !schema.headline), {
message: "Welcome card must have a headline",
From cc5d630a05ba4fb41003a298643f9466903277b0 Mon Sep 17 00:00:00 2001
From: Anshuman Pandey <54475686+pandeymangg@users.noreply.github.com>
Date: Tue, 9 Dec 2025 15:41:00 +0530
Subject: [PATCH 04/16] chore: adds docs for min ios and android versions
(#6956)
---
.../surveys/website-app-surveys/framework-guides.mdx | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx b/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx
index 558f9acf85..86ca8cd576 100644
--- a/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx
+++ b/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx
@@ -345,6 +345,8 @@ Now, visit the [Validate Your Setup](#validate-your-setup) section to verify you
## Swift
+**Minimum iOS Version:** The Formbricks iOS SDK requires **iOS 16.4** or higher.
+
Install the Formbricks iOS SDK using the following steps:
**Swift Package Manager**
@@ -363,7 +365,7 @@ Install the Formbricks iOS SDK using the following steps:
1. Add the following to your `Podfile`:
```ruby
- platform :ios, '16.6'
+ platform :ios, '16.4'
use_frameworks! :linkage => :static
target 'YourTargetName' do
@@ -429,6 +431,10 @@ Now, visit the [Validate Your Setup](#validate-your-setup) section to verify you
## Android
+
+ **Minimum Android Version:** The Formbricks Android SDK requires **Android 10 (API level 29)** or higher.
+
+
Install the Formbricks Android SDK using the following steps:
### Installation
From c3d97c29328c64fd8eb508e80054a8b25495990a Mon Sep 17 00:00:00 2001
From: Johannes <72809645+jobenjada@users.noreply.github.com>
Date: Wed, 10 Dec 2025 02:59:25 -0800
Subject: [PATCH 05/16] fix: docs links (#6960)
---
.../website-app-surveys/framework-guides.mdx | 24 +++++++++----------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx b/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx
index 86ca8cd576..d829631600 100644
--- a/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx
+++ b/docs/xm-and-surveys/surveys/website-app-surveys/framework-guides.mdx
@@ -17,36 +17,36 @@ Integrate the **Formbricks App Survey SDK** into your app using multiple options
- [All you need to do is add three lines of code to your HTML script, and that's it!](https://formbricks.com/docs/app-surveys/framework-guides#html)
+ All you need to do is add three lines of code to your HTML script, and that's it!
- [Load our JavaScript library with your environment ID, and you're ready to
- go!](https://formbricks.com/docs/app-surveys/framework-guides#react-js)
+ Load our JavaScript library with your environment ID, and you're ready to
+ go!
- [Natively add us to your Next.js project, with support for both App and Pages project
- structure.](https://formbricks.com/docs/app-surveys/framework-guides#next-js)
+ Natively add us to your Next.js project, with support for both App and Pages project
+ structure.
- Learn how to use Formbricks' React Native SDK to integrate your surveys into React Native applications.
+ Learn how to use Formbricks' Vue.js SDK to integrate your surveys into Vue.js applications.
- [Easily integrate our SDK with your React Native app for seamless survey
- support.](https://formbricks.com/docs/app-surveys/framework-guides#react-native)
+ Easily integrate our SDK with your React Native app for seamless survey
+ support.
- [Use our iOS SDK to quickly integrate surveys into your iOS
- applications.](https://formbricks.com/docs/app-surveys/framework-guides#swift)
+ Use our iOS SDK to quickly integrate surveys into your iOS
+ applications.
- [Integrate surveys into your Android applications using our native Kotlin
- SDK.](https://formbricks.com/docs/app-surveys/framework-guides#android)
+ Integrate surveys into your Android applications using our native Kotlin
+ SDK.
From 666a79044fec6d445c43ae37306f1cc422e23d43 Mon Sep 17 00:00:00 2001
From: Matti Nannt
Date: Fri, 12 Dec 2025 05:05:25 +0100
Subject: [PATCH 06/16] fix: skip instance ID in license check during E2E tests
(#6968)
Co-authored-by: pandeymangg
---
.github/workflows/e2e.yml | 4 ++--
.../modules/ee/license-check/lib/license.ts | 23 +++++++++++++------
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
index ebdfa42909..ada2c86f84 100644
--- a/.github/workflows/e2e.yml
+++ b/.github/workflows/e2e.yml
@@ -114,7 +114,7 @@ jobs:
- name: Start MinIO Server
run: |
set -euo pipefail
-
+
# Start MinIO server in background
docker run -d \
--name minio-server \
@@ -124,7 +124,7 @@ jobs:
-e MINIO_ROOT_PASSWORD=devminio123 \
minio/minio:RELEASE.2025-09-07T16-13-09Z \
server /data --console-address :9001
-
+
echo "MinIO server started"
- name: Wait for MinIO and create S3 bucket
diff --git a/apps/web/modules/ee/license-check/lib/license.ts b/apps/web/modules/ee/license-check/lib/license.ts
index 393f2d5f76..cdd14b2034 100644
--- a/apps/web/modules/ee/license-check/lib/license.ts
+++ b/apps/web/modules/ee/license-check/lib/license.ts
@@ -7,6 +7,7 @@ import { createCacheKey } from "@formbricks/cache";
import { prisma } from "@formbricks/database";
import { logger } from "@formbricks/logger";
import { cache } from "@/lib/cache";
+import { E2E_TESTING } from "@/lib/constants";
import { env } from "@/lib/env";
import { hashString } from "@/lib/hash-string";
import { getInstanceId } from "@/lib/instance";
@@ -262,7 +263,9 @@ const fetchLicenseFromServerInternal = async (retryCount = 0): Promise controller.abort(), CONFIG.API.TIMEOUT_MS);
+ const payload: Record = {
+ licenseKey: env.ENTERPRISE_LICENSE_KEY,
+ usage: { responseCount },
+ };
+
+ if (instanceId) {
+ payload.instanceId = instanceId;
+ }
+
const res = await fetch(CONFIG.API.ENDPOINT, {
- body: JSON.stringify({
- licenseKey: env.ENTERPRISE_LICENSE_KEY,
- usage: { responseCount },
- instanceId,
- }),
+ body: JSON.stringify(payload),
headers: { "Content-Type": "application/json" },
method: "POST",
agent,
From 2d7b99ba262bc6f547c5c4e37f77e1ab26318c1a Mon Sep 17 00:00:00 2001
From: Johannes <72809645+jobenjada@users.noreply.github.com>
Date: Thu, 11 Dec 2025 21:01:48 -0800
Subject: [PATCH 07/16] feat: allow team admins to invite members to their own
teams (#6891)
Co-authored-by: pandeymangg
---
.../components/organization-breadcrumb.tsx | 2 +-
.../components/OrganizationSettingsNavbar.tsx | 2 +-
apps/web/i18n.lock | 10 +-
apps/web/locales/de-DE.json | 10 +-
apps/web/locales/en-US.json | 13 +-
apps/web/locales/es-ES.json | 10 +-
apps/web/locales/fr-FR.json | 10 +-
apps/web/locales/ja-JP.json | 10 +-
apps/web/locales/nl-NL.json | 10 +-
apps/web/locales/pt-BR.json | 10 +-
apps/web/locales/pt-PT.json | 10 +-
apps/web/locales/ro-RO.json | 10 +-
apps/web/locales/sv-SE.json | 8 +-
apps/web/locales/zh-Hans-CN.json | 10 +-
apps/web/locales/zh-Hant-TW.json | 10 +-
.../auth/signup/lib/__tests__/team.test.ts | 66 ++++++-
apps/web/modules/auth/signup/lib/team.ts | 26 +--
.../components/add-member-role.tsx | 2 +-
apps/web/modules/ee/teams/lib/roles.test.ts | 50 +++++-
apps/web/modules/ee/teams/lib/roles.ts | 28 +++
.../project-teams/components/access-table.tsx | 2 +-
.../project-teams/components/access-view.tsx | 5 +-
.../project-teams/components/manage-team.tsx | 21 +--
.../modules/ee/teams/project-teams/page.tsx | 6 +-
.../team-settings/team-settings-modal.tsx | 167 +++++++++++-------
.../organization/settings/teams/actions.ts | 90 ++++++++--
.../edit-memberships/organization-actions.tsx | 27 ++-
.../invite-member/individual-invite-tab.tsx | 102 +++++++----
.../invite-member/invite-member-modal.tsx | 38 ++--
.../teams/components/members-view.tsx | 7 +
.../organization/settings/teams/page.tsx | 13 +-
.../link/components/link-survey-wrapper.tsx | 4 +-
.../ui/components/client-logo/index.tsx | 7 +-
.../modules/ui/components/select/index.tsx | 2 +-
apps/web/playwright/organization.spec.ts | 6 +-
pnpm-lock.yaml | 1 +
36 files changed, 588 insertions(+), 217 deletions(-)
diff --git a/apps/web/app/(app)/environments/[environmentId]/components/organization-breadcrumb.tsx b/apps/web/app/(app)/environments/[environmentId]/components/organization-breadcrumb.tsx
index dd7fd851bb..64cffa3d19 100644
--- a/apps/web/app/(app)/environments/[environmentId]/components/organization-breadcrumb.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/components/organization-breadcrumb.tsx
@@ -135,7 +135,7 @@ export const OrganizationBreadcrumb = ({
},
{
id: "teams",
- label: t("common.teams"),
+ label: t("common.members_and_teams"),
href: `/environments/${currentEnvironmentId}/settings/teams`,
},
{
diff --git a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/components/OrganizationSettingsNavbar.tsx b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/components/OrganizationSettingsNavbar.tsx
index 65a8ca0429..f43b9014ad 100644
--- a/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/components/OrganizationSettingsNavbar.tsx
+++ b/apps/web/app/(app)/environments/[environmentId]/settings/(organization)/components/OrganizationSettingsNavbar.tsx
@@ -36,7 +36,7 @@ export const OrganizationSettingsNavbar = ({
},
{
id: "teams",
- label: t("common.teams"),
+ label: t("common.members_and_teams"),
href: `/environments/${environmentId}/settings/teams`,
current: pathname?.includes("/teams"),
},
diff --git a/apps/web/i18n.lock b/apps/web/i18n.lock
index e98cff6619..46a9532cff 100644
--- a/apps/web/i18n.lock
+++ b/apps/web/i18n.lock
@@ -234,6 +234,7 @@ checksums:
common/maximum: 4c07541dd1f093775bdc61b559cca6c8
common/member: 1606dc30b369856b9dba1fe9aec425d2
common/members: 0932e80cba1e3e0a7f52bb67ff31da32
+ common/members_and_teams: bf5c3fadcb9fc23533ec1532b805ac08
common/membership_not_found: 7ac63584af23396aace9992ad919ffd4
common/metadata: 695d4f7da261ba76e3be4de495491028
common/minimum: d9759235086d0169928b3c1401115e22
@@ -313,6 +314,7 @@ checksums:
common/read_docs: 426ba960bfedf186a878b7467867f9d2
common/recipients: f90e7f266be3f5a724858f21a9fd855e
common/remove: dba2fe5fe9f83f8078c687f28cba4b52
+ common/remove_from_team: 69bcc7a1001c3017f9de578ee22cffd6
common/reorder_and_hide_columns: a5e3d7c0c7ef879211d05a37be1c5069
common/report_survey: 147dd05db52e35f5d1f837460fb720f5
common/request_pricing: 58eb24af4f098632709cb7482b70a1cb
@@ -380,7 +382,8 @@ checksums:
common/team_access: 45c6232c71b760eaa33b932dabab4c1c
common/team_id: 134e32d6f7184577a46b2fd83e85e532
common/team_name: 549d949de4b9adad4afd6427a60a329e
- common/teams: a2fbdec69342366a2b6033d119aa279a
+ common/team_role: 66db395781aef64ef3791417b3b67c0b
+ common/teams: b63448c05270497973ac4407047dae02
common/teams_not_found: 02f333a64a83c1c014d8900ec9666345
common/text: 4ddccc1974775ed7357f9beaf9361cec
common/time: b504a03d52e8001bfdc5cb6205364f42
@@ -840,7 +843,6 @@ checksums:
environments/project/tags/tags_merged: 544471de666f93fbb0ab600321d1e553
environments/project/teams/manage_teams: d7b5f26335cea450c333832adbe0b6ad
environments/project/teams/no_teams_found: fb6680d4b5b73731697b100713afb50d
- environments/project/teams/only_organization_owners_and_managers_can_manage_teams: 179056fade669d34f63fb1ee965b8024
environments/project/teams/permission: cc2ed7274bd8267f9e0a10b079584d8b
environments/project/teams/team_name: d1a5f99dbf503ca53f06b3a98b511d02
environments/project/teams/team_settings_description: da32d77993f5c5c7547cdf3e1d3fc7d5
@@ -1086,13 +1088,17 @@ checksums:
environments/settings/teams/manage_team: 4c52e636cfd1451a08179fb7a68042ab
environments/settings/teams/manage_team_disabled: 2aaa0557b403a5bc657ec9e8b19ac5ac
environments/settings/teams/manager_role_description: 39846863fa85ff8b1c6e4f354eb5018f
+ environments/settings/teams/member: 1606dc30b369856b9dba1fe9aec425d2
environments/settings/teams/member_role_description: 1c5deaece65798b74cc0d34525506c18
environments/settings/teams/member_role_info_message: 0a276eef3c3b907d6f396ebfdc693b12
+ environments/settings/teams/organization_role: 979b75fcc3696952e5922d659c839c10
environments/settings/teams/owner_role_description: 8f577e6f9d1368fed4eba5a91ffc8cbf
environments/settings/teams/please_fill_all_member_fields: 60e38d9906ec9a02a44d16c736bd9fe9
environments/settings/teams/please_fill_all_project_fields: 6712059df63c432ecd31f3c52b8e4d87
environments/settings/teams/read: 2494ca23d10e5b6381eb271aceeb5270
environments/settings/teams/read_write: 278a90dade128198d4c93ac00c345320
+ environments/settings/teams/select_member: 7f4a38312aabbbe3fe92756b57bd5d75
+ environments/settings/teams/select_project: 6e4f4a24178660851d9ae0874706be9f
environments/settings/teams/team_admin: 5df68214685738029af678ae1d5912bb
environments/settings/teams/team_created_successfully: 45f83048fcabf466551144858a761eca
environments/settings/teams/team_deleted_successfully: 972c86b0abe87f229f7bf1a691c0a253
diff --git a/apps/web/locales/de-DE.json b/apps/web/locales/de-DE.json
index f6f5f6f022..53a271ecfd 100644
--- a/apps/web/locales/de-DE.json
+++ b/apps/web/locales/de-DE.json
@@ -261,6 +261,7 @@
"maximum": "Maximal",
"member": "Mitglied",
"members": "Mitglieder",
+ "members_and_teams": "Mitglieder & Teams",
"membership_not_found": "Mitgliedschaft nicht gefunden",
"metadata": "Metadaten",
"minimum": "Minimum",
@@ -340,6 +341,7 @@
"read_docs": "Dokumentation lesen",
"recipients": "Empfänger",
"remove": "Entfernen",
+ "remove_from_team": "Aus Team entfernen",
"reorder_and_hide_columns": "Spalten neu anordnen und ausblenden",
"report_survey": "Umfrage melden",
"request_pricing": "Preise anfragen",
@@ -407,7 +409,8 @@
"team_access": "Teamzugriff",
"team_id": "Team-ID",
"team_name": "Teamname",
- "teams": "Zugriffskontrolle",
+ "team_role": "Team-Rolle",
+ "teams": "Teams",
"teams_not_found": "Teams nicht gefunden",
"text": "Text",
"time": "Zeit",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "Teams verwalten",
"no_teams_found": "Keine Teams gefunden",
- "only_organization_owners_and_managers_can_manage_teams": "Nur Organisationsinhaber und -manager können Teams verwalten.",
"permission": "Berechtigung",
"team_name": "Teamname",
"team_settings_description": "Teams und ihre Mitglieder können auf dieses Projekt und seine Umfragen zugreifen. Organisationsbesitzer und Manager können diesen Zugriff gewähren."
@@ -1167,13 +1169,17 @@
"manage_team": "Team verwalten",
"manage_team_disabled": "Nur Organisationsbesitzer, Manager und Team-Admins können Teams verwalten.",
"manager_role_description": "Manager können auf alle Projekte zugreifen und Mitglieder hinzufügen und entfernen.",
+ "member": "Mitglied",
"member_role_description": "Mitglieder können in ausgewählten Projekten arbeiten.",
"member_role_info_message": "Um neuen Mitgliedern Zugriff auf ein Projekt zu geben, füge sie bitte unten einem Team hinzu. Mit Teams kannst du steuern, wer auf welches Projekt zugreifen kann.",
+ "organization_role": "Organisationsrolle",
"owner_role_description": "Besitzer haben die volle Kontrolle über die Organisation.",
"please_fill_all_member_fields": "Bitte fülle alle Felder aus, um ein neues Mitglied hinzuzufügen.",
"please_fill_all_project_fields": "Bitte fülle alle Felder aus, um ein neues Projekt hinzuzufügen.",
"read": "Lesen",
"read_write": "Lesen & Schreiben",
+ "select_member": "Mitglied auswählen",
+ "select_project": "Projekt auswählen",
"team_admin": "Team-Admin",
"team_created_successfully": "Team erfolgreich erstellt.",
"team_deleted_successfully": "Team erfolgreich gelöscht.",
diff --git a/apps/web/locales/en-US.json b/apps/web/locales/en-US.json
index ee5fa83ee8..5893d65434 100644
--- a/apps/web/locales/en-US.json
+++ b/apps/web/locales/en-US.json
@@ -261,6 +261,7 @@
"maximum": "Maximum",
"member": "Member",
"members": "Members",
+ "members_and_teams": "Members & Teams",
"membership_not_found": "Membership not found",
"metadata": "Metadata",
"minimum": "Minimum",
@@ -337,9 +338,10 @@
"quota": "Quota",
"quotas": "Quotas",
"quotas_description": "Limit the amount of responses you receive from participants who meet certain criteria.",
- "read_docs": "Read Docs",
+ "read_docs": "Read docs",
"recipients": "Recipients",
"remove": "Remove",
+ "remove_from_team": "Remove from team",
"reorder_and_hide_columns": "Reorder and hide columns",
"report_survey": "Report Survey",
"request_pricing": "Request Pricing",
@@ -349,7 +351,6 @@
"responses": "Responses",
"restart": "Restart",
"role": "Role",
- "role_organization": "Role (Organization)",
"saas": "SaaS",
"sales": "Sales",
"save": "Save",
@@ -407,7 +408,8 @@
"team_access": "Team Access",
"team_id": "Team ID",
"team_name": "Team name",
- "teams": "Access Control",
+ "team_role": "Team role",
+ "teams": "Teams",
"teams_not_found": "Teams not found",
"text": "Text",
"time": "Time",
@@ -903,7 +905,6 @@
"teams": {
"manage_teams": "Manage teams",
"no_teams_found": "No teams found",
- "only_organization_owners_and_managers_can_manage_teams": "Only organization owners and managers can manage teams.",
"permission": "Permission",
"team_name": "Team Name",
"team_settings_description": "See which teams can access this project."
@@ -1167,13 +1168,17 @@
"manage_team": "Manage team",
"manage_team_disabled": "Only organization owners, managers and team admins can manage teams.",
"manager_role_description": "Managers can access all projects and add and remove members.",
+ "member": "Member",
"member_role_description": "Members can work in selected projects.",
"member_role_info_message": "To give new members access to a project, please add them to a Team below. With Teams you can manage who has access to which project.",
+ "organization_role": "Organization role",
"owner_role_description": "Owners have full control over the organization.",
"please_fill_all_member_fields": "Please fill all the fields to add a new member.",
"please_fill_all_project_fields": "Please fill all the fields to add a new project.",
"read": "Read",
"read_write": "Read & Write",
+ "select_member": "Select member",
+ "select_project": "Select project",
"team_admin": "Team Admin",
"team_created_successfully": "Team created successfully.",
"team_deleted_successfully": "Team deleted successfully.",
diff --git a/apps/web/locales/es-ES.json b/apps/web/locales/es-ES.json
index 42544916e9..2b49aa2a5a 100644
--- a/apps/web/locales/es-ES.json
+++ b/apps/web/locales/es-ES.json
@@ -261,6 +261,7 @@
"maximum": "Máximo",
"member": "Miembro",
"members": "Miembros",
+ "members_and_teams": "Miembros y equipos",
"membership_not_found": "Membresía no encontrada",
"metadata": "Metadatos",
"minimum": "Mínimo",
@@ -340,6 +341,7 @@
"read_docs": "Leer documentación",
"recipients": "Destinatarios",
"remove": "Eliminar",
+ "remove_from_team": "Eliminar del equipo",
"reorder_and_hide_columns": "Reordenar y ocultar columnas",
"report_survey": "Reportar encuesta",
"request_pricing": "Solicitar precios",
@@ -407,7 +409,8 @@
"team_access": "Acceso de equipo",
"team_id": "ID de equipo",
"team_name": "Nombre del equipo",
- "teams": "Control de acceso",
+ "team_role": "Rol del equipo",
+ "teams": "Equipos",
"teams_not_found": "Equipos no encontrados",
"text": "Texto",
"time": "Hora",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "Gestionar equipos",
"no_teams_found": "No se han encontrado equipos",
- "only_organization_owners_and_managers_can_manage_teams": "Solo los propietarios y gestores de la organización pueden gestionar equipos.",
"permission": "Permiso",
"team_name": "Nombre del equipo",
"team_settings_description": "Consulta qué equipos pueden acceder a este proyecto."
@@ -1167,13 +1169,17 @@
"manage_team": "Gestionar equipo",
"manage_team_disabled": "Solo los propietarios de la organización, gestores y administradores de equipo pueden gestionar equipos.",
"manager_role_description": "Los gestores pueden acceder a todos los proyectos y añadir y eliminar miembros.",
+ "member": "Miembro",
"member_role_description": "Los miembros pueden trabajar en proyectos seleccionados.",
"member_role_info_message": "Para dar a los nuevos miembros acceso a un proyecto, por favor añádelos a un equipo a continuación. Con los equipos puedes gestionar quién tiene acceso a qué proyecto.",
+ "organization_role": "Rol en la organización",
"owner_role_description": "Los propietarios tienen control total sobre la organización.",
"please_fill_all_member_fields": "Por favor, rellena todos los campos para añadir un nuevo miembro.",
"please_fill_all_project_fields": "Por favor, rellena todos los campos para añadir un nuevo proyecto.",
"read": "Lectura",
"read_write": "Lectura y escritura",
+ "select_member": "Seleccionar miembro",
+ "select_project": "Seleccionar proyecto",
"team_admin": "Administrador de equipo",
"team_created_successfully": "Equipo creado con éxito.",
"team_deleted_successfully": "Equipo eliminado correctamente.",
diff --git a/apps/web/locales/fr-FR.json b/apps/web/locales/fr-FR.json
index 46cd55662e..8fef157bb1 100644
--- a/apps/web/locales/fr-FR.json
+++ b/apps/web/locales/fr-FR.json
@@ -261,6 +261,7 @@
"maximum": "Max",
"member": "Membre",
"members": "Membres",
+ "members_and_teams": "Membres & Équipes",
"membership_not_found": "Abonnement non trouvé",
"metadata": "Métadonnées",
"minimum": "Min",
@@ -340,6 +341,7 @@
"read_docs": "Lire les documents",
"recipients": "Destinataires",
"remove": "Retirer",
+ "remove_from_team": "Retirer de l'équipe",
"reorder_and_hide_columns": "Réorganiser et masquer des colonnes",
"report_survey": "Rapport d'enquête",
"request_pricing": "Connaître le tarif",
@@ -407,7 +409,8 @@
"team_access": "Accès",
"team_id": "Identifiant de l'équipe",
"team_name": "Nom de l'équipe",
- "teams": "Contrôle d'accès",
+ "team_role": "Rôle dans l'équipe",
+ "teams": "Équipes",
"teams_not_found": "Équipes non trouvées",
"text": "Texte",
"time": "Temps",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "Gérer les équipes",
"no_teams_found": "Aucune équipe trouvée",
- "only_organization_owners_and_managers_can_manage_teams": "Seuls les propriétaires et les gestionnaires de l'organisation peuvent gérer les équipes.",
"permission": "Permission",
"team_name": "Nom de l'équipe",
"team_settings_description": "Vous pouvez consulter la liste des équipes qui ont accès à ce projet."
@@ -1167,13 +1169,17 @@
"manage_team": "Gérer l'équipe",
"manage_team_disabled": "Seuls les propriétaires de l'organisation, les gestionnaires et les administrateurs d'équipe peuvent gérer les équipes.",
"manager_role_description": "Les gestionnaires peuvent accéder à tous les projets et ajouter et supprimer des membres.",
+ "member": "Membre",
"member_role_description": "Les membres peuvent travailler sur des projets sélectionnés.",
"member_role_info_message": "Pour donner accès à un projet aux nouveaux membres, veuillez les ajouter à une équipe ci-dessous. Avec les équipes, vous pouvez gérer qui a accès à quel projet.",
+ "organization_role": "Rôle dans l'organisation",
"owner_role_description": "Les propriétaires ont un contrôle total sur l'organisation.",
"please_fill_all_member_fields": "Veuillez remplir tous les champs pour ajouter un nouveau membre.",
"please_fill_all_project_fields": "Veuillez remplir tous les champs pour ajouter un nouveau projet.",
"read": "Lire",
"read_write": "Lire et Écrire",
+ "select_member": "Sélectionner membre",
+ "select_project": "Sélectionner projet",
"team_admin": "Administrateur d'équipe",
"team_created_successfully": "Équipe créée avec succès.",
"team_deleted_successfully": "Équipe supprimée avec succès.",
diff --git a/apps/web/locales/ja-JP.json b/apps/web/locales/ja-JP.json
index ee26fb6f0d..3be1eae10d 100644
--- a/apps/web/locales/ja-JP.json
+++ b/apps/web/locales/ja-JP.json
@@ -261,6 +261,7 @@
"maximum": "最大",
"member": "メンバー",
"members": "メンバー",
+ "members_and_teams": "メンバー&チーム",
"membership_not_found": "メンバーシップが見つかりません",
"metadata": "メタデータ",
"minimum": "最小",
@@ -340,6 +341,7 @@
"read_docs": "ドキュメントを読む",
"recipients": "受信者",
"remove": "削除",
+ "remove_from_team": "チームから削除",
"reorder_and_hide_columns": "列の並び替えと非表示",
"report_survey": "フォームを報告",
"request_pricing": "料金を問い合わせる",
@@ -407,7 +409,8 @@
"team_access": "チームアクセス",
"team_id": "チームID",
"team_name": "チーム名",
- "teams": "アクセス制御",
+ "team_role": "チームの役割",
+ "teams": "チーム",
"teams_not_found": "チームが見つかりません",
"text": "テキスト",
"time": "時間",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "チームを管理",
"no_teams_found": "チームが見つかりません",
- "only_organization_owners_and_managers_can_manage_teams": "組織のオーナーまたは管理者のみがチームを管理できます。",
"permission": "権限",
"team_name": "チーム名",
"team_settings_description": "このプロジェクトにアクセスできるチームを確認します。"
@@ -1167,13 +1169,17 @@
"manage_team": "チームを管理",
"manage_team_disabled": "組織のオーナー、管理者、チーム管理者のみがチームを管理できます。",
"manager_role_description": "管理者はすべてのプロジェクトにアクセスでき、メンバーを追加および削除できます。",
+ "member": "メンバー",
"member_role_description": "メンバーは選択されたプロジェクトで作業できます。",
"member_role_info_message": "新しいメンバーにプロジェクトへのアクセス権を付与するには、以下のチームに追加してください。チームを使用すると、誰がどのプロジェクトにアクセスできるかを管理できます。",
+ "organization_role": "組織の役割",
"owner_role_description": "オーナーは組織を完全に制御できます。",
"please_fill_all_member_fields": "新しいメンバーを追加するには、すべてのフィールドを記入してください。",
"please_fill_all_project_fields": "新しいプロジェクトを追加するには、すべてのフィールドを記入してください。",
"read": "読み取り",
"read_write": "読み書き",
+ "select_member": "メンバーを選択",
+ "select_project": "プロジェクトを選択",
"team_admin": "チーム管理者",
"team_created_successfully": "チームを正常に作成しました。",
"team_deleted_successfully": "チームを正常に削除しました。",
diff --git a/apps/web/locales/nl-NL.json b/apps/web/locales/nl-NL.json
index 5f9d7b36e8..eeb63ca0f5 100644
--- a/apps/web/locales/nl-NL.json
+++ b/apps/web/locales/nl-NL.json
@@ -261,6 +261,7 @@
"maximum": "Maximaal",
"member": "Lid",
"members": "Leden",
+ "members_and_teams": "Leden & teams",
"membership_not_found": "Lidmaatschap niet gevonden",
"metadata": "Metagegevens",
"minimum": "Minimum",
@@ -340,6 +341,7 @@
"read_docs": "Lees Documenten",
"recipients": "Ontvangers",
"remove": "Verwijderen",
+ "remove_from_team": "Verwijderen uit team",
"reorder_and_hide_columns": "Kolommen opnieuw rangschikken en verbergen",
"report_survey": "Verslag enquête",
"request_pricing": "Vraag prijzen aan",
@@ -407,7 +409,8 @@
"team_access": "Teamtoegang",
"team_id": "Team-ID",
"team_name": "Teamnaam",
- "teams": "Toegangscontrole",
+ "team_role": "Teamrol",
+ "teams": "Teams",
"teams_not_found": "Teams niet gevonden",
"text": "Tekst",
"time": "Tijd",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "Beheer teams",
"no_teams_found": "Geen teams gevonden",
- "only_organization_owners_and_managers_can_manage_teams": "Alleen eigenaren en managers van organisaties kunnen teams beheren.",
"permission": "Toestemming",
"team_name": "Teamnaam",
"team_settings_description": "Bekijk welke teams toegang hebben tot dit project."
@@ -1167,13 +1169,17 @@
"manage_team": "Beheer team",
"manage_team_disabled": "Alleen organisatie-eigenaren, managers en teambeheerders kunnen teams beheren.",
"manager_role_description": "Managers hebben toegang tot alle projecten en kunnen leden toevoegen en verwijderen.",
+ "member": "Lid",
"member_role_description": "Leden kunnen in geselecteerde projecten werken.",
"member_role_info_message": "Om nieuwe leden toegang te geven tot een project, voegt u ze hieronder toe aan een team. Met Teams kun je beheren wie toegang heeft tot welk project.",
+ "organization_role": "Organisatierol",
"owner_role_description": "Eigenaars hebben volledige controle over de organisatie.",
"please_fill_all_member_fields": "Vul alle velden in om een nieuw lid toe te voegen.",
"please_fill_all_project_fields": "Vul alle velden in om een nieuw project toe te voegen.",
"read": "Lezen",
"read_write": "Lezen en schrijven",
+ "select_member": "Selecteer lid",
+ "select_project": "Selecteer project",
"team_admin": "Teambeheerder",
"team_created_successfully": "Team succesvol aangemaakt.",
"team_deleted_successfully": "Team succesvol verwijderd.",
diff --git a/apps/web/locales/pt-BR.json b/apps/web/locales/pt-BR.json
index 89da514535..effc6967ed 100644
--- a/apps/web/locales/pt-BR.json
+++ b/apps/web/locales/pt-BR.json
@@ -261,6 +261,7 @@
"maximum": "Máximo",
"member": "Membros",
"members": "Membros",
+ "members_and_teams": "Membros e equipes",
"membership_not_found": "Assinatura não encontrada",
"metadata": "metadados",
"minimum": "Mínimo",
@@ -340,6 +341,7 @@
"read_docs": "Ler Documentação",
"recipients": "Destinatários",
"remove": "remover",
+ "remove_from_team": "Remover da equipe",
"reorder_and_hide_columns": "Reordenar e ocultar colunas",
"report_survey": "Relatório de Pesquisa",
"request_pricing": "Solicitar Preços",
@@ -407,7 +409,8 @@
"team_access": "Acesso da equipe",
"team_id": "ID da Equipe",
"team_name": "Nome da equipe",
- "teams": "Controle de Acesso",
+ "team_role": "Função na equipe",
+ "teams": "Equipes",
"teams_not_found": "Equipes não encontradas",
"text": "Texto",
"time": "tempo",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "Gerenciar Equipes",
"no_teams_found": "Nenhuma equipe encontrada",
- "only_organization_owners_and_managers_can_manage_teams": "Apenas proprietários e gerentes da organização podem gerenciar equipes.",
"permission": "Permissão",
"team_name": "Nome da equipe",
"team_settings_description": "As equipes e seus membros podem acessar este projeto e suas pesquisas. Proprietários e gerentes da organização podem conceder esse acesso."
@@ -1167,13 +1169,17 @@
"manage_team": "Gerenciar equipe",
"manage_team_disabled": "Apenas proprietários da organização, gerentes e administradores da equipe podem gerenciar equipes.",
"manager_role_description": "Os gerentes podem acessar todos os projetos e adicionar e remover membros.",
+ "member": "Membro",
"member_role_description": "Os membros podem trabalhar em projetos selecionados.",
"member_role_info_message": "Para dar acesso a novos membros a um projeto, por favor, adicione-os a uma equipe abaixo. Com equipes, você pode gerenciar quem tem acesso a qual projeto.",
+ "organization_role": "Função na organização",
"owner_role_description": "Os proprietários têm controle total sobre a organização.",
"please_fill_all_member_fields": "Por favor, preencha todos os campos para adicionar um novo membro.",
"please_fill_all_project_fields": "Por favor, preencha todos os campos para adicionar um novo projeto.",
"read": "Leitura",
"read_write": "Leitura & Escrita",
+ "select_member": "Selecionar membro",
+ "select_project": "Selecionar projeto",
"team_admin": "Administrador da equipe",
"team_created_successfully": "Equipe criada com sucesso.",
"team_deleted_successfully": "Equipe excluída com sucesso.",
diff --git a/apps/web/locales/pt-PT.json b/apps/web/locales/pt-PT.json
index 466315bc32..36648ae707 100644
--- a/apps/web/locales/pt-PT.json
+++ b/apps/web/locales/pt-PT.json
@@ -261,6 +261,7 @@
"maximum": "Máximo",
"member": "Membro",
"members": "Membros",
+ "members_and_teams": "Membros e equipas",
"membership_not_found": "Associação não encontrada",
"metadata": "Metadados",
"minimum": "Mínimo",
@@ -340,6 +341,7 @@
"read_docs": "Ler Documentos",
"recipients": "Destinatários",
"remove": "Remover",
+ "remove_from_team": "Remover da equipa",
"reorder_and_hide_columns": "Reordenar e ocultar colunas",
"report_survey": "Relatório de Inquérito",
"request_pricing": "Pedido de Preços",
@@ -407,7 +409,8 @@
"team_access": "Acesso da Equipa",
"team_id": "ID da Equipa",
"team_name": "Nome da equipa",
- "teams": "Controlo de Acesso",
+ "team_role": "Função na equipa",
+ "teams": "Equipas",
"teams_not_found": "Equipas não encontradas",
"text": "Texto",
"time": "Tempo",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "Gerir equipas",
"no_teams_found": "Nenhuma equipa encontrada",
- "only_organization_owners_and_managers_can_manage_teams": "Apenas os proprietários e gestores da organização podem gerir equipas.",
"permission": "Permissão",
"team_name": "Nome da Equipa",
"team_settings_description": "Veja quais equipas podem aceder a este projeto."
@@ -1167,13 +1169,17 @@
"manage_team": "Gerir equipa",
"manage_team_disabled": "Apenas os proprietários da organização, gestores e administradores de equipa podem gerir equipas.",
"manager_role_description": "Os gestores podem aceder a todos os projetos e adicionar e remover membros.",
+ "member": "Membro",
"member_role_description": "Os membros podem trabalhar em projetos selecionados.",
"member_role_info_message": "Adicione os membros que deseja a uma Equipa abaixo. Nesta secção, pode gerir quem tem acesso a cada projeto.",
+ "organization_role": "Função na organização",
"owner_role_description": "Os proprietários têm controlo total sobre a organização.",
"please_fill_all_member_fields": "Por favor, preencha todos os campos para adicionar um novo membro.",
"please_fill_all_project_fields": "Por favor, preencha todos os campos para adicionar um novo projeto.",
"read": "Ler",
"read_write": "Ler e Escrever",
+ "select_member": "Selecionar membro",
+ "select_project": "Selecionar projeto",
"team_admin": "Administrador da Equipa",
"team_created_successfully": "Equipa criada com sucesso.",
"team_deleted_successfully": "Equipa eliminada com sucesso.",
diff --git a/apps/web/locales/ro-RO.json b/apps/web/locales/ro-RO.json
index 7faa1e952b..a2e611096e 100644
--- a/apps/web/locales/ro-RO.json
+++ b/apps/web/locales/ro-RO.json
@@ -261,6 +261,7 @@
"maximum": "Maximum",
"member": "Membru",
"members": "Membri",
+ "members_and_teams": "Membri și echipe",
"membership_not_found": "Apartenența nu a fost găsită",
"metadata": "Metadate",
"minimum": "Minim",
@@ -340,6 +341,7 @@
"read_docs": "Citește documentația",
"recipients": "Destinatari",
"remove": "Șterge",
+ "remove_from_team": "Elimină din echipă",
"reorder_and_hide_columns": "Reordonați și ascundeți coloanele",
"report_survey": "Raportează chestionarul",
"request_pricing": "Solicită Prețuri",
@@ -407,7 +409,8 @@
"team_access": "Acces echipă",
"team_id": "ID echipă",
"team_name": "Nume echipă",
- "teams": "Control acces",
+ "team_role": "Rol în echipă",
+ "teams": "Echipe",
"teams_not_found": "Echipele nu au fost găsite",
"text": "Text",
"time": "Timp",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "Gestionați echipele",
"no_teams_found": "Nicio echipă găsită",
- "only_organization_owners_and_managers_can_manage_teams": "Doar proprietarii de organizație și managerii pot gestiona echipele.",
"permission": "Permisiune",
"team_name": "Nume echipă",
"team_settings_description": "Vezi care echipe pot accesa acest proiect."
@@ -1167,13 +1169,17 @@
"manage_team": "Gestionați echipa",
"manage_team_disabled": "Doar proprietarii de organizații, managerii și administratorii de echipă pot gestiona echipele.",
"manager_role_description": "Managerii pot accesa toate proiectele și pot adăuga sau elimina membri.",
+ "member": "Membru",
"member_role_description": "Membrii pot lucra în proiectele selectate.",
"member_role_info_message": "Pentru a oferi membrilor noi acces la un proiect, vă rugăm să-i adăugați la o Echipă mai jos. Cu Echipe puteți gestiona cine are acces la ce proiect.",
+ "organization_role": "Rol în organizație",
"owner_role_description": "Proprietarii au control total asupra organizației.",
"please_fill_all_member_fields": "Vă rugăm să completați toate câmpurile pentru a adăuga un nou membru.",
"please_fill_all_project_fields": "Vă rugăm să completați toate câmpurile pentru a adăuga un proiect nou.",
"read": "Citește",
"read_write": "Citire & Scriere",
+ "select_member": "Selectează membrul",
+ "select_project": "Selectează proiectul",
"team_admin": "Administrator Echipe",
"team_created_successfully": "Echipă creată cu succes",
"team_deleted_successfully": "Echipă ștearsă cu succes.",
diff --git a/apps/web/locales/sv-SE.json b/apps/web/locales/sv-SE.json
index d46be0c3fb..268221f15f 100644
--- a/apps/web/locales/sv-SE.json
+++ b/apps/web/locales/sv-SE.json
@@ -261,6 +261,7 @@
"maximum": "Maximum",
"member": "Medlem",
"members": "Medlemmar",
+ "members_and_teams": "Medlemmar och team",
"membership_not_found": "Medlemskap hittades inte",
"metadata": "Metadata",
"minimum": "Minimum",
@@ -340,6 +341,7 @@
"read_docs": "Läs dokumentation",
"recipients": "Mottagare",
"remove": "Ta bort",
+ "remove_from_team": "Ta bort från teamet",
"reorder_and_hide_columns": "Ordna om och dölj kolumner",
"report_survey": "Rapportera enkät",
"request_pricing": "Begär prissättning",
@@ -407,6 +409,7 @@
"team_access": "Teamåtkomst",
"team_id": "Team-ID",
"team_name": "Teamnamn",
+ "team_role": "Teamroll",
"teams": "Åtkomstkontroll",
"teams_not_found": "Team hittades inte",
"text": "Text",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "Hantera team",
"no_teams_found": "Inga team hittades",
- "only_organization_owners_and_managers_can_manage_teams": "Endast organisationsägare och administratörer kan hantera team.",
"permission": "Behörighet",
"team_name": "Teamnamn",
"team_settings_description": "Se vilka team som kan komma åt detta projekt."
@@ -1167,13 +1169,17 @@
"manage_team": "Hantera team",
"manage_team_disabled": "Endast organisationsägare, administratörer och teamadministratörer kan hantera team.",
"manager_role_description": "Administratörer kan komma åt alla projekt och lägga till och ta bort medlemmar.",
+ "member": "Medlem",
"member_role_description": "Medlemmar kan arbeta i valda projekt.",
"member_role_info_message": "För att ge nya medlemmar åtkomst till ett projekt, vänligen lägg till dem i ett team nedan. Med team kan du hantera vem som har åtkomst till vilket projekt.",
+ "organization_role": "Organisationsroll",
"owner_role_description": "Ägare har full kontroll över organisationen.",
"please_fill_all_member_fields": "Vänligen fyll i alla fält för att lägga till en ny medlem.",
"please_fill_all_project_fields": "Vänligen fyll i alla fält för att lägga till ett nytt projekt.",
"read": "Läs",
"read_write": "Läs och skriv",
+ "select_member": "Välj medlem",
+ "select_project": "Välj projekt",
"team_admin": "Teamadministratör",
"team_created_successfully": "Team skapat.",
"team_deleted_successfully": "Team borttaget.",
diff --git a/apps/web/locales/zh-Hans-CN.json b/apps/web/locales/zh-Hans-CN.json
index f8ea6ed123..eaa8632fcf 100644
--- a/apps/web/locales/zh-Hans-CN.json
+++ b/apps/web/locales/zh-Hans-CN.json
@@ -261,6 +261,7 @@
"maximum": "最大值",
"member": "成员",
"members": "成员",
+ "members_and_teams": "成员和团队",
"membership_not_found": "未找到会员资格",
"metadata": "元数据",
"minimum": "最低",
@@ -340,6 +341,7 @@
"read_docs": "阅读 文档",
"recipients": "收件人",
"remove": "移除",
+ "remove_from_team": "从团队中移除",
"reorder_and_hide_columns": "重新排序和隐藏列",
"report_survey": "报告调查",
"request_pricing": "请求 定价",
@@ -407,7 +409,8 @@
"team_access": "团队 访问",
"team_id": "团队 ID",
"team_name": "团队 名称",
- "teams": "访问控制",
+ "team_role": "团队角色",
+ "teams": "团队",
"teams_not_found": "未找到 团队",
"text": "文本",
"time": "时间",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "管理 团队",
"no_teams_found": "未找到 团队",
- "only_organization_owners_and_managers_can_manage_teams": "只有 组织 拥有者 和 经理 可以 管理 团队。",
"permission": "权限",
"team_name": "团队名称",
"team_settings_description": "查看 哪些 团队 可以 访问 该 项目。"
@@ -1167,13 +1169,17 @@
"manage_team": "管理团队",
"manage_team_disabled": "只有 组织 拥有者、经理 和 团队 管理员 可以 管理 团队。",
"manager_role_description": "经理 可以 访问 所有 项目 并 添加 移除 成员。",
+ "member": "成员",
"member_role_description": "成员 可以 在 选定 项目 中 工作。",
"member_role_info_message": "要 给 新 成员 访问 项目 ,请 将 他们 添加 到 下方 的 团队 。通过 团队 你 可以 管理 谁 可以 访问 哪个 项目 。",
+ "organization_role": "组织角色",
"owner_role_description": "所有者拥有对组织的完全控制权。",
"please_fill_all_member_fields": "请 填写 所有 字段 以 添加 新 成员。",
"please_fill_all_project_fields": "请 填写 所有 字段 以 添加 新 项目。",
"read": "阅读",
"read_write": "读 & 写",
+ "select_member": "选择成员",
+ "select_project": "选择项目",
"team_admin": "团队管理员",
"team_created_successfully": "团队 创建 成功",
"team_deleted_successfully": "团队 删除 成功",
diff --git a/apps/web/locales/zh-Hant-TW.json b/apps/web/locales/zh-Hant-TW.json
index 19fbd6e996..ebdbbf045c 100644
--- a/apps/web/locales/zh-Hant-TW.json
+++ b/apps/web/locales/zh-Hant-TW.json
@@ -261,6 +261,7 @@
"maximum": "最大值",
"member": "成員",
"members": "成員",
+ "members_and_teams": "成員與團隊",
"membership_not_found": "找不到成員資格",
"metadata": "元數據",
"minimum": "最小值",
@@ -340,6 +341,7 @@
"read_docs": "閱讀文件",
"recipients": "收件者",
"remove": "移除",
+ "remove_from_team": "從團隊中移除",
"reorder_and_hide_columns": "重新排序和隱藏欄位",
"report_survey": "報告問卷",
"request_pricing": "請求定價",
@@ -407,7 +409,8 @@
"team_access": "團隊存取權限",
"team_id": "團隊 ID",
"team_name": "團隊名稱",
- "teams": "存取控制",
+ "team_role": "團隊角色",
+ "teams": "團隊",
"teams_not_found": "找不到團隊",
"text": "文字",
"time": "時間",
@@ -903,7 +906,6 @@
"teams": {
"manage_teams": "管理團隊",
"no_teams_found": "找不到團隊",
- "only_organization_owners_and_managers_can_manage_teams": "只有組織擁有者和管理員才能管理團隊。",
"permission": "權限",
"team_name": "團隊名稱",
"team_settings_description": "查看哪些團隊可以存取此專案。"
@@ -1167,13 +1169,17 @@
"manage_team": "管理團隊",
"manage_team_disabled": "只有組織擁有者、管理員和團隊管理員才能管理團隊。",
"manager_role_description": "管理員可以存取所有專案,並新增和移除成員。",
+ "member": "成員",
"member_role_description": "成員可以在選定的專案中工作。",
"member_role_info_message": "若要授予新成員存取專案的權限,請將他們新增至下方的團隊。藉由團隊,您可以管理誰可以存取哪些專案。",
+ "organization_role": "組織角色",
"owner_role_description": "擁有者對組織具有完全控制權。",
"please_fill_all_member_fields": "請填寫所有欄位以新增新成員。",
"please_fill_all_project_fields": "請填寫所有欄位以新增新專案。",
"read": "讀取",
"read_write": "讀取和寫入",
+ "select_member": "選擇成員",
+ "select_project": "選擇專案",
"team_admin": "團隊管理員",
"team_created_successfully": "團隊已成功建立。",
"team_deleted_successfully": "團隊已成功刪除。",
diff --git a/apps/web/modules/auth/signup/lib/__tests__/team.test.ts b/apps/web/modules/auth/signup/lib/__tests__/team.test.ts
index 026c1e4094..d8821e31fe 100644
--- a/apps/web/modules/auth/signup/lib/__tests__/team.test.ts
+++ b/apps/web/modules/auth/signup/lib/__tests__/team.test.ts
@@ -3,7 +3,7 @@ import { OrganizationRole } from "@prisma/client";
import { beforeEach, describe, expect, test, vi } from "vitest";
import { prisma } from "@formbricks/database";
import { CreateMembershipInvite } from "@/modules/auth/signup/types/invites";
-import { createTeamMembership } from "../team";
+import { createTeamMembership, getTeamProjectIds } from "../team";
// Setup all mocks
const setupMocks = () => {
@@ -31,6 +31,7 @@ const setupMocks = () => {
vi.mock("@formbricks/logger", () => ({
logger: {
error: vi.fn(),
+ warn: vi.fn(),
},
}));
@@ -55,7 +56,7 @@ describe("Team Management", () => {
describe("createTeamMembership", () => {
describe("when user is an admin", () => {
test("creates a team membership with admin role", async () => {
- vi.mocked(prisma.team.findUnique).mockResolvedValue(MOCK_TEAM);
+ vi.mocked(prisma.team.findUnique).mockResolvedValue(MOCK_TEAM as unknown as any);
vi.mocked(prisma.teamUser.create).mockResolvedValue(MOCK_TEAM_USER);
await createTeamMembership(MOCK_INVITE, MOCK_IDS.userId);
@@ -90,7 +91,7 @@ describe("Team Management", () => {
role: "member" as OrganizationRole,
};
- vi.mocked(prisma.team.findUnique).mockResolvedValue(MOCK_TEAM);
+ vi.mocked(prisma.team.findUnique).mockResolvedValue(MOCK_TEAM as unknown as any);
vi.mocked(prisma.teamUser.create).mockResolvedValue({
...MOCK_TEAM_USER,
role: "contributor",
@@ -110,11 +111,68 @@ describe("Team Management", () => {
describe("error handling", () => {
test("throws error when database operation fails", async () => {
- vi.mocked(prisma.team.findUnique).mockResolvedValue(MOCK_TEAM);
+ vi.mocked(prisma.team.findUnique).mockResolvedValue(MOCK_TEAM as unknown as any);
vi.mocked(prisma.teamUser.create).mockRejectedValue(new Error("Database error"));
await expect(createTeamMembership(MOCK_INVITE, MOCK_IDS.userId)).rejects.toThrow("Database error");
});
});
+
+ describe("when team does not exist", () => {
+ test("skips membership creation and continues to next team", async () => {
+ const inviteWithMultipleTeams: CreateMembershipInvite = {
+ ...MOCK_INVITE,
+ teamIds: ["non-existent-team", MOCK_IDS.teamId],
+ };
+
+ vi.mocked(prisma.team.findUnique)
+ .mockResolvedValueOnce(null)
+ .mockResolvedValueOnce(MOCK_TEAM as unknown as any);
+ vi.mocked(prisma.teamUser.create).mockResolvedValue(MOCK_TEAM_USER);
+
+ await createTeamMembership(inviteWithMultipleTeams, MOCK_IDS.userId);
+
+ expect(prisma.team.findUnique).toHaveBeenCalledTimes(2);
+ expect(prisma.teamUser.create).toHaveBeenCalledTimes(1);
+ expect(prisma.teamUser.create).toHaveBeenCalledWith({
+ data: {
+ teamId: MOCK_IDS.teamId,
+ userId: MOCK_IDS.userId,
+ role: "admin",
+ },
+ });
+ });
+ });
+ });
+
+ describe("getTeamProjectIds", () => {
+ test("returns team with projectTeams when team exists", async () => {
+ vi.mocked(prisma.team.findUnique).mockResolvedValue(MOCK_TEAM as unknown as any);
+
+ const result = await getTeamProjectIds(MOCK_IDS.teamId, MOCK_IDS.organizationId);
+
+ expect(result).toEqual(MOCK_TEAM);
+ expect(prisma.team.findUnique).toHaveBeenCalledWith({
+ where: {
+ id: MOCK_IDS.teamId,
+ organizationId: MOCK_IDS.organizationId,
+ },
+ select: {
+ projectTeams: {
+ select: {
+ projectId: true,
+ },
+ },
+ },
+ });
+ });
+
+ test("returns null when team does not exist", async () => {
+ vi.mocked(prisma.team.findUnique).mockResolvedValue(null);
+
+ const result = await getTeamProjectIds(MOCK_IDS.teamId, MOCK_IDS.organizationId);
+
+ expect(result).toBeNull();
+ });
});
});
diff --git a/apps/web/modules/auth/signup/lib/team.ts b/apps/web/modules/auth/signup/lib/team.ts
index 1fd81fe294..7f1324a9a4 100644
--- a/apps/web/modules/auth/signup/lib/team.ts
+++ b/apps/web/modules/auth/signup/lib/team.ts
@@ -18,15 +18,18 @@ export const createTeamMembership = async (invite: CreateMembershipInvite, userI
for (const teamId of teamIds) {
const team = await getTeamProjectIds(teamId, invite.organizationId);
- if (team) {
- await prisma.teamUser.create({
- data: {
- teamId,
- userId,
- role: isOwnerOrManager ? "admin" : "contributor",
- },
- });
+ if (!team) {
+ logger.warn({ teamId, userId }, "Team no longer exists during invite acceptance");
+ continue;
}
+
+ await prisma.teamUser.create({
+ data: {
+ teamId,
+ userId,
+ role: isOwnerOrManager ? "admin" : "contributor",
+ },
+ });
}
} catch (error) {
logger.error(error, `Error creating team membership ${invite.organizationId} ${userId}`);
@@ -39,7 +42,10 @@ export const createTeamMembership = async (invite: CreateMembershipInvite, userI
};
export const getTeamProjectIds = reactCache(
- async (teamId: string, organizationId: string): Promise<{ projectTeams: { projectId: string }[] }> => {
+ async (
+ teamId: string,
+ organizationId: string
+ ): Promise<{ projectTeams: { projectId: string }[] } | null> => {
const team = await prisma.team.findUnique({
where: {
id: teamId,
@@ -55,7 +61,7 @@ export const getTeamProjectIds = reactCache(
});
if (!team) {
- throw new Error("Team not found");
+ return null;
}
return team;
diff --git a/apps/web/modules/ee/role-management/components/add-member-role.tsx b/apps/web/modules/ee/role-management/components/add-member-role.tsx
index 2b5ed799d1..00400f3b5d 100644
--- a/apps/web/modules/ee/role-management/components/add-member-role.tsx
+++ b/apps/web/modules/ee/role-management/components/add-member-role.tsx
@@ -60,7 +60,7 @@ export function AddMemberRole({
name="role"
render={({ field: { onChange, value } }) => (