From d5b054af234e2ba3f287c025f35c2800664d0c27 Mon Sep 17 00:00:00 2001 From: Victor Santos Date: Mon, 29 Sep 2025 12:10:46 -0300 Subject: [PATCH] feat: enhance JWT functionality with comprehensive security tests - Refactored JWT functions to improve security and error handling. - Added tests for various scenarios including missing secrets, token verification, and legacy compatibility. - Implemented fallback mechanisms for decryption and token verification to handle legacy formats. - Enhanced error logging for better traceability during token operations. - Updated tests to ensure robust coverage of new security features and edge cases. --- apps/web/lib/jwt.test.ts | 893 ++++- apps/web/lib/jwt.ts | 302 +- apps/web/locales/de-DE.json | 124 +- apps/web/locales/en-US.json | 126 +- apps/web/locales/fr-FR.json | 122 +- apps/web/locales/ja-JP.json | 120 +- apps/web/locales/pt-BR.json | 122 +- apps/web/locales/pt-PT.json | 124 +- apps/web/locales/ro-RO.json | 298 +- apps/web/locales/zh-Hans-CN.json | 2891 +++++++++++++++++ apps/web/locales/zh-Hant-TW.json | 122 +- apps/web/modules/auth/lib/authOptions.test.ts | 14 +- apps/web/modules/email/index.tsx | 6 +- 13 files changed, 4662 insertions(+), 602 deletions(-) create mode 100644 apps/web/locales/zh-Hans-CN.json diff --git a/apps/web/lib/jwt.test.ts b/apps/web/lib/jwt.test.ts index de2a4b5a49..9106b5fe79 100644 --- a/apps/web/lib/jwt.test.ts +++ b/apps/web/lib/jwt.test.ts @@ -1,4 +1,5 @@ -import { env } from "@/lib/env"; +import * as crypto from "@/lib/crypto"; +import jwt from "jsonwebtoken"; import { beforeEach, describe, expect, test, vi } from "vitest"; import { prisma } from "@formbricks/database"; import { @@ -14,12 +15,69 @@ import { verifyTokenForLinkSurvey, } from "./jwt"; +const TEST_ENCRYPTION_KEY = "0".repeat(32); // 32-byte key for AES-256-GCM +const TEST_NEXTAUTH_SECRET = "test-nextauth-secret"; +const DIFFERENT_SECRET = "different-secret"; + +// Error message constants +const NEXTAUTH_SECRET_ERROR = "NEXTAUTH_SECRET is not set"; +const ENCRYPTION_KEY_ERROR = "ENCRYPTION_KEY is not set"; + +// Helper function to test error cases for missing secrets/keys +const testMissingSecretsError = async ( + testFn: (...args: any[]) => any, + args: any[], + options: { + testNextAuthSecret?: boolean; + testEncryptionKey?: boolean; + isAsync?: boolean; + } = {} +) => { + const { testNextAuthSecret = true, testEncryptionKey = true, isAsync = false } = options; + + if (testNextAuthSecret) { + const constants = await import("@/lib/constants"); + const originalSecret = (constants as any).NEXTAUTH_SECRET; + (constants as any).NEXTAUTH_SECRET = undefined; + + if (isAsync) { + await expect(testFn(...args)).rejects.toThrow(NEXTAUTH_SECRET_ERROR); + } else { + expect(() => testFn(...args)).toThrow(NEXTAUTH_SECRET_ERROR); + } + + // Restore + (constants as any).NEXTAUTH_SECRET = originalSecret; + } + + if (testEncryptionKey) { + const constants = await import("@/lib/constants"); + const originalKey = (constants as any).ENCRYPTION_KEY; + (constants as any).ENCRYPTION_KEY = undefined; + + if (isAsync) { + await expect(testFn(...args)).rejects.toThrow(ENCRYPTION_KEY_ERROR); + } else { + expect(() => testFn(...args)).toThrow(ENCRYPTION_KEY_ERROR); + } + + // Restore + (constants as any).ENCRYPTION_KEY = originalKey; + } +}; + // Mock environment variables vi.mock("@/lib/env", () => ({ env: { - ENCRYPTION_KEY: "0".repeat(32), // 32-byte key for AES-256-GCM + ENCRYPTION_KEY: "0".repeat(32), NEXTAUTH_SECRET: "test-nextauth-secret", - } as typeof env, + }, +})); + +// Mock constants +vi.mock("@/lib/constants", () => ({ + NEXTAUTH_SECRET: "test-nextauth-secret", + ENCRYPTION_KEY: "0".repeat(32), })); // Mock prisma @@ -31,22 +89,65 @@ vi.mock("@formbricks/database", () => ({ }, })); -describe("JWT Functions", () => { +// Mock logger +vi.mock("@formbricks/logger", () => ({ + logger: { + error: vi.fn(), + warn: vi.fn(), + info: vi.fn(), + }, +})); + +describe("JWT Functions - Comprehensive Security Tests", () => { const mockUser = { id: "test-user-id", email: "test@example.com", }; + let mockSymmetricEncrypt: any; + let mockSymmetricDecrypt: any; + beforeEach(() => { vi.clearAllMocks(); + + // Setup default crypto mocks + mockSymmetricEncrypt = vi + .spyOn(crypto, "symmetricEncrypt") + .mockImplementation((text: string) => `encrypted_${text}`); + + mockSymmetricDecrypt = vi + .spyOn(crypto, "symmetricDecrypt") + .mockImplementation((encryptedText: string) => encryptedText.replace("encrypted_", "")); + (prisma.user.findUnique as any).mockResolvedValue(mockUser); }); describe("createToken", () => { - test("should create a valid token", () => { - const token = createToken(mockUser.id, mockUser.email); + test("should create a valid token with encrypted user ID", () => { + const token = createToken(mockUser.id); expect(token).toBeDefined(); expect(typeof token).toBe("string"); + expect(mockSymmetricEncrypt).toHaveBeenCalledWith(mockUser.id, TEST_ENCRYPTION_KEY); + }); + + test("should accept custom options", () => { + const customOptions = { expiresIn: "1h" }; + const token = createToken(mockUser.id, customOptions); + expect(token).toBeDefined(); + + // Verify the token contains the expected expiration + const decoded = jwt.decode(token) as any; + expect(decoded.exp).toBeDefined(); + expect(decoded.iat).toBeDefined(); + // Should expire in approximately 1 hour (3600 seconds) + expect(decoded.exp - decoded.iat).toBe(3600); + }); + + test("should throw error if NEXTAUTH_SECRET is not set", async () => { + await testMissingSecretsError(createToken, [mockUser.id], { + testNextAuthSecret: true, + testEncryptionKey: false, + }); }); }); @@ -56,6 +157,18 @@ describe("JWT Functions", () => { const token = createTokenForLinkSurvey(surveyId, mockUser.email); expect(token).toBeDefined(); expect(typeof token).toBe("string"); + expect(mockSymmetricEncrypt).toHaveBeenCalledWith(mockUser.email, TEST_ENCRYPTION_KEY); + }); + + test("should include surveyId in payload", () => { + const surveyId = "test-survey-id"; + const token = createTokenForLinkSurvey(surveyId, mockUser.email); + const decoded = jwt.decode(token) as any; + expect(decoded.surveyId).toBe(surveyId); + }); + + test("should throw error if NEXTAUTH_SECRET or ENCRYPTION_KEY is not set", async () => { + await testMissingSecretsError(createTokenForLinkSurvey, ["survey-id", mockUser.email]); }); }); @@ -64,24 +177,30 @@ describe("JWT Functions", () => { const token = createEmailToken(mockUser.email); expect(token).toBeDefined(); expect(typeof token).toBe("string"); + expect(mockSymmetricEncrypt).toHaveBeenCalledWith(mockUser.email, TEST_ENCRYPTION_KEY); }); - test("should throw error if NEXTAUTH_SECRET is not set", () => { - const originalSecret = env.NEXTAUTH_SECRET; - try { - (env as any).NEXTAUTH_SECRET = undefined; - expect(() => createEmailToken(mockUser.email)).toThrow("NEXTAUTH_SECRET is not set"); - } finally { - (env as any).NEXTAUTH_SECRET = originalSecret; - } + test("should throw error if NEXTAUTH_SECRET or ENCRYPTION_KEY is not set", async () => { + await testMissingSecretsError(createEmailToken, [mockUser.email]); }); }); - describe("getEmailFromEmailToken", () => { - test("should extract email from valid token", () => { - const token = createEmailToken(mockUser.email); - const extractedEmail = getEmailFromEmailToken(token); - expect(extractedEmail).toBe(mockUser.email); + describe("createEmailChangeToken", () => { + test("should create a valid email change token with 1 day expiration", () => { + const token = createEmailChangeToken(mockUser.id, mockUser.email); + expect(token).toBeDefined(); + expect(mockSymmetricEncrypt).toHaveBeenCalledWith(mockUser.id, TEST_ENCRYPTION_KEY); + expect(mockSymmetricEncrypt).toHaveBeenCalledWith(mockUser.email, TEST_ENCRYPTION_KEY); + + const decoded = jwt.decode(token) as any; + expect(decoded.exp).toBeDefined(); + expect(decoded.iat).toBeDefined(); + // Should expire in approximately 1 day (86400 seconds) + expect(decoded.exp - decoded.iat).toBe(86400); + }); + + test("should throw error if NEXTAUTH_SECRET or ENCRYPTION_KEY is not set", async () => { + await testMissingSecretsError(createEmailChangeToken, [mockUser.id, mockUser.email]); }); }); @@ -91,6 +210,50 @@ describe("JWT Functions", () => { const token = createInviteToken(inviteId, mockUser.email); expect(token).toBeDefined(); expect(typeof token).toBe("string"); + expect(mockSymmetricEncrypt).toHaveBeenCalledWith(inviteId, TEST_ENCRYPTION_KEY); + expect(mockSymmetricEncrypt).toHaveBeenCalledWith(mockUser.email, TEST_ENCRYPTION_KEY); + }); + + test("should accept custom options", () => { + const inviteId = "test-invite-id"; + const customOptions = { expiresIn: "24h" }; + const token = createInviteToken(inviteId, mockUser.email, customOptions); + expect(token).toBeDefined(); + + const decoded = jwt.decode(token) as any; + expect(decoded.exp).toBeDefined(); + expect(decoded.iat).toBeDefined(); + // Should expire in approximately 24 hours (86400 seconds) + expect(decoded.exp - decoded.iat).toBe(86400); + }); + + test("should throw error if NEXTAUTH_SECRET or ENCRYPTION_KEY is not set", async () => { + await testMissingSecretsError(createInviteToken, ["invite-id", mockUser.email]); + }); + }); + + describe("getEmailFromEmailToken", () => { + test("should extract email from valid token", () => { + const token = createEmailToken(mockUser.email); + const extractedEmail = getEmailFromEmailToken(token); + expect(extractedEmail).toBe(mockUser.email); + expect(mockSymmetricDecrypt).toHaveBeenCalledWith(`encrypted_${mockUser.email}`, TEST_ENCRYPTION_KEY); + }); + + test("should fall back to original email if decryption fails", () => { + mockSymmetricDecrypt.mockImplementationOnce(() => { + throw new Error("Decryption failed"); + }); + + // Create token manually with unencrypted email for legacy compatibility + const legacyToken = jwt.sign({ email: mockUser.email }, TEST_NEXTAUTH_SECRET); + const extractedEmail = getEmailFromEmailToken(legacyToken); + expect(extractedEmail).toBe(mockUser.email); + }); + + test("should throw error if NEXTAUTH_SECRET or ENCRYPTION_KEY is not set", async () => { + const token = jwt.sign({ email: "test@example.com" }, TEST_NEXTAUTH_SECRET); + await testMissingSecretsError(getEmailFromEmailToken, [token]); }); }); @@ -106,23 +269,194 @@ describe("JWT Functions", () => { const result = verifyTokenForLinkSurvey("invalid-token", "test-survey-id"); expect(result).toBeNull(); }); + + test("should return null if NEXTAUTH_SECRET is not set", async () => { + const constants = await import("@/lib/constants"); + const originalSecret = (constants as any).NEXTAUTH_SECRET; + (constants as any).NEXTAUTH_SECRET = undefined; + + const result = verifyTokenForLinkSurvey("any-token", "test-survey-id"); + expect(result).toBeNull(); + + // Restore + (constants as any).NEXTAUTH_SECRET = originalSecret; + }); + + test("should return null if surveyId doesn't match", () => { + const surveyId = "test-survey-id"; + const differentSurveyId = "different-survey-id"; + const token = createTokenForLinkSurvey(surveyId, mockUser.email); + const result = verifyTokenForLinkSurvey(token, differentSurveyId); + expect(result).toBeNull(); + }); + + test("should return null if email is missing from payload", () => { + const tokenWithoutEmail = jwt.sign({ surveyId: "test-survey-id" }, TEST_NEXTAUTH_SECRET); + const result = verifyTokenForLinkSurvey(tokenWithoutEmail, "test-survey-id"); + expect(result).toBeNull(); + }); + + test("should fall back to original email if decryption fails", () => { + mockSymmetricDecrypt.mockImplementationOnce(() => { + throw new Error("Decryption failed"); + }); + + // Create legacy token with unencrypted email + const legacyToken = jwt.sign( + { + email: mockUser.email, + surveyId: "test-survey-id", + }, + TEST_NEXTAUTH_SECRET + ); + + const result = verifyTokenForLinkSurvey(legacyToken, "test-survey-id"); + expect(result).toBe(mockUser.email); + }); + + test("should fall back to original email if ENCRYPTION_KEY is not set", async () => { + const constants = await import("@/lib/constants"); + const originalKey = (constants as any).ENCRYPTION_KEY; + (constants as any).ENCRYPTION_KEY = undefined; + + // Create a token with unencrypted email (as it would be if ENCRYPTION_KEY was not set during creation) + const token = jwt.sign( + { + email: mockUser.email, + surveyId: "survey-id", + }, + TEST_NEXTAUTH_SECRET + ); + + const result = verifyTokenForLinkSurvey(token, "survey-id"); + expect(result).toBe(mockUser.email); + + // Restore + (constants as any).ENCRYPTION_KEY = originalKey; + }); + + test("should verify legacy survey tokens with surveyId-based secret", async () => { + const surveyId = "test-survey-id"; + + // Create legacy token with old format (NEXTAUTH_SECRET + surveyId) + const legacyToken = jwt.sign({ email: `encrypted_${mockUser.email}` }, TEST_NEXTAUTH_SECRET + surveyId); + + const result = verifyTokenForLinkSurvey(legacyToken, surveyId); + expect(result).toBe(mockUser.email); + }); + + test("should reject survey tokens that fail both new and legacy verification", async () => { + const surveyId = "test-survey-id"; + const invalidToken = jwt.sign({ email: "encrypted_test@example.com" }, "wrong-secret"); + + const result = verifyTokenForLinkSurvey(invalidToken, surveyId); + expect(result).toBeNull(); + + // Verify error logging + const { logger } = await import("@formbricks/logger"); + expect(logger.error).toHaveBeenCalledWith(expect.any(Error), "Survey link token verification failed"); + }); + + test("should reject legacy survey tokens for wrong survey", () => { + const correctSurveyId = "correct-survey-id"; + const wrongSurveyId = "wrong-survey-id"; + + // Create legacy token for one survey + const legacyToken = jwt.sign( + { email: `encrypted_${mockUser.email}` }, + TEST_NEXTAUTH_SECRET + correctSurveyId + ); + + // Try to verify with different survey ID + const result = verifyTokenForLinkSurvey(legacyToken, wrongSurveyId); + expect(result).toBeNull(); + }); }); describe("verifyToken", () => { test("should verify valid token", async () => { - const token = createToken(mockUser.id, mockUser.email); + const token = createToken(mockUser.id); const verified = await verifyToken(token); expect(verified).toEqual({ - id: mockUser.id, + id: mockUser.id, // Returns the decrypted user ID email: mockUser.email, }); }); test("should throw error if user not found", async () => { (prisma.user.findUnique as any).mockResolvedValue(null); - const token = createToken(mockUser.id, mockUser.email); + const token = createToken(mockUser.id); await expect(verifyToken(token)).rejects.toThrow("User not found"); }); + + test("should throw error if NEXTAUTH_SECRET is not set", async () => { + await testMissingSecretsError(verifyToken, ["any-token"], { + testNextAuthSecret: true, + testEncryptionKey: false, + isAsync: true, + }); + }); + + test("should throw error for invalid token signature", async () => { + const invalidToken = jwt.sign({ id: "test-id" }, DIFFERENT_SECRET); + await expect(verifyToken(invalidToken)).rejects.toThrow("Invalid token"); + }); + + test("should throw error if token payload is missing id", async () => { + const tokenWithoutId = jwt.sign({ email: mockUser.email }, TEST_NEXTAUTH_SECRET); + await expect(verifyToken(tokenWithoutId)).rejects.toThrow("Invalid token"); + }); + + test("should return raw id from payload", async () => { + // Create token with unencrypted id + const token = jwt.sign({ id: mockUser.id }, TEST_NEXTAUTH_SECRET); + const verified = await verifyToken(token); + expect(verified).toEqual({ + id: mockUser.id, // Returns the raw ID from payload + email: mockUser.email, + }); + }); + + test("should verify legacy tokens with email-based secret", async () => { + // Create legacy token with old format (NEXTAUTH_SECRET + userEmail) + const legacyToken = jwt.sign({ id: `encrypted_${mockUser.id}` }, TEST_NEXTAUTH_SECRET + mockUser.email); + + const verified = await verifyToken(legacyToken); + expect(verified).toEqual({ + id: mockUser.id, // Returns the decrypted user ID + email: mockUser.email, + }); + }); + + test("should prioritize new tokens over legacy tokens", async () => { + // Create both new and legacy tokens for the same user + const newToken = createToken(mockUser.id); + const legacyToken = jwt.sign({ id: `encrypted_${mockUser.id}` }, TEST_NEXTAUTH_SECRET + mockUser.email); + + // New token should verify without triggering legacy path + const verifiedNew = await verifyToken(newToken); + expect(verifiedNew.id).toBe(mockUser.id); // Returns decrypted user ID + + // Legacy token should trigger legacy path + const verifiedLegacy = await verifyToken(legacyToken); + expect(verifiedLegacy.id).toBe(mockUser.id); // Returns decrypted user ID + }); + + test("should reject tokens that fail both new and legacy verification", async () => { + const invalidToken = jwt.sign({ id: "encrypted_test-id" }, "wrong-secret"); + await expect(verifyToken(invalidToken)).rejects.toThrow("Invalid token"); + + // Verify both methods were attempted + const { logger } = await import("@formbricks/logger"); + expect(logger.error).toHaveBeenCalledWith( + expect.any(Error), + "Token verification failed with new method" + ); + expect(logger.error).toHaveBeenCalledWith( + expect.any(Error), + "Token verification failed with legacy method" + ); + }); }); describe("verifyInviteToken", () => { @@ -139,6 +473,53 @@ describe("JWT Functions", () => { test("should throw error for invalid token", () => { expect(() => verifyInviteToken("invalid-token")).toThrow("Invalid or expired invite token"); }); + + test("should throw error if NEXTAUTH_SECRET or ENCRYPTION_KEY is not set", async () => { + await testMissingSecretsError(verifyInviteToken, ["any-token"]); + }); + + test("should throw error if inviteId is missing", () => { + const tokenWithoutInviteId = jwt.sign({ email: mockUser.email }, TEST_NEXTAUTH_SECRET); + expect(() => verifyInviteToken(tokenWithoutInviteId)).toThrow("Invalid or expired invite token"); + }); + + test("should throw error if email is missing", () => { + const tokenWithoutEmail = jwt.sign({ inviteId: "test-invite-id" }, TEST_NEXTAUTH_SECRET); + expect(() => verifyInviteToken(tokenWithoutEmail)).toThrow("Invalid or expired invite token"); + }); + + test("should fall back to original values if decryption fails", () => { + mockSymmetricDecrypt.mockImplementation(() => { + throw new Error("Decryption failed"); + }); + + const inviteId = "test-invite-id"; + const legacyToken = jwt.sign( + { + inviteId, + email: mockUser.email, + }, + TEST_NEXTAUTH_SECRET + ); + + const verified = verifyInviteToken(legacyToken); + expect(verified).toEqual({ + inviteId, + email: mockUser.email, + }); + }); + + test("should throw error for token with wrong signature", () => { + const invalidToken = jwt.sign( + { + inviteId: "test-invite-id", + email: mockUser.email, + }, + DIFFERENT_SECRET + ); + + expect(() => verifyInviteToken(invalidToken)).toThrow("Invalid or expired invite token"); + }); }); describe("verifyEmailChangeToken", () => { @@ -150,22 +531,478 @@ describe("JWT Functions", () => { expect(result).toEqual({ id: userId, email }); }); + test("should throw error if NEXTAUTH_SECRET or ENCRYPTION_KEY is not set", async () => { + await testMissingSecretsError(verifyEmailChangeToken, ["any-token"], { isAsync: true }); + }); + test("should throw error if token is invalid or missing fields", async () => { - // Create a token with missing fields - const jwt = await import("jsonwebtoken"); - const token = jwt.sign({ foo: "bar" }, env.NEXTAUTH_SECRET as string); + const token = jwt.sign({ foo: "bar" }, TEST_NEXTAUTH_SECRET); + await expect(verifyEmailChangeToken(token)).rejects.toThrow( + "Token is invalid or missing required fields" + ); + }); + + test("should throw error if id is missing", async () => { + const token = jwt.sign({ email: "test@example.com" }, TEST_NEXTAUTH_SECRET); + await expect(verifyEmailChangeToken(token)).rejects.toThrow( + "Token is invalid or missing required fields" + ); + }); + + test("should throw error if email is missing", async () => { + const token = jwt.sign({ id: "test-id" }, TEST_NEXTAUTH_SECRET); await expect(verifyEmailChangeToken(token)).rejects.toThrow( "Token is invalid or missing required fields" ); }); test("should return original id/email if decryption fails", async () => { - // Create a token with non-encrypted id/email - const jwt = await import("jsonwebtoken"); + mockSymmetricDecrypt.mockImplementation(() => { + throw new Error("Decryption failed"); + }); + const payload = { id: "plain-id", email: "plain@example.com" }; - const token = jwt.sign(payload, env.NEXTAUTH_SECRET as string); + const token = jwt.sign(payload, TEST_NEXTAUTH_SECRET); const result = await verifyEmailChangeToken(token); expect(result).toEqual(payload); }); + + test("should throw error for token with wrong signature", async () => { + const invalidToken = jwt.sign( + { + id: "test-id", + email: "test@example.com", + }, + DIFFERENT_SECRET + ); + + await expect(verifyEmailChangeToken(invalidToken)).rejects.toThrow(); + }); + }); + + // SECURITY SCENARIO TESTS + describe("Security Scenarios", () => { + describe("Algorithm Confusion Attack Prevention", () => { + test("should reject 'none' algorithm tokens in verifyToken", async () => { + // Create malicious token with "none" algorithm + const maliciousToken = + Buffer.from( + JSON.stringify({ + alg: "none", + typ: "JWT", + }) + ).toString("base64url") + + "." + + Buffer.from( + JSON.stringify({ + id: "encrypted_malicious-id", + }) + ).toString("base64url") + + "."; + + await expect(verifyToken(maliciousToken)).rejects.toThrow("Invalid token"); + }); + + test("should reject 'none' algorithm tokens in verifyTokenForLinkSurvey", () => { + const maliciousToken = + Buffer.from( + JSON.stringify({ + alg: "none", + typ: "JWT", + }) + ).toString("base64url") + + "." + + Buffer.from( + JSON.stringify({ + email: "encrypted_attacker@evil.com", + surveyId: "test-survey-id", + }) + ).toString("base64url") + + "."; + + const result = verifyTokenForLinkSurvey(maliciousToken, "test-survey-id"); + expect(result).toBeNull(); + }); + + test("should reject 'none' algorithm tokens in verifyInviteToken", () => { + const maliciousToken = + Buffer.from( + JSON.stringify({ + alg: "none", + typ: "JWT", + }) + ).toString("base64url") + + "." + + Buffer.from( + JSON.stringify({ + inviteId: "encrypted_malicious-invite", + email: "encrypted_attacker@evil.com", + }) + ).toString("base64url") + + "."; + + expect(() => verifyInviteToken(maliciousToken)).toThrow("Invalid or expired invite token"); + }); + + test("should reject 'none' algorithm tokens in verifyEmailChangeToken", async () => { + const maliciousToken = + Buffer.from( + JSON.stringify({ + alg: "none", + typ: "JWT", + }) + ).toString("base64url") + + "." + + Buffer.from( + JSON.stringify({ + id: "encrypted_malicious-id", + email: "encrypted_attacker@evil.com", + }) + ).toString("base64url") + + "."; + + await expect(verifyEmailChangeToken(maliciousToken)).rejects.toThrow(); + }); + + test("should reject RS256 algorithm tokens (HS256/RS256 confusion)", async () => { + // Create malicious token with RS256 algorithm header but HS256 signature + const maliciousHeader = Buffer.from( + JSON.stringify({ + alg: "RS256", + typ: "JWT", + }) + ).toString("base64url"); + + const maliciousPayload = Buffer.from( + JSON.stringify({ + id: "encrypted_malicious-id", + }) + ).toString("base64url"); + + // Create signature using HMAC (as if it were HS256) + const crypto = require("crypto"); + const signature = crypto + .createHmac("sha256", TEST_NEXTAUTH_SECRET) + .update(`${maliciousHeader}.${maliciousPayload}`) + .digest("base64url"); + + const maliciousToken = `${maliciousHeader}.${maliciousPayload}.${signature}`; + + await expect(verifyToken(maliciousToken)).rejects.toThrow("Invalid token"); + }); + + test("should only accept HS256 algorithm", async () => { + // Test that other valid algorithms are rejected + const otherAlgorithms = ["HS384", "HS512", "RS256", "RS384", "RS512", "ES256", "ES384", "ES512"]; + + for (const alg of otherAlgorithms) { + const maliciousHeader = Buffer.from( + JSON.stringify({ + alg, + typ: "JWT", + }) + ).toString("base64url"); + + const maliciousPayload = Buffer.from( + JSON.stringify({ + id: "encrypted_test-id", + }) + ).toString("base64url"); + + const maliciousToken = `${maliciousHeader}.${maliciousPayload}.fake-signature`; + + await expect(verifyToken(maliciousToken)).rejects.toThrow("Invalid token"); + } + }); + }); + + describe("Token Tampering", () => { + test("should reject tokens with modified payload", async () => { + const token = createToken(mockUser.id); + const [header, payload, signature] = token.split("."); + + // Modify the payload + const decodedPayload = JSON.parse(Buffer.from(payload, "base64url").toString()); + decodedPayload.id = "malicious-id"; + const tamperedPayload = Buffer.from(JSON.stringify(decodedPayload)).toString("base64url"); + const tamperedToken = `${header}.${tamperedPayload}.${signature}`; + + await expect(verifyToken(tamperedToken)).rejects.toThrow("Invalid token"); + }); + + test("should reject tokens with modified signature", async () => { + const token = createToken(mockUser.id); + const [header, payload] = token.split("."); + const tamperedToken = `${header}.${payload}.tamperedsignature`; + + await expect(verifyToken(tamperedToken)).rejects.toThrow("Invalid token"); + }); + + test("should reject malformed tokens", async () => { + const malformedTokens = [ + "not.a.jwt", + "only.two.parts", + "too.many.parts.here.invalid", + "", + "invalid-base64", + ]; + + for (const malformedToken of malformedTokens) { + await expect(verifyToken(malformedToken)).rejects.toThrow(); + } + }); + }); + + describe("Cross-Survey Token Reuse", () => { + test("should reject survey tokens used for different surveys", () => { + const surveyId1 = "survey-1"; + const surveyId2 = "survey-2"; + + const token = createTokenForLinkSurvey(surveyId1, mockUser.email); + const result = verifyTokenForLinkSurvey(token, surveyId2); + + expect(result).toBeNull(); + }); + }); + + describe("Expired Tokens", () => { + test("should reject expired tokens", async () => { + const expiredToken = jwt.sign( + { + id: "encrypted_test-id", + exp: Math.floor(Date.now() / 1000) - 3600, // Expired 1 hour ago + }, + TEST_NEXTAUTH_SECRET + ); + + await expect(verifyToken(expiredToken)).rejects.toThrow("Invalid token"); + }); + + test("should reject expired email change tokens", async () => { + const expiredToken = jwt.sign( + { + id: "encrypted_test-id", + email: "encrypted_test@example.com", + exp: Math.floor(Date.now() / 1000) - 3600, // Expired 1 hour ago + }, + TEST_NEXTAUTH_SECRET + ); + + await expect(verifyEmailChangeToken(expiredToken)).rejects.toThrow(); + }); + }); + + describe("Encryption Key Attacks", () => { + test("should fail gracefully with wrong encryption key", async () => { + mockSymmetricDecrypt.mockImplementation(() => { + throw new Error("Authentication tag verification failed"); + }); + + // Mock findUnique to only return user for correct decrypted ID, not ciphertext + (prisma.user.findUnique as any).mockImplementation(({ where }: { where: { id: string } }) => { + if (where.id === mockUser.id) { + return Promise.resolve(mockUser); + } + return Promise.resolve(null); // Return null for ciphertext IDs + }); + + const token = createToken(mockUser.id); + // Should fail because ciphertext passed as userId won't match any user in DB + await expect(verifyToken(token)).rejects.toThrow(/User not found/i); + }); + + test("should handle encryption key not set gracefully", async () => { + const constants = await import("@/lib/constants"); + const originalKey = (constants as any).ENCRYPTION_KEY; + (constants as any).ENCRYPTION_KEY = undefined; + + const token = jwt.sign( + { + email: "test@example.com", + surveyId: "test-survey-id", + }, + TEST_NEXTAUTH_SECRET + ); + + const result = verifyTokenForLinkSurvey(token, "test-survey-id"); + expect(result).toBe("test@example.com"); + + // Restore + (constants as any).ENCRYPTION_KEY = originalKey; + }); + }); + + describe("SQL Injection Attempts", () => { + test("should safely handle malicious user IDs", async () => { + const maliciousIds = [ + "'; DROP TABLE users; --", + "1' OR '1'='1", + "admin'/*", + "", + "../../etc/passwd", + ]; + + for (const maliciousId of maliciousIds) { + mockSymmetricDecrypt.mockReturnValueOnce(maliciousId); + + const token = jwt.sign({ id: "encrypted_malicious" }, TEST_NEXTAUTH_SECRET); + + // The function should look up the user safely + await verifyToken(token); + expect(prisma.user.findUnique).toHaveBeenCalledWith({ + where: { id: maliciousId }, + }); + } + }); + }); + + describe("Token Reuse and Replay Attacks", () => { + test("should allow legitimate token reuse within validity period", async () => { + const token = createToken(mockUser.id); + + // First use + const result1 = await verifyToken(token); + expect(result1.id).toBe(mockUser.id); // Returns decrypted user ID + + // Second use (should still work) + const result2 = await verifyToken(token); + expect(result2.id).toBe(mockUser.id); // Returns decrypted user ID + }); + }); + + describe("Legacy Token Compatibility", () => { + test("should handle legacy unencrypted tokens gracefully", async () => { + // Legacy token with plain text data + const legacyToken = jwt.sign({ id: mockUser.id }, TEST_NEXTAUTH_SECRET); + const result = await verifyToken(legacyToken); + + expect(result.id).toBe(mockUser.id); // Returns raw ID from payload + expect(result.email).toBe(mockUser.email); + }); + + test("should handle mixed encrypted/unencrypted fields", async () => { + mockSymmetricDecrypt + .mockImplementationOnce(() => mockUser.id) // id decrypts successfully + .mockImplementationOnce(() => { + throw new Error("Email not encrypted"); + }); // email fails + + const token = jwt.sign( + { + id: "encrypted_test-id", + email: "plain-email@example.com", + }, + TEST_NEXTAUTH_SECRET + ); + + const result = await verifyEmailChangeToken(token); + expect(result.id).toBe(mockUser.id); + expect(result.email).toBe("plain-email@example.com"); + }); + + test("should verify old format user tokens with email-based secrets", async () => { + // Simulate old token format with per-user secret + const oldFormatToken = jwt.sign( + { id: `encrypted_${mockUser.id}` }, + TEST_NEXTAUTH_SECRET + mockUser.email + ); + + const result = await verifyToken(oldFormatToken); + expect(result.id).toBe(mockUser.id); // Returns decrypted user ID + expect(result.email).toBe(mockUser.email); + }); + + test("should verify old format survey tokens with survey-based secrets", () => { + const surveyId = "legacy-survey-id"; + + // Simulate old survey token format + const oldFormatSurveyToken = jwt.sign( + { email: `encrypted_${mockUser.email}` }, + TEST_NEXTAUTH_SECRET + surveyId + ); + + const result = verifyTokenForLinkSurvey(oldFormatSurveyToken, surveyId); + expect(result).toBe(mockUser.email); + }); + + test("should gracefully handle database errors during legacy verification", async () => { + // Create token that will fail new method + const legacyToken = jwt.sign( + { id: `encrypted_${mockUser.id}` }, + TEST_NEXTAUTH_SECRET + mockUser.email + ); + + // Make database lookup fail + (prisma.user.findUnique as any).mockRejectedValueOnce(new Error("DB connection lost")); + + await expect(verifyToken(legacyToken)).rejects.toThrow("DB connection lost"); + }); + }); + + describe("Edge Cases and Error Handling", () => { + test("should handle database connection errors gracefully", async () => { + (prisma.user.findUnique as any).mockRejectedValue(new Error("Database connection failed")); + + const token = createToken(mockUser.id); + await expect(verifyToken(token)).rejects.toThrow("Database connection failed"); + }); + + test("should handle crypto module errors", () => { + mockSymmetricEncrypt.mockImplementation(() => { + throw new Error("Crypto module error"); + }); + + expect(() => createToken(mockUser.id)).toThrow("Crypto module error"); + }); + + test("should validate email format in tokens", () => { + const invalidEmails = ["", "not-an-email", "missing@", "@missing-local.com", "spaces in@email.com"]; + + invalidEmails.forEach((invalidEmail) => { + expect(() => createEmailToken(invalidEmail)).not.toThrow(); + // Note: JWT functions don't validate email format, they just encrypt/decrypt + // Email validation should happen at a higher level + }); + }); + + test("should handle extremely long inputs", () => { + const longString = "a".repeat(10000); + + expect(() => createToken(longString)).not.toThrow(); + expect(() => createEmailToken(longString)).not.toThrow(); + }); + + test("should handle special characters in user data", () => { + const specialChars = "!@#$%^&*()_+-=[]{}|;:'\",.<>?/~`"; + + expect(() => createToken(specialChars)).not.toThrow(); + expect(() => createEmailToken(specialChars)).not.toThrow(); + }); + }); + + describe("Performance and Resource Exhaustion", () => { + test("should handle rapid token creation without memory leaks", () => { + const tokens: string[] = []; + for (let i = 0; i < 1000; i++) { + tokens.push(createToken(`user-${i}`)); + } + + expect(tokens.length).toBe(1000); + expect(tokens.every((token) => typeof token === "string")).toBe(true); + }); + + test("should handle rapid token verification", async () => { + const token = createToken(mockUser.id); + + const verifications: Promise[] = []; + for (let i = 0; i < 100; i++) { + verifications.push(verifyToken(token)); + } + + const results = await Promise.all(verifications); + expect(results.length).toBe(100); + expect(results.every((result: any) => result.id === mockUser.id)).toBe(true); // Returns decrypted user ID + }); + }); }); }); diff --git a/apps/web/lib/jwt.ts b/apps/web/lib/jwt.ts index 88095db6bc..586cd0dbec 100644 --- a/apps/web/lib/jwt.ts +++ b/apps/web/lib/jwt.ts @@ -1,43 +1,64 @@ +import { ENCRYPTION_KEY, NEXTAUTH_SECRET } from "@/lib/constants"; import { symmetricDecrypt, symmetricEncrypt } from "@/lib/crypto"; -import { env } from "@/lib/env"; import jwt, { JwtPayload } from "jsonwebtoken"; import { prisma } from "@formbricks/database"; import { logger } from "@formbricks/logger"; -export const createToken = (userId: string, userEmail: string, options = {}): string => { - const encryptedUserId = symmetricEncrypt(userId, env.ENCRYPTION_KEY); - return jwt.sign({ id: encryptedUserId }, env.NEXTAUTH_SECRET + userEmail, options); -}; -export const createTokenForLinkSurvey = (surveyId: string, userEmail: string): string => { - const encryptedEmail = symmetricEncrypt(userEmail, env.ENCRYPTION_KEY); - return jwt.sign({ email: encryptedEmail }, env.NEXTAUTH_SECRET + surveyId); +// Helper function to decrypt with fallback to plain text +const decryptWithFallback = (encryptedText: string, key: string): string => { + try { + return symmetricDecrypt(encryptedText, key); + } catch { + return encryptedText; // Return as-is if decryption fails (legacy format) + } }; -export const verifyEmailChangeToken = async (token: string): Promise<{ id: string; email: string }> => { - if (!env.NEXTAUTH_SECRET) { +export const createToken = (userId: string, options = {}): string => { + if (!NEXTAUTH_SECRET) { throw new Error("NEXTAUTH_SECRET is not set"); } - const payload = jwt.verify(token, env.NEXTAUTH_SECRET) as { id: string; email: string }; + if (!ENCRYPTION_KEY) { + throw new Error("ENCRYPTION_KEY is not set"); + } + + const encryptedUserId = symmetricEncrypt(userId, ENCRYPTION_KEY); + return jwt.sign({ id: encryptedUserId }, NEXTAUTH_SECRET, options); +}; +export const createTokenForLinkSurvey = (surveyId: string, userEmail: string): string => { + if (!NEXTAUTH_SECRET) { + throw new Error("NEXTAUTH_SECRET is not set"); + } + + if (!ENCRYPTION_KEY) { + throw new Error("ENCRYPTION_KEY is not set"); + } + + const encryptedEmail = symmetricEncrypt(userEmail, ENCRYPTION_KEY); + return jwt.sign({ email: encryptedEmail, surveyId }, NEXTAUTH_SECRET); +}; + +export const verifyEmailChangeToken = async (token: string): Promise<{ id: string; email: string }> => { + if (!NEXTAUTH_SECRET) { + throw new Error("NEXTAUTH_SECRET is not set"); + } + + if (!ENCRYPTION_KEY) { + throw new Error("ENCRYPTION_KEY is not set"); + } + + const payload = jwt.verify(token, NEXTAUTH_SECRET, { algorithms: ["HS256"] }) as { + id: string; + email: string; + }; if (!payload?.id || !payload?.email) { throw new Error("Token is invalid or missing required fields"); } - let decryptedId: string; - let decryptedEmail: string; - - try { - decryptedId = symmetricDecrypt(payload.id, env.ENCRYPTION_KEY); - } catch { - decryptedId = payload.id; - } - - try { - decryptedEmail = symmetricDecrypt(payload.email, env.ENCRYPTION_KEY); - } catch { - decryptedEmail = payload.email; - } + // Decrypt both fields with fallback + const decryptedId = decryptWithFallback(payload.id, ENCRYPTION_KEY); + const decryptedEmail = decryptWithFallback(payload.email, ENCRYPTION_KEY); return { id: decryptedId, @@ -46,127 +67,230 @@ export const verifyEmailChangeToken = async (token: string): Promise<{ id: strin }; export const createEmailChangeToken = (userId: string, email: string): string => { - const encryptedUserId = symmetricEncrypt(userId, env.ENCRYPTION_KEY); - const encryptedEmail = symmetricEncrypt(email, env.ENCRYPTION_KEY); + if (!NEXTAUTH_SECRET) { + throw new Error("NEXTAUTH_SECRET is not set"); + } + + if (!ENCRYPTION_KEY) { + throw new Error("ENCRYPTION_KEY is not set"); + } + + const encryptedUserId = symmetricEncrypt(userId, ENCRYPTION_KEY); + const encryptedEmail = symmetricEncrypt(email, ENCRYPTION_KEY); const payload = { id: encryptedUserId, email: encryptedEmail, }; - return jwt.sign(payload, env.NEXTAUTH_SECRET as string, { + return jwt.sign(payload, NEXTAUTH_SECRET, { expiresIn: "1d", }); }; + export const createEmailToken = (email: string): string => { - if (!env.NEXTAUTH_SECRET) { + if (!NEXTAUTH_SECRET) { throw new Error("NEXTAUTH_SECRET is not set"); } - const encryptedEmail = symmetricEncrypt(email, env.ENCRYPTION_KEY); - return jwt.sign({ email: encryptedEmail }, env.NEXTAUTH_SECRET); + if (!ENCRYPTION_KEY) { + throw new Error("ENCRYPTION_KEY is not set"); + } + + const encryptedEmail = symmetricEncrypt(email, ENCRYPTION_KEY); + return jwt.sign({ email: encryptedEmail }, NEXTAUTH_SECRET); }; export const getEmailFromEmailToken = (token: string): string => { - if (!env.NEXTAUTH_SECRET) { + if (!NEXTAUTH_SECRET) { throw new Error("NEXTAUTH_SECRET is not set"); } - const payload = jwt.verify(token, env.NEXTAUTH_SECRET) as JwtPayload; - try { - // Try to decrypt first (for newer tokens) - const decryptedEmail = symmetricDecrypt(payload.email, env.ENCRYPTION_KEY); - return decryptedEmail; - } catch { - // If decryption fails, return the original email (for older tokens) - return payload.email; + if (!ENCRYPTION_KEY) { + throw new Error("ENCRYPTION_KEY is not set"); } + + const payload = jwt.verify(token, NEXTAUTH_SECRET, { algorithms: ["HS256"] }) as JwtPayload & { + email: string; + }; + return decryptWithFallback(payload.email, ENCRYPTION_KEY); }; export const createInviteToken = (inviteId: string, email: string, options = {}): string => { - if (!env.NEXTAUTH_SECRET) { + if (!NEXTAUTH_SECRET) { throw new Error("NEXTAUTH_SECRET is not set"); } - const encryptedInviteId = symmetricEncrypt(inviteId, env.ENCRYPTION_KEY); - const encryptedEmail = symmetricEncrypt(email, env.ENCRYPTION_KEY); - return jwt.sign({ inviteId: encryptedInviteId, email: encryptedEmail }, env.NEXTAUTH_SECRET, options); + + if (!ENCRYPTION_KEY) { + throw new Error("ENCRYPTION_KEY is not set"); + } + + const encryptedInviteId = symmetricEncrypt(inviteId, ENCRYPTION_KEY); + const encryptedEmail = symmetricEncrypt(email, ENCRYPTION_KEY); + return jwt.sign({ inviteId: encryptedInviteId, email: encryptedEmail }, NEXTAUTH_SECRET, options); }; export const verifyTokenForLinkSurvey = (token: string, surveyId: string): string | null => { + if (!NEXTAUTH_SECRET) { + return null; + } + try { - const { email } = jwt.verify(token, env.NEXTAUTH_SECRET + surveyId) as JwtPayload; + let payload: JwtPayload & { email: string; surveyId?: string }; + + // Try primary method first (consistent secret) try { - // Try to decrypt first (for newer tokens) - if (!env.ENCRYPTION_KEY) { - throw new Error("ENCRYPTION_KEY is not set"); + payload = jwt.verify(token, NEXTAUTH_SECRET, { algorithms: ["HS256"] }) as JwtPayload & { + email: string; + surveyId: string; + }; + } catch (primaryError) { + logger.error(primaryError, "Token verification failed with primary method"); + + // Fallback to legacy method (surveyId-based secret) + try { + payload = jwt.verify(token, NEXTAUTH_SECRET + surveyId, { algorithms: ["HS256"] }) as JwtPayload & { + email: string; + }; + } catch (legacyError) { + logger.error(legacyError, "Token verification failed with legacy method"); + throw new Error("Invalid token"); } - const decryptedEmail = symmetricDecrypt(email, env.ENCRYPTION_KEY); - return decryptedEmail; - } catch { - // If decryption fails, return the original email (for older tokens) - return email; } - } catch (err) { + + // Verify the surveyId matches if present in payload (new format) + if (payload.surveyId && payload.surveyId !== surveyId) { + return null; + } + + const { email } = payload; + if (!email) { + return null; + } + + // Decrypt email with fallback to plain text + if (!ENCRYPTION_KEY) { + return email; // Return as-is if encryption key not set + } + + return decryptWithFallback(email, ENCRYPTION_KEY); + } catch (error) { + logger.error(error, "Survey link token verification failed"); return null; } }; -export const verifyToken = async (token: string): Promise => { - // First decode to get the ID - const decoded = jwt.decode(token); - const payload: JwtPayload = decoded as JwtPayload; +// Helper function to get user email for legacy verification +const getUserEmailForLegacyVerification = async ( + token: string, + userId?: string +): Promise<{ userId: string; userEmail: string }> => { + if (!userId) { + const decoded = jwt.decode(token); - if (!payload) { - throw new Error("Token is invalid"); + // Validate decoded token structure before using it + if ( + !decoded || + typeof decoded !== "object" || + !decoded.id || + typeof decoded.id !== "string" || + decoded.id.trim() === "" + ) { + logger.error("Invalid token: missing or invalid user ID"); + throw new Error("Invalid token"); + } + + userId = decoded.id; } - const { id } = payload; - if (!id) { - throw new Error("Token missing required field: id"); + const decryptedId = decryptWithFallback(userId, ENCRYPTION_KEY); + + // Validate decrypted ID before database query + if (!decryptedId || typeof decryptedId !== "string" || decryptedId.trim() === "") { + logger.error("Invalid token: missing or invalid user ID"); + throw new Error("Invalid token"); } - // Try to decrypt the ID (for newer tokens), if it fails use the ID as-is (for older tokens) - let decryptedId: string; - try { - decryptedId = symmetricDecrypt(id, env.ENCRYPTION_KEY); - } catch { - decryptedId = id; - } - - // If no email provided, look up the user const foundUser = await prisma.user.findUnique({ where: { id: decryptedId }, }); if (!foundUser) { - throw new Error("User not found"); + const errorMessage = "User not found"; + logger.error(errorMessage); + throw new Error(errorMessage); } - const userEmail = foundUser.email; + return { userId: decryptedId, userEmail: foundUser.email }; +}; - return { id: decryptedId, email: userEmail }; +export const verifyToken = async (token: string): Promise => { + if (!NEXTAUTH_SECRET) { + throw new Error("NEXTAUTH_SECRET is not set"); + } + + let payload: JwtPayload & { id: string }; + let userData: { userId: string; userEmail: string } | null = null; + + // Try new method first, with smart fallback to legacy + try { + payload = jwt.verify(token, NEXTAUTH_SECRET, { algorithms: ["HS256"] }) as JwtPayload & { + id: string; + }; + } catch (newMethodError) { + logger.error(newMethodError, "Token verification failed with new method"); + + // Get user email for legacy verification + userData = await getUserEmailForLegacyVerification(token); + + // Try legacy verification with email-based secret + try { + payload = jwt.verify(token, NEXTAUTH_SECRET + userData.userEmail, { + algorithms: ["HS256"], + }) as JwtPayload & { + id: string; + }; + } catch (legacyMethodError) { + logger.error(legacyMethodError, "Token verification failed with legacy method"); + throw new Error("Invalid token"); + } + } + + if (!payload?.id) { + throw new Error("Invalid token"); + } + + // Get user email if we don't have it yet + userData ??= await getUserEmailForLegacyVerification(token, payload.id); + + return { id: userData.userId, email: userData.userEmail }; }; export const verifyInviteToken = (token: string): { inviteId: string; email: string } => { + if (!NEXTAUTH_SECRET) { + throw new Error("NEXTAUTH_SECRET is not set"); + } + + if (!ENCRYPTION_KEY) { + throw new Error("ENCRYPTION_KEY is not set"); + } + try { - const decoded = jwt.decode(token); - const payload: JwtPayload = decoded as JwtPayload; + const payload = jwt.verify(token, NEXTAUTH_SECRET, { algorithms: ["HS256"] }) as JwtPayload & { + inviteId: string; + email: string; + }; - const { inviteId, email } = payload; + const { inviteId: encryptedInviteId, email: encryptedEmail } = payload; - let decryptedInviteId: string; - let decryptedEmail: string; - - try { - // Try to decrypt first (for newer tokens) - decryptedInviteId = symmetricDecrypt(inviteId, env.ENCRYPTION_KEY); - decryptedEmail = symmetricDecrypt(email, env.ENCRYPTION_KEY); - } catch { - // If decryption fails, use original values (for older tokens) - decryptedInviteId = inviteId; - decryptedEmail = email; + if (!encryptedInviteId || !encryptedEmail) { + throw new Error("Invalid token"); } + // Decrypt both fields with fallback to original values + const decryptedInviteId = decryptWithFallback(encryptedInviteId, ENCRYPTION_KEY); + const decryptedEmail = decryptWithFallback(encryptedEmail, ENCRYPTION_KEY); + return { inviteId: decryptedInviteId, email: decryptedEmail, diff --git a/apps/web/locales/de-DE.json b/apps/web/locales/de-DE.json index e14ebd4225..dd7f0c1848 100644 --- a/apps/web/locales/de-DE.json +++ b/apps/web/locales/de-DE.json @@ -118,6 +118,7 @@ "account_settings": "Kontoeinstellungen", "action": "Aktion", "actions": "Aktionen", + "actions_description": "Code- und No-Code-Aktionen werden verwendet, um Abfangumfragen innerhalb von Apps und auf Websites auszulösen.", "active_surveys": "Aktive Umfragen", "activity": "Aktivität", "add": "Hinzufügen", @@ -125,6 +126,7 @@ "add_filter": "Filter hinzufügen", "add_logo": "Logo hinzufügen", "add_member": "Mitglied hinzufügen", + "add_new_project": "Neues Projekt hinzufügen", "add_project": "Projekt hinzufügen", "add_to_team": "Zum Team hinzufügen", "all": "Alle", @@ -149,6 +151,9 @@ "cancel": "Abbrechen", "centered_modal": "Zentriertes Modalfenster", "choices": "Entscheidungen", + "choose_environment": "Umgebung auswählen", + "choose_organization": "Organisation auswählen", + "choose_project": "Projekt wählen", "clear_all": "Alles löschen", "clear_filters": "Filter löschen", "clear_selection": "Auswahl aufheben", @@ -164,11 +169,14 @@ "connect_formbricks": "Formbricks verbinden", "connected": "Verbunden", "contacts": "Kontakte", + "continue": "Weitermachen", "copied": "Kopiert", "copied_to_clipboard": "In die Zwischenablage kopiert", "copy": "Kopieren", "copy_code": "Code kopieren", "copy_link": "Link kopieren", + "count_contacts": "{value, plural, other {'{'value, plural,\none '{{#}' Kontakt'}'\nother '{{#}' Kontakte'}'\n'}'}}", + "count_responses": "{value, plural, other {{count} Antworten}}", "create_new_organization": "Neue Organisation erstellen", "create_project": "Projekt erstellen", "create_segment": "Segment erstellen", @@ -177,7 +185,6 @@ "created_at": "Erstellt am", "created_by": "Erstellt von", "customer_success": "Kundenerfolg", - "danger_zone": "Gefahrenzone", "dark_overlay": "Dunkle Überlagerung", "date": "Datum", "default": "Standard", @@ -197,10 +204,15 @@ "e_commerce": "E-Commerce", "edit": "Bearbeiten", "email": "E-Mail", + "ending_card": "Abschluss-Karte", "enterprise_license": "Enterprise Lizenz", "environment_not_found": "Umgebung nicht gefunden", "environment_notice": "Du befindest dich derzeit in der {environment}-Umgebung.", "error": "Fehler", + "error_component_description": "Diese Ressource existiert nicht oder Du hast nicht die notwendigen Rechte, um darauf zuzugreifen.", + "error_component_title": "Fehler beim Laden der Ressourcen", + "error_rate_limit_description": "Maximale Anzahl an Anfragen erreicht. Bitte später erneut versuchen.", + "error_rate_limit_title": "Rate Limit Überschritten", "expand_rows": "Zeilen erweitern", "finish": "Fertigstellen", "follow_these": "Folge diesen", @@ -232,11 +244,9 @@ "label": "Bezeichnung", "language": "Sprache", "learn_more": "Mehr erfahren", - "license": "Lizenz", "light_overlay": "Helle Überlagerung", "limits_reached": "Limits erreicht", "link": "Link", - "link_and_email": "Link & E-Mail", "link_survey": "Link-Umfrage", "link_surveys": "Umfragen verknüpfen", "load_more": "Mehr laden", @@ -252,18 +262,20 @@ "membership_not_found": "Mitgliedschaft nicht gefunden", "metadata": "Metadaten", "minimum": "Minimum", - "mobile_overlay_text": "Formbricks ist für Geräte mit kleineren Auflösungen nicht verfügbar.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks funktioniert am besten auf einem größeren Bildschirm. Um Umfragen zu verwalten oder zu erstellen, wechsle zu einem anderen Gerät.", + "mobile_overlay_surveys_look_good": "Keine Sorge – deine Umfragen sehen auf jedem Gerät und jeder Bildschirmgröße großartig aus!", + "mobile_overlay_title": "Oops, Bildschirm zu klein erkannt!", "move_down": "Nach unten bewegen", "move_up": "Nach oben bewegen", "multiple_languages": "Mehrsprachigkeit", "name": "Name", "new": "Neu", - "new_survey": "Neue Umfrage", "new_version_available": "Formbricks {version} ist da. Jetzt aktualisieren!", "next": "Weiter", "no_background_image_found": "Kein Hintergrundbild gefunden.", "no_code": "No Code", "no_files_uploaded": "Keine Dateien hochgeladen", + "no_quotas_found": "Keine Kontingente gefunden", "no_result_found": "Kein Ergebnis gefunden", "no_results": "Keine Ergebnisse", "no_surveys_found": "Keine Umfragen gefunden.", @@ -283,6 +295,7 @@ "organization": "Organisation", "organization_id": "Organisations-ID", "organization_not_found": "Organisation nicht gefunden", + "organization_settings": "Organisationseinstellungen", "organization_teams_not_found": "Organisations-Teams nicht gefunden", "other": "Andere", "others": "Andere", @@ -306,7 +319,8 @@ "product_manager": "Produktmanager", "profile": "Profil", "profile_id": "Profil-ID", - "project_configuration": "Projektkonfiguration", + "progress": "Fortschritt", + "project_configuration": "Projekteinstellungen", "project_creation_description": "Organisieren Sie Umfragen in Projekten für eine bessere Zugriffskontrolle.", "project_id": "Projekt-ID", "project_name": "Projektname", @@ -317,6 +331,9 @@ "question": "Frage", "question_id": "Frage-ID", "questions": "Fragen", + "quota": "Kontingent", + "quotas": "Quoten", + "quotas_description": "Begrenze die Anzahl der Antworten, die du von Teilnehmern erhältst, die bestimmte Kriterien erfüllen.", "read_docs": "Dokumentation lesen", "recipients": "Empfänger", "remove": "Entfernen", @@ -335,7 +352,6 @@ "save": "Speichern", "save_changes": "Änderungen speichern", "saving": "Speichern", - "scheduled": "Geplant", "search": "Suchen", "security": "Sicherheit", "segment": "Segment", @@ -365,6 +381,7 @@ "start_free_trial": "Kostenlos starten", "status": "Status", "step_by_step_manual": "Schritt-für-Schritt-Anleitung", + "storage_not_configured": "Dateispeicher nicht eingerichtet, Uploads werden wahrscheinlich fehlschlagen", "styling": "Styling", "submit": "Abschicken", "summary": "Zusammenfassung", @@ -375,10 +392,8 @@ "survey_live": "Umfrage live", "survey_not_found": "Umfrage nicht gefunden", "survey_paused": "Umfrage pausiert.", - "survey_scheduled": "Umfrage geplant.", "survey_type": "Umfragetyp", "surveys": "Umfragen", - "switch_organization": "Organisation wechseln", "switch_to": "Wechseln zu {environment}", "table_items_deleted_successfully": "{type}s erfolgreich gelöscht", "table_settings": "Tabelleinstellungen", @@ -576,8 +591,7 @@ "contacts_table_refresh": "Kontakte aktualisieren", "contacts_table_refresh_success": "Kontakte erfolgreich aktualisiert", "delete_contact_confirmation": "Dies wird alle Umfrageantworten und Kontaktattribute löschen, die mit diesem Kontakt verbunden sind. Jegliche zielgerichtete Kommunikation und Personalisierung basierend auf den Daten dieses Kontakts gehen verloren.", - "first_name": "Vorname", - "last_name": "Nachname", + "delete_contact_confirmation_with_quotas": "{value, plural, other {Dies wird alle Umfrageantworten und Kontaktattribute löschen, die mit diesem Kontakt verbunden sind. Jegliche zielgerichtete Kommunikation und Personalisierung basierend auf den Daten dieses Kontakts gehen verloren. Wenn dieser Kontakt Antworten hat, die zu den Umfragequoten zählen, werden die Quotenstände reduziert, aber die Quotenlimits bleiben unverändert.}}", "no_responses_found": "Keine Antworten gefunden", "not_provided": "Nicht angegeben", "search_contact": "Kontakt suchen", @@ -738,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Zugriffskontrolle", "add_api_key": "API-Schlüssel hinzufügen", "api_key": "API-Schlüssel", "api_key_copied_to_clipboard": "API-Schlüssel in die Zwischenablage kopiert", @@ -747,7 +760,6 @@ "api_key_label": "API-Schlüssel Label", "api_key_security_warning": "Aus Sicherheitsgründen wird der API-Schlüssel nur einmal nach der Erstellung angezeigt. Bitte kopiere ihn sofort an einen sicheren Ort.", "api_key_updated": "API-Schlüssel aktualisiert", - "delete_permission": "Berechtigung löschen", "duplicate_access": "Doppelter Projektzugriff nicht erlaubt", "no_api_keys_yet": "Du hast noch keine API-Schlüssel", "no_env_permissions_found": "Keine Umgebungsberechtigungen gefunden", @@ -759,45 +771,21 @@ "unable_to_delete_api_key": "API-Schlüssel kann nicht gelöscht werden" }, "app-connection": { - "api_host_description": "Dies ist die URL deines Formbricks Backends.", "app_connection": "App-Verbindung", "app_connection_description": "Verbinde deine App mit Formbricks.", "cache_update_delay_description": "Wenn du Aktualisierungen an Umfragen, Kontakten, Aktionen oder anderen Daten vornimmst, kann es bis zu 5 Minuten dauern, bis diese Änderungen in deiner lokalen App, die das Formbricks SDK verwendet, angezeigt werden. Diese Verzögerung ist auf eine Einschränkung unseres aktuellen Caching-Systems zurückzuführen. Wir arbeiten aktiv an einer Überarbeitung des Cache und werden in Formbricks 4.0 eine Lösung veröffentlichen.", "cache_update_delay_title": "Änderungen werden aufgrund von Caching nach 5 Minuten angezeigt", - "check_out_the_docs": "Schau dir die Docs an.", - "dive_into_the_docs": "Tauch in die Docs ein.", - "does_your_widget_work": "Funktioniert dein Widget?", "environment_id": "Deine Umgebungs-ID", "environment_id_description": "Diese ID identifiziert eindeutig diese Formbricks Umgebung.", - "environment_id_description_with_environment_id": "Wird verwendet, um die richtige Umgebung zu identifizieren: {environmentId} ist deine.", - "formbricks_sdk": "Formbricks SDK", "formbricks_sdk_connected": "Formbricks SDK ist verbunden", "formbricks_sdk_not_connected": "Formbricks SDK ist noch nicht verbunden.", "formbricks_sdk_not_connected_description": "Verbinde deine Website oder App mit Formbricks", - "have_a_problem": "Hast Du ein Problem?", "how_to_setup": "Wie einrichten", "how_to_setup_description": "Befolge diese Schritte, um das Formbricks Widget in deiner App einzurichten.", - "identifying_your_users": "deine Nutzer identifizieren", - "if_you_are_planning_to": "Wenn Du planst zu", - "insert_this_code_into_the": "Füge diesen Code in die", - "need_a_more_detailed_setup_guide_for": "Brauche eine detailliertere Anleitung für", - "not_working": "Klappt nicht?", - "open_an_issue_on_github": "Eine Issue auf GitHub öffnen", - "open_the_browser_console_to_see_the_logs": "Öffne die Browser Konsole, um die Logs zu sehen.", "receiving_data": "Daten werden empfangen \uD83D\uDC83\uD83D\uDD7A", "recheck": "Erneut prüfen", - "scroll_to_the_top": "Scroll nach oben!", - "step_1": "Schritt 1: Installiere mit pnpm, npm oder yarn", - "step_2": "Schritt 2: Widget initialisieren", - "step_2_description": "Importiere Formbricks und initialisiere das Widget in deiner Komponente (z.B. App.tsx):", - "step_3": "Schritt 3: Debug-Modus", - "switch_on_the_debug_mode_by_appending": "Schalte den Debug-Modus ein, indem Du anhängst", - "tag_of_your_app": "Tag deiner App", - "to_the_url_where_you_load_the": "URL, wo Du die lädst", - "want_to_learn_how_to_add_user_attributes": "Willst Du lernen, wie man Attribute hinzufügt?", - "you_are_done": "Du bist fertig \uD83C\uDF89", - "you_can_set_the_user_id_with": "du kannst die Benutzer-ID festlegen mit", - "your_app_now_communicates_with_formbricks": "Deine App kommuniziert jetzt mit Formbricks - sie sendet Ereignisse und lädt Umfragen automatisch!" + "setup_alert_description": "Befolge dieses Schritt-für-Schritt-Tutorial, um deine App oder Website in weniger als 5 Minuten zu verbinden.", + "setup_alert_title": "Wie man verbindet" }, "general": { "cannot_delete_only_project": "Dies ist dein einziges Projekt, es kann nicht gelöscht werden. Erstelle zuerst ein neues Projekt.", @@ -989,7 +977,6 @@ "free": "Kostenlos", "free_description": "Unbegrenzte Umfragen, Teammitglieder und mehr.", "get_2_months_free": "2 Monate gratis", - "get_in_touch": "Kontaktiere uns", "hosted_in_frankfurt": "Gehostet in Frankfurt", "ios_android_sdks": "iOS & Android SDK für mobile Umfragen", "link_surveys": "Umfragen verlinken (teilbar)", @@ -1251,9 +1238,7 @@ "automatically_close_survey_after": "Umfrage automatisch schließen nach", "automatically_close_the_survey_after_a_certain_number_of_responses": "Schließe die Umfrage automatisch nach einer bestimmten Anzahl von Antworten.", "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Schließe die Umfrage automatisch, wenn der Benutzer nach einer bestimmten Anzahl von Sekunden nicht antwortet.", - "automatically_closes_the_survey_at_the_beginning_of_the_day_utc": "Schließt die Umfrage automatisch zu Beginn des Tages (UTC).", "automatically_mark_the_survey_as_complete_after": "Umfrage automatisch als abgeschlossen markieren nach", - "automatically_release_the_survey_at_the_beginning_of_the_day_utc": "Umfrage automatisch zu Beginn des Tages (UTC) freigeben.", "back_button_label": "Zurück\"- Button ", "background_styling": "Hintergründe", "brand_color": "Markenfarbe", @@ -1301,14 +1286,13 @@ "choose_the_actions_which_trigger_the_survey": "Aktionen auswählen, die die Umfrage auslösen.", "choose_where_to_run_the_survey": "Wähle, wo die Umfrage durchgeführt werden soll.", "city": "Stadt", - "close_survey_on_date": "Umfrage am Datum schließen", "close_survey_on_response_limit": "Umfrage bei Erreichen des Antwortlimits schließen", "color": "Farbe", "column_used_in_logic_error": "Diese Spalte wird in der Logik der Frage {questionIndex} verwendet. Bitte entferne sie zuerst aus der Logik.", "columns": "Spalten", "company": "Firma", "company_logo": "Firmenlogo", - "completed_responses": "unvollständige oder vollständige Antworten.", + "completed_responses": "Abgeschlossene Antworten.", "concat": "Verketten +", "conditional_logic": "Bedingte Logik", "confirm_default_language": "Standardsprache bestätigen", @@ -1348,6 +1332,7 @@ "end_screen_card": "Abschluss-Karte", "ending_card": "Abschluss-Karte", "ending_card_used_in_logic": "Diese Abschlusskarte wird in der Logik der Frage {questionIndex} verwendet.", + "ending_used_in_quota": "Dieses Ende wird in der \"{quotaName}\" Quote verwendet", "ends_with": "endet mit", "equals": "Gleich", "equals_one_of": "Entspricht einem von", @@ -1358,6 +1343,7 @@ "fallback_for": "Ersatz für", "fallback_missing": "Fehlender Fallback", "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{fieldId} wird in der Logik der Frage {questionIndex} verwendet. Bitte entferne es zuerst aus der Logik.", + "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "Verstecktes Feld \"{fieldId}\" wird in der \"{quotaName}\" Quote verwendet", "field_name_eg_score_price": "Feldname z.B. Punktzahl, Preis", "first_name": "Vorname", "five_points_recommended": "5 Punkte (empfohlen)", @@ -1389,8 +1375,9 @@ "follow_ups_modal_action_subject_placeholder": "Betreff der E-Mail", "follow_ups_modal_action_to_description": "Empfänger-E-Mail-Adresse", "follow_ups_modal_action_to_label": "An", - "follow_ups_modal_action_to_warning": "Kein E-Mail-Feld in der Umfrage gefunden.", + "follow_ups_modal_action_to_warning": "Keine gültigen Optionen für den Versand von E-Mails gefunden, bitte fügen Sie einige Freitext- / Kontaktinformationen-Fragen oder versteckte Felder hinzu", "follow_ups_modal_create_heading": "Neues Follow-up erstellen", + "follow_ups_modal_created_successfull_toast": "Nachverfolgung erstellt und wird gespeichert, sobald du die Umfrage speicherst.", "follow_ups_modal_edit_heading": "Follow-up bearbeiten", "follow_ups_modal_edit_no_id": "Keine Survey Follow-up-ID angegeben, das Survey-Follow-up kann nicht aktualisiert werden", "follow_ups_modal_name_label": "Name des Follow-ups", @@ -1400,8 +1387,9 @@ "follow_ups_modal_trigger_label": "Auslöser", "follow_ups_modal_trigger_type_ending": "Teilnehmer sieht einen bestimmten Abschluss", "follow_ups_modal_trigger_type_ending_select": "Abschlüsse auswählen: ", - "follow_ups_modal_trigger_type_ending_warning": "Keine Abschlüsse in der Umfrage gefunden!", + "follow_ups_modal_trigger_type_ending_warning": "Bitte wähle mindestens ein Ende aus oder ändere den Auslöser-Typ", "follow_ups_modal_trigger_type_response": "Teilnehmer schließt Umfrage ab", + "follow_ups_modal_updated_successfull_toast": "Nachverfolgung aktualisiert und wird gespeichert, sobald du die Umfrage speicherst.", "follow_ups_new": "Neues Follow-up", "follow_ups_upgrade_button_text": "Upgrade, um Follow-ups zu aktivieren", "form_styling": "Umfrage Styling", @@ -1502,6 +1490,38 @@ "question_duplicated": "Frage dupliziert.", "question_id_updated": "Frage-ID aktualisiert", "question_used_in_logic": "Diese Frage wird in der Logik der Frage {questionIndex} verwendet.", + "question_used_in_quota": "Diese Frage wird in der \"{quotaName}\" Quote verwendet", + "quotas": { + "add_quota": "Quote hinzufügen", + "change_quota_for_public_survey": "Quote für öffentliche Umfrage ändern?", + "confirm_quota_changes": "Änderungen der Quoten bestätigen", + "confirm_quota_changes_body": "Du hast ungespeicherte Änderungen in deinem Kontingent. Möchtest Du sie speichern, bevor Du gehst?", + "continue_survey_normally": "Umfrage normal fortsetzen", + "count_partial_submissions": "Teilweise Abgaben zählen", + "count_partial_submissions_description": "Einschließlich Teilnehmer, die die Quotenanforderungen erfüllen, aber die Umfrage nicht abgeschlossen haben", + "create_quota_for_public_survey": "Quote für öffentliche Umfrage erstellen?", + "create_quota_for_public_survey_description": "Nur zukünftige Antworten werden für das Kontingent berücksichtigt", + "create_quota_for_public_survey_text": "Diese Umfrage ist bereits öffentlich. Bestehende Antworten werden für die neue Quote nicht berücksichtigt.", + "delete_quota_confirmation_text": "Dies wird die Quote {quotaName} dauerhaft löschen.", + "duplicate_quota": "Duplizieren der Quote", + "edit_quota": "Bearbeite Quote", + "end_survey_for_matching_participants": "Umfrage für passende Teilnehmer beenden", + "inclusion_criteria": "Einschlusskriterien", + "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, other {Limit muss größer oder gleich der Anzahl der Antworten sein}}", + "limited_to_x_responses": "Begrenzt auf {limit}", + "new_quota": "Neues Kontingent", + "quota_created_successfull_toast": "Kontingent erfolgreich erstellt", + "quota_deleted_successfull_toast": "Kontingent erfolgreich gelöscht", + "quota_duplicated_successfull_toast": "Kontingent erfolgreich dupliziert", + "quota_name_placeholder": "z.B., Teilnehmende im Alter von 18-25", + "quota_updated_successfull_toast": "Kontingent erfolgreich aktualisiert", + "response_limit": "Grenzen", + "save_changes_confirmation_body": "Jegliche Änderungen an den Einschlusskriterien betreffen nur zukünftige Antworten.\nWir empfehlen, entweder ein bestehendes Kontingent zu duplizieren oder ein neues zu erstellen.", + "save_changes_confirmation_text": "Vorhandene Antworten bleiben im Kontingent", + "select_ending_card": "Abschlusskarte auswählen", + "upgrade_prompt_title": "Verwende Quoten mit einem höheren Plan", + "when_quota_has_been_reached": "Wenn das Kontingent erreicht ist" + }, "randomize_all": "Alle Optionen zufällig anordnen", "randomize_all_except_last": "Alle Optionen zufällig anordnen außer der letzten", "range": "Reichweite", @@ -1509,7 +1529,6 @@ "redirect_thank_you_card": "Weiterleitung anlegen", "redirect_to_url": "Zu URL weiterleiten", "redirect_to_url_not_available_on_free_plan": "Umleitung zu URL ist im kostenlosen Plan nicht verfügbar", - "release_survey_on_date": "Umfrage an Datum veröffentlichen", "remove_description": "Beschreibung entfernen", "remove_translations": "Übersetzungen entfernen", "require_answer": "Antwort erforderlich", @@ -1596,6 +1615,7 @@ "url_not_supported": "URL nicht unterstützt", "use_with_caution": "Mit Vorsicht verwenden", "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{variable} wird in der Logik der Frage {questionIndex} verwendet. Bitte entferne es zuerst aus der Logik.", + "variable_is_used_in_quota_please_remove_it_from_quota_first": "Variable \"{variableName}\" wird in der \"{quotaName}\" Quote verwendet", "variable_name_is_already_taken_please_choose_another": "Variablenname ist bereits vergeben, bitte wähle einen anderen.", "variable_name_must_start_with_a_letter": "Variablenname muss mit einem Buchstaben beginnen.", "verify_email_before_submission": "E-Mail vor dem Absenden überprüfen", @@ -1630,11 +1650,14 @@ "address_line_2": "Adresszeile 2", "an_error_occurred_deleting_the_tag": "Beim Löschen des Tags ist ein Fehler aufgetreten", "browser": "Browser", + "bulk_delete_response_quotas": "Die Antworten sind Teil der Quoten für diese Umfrage. Wie möchten Sie die Quoten verwalten?", "city": "Stadt", "company": "Firma", "completed": "Erledigt ✅", "country": "Land", + "decrement_quotas": "Alle Grenzwerte der Kontingente einschließlich dieser Antwort verringern", "delete_response_confirmation": "Dies wird die Umfrageantwort einschließlich aller Antworten, Tags, angehängter Dokumente und Antwort-Metadaten löschen.", + "delete_response_quotas": "Die Antwort ist Teil der Quoten für diese Umfrage. Wie möchten Sie die Quoten verwalten?", "device": "Gerät", "device_info": "Geräteinfo", "email": "E-Mail", @@ -1766,6 +1789,7 @@ "configure_alerts": "Benachrichtigungen konfigurieren", "congrats": "Glückwunsch! Deine Umfrage ist jetzt live.", "connect_your_website_or_app_with_formbricks_to_get_started": "Verbinde deine Website oder App mit Formbricks, um loszulegen.", + "current_count": "Aktuelle Anzahl", "custom_range": "Benutzerdefinierter Bereich...", "delete_all_existing_responses_and_displays": "Alle bestehenden Antworten und Anzeigen löschen", "download_qr_code": "QR Code herunterladen", @@ -1819,6 +1843,7 @@ "last_month": "Letztes Monat", "last_quarter": "Letztes Quartal", "last_year": "Letztes Jahr", + "limit": "Limit", "no_responses_found": "Keine Antworten gefunden", "other_values_found": "Andere Werte gefunden", "overall": "Insgesamt", @@ -1827,6 +1852,8 @@ "qr_code_download_failed": "QR-Code-Download fehlgeschlagen", "qr_code_download_with_start_soon": "QR Code-Download startet bald", "qr_code_generation_failed": "Es gab ein Problem beim Laden des QR-Codes für die Umfrage. Bitte versuchen Sie es erneut.", + "quotas_completed": "Kontingente abgeschlossen", + "quotas_completed_tooltip": "Die Anzahl der von den Befragten abgeschlossenen Quoten.", "reset_survey": "Umfrage zurücksetzen", "reset_survey_warning": "Das Zurücksetzen einer Umfrage entfernt alle Antworten und Anzeigen, die mit dieser Umfrage verbunden sind. Dies kann nicht rückgängig gemacht werden.", "selected_responses_csv": "Ausgewählte Antworten (CSV)", @@ -1842,7 +1869,7 @@ "this_quarter": "Dieses Quartal", "this_year": "Dieses Jahr", "time_to_complete": "Zeit zur Fertigstellung", - "ttc_tooltip": "Durchschnittliche Zeit bis zum Abschluss der Umfrage.", + "ttc_tooltip": "Durchschnittliche Zeit zum Beantworten der Frage.", "unknown_question_type": "Unbekannter Fragetyp", "use_personal_links": "Nutze persönliche Links", "waiting_for_response": "Warte auf eine Antwort \uD83E\uDDD8‍♂️", @@ -1853,7 +1880,6 @@ "survey_deleted_successfully": "Umfrage erfolgreich gelöscht", "survey_duplicated_successfully": "Umfrage erfolgreich dupliziert", "survey_duplication_error": "Duplizieren der Umfrage fehlgeschlagen", - "survey_status_tooltip": "Um den Umfragestatus zu aktualisieren, aktualisiere den Zeitplan in den Umfrageoptionen.", "templates": { "all_channels": "Alle Kanäle", "all_industries": "Alle Branchen", diff --git a/apps/web/locales/en-US.json b/apps/web/locales/en-US.json index 740e5d30cc..8a94221dc7 100644 --- a/apps/web/locales/en-US.json +++ b/apps/web/locales/en-US.json @@ -118,6 +118,7 @@ "account_settings": "Account settings", "action": "Action", "actions": "Actions", + "actions_description": "Code and No-Code Actions are used to trigger intercept surveys within apps & on websites.", "active_surveys": "Active surveys", "activity": "Activity", "add": "Add", @@ -125,6 +126,7 @@ "add_filter": "Add filter", "add_logo": "Add logo", "add_member": "Add member", + "add_new_project": "Add new project", "add_project": "Add project", "add_to_team": "Add to team", "all": "All", @@ -149,6 +151,9 @@ "cancel": "Cancel", "centered_modal": "Centered Modal", "choices": "Choices", + "choose_environment": "Choose environment", + "choose_organization": "Choose organization", + "choose_project": "Choose project", "clear_all": "Clear all", "clear_filters": "Clear filters", "clear_selection": "Clear selection", @@ -164,11 +169,14 @@ "connect_formbricks": "Connect Formbricks", "connected": "Connected", "contacts": "Contacts", + "continue": "Continue", "copied": "Copied", "copied_to_clipboard": "Copied to clipboard", "copy": "Copy", "copy_code": "Copy code", "copy_link": "Copy Link", + "count_contacts": "{value, plural, one {{value} contact} other {{value} contacts}}", + "count_responses": "{value, plural, one {{value} response} other {{value} responses}}", "create_new_organization": "Create new organization", "create_project": "Create project", "create_segment": "Create segment", @@ -177,7 +185,6 @@ "created_at": "Created at", "created_by": "Created by", "customer_success": "Customer Success", - "danger_zone": "Danger Zone", "dark_overlay": "Dark overlay", "date": "Date", "default": "Default", @@ -197,10 +204,15 @@ "e_commerce": "E-Commerce", "edit": "Edit", "email": "Email", + "ending_card": "Ending card", "enterprise_license": "Enterprise License", "environment_not_found": "Environment not found", "environment_notice": "You're currently in the {environment} environment.", "error": "Error", + "error_component_description": "This resource doesn't exist or you don't have the necessary rights to access it.", + "error_component_title": "Error loading resources", + "error_rate_limit_description": "Maximum number of requests reached. Please try again later.", + "error_rate_limit_title": "Rate Limit Exceeded", "expand_rows": "Expand rows", "finish": "Finish", "follow_these": "Follow these", @@ -232,11 +244,9 @@ "label": "Label", "language": "Language", "learn_more": "Learn more", - "license": "License", "light_overlay": "Light overlay", "limits_reached": "Limits Reached", "link": "Link", - "link_and_email": "Link & Email", "link_survey": "Link Survey", "link_surveys": "Link Surveys", "load_more": "Load more", @@ -252,18 +262,20 @@ "membership_not_found": "Membership not found", "metadata": "Metadata", "minimum": "Minimum", - "mobile_overlay_text": "Formbricks is not available for devices with smaller resolutions.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks works best on a bigger screen. To manage or build surveys, switch to another device.", + "mobile_overlay_surveys_look_good": "Don't worry – your surveys look great on every device and screen size!", + "mobile_overlay_title": "Oops, tiny screen detected!", "move_down": "Move down", "move_up": "Move up", "multiple_languages": "Multiple languages", "name": "Name", "new": "New", - "new_survey": "New Survey", "new_version_available": "Formbricks {version} is here. Upgrade now!", "next": "Next", "no_background_image_found": "No background image found.", "no_code": "No code", "no_files_uploaded": "No files were uploaded", + "no_quotas_found": "No quotas found", "no_result_found": "No result found", "no_results": "No results", "no_surveys_found": "No surveys found.", @@ -283,6 +295,7 @@ "organization": "Organization", "organization_id": "Organization ID", "organization_not_found": "Organization not found", + "organization_settings": "Organization settings", "organization_teams_not_found": "Organization teams not found", "other": "Other", "others": "Others", @@ -306,7 +319,8 @@ "product_manager": "Product Manager", "profile": "Profile", "profile_id": "Profile ID", - "project_configuration": "Project's Configuration", + "progress": "Progress", + "project_configuration": "Project Configuration", "project_creation_description": "Organize surveys in projects for better access control.", "project_id": "Project ID", "project_name": "Project Name", @@ -317,6 +331,9 @@ "question": "Question", "question_id": "Question ID", "questions": "Questions", + "quota": "Quota", + "quotas": "Quotas", + "quotas_description": "Limit the amount of responses you receive from participants who meet certain criteria.", "read_docs": "Read Docs", "recipients": "Recipients", "remove": "Remove", @@ -335,7 +352,6 @@ "save": "Save", "save_changes": "Save changes", "saving": "Saving", - "scheduled": "Scheduled", "search": "Search", "security": "Security", "segment": "Segment", @@ -365,6 +381,7 @@ "start_free_trial": "Start Free Trial", "status": "Status", "step_by_step_manual": "Step by step manual", + "storage_not_configured": "File storage not set up, uploads will likely fail", "styling": "Styling", "submit": "Submit", "summary": "Summary", @@ -375,10 +392,8 @@ "survey_live": "Survey live", "survey_not_found": "Survey not found", "survey_paused": "Survey paused.", - "survey_scheduled": "Survey scheduled.", "survey_type": "Survey Type", "surveys": "Surveys", - "switch_organization": "Switch organization", "switch_to": "Switch to {environment}", "table_items_deleted_successfully": "{type}s deleted successfully", "table_settings": "Table settings", @@ -576,8 +591,7 @@ "contacts_table_refresh": "Refresh contacts", "contacts_table_refresh_success": "Contacts refreshed successfully", "delete_contact_confirmation": "This will delete all survey responses and contact attributes associated with this contact. Any targeting and personalization based on this contact's data will be lost.", - "first_name": "First Name", - "last_name": "Last Name", + "delete_contact_confirmation_with_quotas": "{value, plural, one {This will delete all survey responses and contact attributes associated with this contact. Any targeting and personalization based on this contact's data will be lost. If this contact has responses that count towards survey quotas, the quota counts will be reduced but the quota limits will remain unchanged.} other {This will delete all survey responses and contact attributes associated with these contacts. Any targeting and personalization based on these contacts' data will be lost. If these contacts have responses that count towards survey quotas, the quota counts will be reduced but the quota limits will remain unchanged.}}", "no_responses_found": "No responses found", "not_provided": "Not provided", "search_contact": "Search contact", @@ -738,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Access Control", "add_api_key": "Add API Key", "api_key": "API Key", "api_key_copied_to_clipboard": "API key copied to clipboard", @@ -747,7 +760,6 @@ "api_key_label": "API Key Label", "api_key_security_warning": "For security reasons, the API key will only be shown once after creation. Please copy it to your destination right away.", "api_key_updated": "API Key updated", - "delete_permission": "Delete permission", "duplicate_access": "Duplicate project access not allowed", "no_api_keys_yet": "You don't have any API keys yet", "no_env_permissions_found": "No environment permissions found", @@ -759,45 +771,21 @@ "unable_to_delete_api_key": "Unable to delete API Key" }, "app-connection": { - "api_host_description": "This is the URL of your Formbricks backend.", "app_connection": "App Connection", "app_connection_description": "Connect your app to Formbricks.", "cache_update_delay_description": "When you make updates to surveys, contacts, actions, or other data, it can take up to 5 minutes for those changes to appear in your local app running the Formbricks SDK. This delay is due to a limitation in our current caching system. We’re actively reworking the cache and will release a fix in Formbricks 4.0.", "cache_update_delay_title": "Changes will be reflected after 5 minutes due to caching", - "check_out_the_docs": "Check out the docs.", - "dive_into_the_docs": "Dive into the docs.", - "does_your_widget_work": "Does your widget work?", - "environment_id": "Your EnvironmentId", + "environment_id": "Your Environment ID", "environment_id_description": "This id uniquely identifies this Formbricks environment.", - "environment_id_description_with_environment_id": "Used to identify the correct environment: {environmentId} is yours.", - "formbricks_sdk": "Formbricks SDK", "formbricks_sdk_connected": "Formbricks SDK is connected", "formbricks_sdk_not_connected": "Formbricks SDK is not yet connected.", "formbricks_sdk_not_connected_description": "Connect your website or app with Formbricks", - "have_a_problem": "Have a problem?", "how_to_setup": "How to setup", "how_to_setup_description": "Follow these steps to setup the Formbricks widget within your app.", - "identifying_your_users": "identifying your users", - "if_you_are_planning_to": "If you are planning to", - "insert_this_code_into_the": "Insert this code into the", - "need_a_more_detailed_setup_guide_for": "Need a more detailed setup guide for", - "not_working": "Not working?", - "open_an_issue_on_github": "Open an issue on GitHub", - "open_the_browser_console_to_see_the_logs": "Open the browser console to see the logs.", "receiving_data": "Receiving data \uD83D\uDC83\uD83D\uDD7A", "recheck": "Re-check", - "scroll_to_the_top": "Scroll to the top!", - "step_1": "Step 1: Install with pnpm, npm or yarn", - "step_2": "Step 2: Initialize widget", - "step_2_description": "Import Formbricks and initialize the widget in your Component (e.g. App.tsx):", - "step_3": "Step 3: Debug mode", - "switch_on_the_debug_mode_by_appending": "Switch on the debug mode by appending", - "tag_of_your_app": "tag of your app", - "to_the_url_where_you_load_the": "to the URL where you load the", - "want_to_learn_how_to_add_user_attributes": "Want to learn how to add user attributes, custom events and more?", - "you_are_done": "You're done \uD83C\uDF89", - "you_can_set_the_user_id_with": "you can set the user id with", - "your_app_now_communicates_with_formbricks": "Your app now communicates with Formbricks - sending events, and loading surveys automatically!" + "setup_alert_description": "Follow this step-by-step tutorial to connect your app or website in under 5 minutes.", + "setup_alert_title": "How to connect" }, "general": { "cannot_delete_only_project": "This is your only project, it cannot be deleted. Create a new project first.", @@ -989,7 +977,6 @@ "free": "Free", "free_description": "Unlimited Surveys, Team Members, and more.", "get_2_months_free": "Get 2 months free", - "get_in_touch": "Get in touch", "hosted_in_frankfurt": "Hosted in Frankfurt", "ios_android_sdks": "iOS & Android SDK for mobile surveys", "link_surveys": "Link Surveys (Shareable)", @@ -1251,9 +1238,7 @@ "automatically_close_survey_after": "Automatically close survey after", "automatically_close_the_survey_after_a_certain_number_of_responses": "Automatically close the survey after a certain number of responses.", "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Automatically close the survey if the user does not respond after certain number of seconds.", - "automatically_closes_the_survey_at_the_beginning_of_the_day_utc": "Automatically closes the survey at the beginning of the day (UTC).", "automatically_mark_the_survey_as_complete_after": "Automatically mark the survey as complete after", - "automatically_release_the_survey_at_the_beginning_of_the_day_utc": "Automatically release the survey at the beginning of the day (UTC).", "back_button_label": "\"Back\" Button Label", "background_styling": "Background Styling", "brand_color": "Brand color", @@ -1301,14 +1286,13 @@ "choose_the_actions_which_trigger_the_survey": "Choose the actions which trigger the survey.", "choose_where_to_run_the_survey": "Choose where to run the survey.", "city": "City", - "close_survey_on_date": "Close survey on date", "close_survey_on_response_limit": "Close survey on response limit", "color": "Color", "column_used_in_logic_error": "This column is used in logic of question {questionIndex}. Please remove it from logic first.", "columns": "Columns", "company": "Company", "company_logo": "Company logo", - "completed_responses": "partial or completed responses.", + "completed_responses": "completed responses.", "concat": "Concat +", "conditional_logic": "Conditional Logic", "confirm_default_language": "Confirm default language", @@ -1348,6 +1332,7 @@ "end_screen_card": "End screen card", "ending_card": "Ending card", "ending_card_used_in_logic": "This ending card is used in logic of question {questionIndex}.", + "ending_used_in_quota": "This ending is being used in \"{quotaName}\" quota", "ends_with": "Ends with", "equals": "Equals", "equals_one_of": "Equals one of", @@ -1358,6 +1343,7 @@ "fallback_for": "Fallback for ", "fallback_missing": "Fallback missing", "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{fieldId} is used in logic of question {questionIndex}. Please remove it from logic first.", + "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "Hidden field \"{fieldId}\" is being used in \"{quotaName}\" quota", "field_name_eg_score_price": "Field name e.g, score, price", "first_name": "First Name", "five_points_recommended": "5 points (recommended)", @@ -1389,8 +1375,9 @@ "follow_ups_modal_action_subject_placeholder": "Subject of the email", "follow_ups_modal_action_to_description": "Email address to send the email to", "follow_ups_modal_action_to_label": "To", - "follow_ups_modal_action_to_warning": "No email field detected in the survey", + "follow_ups_modal_action_to_warning": "No valid options found for sending emails, please add some open-text / contact-info questions or hidden fields", "follow_ups_modal_create_heading": "Create a new follow-up", + "follow_ups_modal_created_successfull_toast": "Follow-up created and will be saved once you save the survey.", "follow_ups_modal_edit_heading": "Edit this follow-up", "follow_ups_modal_edit_no_id": "No survey follow up id provided, can't update the survey follow up", "follow_ups_modal_name_label": "Follow-up name", @@ -1400,8 +1387,9 @@ "follow_ups_modal_trigger_label": "Trigger", "follow_ups_modal_trigger_type_ending": "Respondent sees a specific ending", "follow_ups_modal_trigger_type_ending_select": "Select endings: ", - "follow_ups_modal_trigger_type_ending_warning": "No endings found in the survey!", + "follow_ups_modal_trigger_type_ending_warning": "Please select at least one ending or change the trigger type", "follow_ups_modal_trigger_type_response": "Respondent completes survey", + "follow_ups_modal_updated_successfull_toast": "Follow-up updated and will be saved once you save the survey.", "follow_ups_new": "New follow-up", "follow_ups_upgrade_button_text": "Upgrade to enable follow-ups", "form_styling": "Form styling", @@ -1502,6 +1490,38 @@ "question_duplicated": "Question duplicated.", "question_id_updated": "Question ID updated", "question_used_in_logic": "This question is used in logic of question {questionIndex}.", + "question_used_in_quota": "This question is being used in \"{quotaName}\" quota", + "quotas": { + "add_quota": "Add quota", + "change_quota_for_public_survey": "Change quota for public survey?", + "confirm_quota_changes": "Confirm quota changes", + "confirm_quota_changes_body": "You have unsaved changes in your quota. Would you like to save them before leaving?", + "continue_survey_normally": "Continue survey normally", + "count_partial_submissions": "Count partial submissions", + "count_partial_submissions_description": "Include respondents that match the quota criteria but did not complete the survey", + "create_quota_for_public_survey": "Create quota for public survey?", + "create_quota_for_public_survey_description": "Only future answers will be screened into quota", + "create_quota_for_public_survey_text": "This survey is already public. Existing responses will not be taken into account for the new quota.", + "delete_quota_confirmation_text": "This will permanently delete the quota {quotaName}.", + "duplicate_quota": "Duplicate quota", + "edit_quota": "Edit quota", + "end_survey_for_matching_participants": "End survey for matching participants", + "inclusion_criteria": "Inclusion Criteria", + "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, one {You already have {value} response for this quota, so the limit must be greater than {value}.} other {You already have {value} responses for this quota, so the limit must be greater than {value}.}}", + "limited_to_x_responses": "Limited to {limit}", + "new_quota": "New Quota", + "quota_created_successfull_toast": "Quota created successfully", + "quota_deleted_successfull_toast": "Quota deleted successfully", + "quota_duplicated_successfull_toast": "Quota duplicated successfully", + "quota_name_placeholder": "e.g., Age 18-25 participants", + "quota_updated_successfull_toast": "Quota updated successfully", + "response_limit": "Limits", + "save_changes_confirmation_body": "Any changes to the inclusion criteria only affect future responses. \nWe recommend to either duplicate an existing or create a new quota.", + "save_changes_confirmation_text": "Existing responses stay in the quota", + "select_ending_card": "Select ending card", + "upgrade_prompt_title": "Use quotas with a higher plan", + "when_quota_has_been_reached": "When quota has been reached" + }, "randomize_all": "Randomize all", "randomize_all_except_last": "Randomize all except last", "range": "Range", @@ -1509,7 +1529,6 @@ "redirect_thank_you_card": "Redirect thank you card", "redirect_to_url": "Redirect to Url", "redirect_to_url_not_available_on_free_plan": "Redirect To Url is not available on free plan", - "release_survey_on_date": "Release survey on date", "remove_description": "Remove description", "remove_translations": "Remove translations", "require_answer": "Require Answer", @@ -1596,6 +1615,7 @@ "url_not_supported": "URL not supported", "use_with_caution": "Use with caution", "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{variable} is used in logic of question {questionIndex}. Please remove it from logic first.", + "variable_is_used_in_quota_please_remove_it_from_quota_first": "Variable \"{variableName}\" is being used in \"{quotaName}\" quota", "variable_name_is_already_taken_please_choose_another": "Variable name is already taken, please choose another.", "variable_name_must_start_with_a_letter": "Variable name must start with a letter.", "verify_email_before_submission": "Verify email before submission", @@ -1630,11 +1650,14 @@ "address_line_2": "Address Line 2", "an_error_occurred_deleting_the_tag": "An error occurred deleting the tag", "browser": "Browser", + "bulk_delete_response_quotas": "The responses are part of quotas for this survey. How do you want to handle the quotas?", "city": "City", "company": "Company", "completed": "Completed ✅", "country": "Country", + "decrement_quotas": "Decrement all limits of quotas including this response", "delete_response_confirmation": "This will delete the survey response, including all answers, tags, attached documents, and response metadata.", + "delete_response_quotas": "The response is part of quotas for this survey. How do you want to handle the quotas?", "device": "Device", "device_info": "Device info", "email": "Email", @@ -1766,6 +1789,7 @@ "configure_alerts": "Configure alerts", "congrats": "Congrats! Your survey is live.", "connect_your_website_or_app_with_formbricks_to_get_started": "Connect your website or app with Formbricks to get started.", + "current_count": "Current count", "custom_range": "Custom range...", "delete_all_existing_responses_and_displays": "Delete all existing responses and displays", "download_qr_code": "Download QR code", @@ -1819,6 +1843,7 @@ "last_month": "Last month", "last_quarter": "Last quarter", "last_year": "Last year", + "limit": "Limit", "no_responses_found": "No responses found", "other_values_found": "Other values found", "overall": "Overall", @@ -1827,6 +1852,8 @@ "qr_code_download_failed": "QR code download failed", "qr_code_download_with_start_soon": "QR code download will start soon", "qr_code_generation_failed": "There was a problem, loading the survey QR Code. Please try again.", + "quotas_completed": "Quotas completed", + "quotas_completed_tooltip": "The number of quotas completed by the respondents.", "reset_survey": "Reset survey", "reset_survey_warning": "Resetting a survey removes all responses and displays associated with this survey. This cannot be undone.", "selected_responses_csv": "Selected responses (CSV)", @@ -1842,7 +1869,7 @@ "this_quarter": "This quarter", "this_year": "This year", "time_to_complete": "Time to Complete", - "ttc_tooltip": "Average time to complete the survey.", + "ttc_tooltip": "Average time to complete the question.", "unknown_question_type": "Unknown Question Type", "use_personal_links": "Use personal links", "waiting_for_response": "Waiting for a response \uD83E\uDDD8‍♂️", @@ -1853,7 +1880,6 @@ "survey_deleted_successfully": "Survey deleted successfully!", "survey_duplicated_successfully": "Survey duplicated successfully.", "survey_duplication_error": "Failed to duplicate the survey.", - "survey_status_tooltip": "To update the survey status, update the schedule and close setting in the survey response options.", "templates": { "all_channels": "All channels", "all_industries": "All industries", diff --git a/apps/web/locales/fr-FR.json b/apps/web/locales/fr-FR.json index c26c7037e2..e8f5b045e0 100644 --- a/apps/web/locales/fr-FR.json +++ b/apps/web/locales/fr-FR.json @@ -118,6 +118,7 @@ "account_settings": "Paramètres du compte", "action": "Action", "actions": "Actions", + "actions_description": "Les actions avec ou sans code sont utilisées pour déclencher des enquêtes d'interception dans les applications et sur les sites Web.", "active_surveys": "Sondages actifs", "activity": "Activité", "add": "Ajouter", @@ -125,6 +126,7 @@ "add_filter": "Ajouter un filtre", "add_logo": "Ajouter un logo", "add_member": "Ajouter un membre", + "add_new_project": "Ajouter un nouveau projet", "add_project": "Ajouter un projet", "add_to_team": "Ajouter à l'équipe", "all": "Tout", @@ -149,6 +151,9 @@ "cancel": "Annuler", "centered_modal": "Modal centré", "choices": "Choix", + "choose_environment": "Choisir l'environnement", + "choose_organization": "Choisir l'organisation", + "choose_project": "Choisir projet", "clear_all": "Tout effacer", "clear_filters": "Effacer les filtres", "clear_selection": "Effacer la sélection", @@ -164,11 +169,14 @@ "connect_formbricks": "Connecter Formbricks", "connected": "Connecté", "contacts": "Contacts", + "continue": "Continuer", "copied": "Copié", "copied_to_clipboard": "Copié dans le presse-papiers", "copy": "Copier", "copy_code": "Copier le code", "copy_link": "Copier le lien", + "count_contacts": "{value, plural, one {# contact} other {# contacts} }", + "count_responses": "{value, plural, other {# réponses}}", "create_new_organization": "Créer une nouvelle organisation", "create_project": "Créer un projet", "create_segment": "Créer un segment", @@ -177,7 +185,6 @@ "created_at": "Créé le", "created_by": "Créé par", "customer_success": "Succès Client", - "danger_zone": "Zone de danger", "dark_overlay": "Superposition sombre", "date": "Date", "default": "Par défaut", @@ -197,10 +204,15 @@ "e_commerce": "E-commerce", "edit": "Modifier", "email": "Email", + "ending_card": "Carte de fin", "enterprise_license": "Licence d'entreprise", "environment_not_found": "Environnement non trouvé", "environment_notice": "Vous êtes actuellement dans l'environnement {environment}.", "error": "Erreur", + "error_component_description": "Cette ressource n'existe pas ou vous n'avez pas les droits nécessaires pour y accéder.", + "error_component_title": "Erreur de chargement des ressources", + "error_rate_limit_description": "Nombre maximal de demandes atteint. Veuillez réessayer plus tard.", + "error_rate_limit_title": "Limite de Taux Dépassée", "expand_rows": "Développer les lignes", "finish": "Terminer", "follow_these": "Suivez ceci", @@ -232,11 +244,9 @@ "label": "Étiquette", "language": "Langue", "learn_more": "En savoir plus", - "license": "Licence", "light_overlay": "Superposition légère", "limits_reached": "Limites atteints", "link": "Lien", - "link_and_email": "Liens et e-mail", "link_survey": "Enquête de lien", "link_surveys": "Sondages de lien", "load_more": "Charger plus", @@ -252,18 +262,20 @@ "membership_not_found": "Abonnement non trouvé", "metadata": "Métadonnées", "minimum": "Min", - "mobile_overlay_text": "Formbricks n'est pas disponible pour les appareils avec des résolutions plus petites.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks fonctionne mieux sur un écran plus grand. Pour gérer ou créer des sondages, passez à un autre appareil.", + "mobile_overlay_surveys_look_good": "Ne t'inquiète pas – tes enquêtes sont superbes sur tous les appareils et tailles d'écran!", + "mobile_overlay_title": "Oups, écran minuscule détecté!", "move_down": "Déplacer vers le bas", "move_up": "Déplacer vers le haut", "multiple_languages": "Plusieurs langues", "name": "Nom", "new": "Nouveau", - "new_survey": "Nouveau Sondage", "new_version_available": "Formbricks {version} est là. Mettez à jour maintenant !", "next": "Suivant", "no_background_image_found": "Aucune image de fond trouvée.", "no_code": "Pas de code", "no_files_uploaded": "Aucun fichier n'a été téléchargé.", + "no_quotas_found": "Aucun quota trouvé", "no_result_found": "Aucun résultat trouvé", "no_results": "Aucun résultat", "no_surveys_found": "Aucun sondage trouvé.", @@ -283,6 +295,7 @@ "organization": "Organisation", "organization_id": "ID de l'organisation", "organization_not_found": "Organisation non trouvée", + "organization_settings": "Paramètres de l'organisation", "organization_teams_not_found": "Équipes d'organisation non trouvées", "other": "Autre", "others": "Autres", @@ -306,6 +319,7 @@ "product_manager": "Chef de produit", "profile": "Profil", "profile_id": "Identifiant de profil", + "progress": "Progression", "project_configuration": "Configuration du projet", "project_creation_description": "Organisez les enquêtes en projets pour un meilleur contrôle d'accès.", "project_id": "ID de projet", @@ -317,6 +331,9 @@ "question": "Question", "question_id": "ID de la question", "questions": "Questions", + "quota": "Quota", + "quotas": "Quotas", + "quotas_description": "Limitez le nombre de réponses que vous recevez de la part des participants répondant à certains critères.", "read_docs": "Lire les documents", "recipients": "Destinataires", "remove": "Retirer", @@ -335,7 +352,6 @@ "save": "Enregistrer", "save_changes": "Enregistrer les modifications", "saving": "Sauvegarder", - "scheduled": "Programmé", "search": "Recherche", "security": "Sécurité", "segment": "Segmenter", @@ -365,6 +381,7 @@ "start_free_trial": "Commencer l'essai gratuit", "status": "Statut", "step_by_step_manual": "Manuel étape par étape", + "storage_not_configured": "Stockage de fichiers non configuré, les téléchargements risquent d'échouer", "styling": "Style", "submit": "Soumettre", "summary": "Résumé", @@ -375,10 +392,8 @@ "survey_live": "Sondage en direct", "survey_not_found": "Sondage non trouvé", "survey_paused": "Sondage en pause.", - "survey_scheduled": "Sondage programmé.", "survey_type": "Type de sondage", "surveys": "Enquêtes", - "switch_organization": "Changer d'organisation", "switch_to": "Passer à {environment}", "table_items_deleted_successfully": "{type}s supprimés avec succès", "table_settings": "Réglages de table", @@ -576,8 +591,7 @@ "contacts_table_refresh": "Rafraîchir les contacts", "contacts_table_refresh_success": "Contacts rafraîchis avec succès", "delete_contact_confirmation": "Cela supprimera toutes les réponses aux enquêtes et les attributs de contact associés à ce contact. Toute la personnalisation et le ciblage basés sur les données de ce contact seront perdus.", - "first_name": "Prénom", - "last_name": "Nom de famille", + "delete_contact_confirmation_with_quotas": "{value, plural, other {Cela supprimera toutes les réponses aux enquêtes et les attributs de contact associés à ce contact. Toute la personnalisation et le ciblage basés sur les données de ce contact seront perdus. Si ce contact a des réponses qui comptent dans les quotas de l'enquête, les comptes de quotas seront réduits mais les limites de quota resteront inchangées.}}", "no_responses_found": "Aucune réponse trouvée", "not_provided": "Non fourni", "search_contact": "Rechercher un contact", @@ -738,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Contrôle d'accès", "add_api_key": "Ajouter une clé API", "api_key": "Clé API", "api_key_copied_to_clipboard": "Clé API copiée dans le presse-papiers", @@ -747,7 +760,6 @@ "api_key_label": "Étiquette de clé API", "api_key_security_warning": "Pour des raisons de sécurité, la clé API ne sera affichée qu'une seule fois après sa création. Veuillez la copier immédiatement à votre destination.", "api_key_updated": "Clé API mise à jour", - "delete_permission": "Supprimer une permission", "duplicate_access": "L'accès en double au projet n'est pas autorisé", "no_api_keys_yet": "Vous n'avez pas encore de clés API.", "no_env_permissions_found": "Aucune autorisation d'environnement trouvée", @@ -759,45 +771,21 @@ "unable_to_delete_api_key": "Impossible de supprimer la clé API" }, "app-connection": { - "api_host_description": "Ceci est l'URL de votre backend Formbricks.", "app_connection": "Connexion d'application", "app_connection_description": "Connectez votre application à Formbricks.", "cache_update_delay_description": "Lorsque vous effectuez des mises à jour sur les sondages, contacts, actions ou autres données, cela peut prendre jusqu'à 5 minutes pour que ces modifications apparaissent dans votre application locale exécutant le SDK Formbricks. Ce délai est dû à une limitation de notre système de mise en cache actuel. Nous retravaillons activement le cache et publierons une correction dans Formbricks 4.0.", "cache_update_delay_title": "Les modifications seront reflétées après 5 minutes en raison de la mise en cache", - "check_out_the_docs": "Consultez la documentation.", - "dive_into_the_docs": "Plongez dans la documentation.", - "does_your_widget_work": "Votre widget fonctionne-t-il ?", "environment_id": "Votre identifiant d'environnement", "environment_id_description": "Cet identifiant identifie de manière unique cet environnement Formbricks.", - "environment_id_description_with_environment_id": "Utilisé pour identifier l'environnement correct : {environmentId} est le vôtre.", - "formbricks_sdk": "SDK Formbricks", "formbricks_sdk_connected": "Le SDK Formbricks est connecté", "formbricks_sdk_not_connected": "Le SDK Formbricks n'est pas encore connecté.", "formbricks_sdk_not_connected_description": "Connectez votre site web ou votre application à Formbricks.", - "have_a_problem": "Vous avez un problème ?", "how_to_setup": "Comment configurer", "how_to_setup_description": "Suivez ces étapes pour configurer le widget Formbricks dans votre application.", - "identifying_your_users": "identifier vos utilisateurs", - "if_you_are_planning_to": "Si vous prévoyez de", - "insert_this_code_into_the": "Insérez ce code dans le", - "need_a_more_detailed_setup_guide_for": "Besoin d'un guide d'installation plus détaillé pour", - "not_working": "Ça ne fonctionne pas ?", - "open_an_issue_on_github": "Ouvrir un problème sur GitHub", - "open_the_browser_console_to_see_the_logs": "Ouvrez la console du navigateur pour voir les journaux.", "receiving_data": "Réception des données \uD83D\uDC83\uD83D\uDD7A", "recheck": "Re-vérifier", - "scroll_to_the_top": "Faites défiler vers le haut !", - "step_1": "Étape 1 : Installer avec pnpm, npm ou yarn", - "step_2": "Étape 2 : Initialiser le widget", - "step_2_description": "Importez Formbricks et initialisez le widget dans votre composant (par exemple, App.tsx) :", - "step_3": "Étape 3 : Mode débogage", - "switch_on_the_debug_mode_by_appending": "Activez le mode débogage en ajoutant", - "tag_of_your_app": "étiquette de votre application", - "to_the_url_where_you_load_the": "vers l'URL où vous chargez le", - "want_to_learn_how_to_add_user_attributes": "Vous voulez apprendre à ajouter des attributs utilisateur, des événements personnalisés et plus encore ?", - "you_are_done": "Vous avez terminé \uD83C\uDF89", - "you_can_set_the_user_id_with": "vous pouvez définir l'ID utilisateur avec", - "your_app_now_communicates_with_formbricks": "Votre application communique désormais avec Formbricks - envoyant des événements et chargeant des enquêtes automatiquement !" + "setup_alert_description": "Suivez ce tutoriel étape par étape pour connecter votre application ou site web en moins de 5 minutes.", + "setup_alert_title": "Comment connecter" }, "general": { "cannot_delete_only_project": "Ceci est votre seul projet, il ne peut pas être supprimé. Créez d'abord un nouveau projet.", @@ -989,7 +977,6 @@ "free": "Gratuit", "free_description": "Sondages illimités, membres d'équipe, et plus encore.", "get_2_months_free": "Obtenez 2 mois gratuits", - "get_in_touch": "Prenez contact", "hosted_in_frankfurt": "Hébergé à Francfort", "ios_android_sdks": "SDK iOS et Android pour les sondages mobiles", "link_surveys": "Sondages par lien (partageables)", @@ -1251,9 +1238,7 @@ "automatically_close_survey_after": "Fermer automatiquement l'enquête après", "automatically_close_the_survey_after_a_certain_number_of_responses": "Fermer automatiquement l'enquête après un certain nombre de réponses.", "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Fermer automatiquement l'enquête si l'utilisateur ne répond pas après un certain nombre de secondes.", - "automatically_closes_the_survey_at_the_beginning_of_the_day_utc": "Ferme automatiquement l'enquête au début de la journée (UTC).", "automatically_mark_the_survey_as_complete_after": "Marquer automatiquement l'enquête comme terminée après", - "automatically_release_the_survey_at_the_beginning_of_the_day_utc": "Libérer automatiquement l'enquête au début de la journée (UTC).", "back_button_label": "Label du bouton \"Retour''", "background_styling": "Style de fond", "brand_color": "Couleur de marque", @@ -1301,14 +1286,13 @@ "choose_the_actions_which_trigger_the_survey": "Choisissez les actions qui déclenchent l'enquête.", "choose_where_to_run_the_survey": "Choisissez où réaliser l'enquête.", "city": "Ville", - "close_survey_on_date": "Clôturer l'enquête à la date", "close_survey_on_response_limit": "Fermer l'enquête sur la limite de réponse", "color": "Couleur", "column_used_in_logic_error": "Cette colonne est utilisée dans la logique de la question {questionIndex}. Veuillez d'abord la supprimer de la logique.", "columns": "Colonnes", "company": "Société", "company_logo": "Logo de l'entreprise", - "completed_responses": "des réponses partielles ou complètes.", + "completed_responses": "Réponses terminées", "concat": "Concat +", "conditional_logic": "Logique conditionnelle", "confirm_default_language": "Confirmer la langue par défaut", @@ -1348,6 +1332,7 @@ "end_screen_card": "Carte de fin d'écran", "ending_card": "Carte de fin", "ending_card_used_in_logic": "Cette carte de fin est utilisée dans la logique de la question '{'questionIndex'}'.", + "ending_used_in_quota": "Cette fin est utilisée dans le quota \"{quotaName}\"", "ends_with": "Se termine par", "equals": "Égal", "equals_one_of": "Égal à l'un de", @@ -1358,6 +1343,7 @@ "fallback_for": "Solution de repli pour ", "fallback_missing": "Fallback manquant", "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{fieldId} est utilisé dans la logique de la question {questionIndex}. Veuillez d'abord le supprimer de la logique.", + "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "Le champ masqué \"{fieldId}\" est utilisé dans le quota \"{quotaName}\"", "field_name_eg_score_price": "Nom du champ par exemple, score, prix", "first_name": "Prénom", "five_points_recommended": "5 points (recommandé)", @@ -1389,8 +1375,9 @@ "follow_ups_modal_action_subject_placeholder": "Objet de l'email", "follow_ups_modal_action_to_description": "Adresse e-mail à laquelle envoyer l'e-mail", "follow_ups_modal_action_to_label": "à", - "follow_ups_modal_action_to_warning": "Aucun champ d'email détecté dans l'enquête", + "follow_ups_modal_action_to_warning": "Aucune option valable trouvée pour l'envoi d'emails, veuillez ajouter des questions à texte libre / info-contact ou des champs cachés", "follow_ups_modal_create_heading": "Créer un nouveau suivi", + "follow_ups_modal_created_successfull_toast": "\"Suivi créé et sera enregistré une fois que vous sauvegarderez le sondage.\"", "follow_ups_modal_edit_heading": "Modifier ce suivi", "follow_ups_modal_edit_no_id": "Aucun identifiant de suivi d'enquête fourni, impossible de mettre à jour le suivi de l'enquête.", "follow_ups_modal_name_label": "Nom de suivi", @@ -1400,8 +1387,9 @@ "follow_ups_modal_trigger_label": "Déclencheur", "follow_ups_modal_trigger_type_ending": "Le répondant voit une fin spécifique", "follow_ups_modal_trigger_type_ending_select": "Choisir des fins :", - "follow_ups_modal_trigger_type_ending_warning": "Aucune fin trouvée dans l'enquête !", + "follow_ups_modal_trigger_type_ending_warning": "Veuillez sélectionner au moins une fin ou changer le type de déclencheur.", "follow_ups_modal_trigger_type_response": "Le répondant complète l'enquête", + "follow_ups_modal_updated_successfull_toast": "\"Suivi mis à jour et sera enregistré une fois que vous sauvegarderez le sondage.\"", "follow_ups_new": "Nouveau suivi", "follow_ups_upgrade_button_text": "Passez à la version supérieure pour activer les relances", "form_styling": "Style de formulaire", @@ -1502,6 +1490,38 @@ "question_duplicated": "Question dupliquée.", "question_id_updated": "ID de la question mis à jour", "question_used_in_logic": "Cette question est utilisée dans la logique de la question '{'questionIndex'}'.", + "question_used_in_quota": "Cette question est utilisée dans le quota \"{quotaName}\"", + "quotas": { + "add_quota": "Ajouter un quota", + "change_quota_for_public_survey": "Changer le quota pour le sondage public ?", + "confirm_quota_changes": "Confirmer les modifications de quotas", + "confirm_quota_changes_body": "Vous avez des modifications non enregistrées dans votre quota. Souhaitez-vous les enregistrer avant de partir ?", + "continue_survey_normally": "Continuer le sondage normalement", + "count_partial_submissions": "Compter les soumissions partielles", + "count_partial_submissions_description": "Inclure les répondants qui correspondent aux critères de quota mais n'ont pas terminé le sondage", + "create_quota_for_public_survey": "Créer un quota pour le sondage public ?", + "create_quota_for_public_survey_description": "Seules les réponses futures seront filtrées dans le quota", + "create_quota_for_public_survey_text": "Ce sondage est déjà public. Les réponses existantes ne seront pas prises en compte pour le nouveau quota.", + "delete_quota_confirmation_text": "Cela supprimera définitivement le quota {quotaName}.", + "duplicate_quota": "Dupliquer le quota", + "edit_quota": "Modifier le quota", + "end_survey_for_matching_participants": "Terminer l'enquête pour les participants correspondants", + "inclusion_criteria": "Critères d'inclusion", + "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, other {La limite doit être supérieure ou égale au nombre de réponses}}", + "limited_to_x_responses": "Limité à {limit}", + "new_quota": "Nouveau Quota", + "quota_created_successfull_toast": "Quota créé avec succès", + "quota_deleted_successfull_toast": "Quota supprimé avec succès", + "quota_duplicated_successfull_toast": "Quota dupliqué avec succès", + "quota_name_placeholder": "par ex., Participants âgés de 18 à 25 ans", + "quota_updated_successfull_toast": "Quota mis à jour avec succès", + "response_limit": "Limites", + "save_changes_confirmation_body": "Les modifications apportées aux critères d'inclusion n'affectent que les réponses futures. \nNous vous recommandons soit de dupliquer un quota existant, soit d'en créer un nouveau.", + "save_changes_confirmation_text": "\"Les réponses existantes restent dans le quota\"", + "select_ending_card": "Sélectionner la carte de fin", + "upgrade_prompt_title": "Utilisez des quotas avec un plan supérieur", + "when_quota_has_been_reached": "Quand le quota est atteint" + }, "randomize_all": "Randomiser tout", "randomize_all_except_last": "Randomiser tout sauf le dernier", "range": "Plage", @@ -1509,7 +1529,6 @@ "redirect_thank_you_card": "Carte de remerciement de redirection", "redirect_to_url": "Rediriger vers l'URL", "redirect_to_url_not_available_on_free_plan": "La redirection vers l'URL n'est pas disponible sur le plan gratuit.", - "release_survey_on_date": "Publier l'enquête à la date", "remove_description": "Supprimer la description", "remove_translations": "Supprimer les traductions", "require_answer": "Réponse requise", @@ -1596,6 +1615,7 @@ "url_not_supported": "URL non supportée", "use_with_caution": "À utiliser avec précaution", "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{variable} est utilisé dans la logique de la question {questionIndex}. Veuillez d'abord le supprimer de la logique.", + "variable_is_used_in_quota_please_remove_it_from_quota_first": "La variable \"{variableName}\" est utilisée dans le quota \"{quotaName}\"", "variable_name_is_already_taken_please_choose_another": "Le nom de la variable est déjà pris, veuillez en choisir un autre.", "variable_name_must_start_with_a_letter": "Le nom de la variable doit commencer par une lettre.", "verify_email_before_submission": "Vérifiez l'email avant la soumission", @@ -1630,11 +1650,14 @@ "address_line_2": "Ligne d'adresse 2", "an_error_occurred_deleting_the_tag": "Une erreur est survenue lors de la suppression de l'étiquette.", "browser": "Navigateur", + "bulk_delete_response_quotas": "Les réponses font partie des quotas pour ce sondage. Comment voulez-vous gérer les quotas ?", "city": "Ville", "company": "Société", "completed": "Terminé ✅", "country": "Pays", + "decrement_quotas": "Décrémentez toutes les limites des quotas y compris cette réponse", "delete_response_confirmation": "Cela supprimera la réponse au sondage, y compris toutes les réponses, les étiquettes, les documents joints et les métadonnées de réponse.", + "delete_response_quotas": "La réponse fait partie des quotas pour ce sondage. Comment voulez-vous gérer les quotas ?", "device": "Dispositif", "device_info": "Informations sur l'appareil", "email": "Email", @@ -1766,6 +1789,7 @@ "configure_alerts": "Configurer les alertes", "congrats": "Félicitations ! Votre enquête est en ligne.", "connect_your_website_or_app_with_formbricks_to_get_started": "Connectez votre site web ou votre application à Formbricks pour commencer.", + "current_count": "Nombre actuel", "custom_range": "Plage personnalisée...", "delete_all_existing_responses_and_displays": "Supprimer toutes les réponses existantes et les affichages", "download_qr_code": "Télécharger code QR", @@ -1819,6 +1843,7 @@ "last_month": "Le mois dernier", "last_quarter": "dernier trimestre", "last_year": "l'année dernière", + "limit": "Limite", "no_responses_found": "Aucune réponse trouvée", "other_values_found": "D'autres valeurs trouvées", "overall": "Globalement", @@ -1827,6 +1852,8 @@ "qr_code_download_failed": "Échec du téléchargement du code QR", "qr_code_download_with_start_soon": "Le téléchargement du code QR débutera bientôt", "qr_code_generation_failed": "\"Un problème est survenu lors du chargement du code QR du sondage. Veuillez réessayer.\"", + "quotas_completed": "Quotas terminés", + "quotas_completed_tooltip": "Le nombre de quotas complétés par les répondants.", "reset_survey": "Réinitialiser l'enquête", "reset_survey_warning": "Réinitialiser un sondage supprime toutes les réponses et les affichages associés à ce sondage. Cela ne peut pas être annulé.", "selected_responses_csv": "Réponses sélectionnées (CSV)", @@ -1842,7 +1869,7 @@ "this_quarter": "Ce trimestre", "this_year": "Cette année", "time_to_complete": "Temps à compléter", - "ttc_tooltip": "Temps moyen pour compléter l'enquête.", + "ttc_tooltip": "Temps moyen pour compléter la question.", "unknown_question_type": "Type de question inconnu", "use_personal_links": "Utilisez des liens personnels", "waiting_for_response": "En attente d'une réponse \uD83E\uDDD8‍♂️", @@ -1853,7 +1880,6 @@ "survey_deleted_successfully": "Enquête supprimée avec succès !", "survey_duplicated_successfully": "Enquête dupliquée avec succès.", "survey_duplication_error": "Échec de la duplication de l'enquête.", - "survey_status_tooltip": "Pour mettre à jour le statut de l'enquête, mettez à jour le calendrier et fermez les paramètres dans les options de réponse à l'enquête.", "templates": { "all_channels": "Tous les canaux", "all_industries": "Tous les secteurs", diff --git a/apps/web/locales/ja-JP.json b/apps/web/locales/ja-JP.json index 9332ef9e05..ab61fb2ef8 100644 --- a/apps/web/locales/ja-JP.json +++ b/apps/web/locales/ja-JP.json @@ -118,6 +118,7 @@ "account_settings": "アカウント設定", "action": "アクション", "actions": "アクション", + "actions_description": "コードとノーコードアクションは、アプリ内やウェブサイト上で調査を発動するために使用されます。", "active_surveys": "アクティブなフォーム", "activity": "アクティビティ", "add": "追加", @@ -125,6 +126,7 @@ "add_filter": "フィルターを追加", "add_logo": "ロゴを追加", "add_member": "メンバーを追加", + "add_new_project": "新しいプロジェクトを追加", "add_project": "プロジェクトを追加", "add_to_team": "チームに追加", "all": "すべて", @@ -149,6 +151,9 @@ "cancel": "キャンセル", "centered_modal": "中央モーダル", "choices": "選択肢", + "choose_environment": "環境を選択", + "choose_organization": "組織を選択", + "choose_project": "プロジェクト を 選択", "clear_all": "すべてクリア", "clear_filters": "フィルターをクリア", "clear_selection": "選択をクリア", @@ -164,11 +169,14 @@ "connect_formbricks": "Formbricksを接続", "connected": "接続済み", "contacts": "連絡先", + "continue": "続行", "copied": "コピーしました", "copied_to_clipboard": "クリップボードにコピーしました", "copy": "コピー", "copy_code": "コードをコピー", "copy_link": "リンクをコピー", + "count_contacts": "{count, plural, other {# 件の連絡先}}", + "count_responses": "{count, plural, other {# 件の回答}}", "create_new_organization": "新しい組織を作成", "create_project": "プロジェクトを作成", "create_segment": "セグメントを作成", @@ -177,7 +185,6 @@ "created_at": "作成日時", "created_by": "作成者", "customer_success": "カスタマーサクセス", - "danger_zone": "危険な操作", "dark_overlay": "暗いオーバーレイ", "date": "日付", "default": "デフォルト", @@ -197,10 +204,15 @@ "e_commerce": "Eコマース", "edit": "編集", "email": "メールアドレス", + "ending_card": "終了カード", "enterprise_license": "エンタープライズライセンス", "environment_not_found": "環境が見つかりません", "environment_notice": "現在、{environment} 環境にいます。", "error": "エラー", + "error_component_description": "この リソース は 存在 しない か、アクセス する ための 必要な 権限 が ありません。", + "error_component_title": "リソース の 読み込み エラー", + "error_rate_limit_description": "リクエストの最大数に達しました。後でもう一度試してください。", + "error_rate_limit_title": "レート制限を超えました", "expand_rows": "行を展開", "finish": "完了", "follow_these": "こちらの手順に従って", @@ -232,11 +244,9 @@ "label": "ラベル", "language": "言語", "learn_more": "詳細を見る", - "license": "ライセンス", "light_overlay": "明るいオーバーレイ", "limits_reached": "上限に達しました", "link": "リンク", - "link_and_email": "リンク&メール", "link_survey": "リンクフォーム", "link_surveys": "リンクフォーム", "load_more": "さらに読み込む", @@ -252,18 +262,20 @@ "membership_not_found": "メンバーシップが見つかりません", "metadata": "メタデータ", "minimum": "最小", - "mobile_overlay_text": "Formbricksは、解像度の小さいデバイスでは利用できません。", + "mobile_overlay_app_works_best_on_desktop": "Formbricks は より 大きな 画面 で最適に 作動します。 フォーム を 管理または 構築する には、 別の デバイス に 切り替える 必要が あります。", + "mobile_overlay_surveys_look_good": "ご安心ください - お使い の デバイス や 画面 サイズ に 関係なく、 フォーム は 素晴らしく 見えます!", + "mobile_overlay_title": "おっと、 小さな 画面 が 検出されました!", "move_down": "下に移動", "move_up": "上に移動", "multiple_languages": "多言語", "name": "名前", "new": "新規", - "new_survey": "新規フォーム", "new_version_available": "Formbricks {version} が利用可能です。今すぐアップグレード!", "next": "次へ", "no_background_image_found": "背景画像が見つかりません。", "no_code": "ノーコード", "no_files_uploaded": "ファイルがアップロードされていません", + "no_quotas_found": "クォータが見つかりません", "no_result_found": "結果が見つかりません", "no_results": "結果なし", "no_surveys_found": "フォームが見つかりません。", @@ -283,6 +295,7 @@ "organization": "組織", "organization_id": "組織ID", "organization_not_found": "組織が見つかりません", + "organization_settings": "組織設定", "organization_teams_not_found": "組織のチームが見つかりません", "other": "その他", "others": "その他", @@ -306,6 +319,7 @@ "product_manager": "プロダクトマネージャー", "profile": "プロフィール", "profile_id": "プロフィールID", + "progress": "進捗", "project_configuration": "プロジェクト設定", "project_creation_description": "より良いアクセス制御のために、フォームをプロジェクトで整理します。", "project_id": "プロジェクトID", @@ -317,6 +331,9 @@ "question": "質問", "question_id": "質問ID", "questions": "質問", + "quota": "クォータ", + "quotas": "クォータ", + "quotas_description": "特定の基準を満たす参加者からの回答数を制限する", "read_docs": "ドキュメントを読む", "recipients": "受信者", "remove": "削除", @@ -335,7 +352,6 @@ "save": "保存", "save_changes": "変更を保存", "saving": "保存中", - "scheduled": "スケジュール済み", "search": "検索", "security": "セキュリティ", "segment": "セグメント", @@ -365,6 +381,7 @@ "start_free_trial": "無料トライアルを開始", "status": "ステータス", "step_by_step_manual": "ステップバイステップマニュアル", + "storage_not_configured": "ファイルストレージが設定されていないため、アップロードは失敗する可能性があります", "styling": "スタイル", "submit": "送信", "summary": "概要", @@ -375,10 +392,8 @@ "survey_live": "フォーム公開中", "survey_not_found": "フォームが見つかりません", "survey_paused": "フォームは一時停止中です。", - "survey_scheduled": "フォームはスケジュール済みです。", "survey_type": "フォームの種類", "surveys": "フォーム", - "switch_organization": "組織を切り替え", "switch_to": "{environment}に切り替え", "table_items_deleted_successfully": "{type}を正常に削除しました", "table_settings": "テーブル設定", @@ -576,8 +591,7 @@ "contacts_table_refresh": "連絡先を更新", "contacts_table_refresh_success": "連絡先を正常に更新しました", "delete_contact_confirmation": "これにより、この連絡先に関連付けられているすべてのフォーム回答と連絡先属性が削除されます。この連絡先のデータに基づいたターゲティングとパーソナライゼーションはすべて失われます。", - "first_name": "名", - "last_name": "姓", + "delete_contact_confirmation_with_quotas": "{value, plural, one {これにより この連絡先に関連するすべてのアンケート応答と連絡先属性が削除されます。この連絡先のデータに基づくターゲティングとパーソナライゼーションが失われます。この連絡先がアンケートの割当量を考慮した回答を持っている場合、割当量カウントは減少しますが、割当量の制限は変更されません。} other {これにより これらの連絡先に関連するすべてのアンケート応答と連絡先属性が削除されます。これらの連絡先のデータに基づくターゲティングとパーソナライゼーションが失われます。これらの連絡先がアンケートの割当量を考慮した回答を持っている場合、割当量カウントは減少しますが、割当量の制限は変更されません。}}", "no_responses_found": "回答が見つかりません", "not_provided": "提供されていません", "search_contact": "連絡先を検索", @@ -738,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "アクセス制御", "add_api_key": "APIキーを追加", "api_key": "APIキー", "api_key_copied_to_clipboard": "APIキーをクリップボードにコピーしました", @@ -747,7 +760,6 @@ "api_key_label": "APIキーのラベル", "api_key_security_warning": "セキュリティ上の理由から、APIキーは作成時に一度だけ表示されます。すぐにコピーしてください。", "api_key_updated": "APIキーを更新しました", - "delete_permission": "削除権限", "duplicate_access": "重複したプロジェクトアクセスは許可されません", "no_api_keys_yet": "まだAPIキーがありません", "no_env_permissions_found": "環境権限が見つかりません", @@ -759,45 +771,21 @@ "unable_to_delete_api_key": "APIキーを削除できませんでした" }, "app-connection": { - "api_host_description": "これはFormbricksバックエンドのURLです。", "app_connection": "アプリ接続", "app_connection_description": "あなたのアプリをFormbricksに接続します。", "cache_update_delay_description": "フォーム・連絡先・アクションなどを更新してから、Formbricks SDK を実行中のローカルアプリに反映されるまで最大5分かかる場合があります。これは現在のキャッシュ方式の制限によるものです。私たちはキャッシュを改修中で、Formbricks 4.0 で修正を提供予定です。", "cache_update_delay_title": "キャッシュのため変更の反映に最大5分かかります", - "check_out_the_docs": "ドキュメントを見る", - "dive_into_the_docs": "ドキュメントを詳しく読む", - "does_your_widget_work": "ウィジェットは動作していますか?", "environment_id": "あなたのEnvironmentId", "environment_id_description": "このIDはこのFormbricks環境を一意に識別します。", - "environment_id_description_with_environment_id": "正しい環境を識別するために使用します: {environmentId} があなたのIDです。", - "formbricks_sdk": "Formbricks SDK", "formbricks_sdk_connected": "Formbricks SDK は接続されています", "formbricks_sdk_not_connected": "Formbricks SDK はまだ接続されていません。", "formbricks_sdk_not_connected_description": "あなたのウェブサイトまたはアプリをFormbricksに接続してください", - "have_a_problem": "問題がありますか?", "how_to_setup": "セットアップ方法", "how_to_setup_description": "アプリ内でFormbricksウィジェットを設定する手順に従ってください。", - "identifying_your_users": "ユーザーの識別", - "if_you_are_planning_to": "〜を計画している場合は", - "insert_this_code_into_the": "次のコードを挿入してください", - "need_a_more_detailed_setup_guide_for": "より詳細なセットアップガイドが必要ですか", - "not_working": "うまく動作しませんか?", - "open_an_issue_on_github": "GitHubでIssueを作成", - "open_the_browser_console_to_see_the_logs": "ブラウザのコンソールを開いてログを確認してください。", "receiving_data": "データ受信中 \uD83D\uDC83\uD83D\uDD7A", "recheck": "再チェック", - "scroll_to_the_top": "ページ上部に戻る", - "step_1": "ステップ1: pnpm / npm / yarnでインストール", - "step_2": "ステップ2: ウィジェットの初期化", - "step_2_description": "Formbricksをインポートし、コンポーネント(例: App.tsx)でウィジェットを初期化します。", - "step_3": "ステップ3: デバッグモード", - "switch_on_the_debug_mode_by_appending": "URLの末尾に以下を付与してデバッグモードを有効化", - "tag_of_your_app": "あなたのアプリのタグ", - "to_the_url_where_you_load_the": "読み込みを行うURLに", - "want_to_learn_how_to_add_user_attributes": "ユーザー属性、カスタムイベント等の追加方法を学びますか?", - "you_are_done": "完了です \uD83C\uDF89", - "you_can_set_the_user_id_with": "ユーザーIDは次のように設定できます", - "your_app_now_communicates_with_formbricks": "あなたのアプリはFormbricksと通信し、イベント送信やフォームの自動読込を行います!" + "setup_alert_description": "5 分以内でアプリまたはウェブサイト を 接続する手順をステップバイステップ の チュートリアルに従ってください。", + "setup_alert_title": "接続方法" }, "general": { "cannot_delete_only_project": "これは唯一のプロジェクトのため削除できません。まず新しいプロジェクトを作成してください。", @@ -989,7 +977,6 @@ "free": "無料", "free_description": "無制限のフォーム、チームメンバー、その他多数。", "get_2_months_free": "2ヶ月間無料", - "get_in_touch": "お問い合わせください", "hosted_in_frankfurt": "フランクフルトでホスト", "ios_android_sdks": "モバイルフォーム用iOS & Android SDK", "link_surveys": "リンクフォーム(共有可能)", @@ -1251,9 +1238,7 @@ "automatically_close_survey_after": "フォームを自動的に閉じる", "automatically_close_the_survey_after_a_certain_number_of_responses": "一定の回答数に達した後にフォームを自動的に閉じます。", "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "ユーザーが一定秒数応答しない場合、フォームを自動的に閉じます。", - "automatically_closes_the_survey_at_the_beginning_of_the_day_utc": "日(UTC)の開始時にフォームを自動的に閉じます。", "automatically_mark_the_survey_as_complete_after": "フォームを自動的に完了としてマークする", - "automatically_release_the_survey_at_the_beginning_of_the_day_utc": "日(UTC)の開始時にフォームを自動的にリリースします。", "back_button_label": "「戻る」ボタンのラベル", "background_styling": "背景のスタイル", "brand_color": "ブランドカラー", @@ -1301,14 +1286,13 @@ "choose_the_actions_which_trigger_the_survey": "フォームをトリガーするアクションを選択してください。", "choose_where_to_run_the_survey": "フォームを実行する場所を選択してください。", "city": "市区町村", - "close_survey_on_date": "日付でフォームを閉じる", "close_survey_on_response_limit": "回答数の上限でフォームを閉じる", "color": "色", "column_used_in_logic_error": "この列は質問 {questionIndex} のロジックで使用されています。まず、ロジックから削除してください。", "columns": "列", "company": "会社", "company_logo": "会社のロゴ", - "completed_responses": "部分的または完了した回答。", + "completed_responses": "完了した回答", "concat": "連結 +", "conditional_logic": "条件付きロジック", "confirm_default_language": "デフォルト言語を確認", @@ -1348,6 +1332,7 @@ "end_screen_card": "終了画面カード", "ending_card": "終了カード", "ending_card_used_in_logic": "この終了カードは質問 {questionIndex} のロジックで使用されています。", + "ending_used_in_quota": "この 終了 は \"{quotaName}\" クォータ で使用されています", "ends_with": "で終わる", "equals": "と等しい", "equals_one_of": "のいずれかと等しい", @@ -1358,6 +1343,7 @@ "fallback_for": "のフォールバック", "fallback_missing": "フォールバックがありません", "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{fieldId} は質問 {questionIndex} のロジックで使用されています。まず、ロジックから削除してください。", + "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "隠しフィールド \"{fieldId}\" は \"{quotaName}\" クォータ で使用されています", "field_name_eg_score_price": "フィールド名、例:score、price", "first_name": "名", "five_points_recommended": "5点(推奨)", @@ -1389,8 +1375,9 @@ "follow_ups_modal_action_subject_placeholder": "メールの件名", "follow_ups_modal_action_to_description": "メールを送信するメールアドレス", "follow_ups_modal_action_to_label": "宛先", - "follow_ups_modal_action_to_warning": "フォームでメールアドレスのフィールドが検出されていません", + "follow_ups_modal_action_to_warning": "メールを送信するための有効な オプション が見つかりません 、いくつかの オープン テキスト / 連絡先 情報の質問 または 非表示 フィールドを追加してください", "follow_ups_modal_create_heading": "新しいフォローアップを作成", + "follow_ups_modal_created_successfull_toast": "フォローアップ が 作成され、 アンケートを 保存すると保存されます。", "follow_ups_modal_edit_heading": "このフォローアップを編集", "follow_ups_modal_edit_no_id": "フォームのフォローアップIDが提供されていません。フォームのフォローアップを更新できません", "follow_ups_modal_name_label": "フォローアップ名", @@ -1400,8 +1387,9 @@ "follow_ups_modal_trigger_label": "トリガー", "follow_ups_modal_trigger_type_ending": "回答者が特定の終了画面を見たとき", "follow_ups_modal_trigger_type_ending_select": "終了を選択:", - "follow_ups_modal_trigger_type_ending_warning": "フォームに終了画面が見つかりません!", + "follow_ups_modal_trigger_type_ending_warning": "少なくとも1つの終了を選択するか、 トリガー タイプを変更してください", "follow_ups_modal_trigger_type_response": "回答者がフォームを完了したとき", + "follow_ups_modal_updated_successfull_toast": "フォローアップ が 更新され、 アンケートを 保存すると保存されます。", "follow_ups_new": "新しいフォローアップ", "follow_ups_upgrade_button_text": "フォローアップを有効にするためにアップグレード", "form_styling": "フォームのスタイル", @@ -1502,6 +1490,38 @@ "question_duplicated": "質問を複製しました。", "question_id_updated": "質問IDを更新しました", "question_used_in_logic": "この質問は質問 {questionIndex} のロジックで使用されています。", + "question_used_in_quota": "この 質問 は \"{quotaName}\" の クオータ に使用されています", + "quotas": { + "add_quota": "クォータを追加", + "change_quota_for_public_survey": "パブリック フォームのクォータを変更しますか?", + "confirm_quota_changes": "配分の変更を確認", + "confirm_quota_changes_body": "クォータに未保存の変更があります。離れる前に保存しますか?", + "continue_survey_normally": "アンケートを通常通り続行", + "count_partial_submissions": "部分的な提出の数を数える", + "count_partial_submissions_description": "クォータ基準を満たしているものの、調査を完了しなかった回答者を含める", + "create_quota_for_public_survey": "パブリック フォームのクォータを作成しますか?", + "create_quota_for_public_survey_description": "今後の回答のみがクォータにスクリーニングされます", + "create_quota_for_public_survey_text": "この調査はすでに公開されています。既存の回答は、新しい割当には考慮されません。", + "delete_quota_confirmation_text": "これは永久にクォータ {quotaName} を削除します。", + "duplicate_quota": "割り当ての複製", + "edit_quota": "クオータを編集", + "end_survey_for_matching_participants": "一致する参加者に対してアンケートを終了", + "inclusion_criteria": "選定基準", + "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, other { この クオータ では すでに {value} 件 の回答があります ので、制限は {value} より大きくする必要があります。} }", + "limited_to_x_responses": "{limit} 回に制限", + "new_quota": "新しい クォータ", + "quota_created_successfull_toast": "クオータを正常に作成しました", + "quota_deleted_successfull_toast": "クオータを正常に削除しました", + "quota_duplicated_successfull_toast": "クオータを正常に複製しました", + "quota_name_placeholder": "例: 年齢 18 から 25 歳 の 参加者", + "quota_updated_successfull_toast": "クオータを更新しました", + "response_limit": "制限", + "save_changes_confirmation_body": "今後の回答のみに影響します。\\n 既存のクォータを複製するか、新しいクォータを作成することをお勧めします。", + "save_changes_confirmation_text": "既存の応答 は クォータ に とどまります", + "select_ending_card": "終了カードを選択", + "upgrade_prompt_title": "上位プランで クォータ を使用", + "when_quota_has_been_reached": "クオータが達成されたとき" + }, "randomize_all": "すべてをランダム化", "randomize_all_except_last": "最後を除くすべてをランダム化", "range": "範囲", @@ -1509,7 +1529,6 @@ "redirect_thank_you_card": "サンクスクカードをリダイレクト", "redirect_to_url": "URLにリダイレクト", "redirect_to_url_not_available_on_free_plan": "URLへのリダイレクトは無料プランでは利用できません", - "release_survey_on_date": "日付でフォームをリリース", "remove_description": "説明を削除", "remove_translations": "翻訳を削除", "require_answer": "回答を必須にする", @@ -1596,6 +1615,7 @@ "url_not_supported": "URLはサポートされていません", "use_with_caution": "注意して使用", "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{variable} は質問 {questionIndex} のロジックで使用されています。まず、ロジックから削除してください。", + "variable_is_used_in_quota_please_remove_it_from_quota_first": "変数 \"{variableName}\" は \"{quotaName}\" クォータ で使用されています", "variable_name_is_already_taken_please_choose_another": "変数名はすでに使用されています。別の名前を選択してください。", "variable_name_must_start_with_a_letter": "変数名はアルファベットで始まらなければなりません。", "verify_email_before_submission": "送信前にメールアドレスを認証", @@ -1630,11 +1650,14 @@ "address_line_2": "住所2", "an_error_occurred_deleting_the_tag": "タグの削除中にエラーが発生しました", "browser": "ブラウザ", + "bulk_delete_response_quotas": "この回答は、このアンケートの割り当ての一部です。 割り当てをどのように処理しますか?", "city": "市区町村", "company": "会社", "completed": "完了 ✅", "country": "国", + "decrement_quotas": "すべて の 制限 を 減少 し、 この 回答 を 含む しきい値", "delete_response_confirmation": "これにより、すべての回答、タグ、添付されたドキュメント、および回答メタデータを含むフォームの回答が削除されます。", + "delete_response_quotas": "この回答は、このアンケートの割り当ての一部です。 割り当てをどのように処理しますか?", "device": "デバイス", "device_info": "デバイス情報", "email": "メールアドレス", @@ -1766,6 +1789,7 @@ "configure_alerts": "アラートを設定", "congrats": "おめでとうございます!フォームが公開されました。", "connect_your_website_or_app_with_formbricks_to_get_started": "始めるには、ウェブサイトやアプリをFormbricksに接続してください。", + "current_count": "現在の件数", "custom_range": "カスタム範囲...", "delete_all_existing_responses_and_displays": "既存のすべての回答と表示を削除", "download_qr_code": "QRコードをダウンロード", @@ -1819,6 +1843,7 @@ "last_month": "先月", "last_quarter": "前四半期", "last_year": "昨年", + "limit": "制限", "no_responses_found": "回答が見つかりません", "other_values_found": "他の値が見つかりました", "overall": "全体", @@ -1827,6 +1852,8 @@ "qr_code_download_failed": "QRコードのダウンロードに失敗しました", "qr_code_download_with_start_soon": "QRコードのダウンロードがまもなく開始されます", "qr_code_generation_failed": "フォームのQRコードの読み込み中に問題が発生しました。もう一度お試しください。", + "quotas_completed": "クォータ完了", + "quotas_completed_tooltip": "回答者 によって 完了 した 定員 の 数。", "reset_survey": "フォームをリセット", "reset_survey_warning": "フォームをリセットすると、このフォームに関連付けられているすべての回答と表示が削除されます。この操作は元に戻せません。", "selected_responses_csv": "選択した回答 (CSV)", @@ -1853,7 +1880,6 @@ "survey_deleted_successfully": "フォームを正常に削除しました!", "survey_duplicated_successfully": "フォームを正常に複製しました。", "survey_duplication_error": "フォームの複製に失敗しました。", - "survey_status_tooltip": "フォームのステータスを更新するには、フォームの回答オプションでスケジュールとクローズ設定を更新してください。", "templates": { "all_channels": "すべてのチャネル", "all_industries": "すべての業界", diff --git a/apps/web/locales/pt-BR.json b/apps/web/locales/pt-BR.json index 1103460944..00cc4facea 100644 --- a/apps/web/locales/pt-BR.json +++ b/apps/web/locales/pt-BR.json @@ -118,6 +118,7 @@ "account_settings": "Configurações da conta", "action": "Ação", "actions": "Ações", + "actions_description": "Ações de Código e Sem Código são usadas para acionar interceptar pesquisas dentro de apps & em sites.", "active_surveys": "Pesquisas ativas", "activity": "Atividade", "add": "Adicionar", @@ -125,6 +126,7 @@ "add_filter": "Adicionar filtro", "add_logo": "Adicionar logo", "add_member": "Adicionar membro", + "add_new_project": "Adicionar novo projeto", "add_project": "Adicionar projeto", "add_to_team": "Adicionar à equipe", "all": "Todos", @@ -149,6 +151,9 @@ "cancel": "Cancelar", "centered_modal": "Modal Centralizado", "choices": "Escolhas", + "choose_environment": "Escolher ambiente", + "choose_organization": "Escolher organização", + "choose_project": "Escolher projeto", "clear_all": "Limpar tudo", "clear_filters": "Limpar filtros", "clear_selection": "Limpar seleção", @@ -164,11 +169,14 @@ "connect_formbricks": "Conectar Formbricks", "connected": "conectado", "contacts": "Contatos", + "continue": "Continuar", "copied": "Copiado", "copied_to_clipboard": "Copiado para a área de transferência", "copy": "Copiar", "copy_code": "Copiar código", "copy_link": "Copiar Link", + "count_contacts": "{value, plural, one {# contato} other {# contatos} }", + "count_responses": "{value, plural, other {# respostas}}", "create_new_organization": "Criar nova organização", "create_project": "Criar projeto", "create_segment": "Criar segmento", @@ -177,7 +185,6 @@ "created_at": "Data de criação", "created_by": "Criado por", "customer_success": "Sucesso do Cliente", - "danger_zone": "Zona de Perigo", "dark_overlay": "sobreposição escura", "date": "Encontro", "default": "Padrão", @@ -197,10 +204,15 @@ "e_commerce": "comércio eletrônico", "edit": "Editar", "email": "Email", + "ending_card": "Cartão de encerramento", "enterprise_license": "Licença Empresarial", "environment_not_found": "Ambiente não encontrado", "environment_notice": "Você está atualmente no ambiente {environment}.", "error": "Erro", + "error_component_description": "Esse recurso não existe ou você não tem permissão para acessá-lo.", + "error_component_title": "Erro ao carregar recursos", + "error_rate_limit_description": "Número máximo de requisições atingido. Por favor, tente novamente mais tarde.", + "error_rate_limit_title": "Limite de Taxa Excedido", "expand_rows": "Expandir linhas", "finish": "Terminar", "follow_these": "Siga esses", @@ -232,11 +244,9 @@ "label": "Etiqueta", "language": "Língua", "learn_more": "Saiba mais", - "license": "Licença", "light_overlay": "sobreposição leve", "limits_reached": "Limites Atingidos", "link": "link", - "link_and_email": "Link & E-mail", "link_survey": "Pesquisa de Link", "link_surveys": "Link de Pesquisas", "load_more": "Carregar mais", @@ -252,18 +262,20 @@ "membership_not_found": "Assinatura não encontrada", "metadata": "metadados", "minimum": "Mínimo", - "mobile_overlay_text": "O Formbricks não está disponível para dispositivos com resoluções menores.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks funciona melhor em uma tela maior. Para gerenciar ou criar pesquisas, mude para outro dispositivo.", + "mobile_overlay_surveys_look_good": "Não se preocupe – suas pesquisas ficam ótimas em qualquer dispositivo e tamanho de tela!", + "mobile_overlay_title": "Eita, tela pequena detectada!", "move_down": "Descer", "move_up": "Subir", "multiple_languages": "Vários idiomas", "name": "Nome", "new": "Novo", - "new_survey": "Nova Pesquisa", "new_version_available": "Formbricks {version} chegou. Atualize agora!", "next": "Próximo", "no_background_image_found": "Imagem de fundo não encontrada.", "no_code": "Sem código", "no_files_uploaded": "Nenhum arquivo foi enviado", + "no_quotas_found": "Nenhuma cota encontrada", "no_result_found": "Nenhum resultado encontrado", "no_results": "Nenhum resultado", "no_surveys_found": "Não foram encontradas pesquisas.", @@ -283,6 +295,7 @@ "organization": "organização", "organization_id": "ID da Organização", "organization_not_found": "Organização não encontrada", + "organization_settings": "Configurações da Organização", "organization_teams_not_found": "Equipes da organização não encontradas", "other": "outro", "others": "Outros", @@ -306,6 +319,7 @@ "product_manager": "Gerente de Produto", "profile": "Perfil", "profile_id": "ID de Perfil", + "progress": "Progresso", "project_configuration": "Configuração do Projeto", "project_creation_description": "Organize pesquisas em projetos para melhor controle de acesso.", "project_id": "ID do Projeto", @@ -317,6 +331,9 @@ "question": "Pergunta", "question_id": "ID da Pergunta", "questions": "Perguntas", + "quota": "Cota", + "quotas": "Cotas", + "quotas_description": "Limite a quantidade de respostas que você recebe de participantes que atendem a determinados critérios.", "read_docs": "Ler Documentação", "recipients": "Destinatários", "remove": "remover", @@ -335,7 +352,6 @@ "save": "Salvar", "save_changes": "Salvar alterações", "saving": "Salvando", - "scheduled": "agendado", "search": "Buscar", "security": "Segurança", "segment": "segmento", @@ -365,6 +381,7 @@ "start_free_trial": "Iniciar Teste Grátis", "status": "status", "step_by_step_manual": "Manual passo a passo", + "storage_not_configured": "Armazenamento de arquivos não configurado, uploads provavelmente falharão", "styling": "Estilização", "submit": "Enviar", "summary": "Resumo", @@ -375,10 +392,8 @@ "survey_live": "Pesquisa ao vivo", "survey_not_found": "Pesquisa não encontrada", "survey_paused": "Pesquisa pausada.", - "survey_scheduled": "Pesquisa agendada.", "survey_type": "Tipo de Pesquisa", "surveys": "Pesquisas", - "switch_organization": "Mudar organização", "switch_to": "Mudar para {environment}", "table_items_deleted_successfully": "{type}s deletados com sucesso", "table_settings": "Arrumação da mesa", @@ -576,8 +591,7 @@ "contacts_table_refresh": "Atualizar contatos", "contacts_table_refresh_success": "Contatos atualizados com sucesso", "delete_contact_confirmation": "Isso irá apagar todas as respostas da pesquisa e atributos de contato associados a este contato. Qualquer direcionamento e personalização baseados nos dados deste contato serão perdidos.", - "first_name": "Primeiro Nome", - "last_name": "Sobrenome", + "delete_contact_confirmation_with_quotas": "{value, plural, other {Isso irá apagar todas as respostas da pesquisa e atributos de contato associados a este contato. Qualquer direcionamento e personalização baseados nos dados deste contato serão perdidos. Se este contato tiver respostas que contam para cotas da pesquisa, as contagens das cotas serão reduzidas, mas os limites das cotas permanecerão inalterados.}}", "no_responses_found": "Nenhuma resposta encontrada", "not_provided": "Não fornecido", "search_contact": "Buscar contato", @@ -738,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Controle de Acesso", "add_api_key": "Adicionar Chave API", "api_key": "Chave de API", "api_key_copied_to_clipboard": "Chave da API copiada para a área de transferência", @@ -747,7 +760,6 @@ "api_key_label": "Rótulo da Chave API", "api_key_security_warning": "Por motivos de segurança, a chave da API será mostrada apenas uma vez após a criação. Por favor, copie-a para o seu destino imediatamente.", "api_key_updated": "Chave de API atualizada", - "delete_permission": "Remover permissão", "duplicate_access": "Acesso duplicado ao projeto não permitido", "no_api_keys_yet": "Você ainda não tem nenhuma chave de API", "no_env_permissions_found": "Nenhuma permissão de ambiente encontrada", @@ -759,45 +771,21 @@ "unable_to_delete_api_key": "Não foi possível deletar a Chave API" }, "app-connection": { - "api_host_description": "Essa é a URL do seu backend do Formbricks.", "app_connection": "Conexão do App", "app_connection_description": "Conecte seu app ao Formbricks.", "cache_update_delay_description": "Quando você faz atualizações em pesquisas, contatos, ações ou outros dados, pode levar até 5 minutos para que essas mudanças apareçam no seu app local rodando o SDK do Formbricks. Esse atraso é devido a uma limitação no nosso sistema de cache atual. Estamos ativamente retrabalhando o cache e planejamos lançar uma correção no Formbricks 4.0.", "cache_update_delay_title": "As mudanças serão refletidas após 5 minutos devido ao cache", - "check_out_the_docs": "Confere a documentação.", - "dive_into_the_docs": "Mergulha na documentação.", - "does_your_widget_work": "Seu widget funciona?", "environment_id": "Seu Id do Ambiente", "environment_id_description": "Este ID identifica exclusivamente este ambiente do Formbricks.", - "environment_id_description_with_environment_id": "Usado para identificar o ambiente correto: {environmentId} é o seu.", - "formbricks_sdk": "SDK do Formbricks", "formbricks_sdk_connected": "O SDK do Formbricks está conectado", "formbricks_sdk_not_connected": "O SDK do Formbricks ainda não está conectado.", "formbricks_sdk_not_connected_description": "Conecte seu site ou app com o Formbricks", - "have_a_problem": "Tá com problema?", "how_to_setup": "Como configurar", "how_to_setup_description": "Siga esses passos para configurar o widget do Formbricks no seu app.", - "identifying_your_users": "identificando seus usuários", - "if_you_are_planning_to": "Se você está planejando", - "insert_this_code_into_the": "Insere esse código no", - "need_a_more_detailed_setup_guide_for": "Preciso de um guia de configuração mais detalhado para", - "not_working": "Não tá funcionando?", - "open_an_issue_on_github": "Abre uma issue no GitHub", - "open_the_browser_console_to_see_the_logs": "Abre o console do navegador pra ver os logs.", "receiving_data": "Recebendo dados \uD83D\uDC83\uD83D\uDD7A", "recheck": "Verificar novamente", - "scroll_to_the_top": "Rola pra cima!", - "step_1": "Passo 1: Instale com pnpm, npm ou yarn", - "step_2": "Passo 2: Iniciar widget", - "step_2_description": "Importe o Formbricks e inicialize o widget no seu Componente (por exemplo, App.tsx):", - "step_3": "Passo 3: Modo de depuração", - "switch_on_the_debug_mode_by_appending": "Ative o modo de depuração adicionando", - "tag_of_your_app": "etiqueta do seu app", - "to_the_url_where_you_load_the": "para a URL onde você carrega o", - "want_to_learn_how_to_add_user_attributes": "Quer aprender como adicionar atributos de usuário, eventos personalizados e mais?", - "you_are_done": "Você terminou \uD83C\uDF89", - "you_can_set_the_user_id_with": "você pode definir o id do usuário com", - "your_app_now_communicates_with_formbricks": "Seu app agora se comunica com o Formbricks - enviando eventos e carregando pesquisas automaticamente!" + "setup_alert_description": "Siga este tutorial passo a passo para conectar seu app ou site em menos de 5 minutos.", + "setup_alert_title": "Como conectar" }, "general": { "cannot_delete_only_project": "Esse é seu único projeto, não pode ser deletado. Crie um novo projeto primeiro.", @@ -989,7 +977,6 @@ "free": "grátis", "free_description": "Pesquisas ilimitadas, membros da equipe e mais.", "get_2_months_free": "Ganhe 2 meses grátis", - "get_in_touch": "Entre em contato", "hosted_in_frankfurt": "Hospedado em Frankfurt", "ios_android_sdks": "SDK para iOS e Android para pesquisas móveis", "link_surveys": "Link de Pesquisas (Compartilhável)", @@ -1251,9 +1238,7 @@ "automatically_close_survey_after": "Fechar pesquisa automaticamente após", "automatically_close_the_survey_after_a_certain_number_of_responses": "Fechar automaticamente a pesquisa depois de um certo número de respostas.", "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Feche automaticamente a pesquisa se o usuário não responder depois de alguns segundos.", - "automatically_closes_the_survey_at_the_beginning_of_the_day_utc": "Fecha automaticamente a pesquisa no começo do dia (UTC).", "automatically_mark_the_survey_as_complete_after": "Marcar automaticamente a pesquisa como concluída após", - "automatically_release_the_survey_at_the_beginning_of_the_day_utc": "Liberar automaticamente a pesquisa no começo do dia (UTC).", "back_button_label": "Voltar", "background_styling": "Estilo de Fundo", "brand_color": "Cor da marca", @@ -1301,14 +1286,13 @@ "choose_the_actions_which_trigger_the_survey": "Escolha as ações que disparam a pesquisa.", "choose_where_to_run_the_survey": "Escolha onde realizar a pesquisa.", "city": "cidade", - "close_survey_on_date": "Fechar pesquisa na data", "close_survey_on_response_limit": "Fechar pesquisa ao atingir limite de respostas", "color": "cor", "column_used_in_logic_error": "Esta coluna é usada na lógica da pergunta {questionIndex}. Por favor, remova-a da lógica primeiro.", "columns": "colunas", "company": "empresa", "company_logo": "Logo da empresa", - "completed_responses": "respostas parciais ou completas.", + "completed_responses": "Respostas concluídas.", "concat": "Concatenar +", "conditional_logic": "Lógica Condicional", "confirm_default_language": "Confirmar idioma padrão", @@ -1348,6 +1332,7 @@ "end_screen_card": "cartão de tela final", "ending_card": "Cartão de encerramento", "ending_card_used_in_logic": "Esse cartão de encerramento é usado na lógica da pergunta {questionIndex}.", + "ending_used_in_quota": "Este final está sendo usado na cota \"{quotaName}\"", "ends_with": "Termina com", "equals": "Igual", "equals_one_of": "É igual a um de", @@ -1358,6 +1343,7 @@ "fallback_for": "Alternativa para", "fallback_missing": "Faltando alternativa", "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{fieldId} é usado na lógica da pergunta {questionIndex}. Por favor, remova-o da lógica primeiro.", + "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "Campo oculto \"{fieldId}\" está sendo usado na cota \"{quotaName}\"", "field_name_eg_score_price": "Nome do campo, por exemplo, pontuação, preço", "first_name": "Primeiro Nome", "five_points_recommended": "5 pontos (recomendado)", @@ -1389,8 +1375,9 @@ "follow_ups_modal_action_subject_placeholder": "Assunto do e-mail", "follow_ups_modal_action_to_description": "Endereço de e-mail para enviar o e-mail para", "follow_ups_modal_action_to_label": "Para", - "follow_ups_modal_action_to_warning": "Nenhum campo de e-mail detectado na pesquisa", + "follow_ups_modal_action_to_warning": "Nenhuma opção válida encontrada para envio de emails, por favor, adicione algumas perguntas de texto livre / informações de contato ou campos ocultos", "follow_ups_modal_create_heading": "Criar um novo acompanhamento", + "follow_ups_modal_created_successfull_toast": "Acompanhamento criado e será salvo assim que você salvar a pesquisa.", "follow_ups_modal_edit_heading": "Editar este acompanhamento", "follow_ups_modal_edit_no_id": "Nenhum ID de acompanhamento da pesquisa fornecido, não é possível atualizar o acompanhamento da pesquisa", "follow_ups_modal_name_label": "Nome do acompanhamento", @@ -1400,8 +1387,9 @@ "follow_ups_modal_trigger_label": "Gatilho", "follow_ups_modal_trigger_type_ending": "Respondente vê um final específico", "follow_ups_modal_trigger_type_ending_select": "Selecione os finais: ", - "follow_ups_modal_trigger_type_ending_warning": "Nenhum final encontrado na pesquisa!", + "follow_ups_modal_trigger_type_ending_warning": "Por favor, selecione pelo menos um encerramento ou altere o tipo de gatilho", "follow_ups_modal_trigger_type_response": "Respondente completa a pesquisa", + "follow_ups_modal_updated_successfull_toast": "Acompanhamento atualizado e será salvo assim que você salvar a pesquisa.", "follow_ups_new": "Novo acompanhamento", "follow_ups_upgrade_button_text": "Atualize para habilitar os Acompanhamentos", "form_styling": "Estilização de Formulários", @@ -1502,6 +1490,38 @@ "question_duplicated": "Pergunta duplicada.", "question_id_updated": "ID da pergunta atualizado", "question_used_in_logic": "Essa pergunta é usada na lógica da pergunta {questionIndex}.", + "question_used_in_quota": "Esta questão está sendo usada na cota \"{quotaName}\"", + "quotas": { + "add_quota": "Adicionar cota", + "change_quota_for_public_survey": "Alterar cota para pesquisa pública?", + "confirm_quota_changes": "Confirmar Alterações nas Cotas", + "confirm_quota_changes_body": "Você tem alterações não salvas na sua cota. Quer salvar antes de sair?", + "continue_survey_normally": "Continuar pesquisa normalmente", + "count_partial_submissions": "Contar respostas parciais", + "count_partial_submissions_description": "Incluir respondentes que atendem aos critérios de cota, mas não completaram a pesquisa", + "create_quota_for_public_survey": "Criar cota para pesquisa pública?", + "create_quota_for_public_survey_description": "Apenas respostas futuras serão filtradas para a cota", + "create_quota_for_public_survey_text": "Esta pesquisa já é pública. Respostas existentes não serão consideradas para a nova cota.", + "delete_quota_confirmation_text": "Isso irá apagar permanentemente a cota {quotaName}.", + "duplicate_quota": "Duplicar cota", + "edit_quota": "Editar cota", + "end_survey_for_matching_participants": "Encerrar a pesquisa para participantes correspondentes", + "inclusion_criteria": "Critérios de Inclusão", + "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, other {O limite deve ser maior ou igual ao número de respostas}}", + "limited_to_x_responses": "Limitado a {limit}", + "new_quota": "Nova Cota", + "quota_created_successfull_toast": "Cota criada com sucesso", + "quota_deleted_successfull_toast": "Cota deletada com sucesso", + "quota_duplicated_successfull_toast": "Cota duplicada com sucesso", + "quota_name_placeholder": "ex.: Participantes de 18-25 anos", + "quota_updated_successfull_toast": "Cota atualizada com sucesso", + "response_limit": "Limites", + "save_changes_confirmation_body": "Quaisquer alterações nos critérios de inclusão afetam apenas respostas futuras. \nRecomendamos duplicar uma cota existente ou criar uma nova.", + "save_changes_confirmation_text": "Respostas existentes permanecem na cota", + "select_ending_card": "Selecione cartão de final", + "upgrade_prompt_title": "Use cotas com um plano superior", + "when_quota_has_been_reached": "Quando a cota for atingida" + }, "randomize_all": "Randomizar tudo", "randomize_all_except_last": "Randomizar tudo, exceto o último", "range": "alcance", @@ -1509,7 +1529,6 @@ "redirect_thank_you_card": "Redirecionar cartão de agradecimento", "redirect_to_url": "Redirecionar para URL", "redirect_to_url_not_available_on_free_plan": "Redirecionar para URL não está disponível no plano gratuito", - "release_survey_on_date": "Lançar pesquisa na data", "remove_description": "Remover descrição", "remove_translations": "Remover traduções", "require_answer": "Preciso de Resposta", @@ -1596,6 +1615,7 @@ "url_not_supported": "URL não suportada", "use_with_caution": "Use com cuidado", "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{variable} está sendo usado na lógica da pergunta {questionIndex}. Por favor, remova-o da lógica primeiro.", + "variable_is_used_in_quota_please_remove_it_from_quota_first": "Variável \"{variableName}\" está sendo usada na cota \"{quotaName}\"", "variable_name_is_already_taken_please_choose_another": "O nome da variável já está em uso, por favor escolha outro.", "variable_name_must_start_with_a_letter": "O nome da variável deve começar com uma letra.", "verify_email_before_submission": "Verifique o e-mail antes de enviar", @@ -1630,11 +1650,14 @@ "address_line_2": "Complemento", "an_error_occurred_deleting_the_tag": "Ocorreu um erro ao deletar a tag", "browser": "navegador", + "bulk_delete_response_quotas": "As respostas fazem parte das cotas desta pesquisa. Como você quer gerenciar as cotas?", "city": "Cidade", "company": "empresa", "completed": "Concluído ✅", "country": "País", + "decrement_quotas": "Diminua todos os limites de cotas, incluindo esta resposta", "delete_response_confirmation": "Isso irá excluir a resposta da pesquisa, incluindo todas as respostas, etiquetas, documentos anexados e metadados da resposta.", + "delete_response_quotas": "A resposta faz parte das cotas desta pesquisa. Como você quer gerenciar as cotas?", "device": "dispositivo", "device_info": "Informações do dispositivo", "email": "Email", @@ -1766,6 +1789,7 @@ "configure_alerts": "Configurar alertas", "congrats": "Parabéns! Sua pesquisa está no ar.", "connect_your_website_or_app_with_formbricks_to_get_started": "Conecte seu site ou app com o Formbricks para começar.", + "current_count": "Contagem Atual", "custom_range": "Intervalo personalizado...", "delete_all_existing_responses_and_displays": "Excluir todas as respostas e exibições existentes", "download_qr_code": "baixar código QR", @@ -1819,6 +1843,7 @@ "last_month": "Último mês", "last_quarter": "Último trimestre", "last_year": "Último ano", + "limit": "Limite", "no_responses_found": "Nenhuma resposta encontrada", "other_values_found": "Outros valores encontrados", "overall": "No geral", @@ -1827,6 +1852,8 @@ "qr_code_download_failed": "falha no download do código QR", "qr_code_download_with_start_soon": "O download do código QR começará em breve", "qr_code_generation_failed": "Houve um problema ao carregar o Código QR do questionário. Por favor, tente novamente.", + "quotas_completed": "Cotas concluídas", + "quotas_completed_tooltip": "Número de cotas preenchidas pelos respondentes.", "reset_survey": "Redefinir pesquisa", "reset_survey_warning": "Redefinir uma pesquisa remove todas as respostas e exibições associadas a esta pesquisa. Isto não pode ser desfeito.", "selected_responses_csv": "Respostas selecionadas (CSV)", @@ -1842,7 +1869,7 @@ "this_quarter": "Este trimestre", "this_year": "Este ano", "time_to_complete": "Tempo para Concluir", - "ttc_tooltip": "Tempo médio para completar a pesquisa.", + "ttc_tooltip": "Tempo médio para completar a pergunta.", "unknown_question_type": "Tipo de pergunta desconhecido", "use_personal_links": "Use links pessoais", "waiting_for_response": "Aguardando uma resposta \uD83E\uDDD8‍♂️", @@ -1853,7 +1880,6 @@ "survey_deleted_successfully": "Pesquisa deletada com sucesso!", "survey_duplicated_successfully": "Pesquisa duplicada com sucesso.", "survey_duplication_error": "Falha ao duplicar a pesquisa.", - "survey_status_tooltip": "Para atualizar o status da pesquisa, atualize o cronograma e feche a configuração nas opções de resposta da pesquisa.", "templates": { "all_channels": "Todos os canais", "all_industries": "Todas as indústrias", diff --git a/apps/web/locales/pt-PT.json b/apps/web/locales/pt-PT.json index ae4fceb203..eba76d7364 100644 --- a/apps/web/locales/pt-PT.json +++ b/apps/web/locales/pt-PT.json @@ -118,6 +118,7 @@ "account_settings": "Configurações da conta", "action": "Ação", "actions": "Ações", + "actions_description": "Ações com Código e Sem Código são usadas para acionar inquéritos de intercepção dentro de apps e em websites.", "active_surveys": "Inquéritos ativos", "activity": "Atividade", "add": "Adicionar", @@ -125,6 +126,7 @@ "add_filter": "Adicionar filtro", "add_logo": "Adicionar logótipo", "add_member": "Adicionar membro", + "add_new_project": "Adicionar novo projeto", "add_project": "Adicionar projeto", "add_to_team": "Adicionar à equipa", "all": "Todos", @@ -149,6 +151,9 @@ "cancel": "Cancelar", "centered_modal": "Modal Centralizado", "choices": "Escolhas", + "choose_environment": "Escolha o ambiente", + "choose_organization": "Escolher organização", + "choose_project": "Escolher projeto", "clear_all": "Limpar tudo", "clear_filters": "Limpar filtros", "clear_selection": "Limpar seleção", @@ -164,11 +169,14 @@ "connect_formbricks": "Ligar Formbricks", "connected": "Conectado", "contacts": "Contactos", + "continue": "Continuar", "copied": "Copiado", "copied_to_clipboard": "Copiado para a área de transferência", "copy": "Copiar", "copy_code": "Copiar código", "copy_link": "Copiar Link", + "count_contacts": "{value, plural, one {# contacto} other {# contactos} }", + "count_responses": "{value, plural, other {# respostas}}", "create_new_organization": "Criar nova organização", "create_project": "Criar projeto", "create_segment": "Criar segmento", @@ -177,7 +185,6 @@ "created_at": "Criado em", "created_by": "Criado por", "customer_success": "Sucesso do Cliente", - "danger_zone": "Zona de Perigo", "dark_overlay": "Sobreposição escura", "date": "Data", "default": "Padrão", @@ -197,10 +204,15 @@ "e_commerce": "Comércio Eletrónico", "edit": "Editar", "email": "Email", + "ending_card": "Cartão de encerramento", "enterprise_license": "Licença Enterprise", "environment_not_found": "Ambiente não encontrado", "environment_notice": "Está atualmente no ambiente {environment}.", "error": "Erro", + "error_component_description": "Este recurso não existe ou não tem os direitos necessários para aceder a ele.", + "error_component_title": "Erro ao carregar recursos", + "error_rate_limit_description": "Número máximo de pedidos alcançado. Por favor, tente novamente mais tarde.", + "error_rate_limit_title": "Limite de Taxa Excedido", "expand_rows": "Expandir linhas", "finish": "Concluir", "follow_these": "Siga estes", @@ -232,11 +244,9 @@ "label": "Etiqueta", "language": "Idioma", "learn_more": "Saiba mais", - "license": "Licença", "light_overlay": "Sobreposição leve", "limits_reached": "Limites Atingidos", "link": "Link", - "link_and_email": "Link e Email", "link_survey": "Ligar Inquérito", "link_surveys": "Ligar Inquéritos", "load_more": "Carregar mais", @@ -252,18 +262,20 @@ "membership_not_found": "Associação não encontrada", "metadata": "Metadados", "minimum": "Mínimo", - "mobile_overlay_text": "O Formbricks não está disponível para dispositivos com resoluções menores.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks funciona melhor num ecrã maior. Para gerir ou criar inquéritos, mude de dispositivo.", + "mobile_overlay_surveys_look_good": "Não se preocupe – os seus inquéritos têm uma ótima aparência em todos os dispositivos e tamanhos de ecrã!", + "mobile_overlay_title": "Oops, ecrã pequeno detectado!", "move_down": "Mover para baixo", "move_up": "Mover para cima", "multiple_languages": "Várias línguas", "name": "Nome", "new": "Novo", - "new_survey": "Novo inquérito", "new_version_available": "Formbricks {version} está aqui. Atualize agora!", "next": "Seguinte", "no_background_image_found": "Nenhuma imagem de fundo encontrada.", "no_code": "Sem código", "no_files_uploaded": "Nenhum ficheiro foi carregado", + "no_quotas_found": "Nenhum quota encontrado", "no_result_found": "Nenhum resultado encontrado", "no_results": "Nenhum resultado", "no_surveys_found": "Nenhum inquérito encontrado.", @@ -283,6 +295,7 @@ "organization": "Organização", "organization_id": "ID da Organização", "organization_not_found": "Organização não encontrada", + "organization_settings": "Configurações da Organização", "organization_teams_not_found": "Equipas da organização não encontradas", "other": "Outro", "others": "Outros", @@ -306,6 +319,7 @@ "product_manager": "Gestor de Produto", "profile": "Perfil", "profile_id": "ID do Perfil", + "progress": "Progresso", "project_configuration": "Configuração do Projeto", "project_creation_description": "Organize questionários em projetos para um melhor controlo de acesso.", "project_id": "ID do Projeto", @@ -317,6 +331,9 @@ "question": "Pergunta", "question_id": "ID da pergunta", "questions": "Perguntas", + "quota": "Quota", + "quotas": "Quotas", + "quotas_description": "Limitar a quantidade de respostas recebidas de participantes que atendem a certos critérios.", "read_docs": "Ler Documentos", "recipients": "Destinatários", "remove": "Remover", @@ -335,7 +352,6 @@ "save": "Guardar", "save_changes": "Guardar alterações", "saving": "Guardando", - "scheduled": "Agendado", "search": "Procurar", "security": "Segurança", "segment": "Segmento", @@ -365,6 +381,7 @@ "start_free_trial": "Iniciar Teste Grátis", "status": "Estado", "step_by_step_manual": "Manual passo a passo", + "storage_not_configured": "Armazenamento de ficheiros não configurado, uploads provavelmente falharão", "styling": "Estilo", "submit": "Submeter", "summary": "Resumo", @@ -375,10 +392,8 @@ "survey_live": "Inquérito ao vivo", "survey_not_found": "Inquérito não encontrado", "survey_paused": "Inquérito pausado.", - "survey_scheduled": "Inquérito agendado.", "survey_type": "Tipo de Inquérito", "surveys": "Inquéritos", - "switch_organization": "Mudar de organização", "switch_to": "Mudar para {environment}", "table_items_deleted_successfully": "{type}s eliminados com sucesso", "table_settings": "Configurações da tabela", @@ -576,8 +591,7 @@ "contacts_table_refresh": "Atualizar contactos", "contacts_table_refresh_success": "Contactos atualizados com sucesso", "delete_contact_confirmation": "Isto irá eliminar todas as respostas das pesquisas e os atributos de contato associados a este contato. Qualquer direcionamento e personalização baseados nos dados deste contato serão perdidos.", - "first_name": "Primeiro Nome", - "last_name": "Apelido", + "delete_contact_confirmation_with_quotas": "{value, plural, other {Isto irá eliminar todas as respostas das pesquisas e os atributos de contacto associados a este contacto. Qualquer segmentação e personalização baseados nos dados deste contacto serão perdidos. Se este contacto tiver respostas que contribuam para as quotas das pesquisas, as contagens de quotas serão reduzidas, mas os limites das quotas permanecerão inalterados.}}", "no_responses_found": "Nenhuma resposta encontrada", "not_provided": "Não fornecido", "search_contact": "Procurar contacto", @@ -738,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Controlo de Acesso", "add_api_key": "Adicionar Chave API", "api_key": "Chave API", "api_key_copied_to_clipboard": "Chave API copiada para a área de transferência", @@ -747,7 +760,6 @@ "api_key_label": "Etiqueta da Chave API", "api_key_security_warning": "Por razões de segurança, a chave API será mostrada apenas uma vez após a criação. Por favor, copie-a para o seu destino imediatamente.", "api_key_updated": "Chave API atualizada", - "delete_permission": "Eliminar permissão", "duplicate_access": "Acesso duplicado ao projeto não permitido", "no_api_keys_yet": "Ainda não tem nenhuma chave API", "no_env_permissions_found": "Nenhuma permissão de ambiente encontrada", @@ -759,45 +771,21 @@ "unable_to_delete_api_key": "Não é possível eliminar a chave API" }, "app-connection": { - "api_host_description": "Este é o URL do seu backend Formbricks.", "app_connection": "Ligação de Aplicação", "app_connection_description": "Ligue a sua aplicação ao Formbricks", "cache_update_delay_description": "Quando fizer atualizações para inquéritos, contactos, ações ou outros dados, pode demorar até 5 minutos para que essas alterações apareçam na sua aplicação local a correr o SDK do Formbricks. Este atraso deve-se a uma limitação no nosso atual sistema de cache. Estamos a trabalhar ativamente na reformulação da cache e lançaremos uma correção no Formbricks 4.0.", "cache_update_delay_title": "As alterações serão refletidas após 5 minutos devido ao armazenamento em cache.", - "check_out_the_docs": "Consulte a documentação.", - "dive_into_the_docs": "Mergulhe na documentação.", - "does_your_widget_work": "O seu widget funciona?", - "environment_id": "O seu EnvironmentId", + "environment_id": "O Seu ID de Ambiente", "environment_id_description": "Este id identifica de forma única este ambiente Formbricks.", - "environment_id_description_with_environment_id": "Usado para identificar o ambiente correto: {environmentId} é o seu.", - "formbricks_sdk": "SDK Formbricks", "formbricks_sdk_connected": "O SDK do Formbricks está conectado", "formbricks_sdk_not_connected": "O SDK do Formbricks ainda não está conectado", "formbricks_sdk_not_connected_description": "Ligue o seu website ou aplicação ao Formbricks", - "have_a_problem": "Tem um problema?", "how_to_setup": "Como configurar", "how_to_setup_description": "Siga estes passos para configurar o widget Formbricks na sua aplicação.", - "identifying_your_users": "identificar os seus utilizadores", - "if_you_are_planning_to": "Se está a planear", - "insert_this_code_into_the": "Insira este código no", - "need_a_more_detailed_setup_guide_for": "Precisa de um guia de configuração mais detalhado para", - "not_working": "Não está a funcionar?", - "open_an_issue_on_github": "Abrir um problema no GitHub", - "open_the_browser_console_to_see_the_logs": "Abra a consola do navegador para ver os registos.", "receiving_data": "A receber dados \uD83D\uDC83\uD83D\uDD7A", "recheck": "Verificar novamente", - "scroll_to_the_top": "Rolar para o topo!", - "step_1": "Passo 1: Instalar com pnpm, npm ou yarn", - "step_2": "Passo 2: Inicializar widget", - "step_2_description": "Importar Formbricks e inicializar o widget no seu Componente (por exemplo, App.tsx):", - "step_3": "Passo 3: Modo de depuração", - "switch_on_the_debug_mode_by_appending": "Ativar o modo de depuração adicionando", - "tag_of_your_app": "tag da sua aplicação", - "to_the_url_where_you_load_the": "para o URL onde carrega o", - "want_to_learn_how_to_add_user_attributes": "Quer aprender a adicionar atributos de utilizador, eventos personalizados e mais?", - "you_are_done": "Está concluído \uD83C\uDF89", - "you_can_set_the_user_id_with": "pode definir o ID do utilizador com", - "your_app_now_communicates_with_formbricks": "A sua aplicação agora comunica com o Formbricks - enviando eventos e carregando inquéritos automaticamente!" + "setup_alert_description": "Siga este tutorial passo-a-passo para ligar a sua aplicação ou website em menos de 5 minutos", + "setup_alert_title": "Como conectar" }, "general": { "cannot_delete_only_project": "Este é o seu único projeto, não pode ser eliminado. Crie um novo projeto primeiro.", @@ -989,7 +977,6 @@ "free": "Grátis", "free_description": "Inquéritos ilimitados, membros da equipa e mais.", "get_2_months_free": "Obtenha 2 meses grátis", - "get_in_touch": "Entre em contacto", "hosted_in_frankfurt": "Hospedado em Frankfurt", "ios_android_sdks": "SDK iOS e Android para inquéritos móveis", "link_surveys": "Ligar Inquéritos (Partilhável)", @@ -1251,9 +1238,7 @@ "automatically_close_survey_after": "Fechar automaticamente o inquérito após", "automatically_close_the_survey_after_a_certain_number_of_responses": "Fechar automaticamente o inquérito após um certo número de respostas", "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Fechar automaticamente o inquérito se o utilizador não responder após um certo número de segundos.", - "automatically_closes_the_survey_at_the_beginning_of_the_day_utc": "Encerrar automaticamente o inquérito no início do dia (UTC).", "automatically_mark_the_survey_as_complete_after": "Marcar automaticamente o inquérito como concluído após", - "automatically_release_the_survey_at_the_beginning_of_the_day_utc": "Lançar automaticamente o inquérito no início do dia (UTC).", "back_button_label": "Rótulo do botão \"Voltar\"", "background_styling": "Estilo de Fundo", "brand_color": "Cor da marca", @@ -1301,14 +1286,13 @@ "choose_the_actions_which_trigger_the_survey": "Escolha as ações que desencadeiam o inquérito.", "choose_where_to_run_the_survey": "Escolha onde realizar o inquérito.", "city": "Cidade", - "close_survey_on_date": "Encerrar inquérito na data", "close_survey_on_response_limit": "Fechar inquérito no limite de respostas", "color": "Cor", "column_used_in_logic_error": "Esta coluna é usada na lógica da pergunta {questionIndex}. Por favor, remova-a da lógica primeiro.", "columns": "Colunas", "company": "Empresa", "company_logo": "Logotipo da empresa", - "completed_responses": "respostas parciais ou completas", + "completed_responses": "Respostas concluídas", "concat": "Concatenar +", "conditional_logic": "Lógica Condicional", "confirm_default_language": "Confirmar idioma padrão", @@ -1348,6 +1332,7 @@ "end_screen_card": "Cartão de ecrã final", "ending_card": "Cartão de encerramento", "ending_card_used_in_logic": "Este cartão final é usado na lógica da pergunta {questionIndex}.", + "ending_used_in_quota": "Este final está a ser usado na quota \"{quotaName}\"", "ends_with": "Termina com", "equals": "Igual", "equals_one_of": "Igual a um de", @@ -1358,6 +1343,7 @@ "fallback_for": "Alternativa para ", "fallback_missing": "Substituição em falta", "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{fieldId} é usado na lógica da pergunta {questionIndex}. Por favor, remova-o da lógica primeiro.", + "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "Campo oculto \"{fieldId}\" está a ser usado na quota \"{quotaName}\"", "field_name_eg_score_price": "Nome do campo, por exemplo, pontuação, preço", "first_name": "Primeiro Nome", "five_points_recommended": "5 pontos (recomendado)", @@ -1389,8 +1375,9 @@ "follow_ups_modal_action_subject_placeholder": "Assunto do email", "follow_ups_modal_action_to_description": "Endereço de email para enviar o email", "follow_ups_modal_action_to_label": "Para", - "follow_ups_modal_action_to_warning": "Nenhum campo de email detetado no inquérito", + "follow_ups_modal_action_to_warning": "Não foram encontradas opções válidas para envio de emails, por favor adicione algumas perguntas de texto livre / informações de contato ou campos escondidos", "follow_ups_modal_create_heading": "Criar um novo acompanhamento", + "follow_ups_modal_created_successfull_toast": "Seguimento criado e será guardado assim que guardar o questionário.", "follow_ups_modal_edit_heading": "Editar este acompanhamento", "follow_ups_modal_edit_no_id": "Nenhum ID de acompanhamento do inquérito fornecido, não é possível atualizar o acompanhamento do inquérito", "follow_ups_modal_name_label": "Nome do acompanhamento", @@ -1400,8 +1387,9 @@ "follow_ups_modal_trigger_label": "Desencadeador", "follow_ups_modal_trigger_type_ending": "O respondente vê um final específico", "follow_ups_modal_trigger_type_ending_select": "Selecionar finais: ", - "follow_ups_modal_trigger_type_ending_warning": "Não foram encontrados finais no inquérito!", + "follow_ups_modal_trigger_type_ending_warning": "Por favor, selecione pelo menos um final ou mude o tipo de gatilho", "follow_ups_modal_trigger_type_response": "Respondente conclui inquérito", + "follow_ups_modal_updated_successfull_toast": "Seguimento atualizado e será guardado assim que guardar o questionário.", "follow_ups_new": "Novo acompanhamento", "follow_ups_upgrade_button_text": "Atualize para ativar os acompanhamentos", "form_styling": "Estilo do formulário", @@ -1502,6 +1490,38 @@ "question_duplicated": "Pergunta duplicada.", "question_id_updated": "ID da pergunta atualizado", "question_used_in_logic": "Esta pergunta é usada na lógica da pergunta {questionIndex}.", + "question_used_in_quota": "Esta pergunta está a ser usada na quota \"{quotaName}\"", + "quotas": { + "add_quota": "Adicionar quota", + "change_quota_for_public_survey": "Alterar quota para inquérito público?", + "confirm_quota_changes": "Confirmar Alterações das Quotas", + "confirm_quota_changes_body": "Tem alterações não guardadas na sua cota. Gostaria de as guardar antes de sair?", + "continue_survey_normally": "Continua a pesquisa normalmente", + "count_partial_submissions": "Contar submissões parciais", + "count_partial_submissions_description": "Incluir respondentes que correspondem aos critérios de quota mas não completaram o inquérito", + "create_quota_for_public_survey": "Criar quota para inquérito público?", + "create_quota_for_public_survey_description": "Apenas respostas futuras serão controladas no limite", + "create_quota_for_public_survey_text": "Este questionário já é público. As respostas existentes não serão consideradas na nova quota.", + "delete_quota_confirmation_text": "Isto irá apagar permanentemente a quota {quotaName}.", + "duplicate_quota": "Duplicar quota", + "edit_quota": "Editar cota", + "end_survey_for_matching_participants": "Encerrar inquérito para participantes correspondentes", + "inclusion_criteria": "Critérios de Inclusão", + "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, other {Limite deve ser maior ou igual ao número de respostas}}", + "limited_to_x_responses": "Limitado a {limit}", + "new_quota": "Nova Cota", + "quota_created_successfull_toast": "Quota criada com sucesso", + "quota_deleted_successfull_toast": "Quota eliminada com sucesso", + "quota_duplicated_successfull_toast": "Quota duplicada com sucesso", + "quota_name_placeholder": "por exemplo, Participantes Idade 18-25", + "quota_updated_successfull_toast": "Quota atualizada com sucesso", + "response_limit": "Limites", + "save_changes_confirmation_body": "Quaisquer alterações aos critérios de inclusão afetam apenas respostas futuras. \nRecomendamos duplicar uma cota existente ou criar uma nova.", + "save_changes_confirmation_text": "As respostas existentes permanecem na cota", + "select_ending_card": "Selecionar cartão de encerramento", + "upgrade_prompt_title": "Utilize quotas com um plano superior", + "when_quota_has_been_reached": "Quando a quota foi atingida" + }, "randomize_all": "Aleatorizar todos", "randomize_all_except_last": "Aleatorizar todos exceto o último", "range": "Intervalo", @@ -1509,7 +1529,6 @@ "redirect_thank_you_card": "Redirecionar cartão de agradecimento", "redirect_to_url": "Redirecionar para Url", "redirect_to_url_not_available_on_free_plan": "Redirecionar para URL não está disponível no plano gratuito", - "release_survey_on_date": "Lançar inquérito na data", "remove_description": "Remover descrição", "remove_translations": "Remover traduções", "require_answer": "Exigir Resposta", @@ -1596,6 +1615,7 @@ "url_not_supported": "URL não suportado", "use_with_caution": "Usar com cautela", "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{variable} é usada na lógica da pergunta {questionIndex}. Por favor, remova-a da lógica primeiro.", + "variable_is_used_in_quota_please_remove_it_from_quota_first": "Variável \"{variableName}\" está a ser utilizada na quota \"{quotaName}\"", "variable_name_is_already_taken_please_choose_another": "O nome da variável já está em uso, por favor escolha outro.", "variable_name_must_start_with_a_letter": "O nome da variável deve começar com uma letra.", "verify_email_before_submission": "Verificar email antes da submissão", @@ -1630,11 +1650,14 @@ "address_line_2": "Endereço Linha 2", "an_error_occurred_deleting_the_tag": "Ocorreu um erro ao eliminar a etiqueta", "browser": "Navegador", + "bulk_delete_response_quotas": "As respostas são parte das quotas deste inquérito. Como deseja gerir as quotas?", "city": "Cidade", "company": "Empresa", "completed": "Concluído ✅", "country": "País", + "decrement_quotas": "Decrementar todos os limites das cotas incluindo esta resposta", "delete_response_confirmation": "Isto irá apagar a resposta do inquérito, incluindo todas as respostas, etiquetas, documentos anexos e metadados da resposta.", + "delete_response_quotas": "A resposta faz parte das quotas deste inquérito. Como deseja gerir as quotas?", "device": "Dispositivo", "device_info": "Informações do dispositivo", "email": "Email", @@ -1766,6 +1789,7 @@ "configure_alerts": "Configurar alertas", "congrats": "Parabéns! O seu inquérito está ativo.", "connect_your_website_or_app_with_formbricks_to_get_started": "Ligue o seu website ou aplicação ao Formbricks para começar.", + "current_count": "Contagem atual", "custom_range": "Intervalo personalizado...", "delete_all_existing_responses_and_displays": "Excluir todas as respostas existentes e exibições", "download_qr_code": "Transferir código QR", @@ -1819,6 +1843,7 @@ "last_month": "Último mês", "last_quarter": "Último trimestre", "last_year": "Ano passado", + "limit": "Limite", "no_responses_found": "Nenhuma resposta encontrada", "other_values_found": "Outros valores encontrados", "overall": "Geral", @@ -1827,6 +1852,8 @@ "qr_code_download_failed": "Falha ao transferir o código QR", "qr_code_download_with_start_soon": "O download do código QR começará em breve", "qr_code_generation_failed": "Ocorreu um problema ao carregar o Código QR do questionário. Por favor, tente novamente.", + "quotas_completed": "Quotas concluídas", + "quotas_completed_tooltip": "O número de quotas concluídas pelos respondentes.", "reset_survey": "Reiniciar inquérito", "reset_survey_warning": "Repor um inquérito remove todas as respostas e visualizações associadas a este inquérito. Isto não pode ser desfeito.", "selected_responses_csv": "Respostas selecionadas (CSV)", @@ -1842,7 +1869,7 @@ "this_quarter": "Este trimestre", "this_year": "Este ano", "time_to_complete": "Tempo para Concluir", - "ttc_tooltip": "Tempo médio para concluir o inquérito.", + "ttc_tooltip": "Tempo médio para concluir a pergunta.", "unknown_question_type": "Tipo de Pergunta Desconhecido", "use_personal_links": "Utilize links pessoais", "waiting_for_response": "A aguardar uma resposta \uD83E\uDDD8‍♂️", @@ -1853,7 +1880,6 @@ "survey_deleted_successfully": "Inquérito eliminado com sucesso!", "survey_duplicated_successfully": "Inquérito duplicado com sucesso.", "survey_duplication_error": "Falha ao duplicar o inquérito.", - "survey_status_tooltip": "Para atualizar o estado do inquérito, atualize o agendamento e feche a configuração nas opções de resposta do inquérito.", "templates": { "all_channels": "Todos os canais", "all_industries": "Todas as indústrias", diff --git a/apps/web/locales/ro-RO.json b/apps/web/locales/ro-RO.json index 7ab0ddb562..ebe96c66a0 100644 --- a/apps/web/locales/ro-RO.json +++ b/apps/web/locales/ro-RO.json @@ -1,7 +1,7 @@ { "auth": { "continue_with_azure": "Continuă cu Microsoft", - "continue_with_email": "Continuă cu Email", + "continue_with_email": "Continuă cu email", "continue_with_github": "Continuă cu GitHub", "continue_with_google": "Continuă cu Google", "continue_with_oidc": "Continuă cu {oidcDisplayName}", @@ -49,7 +49,7 @@ "invite_not_found": "Invitația nu a fost găsită \uD83D\uDE25", "invite_not_found_description": "Codul de invitație nu poate fi găsit sau a fost deja utilizat.", "login": "Autentificare", - "welcome_to_organization": "Ești în \uD83C\uDF89", + "welcome_to_organization": "Ai fost acceptat \uD83C\uDF89", "welcome_to_organization_description": "Bun venit în organizație." }, "last_used": "Ultima utilizare", @@ -65,7 +65,7 @@ "new_to_formbricks": "Nou în Formbricks?", "use_a_backup_code": "Folosiți un cod de rezervă" }, - "saml_connection_error": "Ceva a mers prost. Vă rugăm să verificați consola aplicației pentru mai multe detalii.", + "saml_connection_error": "Ceva nu a mers. Vă rugăm să verificați consola aplicației pentru mai multe detalii.", "signup": { "captcha_failed": "Captcha eșuat", "have_an_account": "Ai un cont?", @@ -73,16 +73,16 @@ "password_validation_contain_at_least_1_number": "Conține cel puțin 1 număr", "password_validation_minimum_8_and_maximum_128_characters": "Minim 8 & Maxim 128 caractere", "password_validation_uppercase_and_lowercase": "Amestec de majuscule și minuscule", - "please_verify_captcha": "Vă rugăm să verificați reCAPTCHA", - "privacy_policy": "Politica de Confidențialitate", - "terms_of_service": "Termeni de Serviciu", + "please_verify_captcha": "Vă rugăm să verificați CAPTCHA", + "privacy_policy": "Politica de confidențialitate", + "terms_of_service": "Termeni de utilizare a serviciului", "title": "Creați-vă contul Formbricks" }, "signup_without_verification_success": { "user_successfully_created": "Utilizator creat cu succes", "user_successfully_created_info": "Am verificat pentru un cont asociat cu {email}. Dacă nu a existat niciunul, am creat unul pentru tine. Dacă un cont deja exista, nu s-au făcut modificări. Vă rugăm să vă conectați mai jos pentru a continua." }, - "testimonial_1": "\"Măsurăm claritatea documentațiilor noastre și învățăm din pierderi în folosirea aceleași platforme. Produs grozav, echipă foarte receptivă!\"", + "testimonial_1": "\"Măsurăm claritatea documentațiilor noastre și învățăm din greșeli în folosirea platformei. Produs grozav, echipă foarte receptivă!\"", "testimonial_all_features_included": "Toate funcționalitățile incluse", "testimonial_free_and_open_source": "Gratuit și open-source", "testimonial_no_credit_card_required": "Nu este necesar niciun card de credit", @@ -118,6 +118,7 @@ "account_settings": "Setări cont", "action": "Acțiune", "actions": "Acțiuni", + "actions_description": "Acțiunile Cod și No-Code sunt utilizate pentru a declanșa chestionare de interceptare în aplicații și pe site-uri web.", "active_surveys": "Sondaje active", "activity": "Activitate", "add": "Adaugă", @@ -125,6 +126,7 @@ "add_filter": "Adăugați filtru", "add_logo": "Adaugă logo", "add_member": "Adaugă membru", + "add_new_project": "Adaugă proiect nou", "add_project": "Adaugă proiect", "add_to_team": "Adaugă la echipă", "all": "Toate", @@ -137,7 +139,7 @@ "anonymous": "Anonim", "api_keys": "Chei API", "app": "Aplicație", - "app_survey": "Sondaj Aplicație", + "app_survey": "Sondaj aplicație", "apply_filters": "Aplică filtre", "are_you_sure": "Ești sigur?", "attributes": "Atribute", @@ -149,6 +151,9 @@ "cancel": "Anulare", "centered_modal": "Modală centralizată", "choices": "Alegeri", + "choose_environment": "Alege mediul", + "choose_organization": "Alege organizația", + "choose_project": "Alege proiectul", "clear_all": "Șterge tot", "clear_filters": "Curăță filtrele", "clear_selection": "Șterge selecția", @@ -164,11 +169,14 @@ "connect_formbricks": "Conectează Formbricks", "connected": "Conectat", "contacts": "Contacte", + "continue": "Continuă", "copied": "Copiat", "copied_to_clipboard": "Copiat în clipboard", "copy": "Copiază", "copy_code": "Copiază codul", "copy_link": "Copiază legătura", + "count_contacts": "{value, plural, one {# contact} other {# contacte} }", + "count_responses": "{value, plural, one {# răspuns} other {# răspunsuri} }", "create_new_organization": "Creează organizație nouă", "create_project": "Creează proiect", "create_segment": "Creați segment", @@ -177,7 +185,6 @@ "created_at": "Creat la", "created_by": "Creat de", "customer_success": "Succesul Clientului", - "danger_zone": "Zonă periculoasă", "dark_overlay": "Suprapunere întunecată", "date": "Dată", "default": "Implicit", @@ -197,10 +204,15 @@ "e_commerce": "Comerț electronic", "edit": "Editare", "email": "Email", + "ending_card": "Cardul de finalizare", "enterprise_license": "Licență Întreprindere", "environment_not_found": "Mediul nu a fost găsit", "environment_notice": "Te afli în prezent în mediul {environment}", "error": "Eroare", + "error_component_description": "Această resursă nu există sau nu aveți drepturile necesare pentru a o accesa.", + "error_component_title": "Eroare la încărcarea resurselor", + "error_rate_limit_description": "Numărul maxim de cereri atins. Vă rugăm să încercați din nou mai târziu.", + "error_rate_limit_title": "Limită de cereri depășită", "expand_rows": "Extinde rândurile", "finish": "Finalizează", "follow_these": "Urmați acestea", @@ -232,11 +244,9 @@ "label": "Etichetă", "language": "Limba", "learn_more": "Află mai multe", - "license": "Licență", "light_overlay": "Suprapunere ușoară", "limits_reached": "Limite atinse", "link": "Legătura", - "link_and_email": "Link & email", "link_survey": "Conectează chestionarul", "link_surveys": "Conectează chestionarele", "load_more": "Încarcă mai multe", @@ -252,18 +262,20 @@ "membership_not_found": "Apartenența nu a fost găsită", "metadata": "Metadate", "minimum": "Minim", - "mobile_overlay_text": "Formbricks nu este disponibil pentru dispozitive cu rezoluții mai mici.", + "mobile_overlay_app_works_best_on_desktop": "Formbricks funcționează cel mai bine pe un ecran mai mare. Pentru a gestiona sau crea chestionare, treceți la un alt dispozitiv.", + "mobile_overlay_surveys_look_good": "Nu vă faceți griji – chestionarele dumneavoastră arată grozav pe orice dispozitiv și dimensiune a ecranului!", + "mobile_overlay_title": "Ups, ecran mic detectat!", "move_down": "Mută în jos", "move_up": "Mută sus", "multiple_languages": "Mai multe limbi", "name": "Nume", "new": "Nou", - "new_survey": "Chestionar Nou", "new_version_available": "Formbricks {version} este disponibil. Actualizați acum!", "next": "Următorul", "no_background_image_found": "Nu a fost găsită nicio imagine de fundal.", "no_code": "Fără Cod", "no_files_uploaded": "Nu au fost încărcate fișiere", + "no_quotas_found": "Nicio cotă găsită", "no_result_found": "Niciun rezultat găsit", "no_results": "Nicio rezultat", "no_surveys_found": "Nu au fost găsite sondaje.", @@ -282,13 +294,14 @@ "or": "sau", "organization": "Organizație", "organization_id": "ID Organizație", - "organization_not_found": "Organizație nu a fost găsită", + "organization_not_found": "Organizația nu a fost găsită", + "organization_settings": "Setări Organizație", "organization_teams_not_found": "Echipele organizației nu au fost găsite", "other": "Altele", "others": "Altele", "overview": "Prezentare generală", "password": "Parolă", - "paused": "Pauzat", + "paused": "Pauză", "pending_downgrade": "Reducere în aşteptare", "people_manager": "Manager de persoane", "person": "Persoană", @@ -306,7 +319,8 @@ "product_manager": "Manager de Produs", "profile": "Profil", "profile_id": "ID Profil", - "project_configuration": "Configurarea Proiectului", + "progress": "Progres", + "project_configuration": "Configurare proiect", "project_creation_description": "Organizați sondajele în proiecte pentru un control mai bun al accesului.", "project_id": "ID proiect", "project_name": "Nume proiect", @@ -317,6 +331,9 @@ "question": "Întrebare", "question_id": "ID întrebare", "questions": "Întrebări", + "quota": "Cotă", + "quotas": "Cote", + "quotas_description": "Limitați numărul de răspunsuri primite de la participanții care îndeplinesc anumite criterii.", "read_docs": "Citește documentația", "recipients": "Destinatari", "remove": "Șterge", @@ -324,7 +341,7 @@ "report_survey": "Raportează chestionarul", "request_pricing": "Solicită Prețuri", "request_trial_license": "Solicitați o licență de încercare", - "reset_to_default": "Revină la implicit", + "reset_to_default": "Revino la implicit", "response": "Răspuns", "responses": "Răspunsuri", "restart": "Repornește", @@ -335,7 +352,6 @@ "save": "Salvează", "save_changes": "Salvează modificările", "saving": "Salvare", - "scheduled": "Programat", "search": "Căutare", "security": "Securitate", "segment": "Segment", @@ -354,7 +370,7 @@ "share_feedback": "Împărtășește feedback", "show": "Afișează", "show_response_count": "Afișează numărul de răspunsuri", - "shown": "Arătat", + "shown": "Afișat", "size": "Mărime", "skipped": "Sărit", "skips": "Salturi", @@ -362,9 +378,10 @@ "something_went_wrong": "Ceva nu a mers bine", "something_went_wrong_please_try_again": "Ceva nu a mers bine. Vă rugăm să încercați din nou.", "sort_by": "Sortare după", - "start_free_trial": "Începe Perioada de Testare Gratuită", + "start_free_trial": "Începe perioada de testare gratuită", "status": "Stare", "step_by_step_manual": "Manual pas cu pas", + "storage_not_configured": "Stocarea fișierelor neconfigurată, upload-urile vor eșua probabil", "styling": "Stilizare", "submit": "Trimite", "summary": "Sumar", @@ -375,10 +392,8 @@ "survey_live": "Chestionar activ", "survey_not_found": "Sondajul nu a fost găsit", "survey_paused": "Chestionar oprit.", - "survey_scheduled": "Chestionar programat.", "survey_type": "Tip Chestionar", "surveys": "Sondaje", - "switch_organization": "Comută organizația", "switch_to": "Comută la {environment}", "table_items_deleted_successfully": "\"{type} șterse cu succes\"", "table_settings": "Setări tabel", @@ -433,15 +448,15 @@ "click_or_drag_to_upload_files": "Faceți clic sau trageți pentru a încărca fișiere.", "email_customization_preview_email_heading": "Salut {userName}", "email_customization_preview_email_subject": "Previzualizare Personalizare Email Formbricks", - "email_customization_preview_email_text": "Acesta este un previzualizare a e-mailului pentru a vă arăta ce logo va fi afișat în e-mailurile.", + "email_customization_preview_email_text": "Acesta este o previzualizare a emailului pentru a vă arăta ce logo va fi afișat în emailurile viitoare.", "email_footer_text_1": "O zi minunată!", "email_footer_text_2": "Echipa Formbricks", "email_template_text_1": "Acest email a fost trimis prin Formbricks.", "embed_survey_preview_email_didnt_request": "Nu ați solicitat asta?", "embed_survey_preview_email_environment_id": "ID de mediu", "embed_survey_preview_email_fight_spam": "Ajută-ne să combatem spam-ul și trimite acest e-mail la hola@formbricks.com", - "embed_survey_preview_email_heading": "Previzualizare Incorporare Email", - "embed_survey_preview_email_subject": "Previzualizare Chestionar Email Formbricks", + "embed_survey_preview_email_heading": "Previzualizare încorporare email", + "embed_survey_preview_email_subject": "Previzualizare chestionar email Formbricks", "embed_survey_preview_email_text": "Așa arată fragmentul de cod încorporat într-un email:", "forgot_password_email_change_password": "Schimbați parola", "forgot_password_email_did_not_request": "Dacă nu ați solicitat acest lucru, vă rugăm să ignorați acest email.", @@ -463,7 +478,7 @@ "password_changed_email_heading": "Parola modificată", "password_changed_email_text": "Parola dumneavoastră a fost schimbată cu succes.", "password_reset_notify_email_subject": "Parola dumneavoastră Formbricks a fost schimbată", - "privacy_policy": "Politica de Confidențialitate", + "privacy_policy": "Politica de confidențialitate", "reject": "Respinge", "render_email_response_value_file_upload_response_link_not_included": "Linkul către fișierul încărcat nu este inclus din motive de confidențialitate a datelor", "response_finished_email_subject": "Un răspuns pentru {surveyName} a fost finalizat ✅", @@ -491,7 +506,7 @@ "verification_email_to_fill_survey": "Pentru a completa sondajul, vă rugăm să faceți clic pe butonul de mai jos:", "verification_email_verify_email": "Verifică emailul", "verification_new_email_subject": "Verificare schimbare email", - "verification_security_notice": "Dacă nu ați cerut această modificare a e-mailului, vă rugăm să ignorați acest e-mail sau să contactați suportul imediat.", + "verification_security_notice": "Dacă nu ați cerut această modificare a emailului, vă rugăm să ignorați acest email sau să contactați suportul imediat.", "verified_link_survey_email_subject": "Chestionarul tău este gata să fie completat." }, "environments": { @@ -500,7 +515,7 @@ "action_copy_failed": "Copierea acțiunii a eșuat", "action_created_successfully": "Acțiune creată cu succes", "action_deleted_successfully": "Acțiune ștearsă cu succes.", - "action_type": "Tip Acțiune", + "action_type": "Tip acțiune", "action_updated_successfully": "Acțiune actualizată cu succes", "action_with_key_already_exists": "Acțiunea cu cheia {key} există deja", "action_with_name_already_exists": "Acțiunea cu numele {name} există deja", @@ -563,7 +578,7 @@ "congrats": "Felicitări!", "connection_successful_message": "Bravo! Suntem conectați.", "do_it_later": "Am să o fac mai târziu", - "finish_onboarding": "Încheie Înregistrarea", + "finish_onboarding": "Încheie înregistrarea", "headline": "Conectați aplicația sau site-ul dvs.", "import_formbricks_and_initialize_the_widget_in_your_component": "Importați Formbricks și inițializați widgetul în componenta dumneavoastră (de exemplu, App.tsx):", "insert_this_code_into_the_head_tag_of_your_website": "Introduceți acest cod în eticheta head a site-ului dvs.:", @@ -576,12 +591,11 @@ "contacts_table_refresh": "Reîmprospătare contacte", "contacts_table_refresh_success": "Contactele au fost actualizate cu succes", "delete_contact_confirmation": "Acest lucru va șterge toate răspunsurile la sondaj și atributele de contact asociate cu acest contact. Orice țintire și personalizare bazată pe datele acestui contact vor fi pierdute.", - "first_name": "Prenume", - "last_name": "Nume de familie", + "delete_contact_confirmation_with_quotas": "{value, plural, one {Această acțiune va șterge toate răspunsurile chestionarului și atributele de contact asociate cu acest contact. Orice țintire și personalizare bazată pe datele acestui contact vor fi pierdute. Dacă acest contact are răspunsuri care contează pentru cotele chestionarului, numărul cotelor va fi redus, dar limitele cotelor vor rămâne neschimbate.} other {Aceste acțiuni vor șterge toate răspunsurile chestionarului și atributele de contact asociate cu acești contacți. Orice țintire și personalizare bazată pe datele acestor contacți vor fi pierdute. Dacă acești contacți au răspunsuri care contează pentru cotele chestionarului, numărul cotelor va fi redus, dar limitele cotelor vor rămâne neschimbate.} }", "no_responses_found": "Nu s-au găsit răspunsuri", - "not_provided": "Neprovidat", + "not_provided": "Nu a fost furnizat", "search_contact": "Căutați contact", - "select_attribute": "Selectează Atributul", + "select_attribute": "Selectează atributul", "unlock_contacts_description": "Gestionează contactele și trimite sondaje țintite", "unlock_contacts_title": "Deblocați contactele cu un plan superior.", "upload_contacts_modal_attributes_description": "Mapează coloanele din CSV-ul tău la atributele din Formbricks.", @@ -628,7 +642,7 @@ "connected_with_email": "Conectat cu {email}", "connecting_integration_failed_please_try_again": "Conectarea integrării a eșuat. Vă rugăm să încercați din nou!", "create_survey_warning": "Trebuie să creezi un sondaj pentru a putea configura această integrare", - "delete_integration": "Șterge Integrarea", + "delete_integration": "Șterge integrarea", "delete_integration_confirmation": "Sigur doriți să ștergeți această integrare?", "google_sheet_integration_description": "Completați instantaneu foile de calcul cu datele chestionarului", "google_sheets": { @@ -646,7 +660,7 @@ "no_integrations_yet": "Integrațiile tale Google Sheet vor apărea aici de îndată ce le vei adăuga. ⏲️", "spreadsheet_url": "URL foaie de calcul" }, - "include_created_at": "Include Data Creării", + "include_created_at": "Include data creării", "include_hidden_fields": "Include câmpuri ascunse", "include_metadata": "Includere Metadata (Browser, Țară, etc.)", "include_variables": "Include Variabile", @@ -738,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "Control acces", "add_api_key": "Adaugă Cheie API", "api_key": "Cheie API", "api_key_copied_to_clipboard": "Cheia API a fost copiată în clipboard", @@ -747,7 +760,6 @@ "api_key_label": "Etichetă Cheie API", "api_key_security_warning": "Din motive de securitate, cheia API va fi afișată o singură dată după creare. Vă rugăm să o copiați imediat la destinație.", "api_key_updated": "Cheie API actualizată", - "delete_permission": "Șterge permisiunea", "duplicate_access": "Accesul dublu la proiect nu este permis", "no_api_keys_yet": "Nu aveți încă chei API", "no_env_permissions_found": "Nu s-au găsit permisiuni pentru mediu", @@ -759,45 +771,21 @@ "unable_to_delete_api_key": "Imposibil de șters cheia API" }, "app-connection": { - "api_host_description": "Acesta este URL-ul backend-ului tău Formbricks.", "app_connection": "Conectare aplicație", "app_connection_description": "Conectează aplicația ta la Formbricks.", "cache_update_delay_description": "Când faci actualizări la sondaje, contacte, acțiuni sau alte date, poate dura până la 5 minute pentru ca aceste modificări să apară în aplicația locală care rulează SDK Formbricks. Această întârziere se datorează unei limitări în sistemul nostru actual de caching. Revedem activ cache-ul și vom lansa o soluție în Formbricks 4.0.", "cache_update_delay_title": "Modificările vor fi reflectate după 5 minute datorită memorării în cache", - "check_out_the_docs": "Consultați documentația.", - "dive_into_the_docs": "Accesați documentația.", - "does_your_widget_work": "Funcționează widgetul dvs.?", - "environment_id": "ID-ul Mediului Dvs.", + "environment_id": "ID-ul mediului tău", "environment_id_description": "Acest id identifică în mod unic acest mediu Formbricks.", - "environment_id_description_with_environment_id": "Folosit pentru a identifica mediul corect: {environmentId} este al tău.", - "formbricks_sdk": "SDK Formbricks", "formbricks_sdk_connected": "SDK Formbricks este conectat", "formbricks_sdk_not_connected": "Formbricks SDK nu este încă conectat.", "formbricks_sdk_not_connected_description": "Conectează-ți site-ul sau aplicația cu Formbricks", - "have_a_problem": "Aveți o problemă?", "how_to_setup": "Cum să configurezi", "how_to_setup_description": "Urmează acești pași pentru a configura widget-ul Formbricks în aplicația ta.", - "identifying_your_users": "identificarea utilizatorilor tăi", - "if_you_are_planning_to": "Dacă planifici să", - "insert_this_code_into_the": "Insereză acest cod în", - "need_a_more_detailed_setup_guide_for": "Aveți nevoie de un ghid de configurare mai detaliat pentru", - "not_working": "Nu funcționează?", - "open_an_issue_on_github": "Deschideți o problemă pe GitHub", - "open_the_browser_console_to_see_the_logs": "Deschide consola browserului pentru a vedea jurnalele.", "receiving_data": "Recepționare date \uD83D\uDC83\uD83D\uDD7A", "recheck": "Re-verifică", - "scroll_to_the_top": "Derulați în partea de sus!", - "step_1": "Pasul 1: Instalează cu pnpm, npm sau yarn", - "step_2": "Pasul 2: Inițializează widget-ul", - "step_2_description": "Importați Formbricks și inițializați widgetul în componenta dumneavoastră (de exemplu, App.tsx):", - "step_3": "Pasul 3: Modul de depanare", - "switch_on_the_debug_mode_by_appending": "Activează modul de depanare prin adăugare", - "tag_of_your_app": "eticheta aplicației tale", - "to_the_url_where_you_load_the": "la adresa URL de unde încarci", - "want_to_learn_how_to_add_user_attributes": "Doriți să aflați cum să adăugați atribute ale utilizatorului, evenimente personalizate și altele?", - "you_are_done": "Ai terminat \uD83C\uDF89", - "you_can_set_the_user_id_with": "poți seta ID-ul utilizatorului cu", - "your_app_now_communicates_with_formbricks": "Aplicația ta comunică acum cu Formbricks - trimite evenimente și încarcă automat sondajele!" + "setup_alert_description": "Urmează acest tutorial pas cu pas pentru a-ți conecta aplicația sau site-ul în mai puțin de 5 minute.", + "setup_alert_title": "Cum să conectezi" }, "general": { "cannot_delete_only_project": "Acesta este singurul tău proiect, nu poate fi șters. Creează mai întâi un proiect nou.", @@ -971,52 +959,51 @@ "all_integrations": "Toate integrațiile", "annually": "Anual", "api_webhooks": "API & Webhook-uri", - "app_surveys": "Sondaje de Aplicație", + "app_surveys": "Sondaje în aplicație", "attribute_based_targeting": "Targetare bazată pe atribute", "current": "Curent", "current_plan": "Plan curent", "current_tier_limit": "Limită curentă a nivelului", "custom": "Personalizat & Scalare", - "custom_contacts_limit": "Limit Personalizat Contacte", + "custom_contacts_limit": "Limită personalizată contacte", "custom_project_limit": "Limit Personalizat Proiect", "custom_response_limit": "Limit Personalizat Răspunsuri", "email_embedded_surveys": "Sondaje încorporate în email", - "email_follow_ups": "Urmăriri Email", + "email_follow_ups": "Email follow-up", "enterprise_description": "Suport Premium și limite personalizate.", "everybody_has_the_free_plan_by_default": "Toată lumea are planul gratuit implicit!", "everything_in_free": "Totul în Gratuit", "everything_in_startup": "Totul în Startup", "free": "Gratuit", - "free_description": "Sondaje Nelimitate, Membri În Echipă și altele.", + "free_description": "Sondaje nelimitate, membri în echipă și altele.", "get_2_months_free": "Primește 2 luni gratuite", - "get_in_touch": "Contactați-ne", "hosted_in_frankfurt": "Găzduit în Frankfurt", "ios_android_sdks": "SDK iOS & Android pentru sondaje mobile", "link_surveys": "Sondaje Link (Distribuibil)", "logic_jumps_hidden_fields_recurring_surveys": "Salturi Logice, Câmpuri Ascunse, Sondaje Recurente, etc.", - "manage_card_details": "Gestionați Detaliile Cardului", - "manage_subscription": "Gestionați Abonamentul", + "manage_card_details": "Gestionați detaliile cardului", + "manage_subscription": "Gestionați abonamentul", "monthly": "Lunar", - "monthly_identified_users": "Utilizatori Identificați Lunar", + "monthly_identified_users": "Utilizatori identificați lunar", "per_month": "pe lună", "per_year": "pe an", "plan_upgraded_successfully": "Planul a fost upgradat cu succes", "premium_support_with_slas": "Suport premium cu SLA-uri", - "remove_branding": "Eliminare Branding", + "remove_branding": "Eliminare branding", "startup": "Pornire", "startup_description": "Totul din versiunea gratuită cu funcții suplimentare.", - "switch_plan": "Schimbă Planul", + "switch_plan": "Schimbă planul", "switch_plan_confirmation_text": "Sigur doriți să treceți la planul {plan}? Vi se va percepe {price} {period}.", - "team_access_roles": "Roluri Acces Echipă", + "team_access_roles": "Roluri acces echipă", "unable_to_upgrade_plan": "Nu se poate upgrada planul", "unlimited_miu": "MIU Nelimitat", - "unlimited_projects": "Proiecte Nelimitate", + "unlimited_projects": "Proiecte nelimitate", "unlimited_responses": "Răspunsuri nelimitate", - "unlimited_surveys": "Sondaje Nelimitate", - "unlimited_team_members": "Membri Nelimitați În Echipă", + "unlimited_surveys": "Sondaje nelimitate", + "unlimited_team_members": "Membri nelimitați în echipă", "upgrade": "Actualizare", "uptime_sla_99": "Disponibilitate SLA (99%)", - "website_surveys": "Sondaje ale Site-ului" + "website_surveys": "Sondaje ale site-ului" }, "enterprise": { "audit_logs": "Jurnale de audit", @@ -1048,11 +1035,11 @@ "create_new_organization_description": "Creați o organizație nouă pentru a gestiona un alt set de proiecte.", "customize_email_with_a_higher_plan": "Personalizați emailul cu un plan superior", "delete_member_confirmation": "Membrii șterși vor pierde accesul la toate proiectele și sondajele organizației tale.", - "delete_organization": "Șterge Organizație", + "delete_organization": "Șterge organizație", "delete_organization_description": "Șterge organizația cu toate proiectele ei, incluzând toate sondajele, răspunsurile, persoanele, acțiunile și atributele.", "delete_organization_warning": "Înainte de a continua cu ștergerea acestei organizații, vă rugăm să fiți conștienți de următoarele consecințe:", "delete_organization_warning_1": "Ștergerea permanentă a tuturor proiectelor legate de această organizație.", - "delete_organization_warning_2": "Această acțiune nu poate fi anulată. Dacă e dispărută, e dispărută.", + "delete_organization_warning_2": "Această acțiune este ireversibilă", "delete_organization_warning_3": "Vă rugăm să introduceți {organizationName} în câmpul următor pentru a confirma ștergerea definitivă a acestei organizații:", "eliminate_branding_with_whitelabel": "Eliminați brandingul Formbricks și activați opțiuni suplimentare de personalizare white-label.", "email_customization_preview_email_heading": "Salut {userName}", @@ -1074,7 +1061,7 @@ "manage_members_description": "Adăugați sau eliminați membri din organizația dvs.", "member_deleted_successfully": "Membru șters cu succes", "member_invited_successfully": "Membru invitat cu succes", - "once_its_gone_its_gone": "Odată ce a dispărut, a dispărut.", + "once_its_gone_its_gone": "Odată șters, nu va putea fi recuperat.", "only_org_owner_can_perform_action": "Doar proprietarii organizației pot accesa această setare.", "organization_created_successfully": "Organizație creată cu succes!", "organization_deleted_successfully": "Organizație ștearsă cu succes!", @@ -1090,7 +1077,7 @@ "remove_logo": "Înlătură siglă", "replace_logo": "Înlocuiește sigla", "resend_invitation_email": "Retrimite emailul de invitație", - "share_invite_link": "Distribuie Link-ul de Invitație", + "share_invite_link": "Distribuie link-ul de invitație", "share_this_link_to_let_your_organization_member_join_your_organization": "Distribuie acest link pentru a permite membrului organizației să se alăture organizației tale:", "test_email_sent_successfully": "Email de test trimis cu succes", "use_multi_language_surveys_with_a_higher_plan": "Utilizați chestionare multilingve cu un plan superior", @@ -1113,9 +1100,9 @@ "account_deletion_consequences_warning": "Consecințele ștergerii contului", "backup_code": "Cod de rezervă", "confirm_delete_account": "Șterge contul tău cu toate informațiile personale și datele tale", - "confirm_delete_my_account": "Șterge Contul Meu", + "confirm_delete_my_account": "Șterge contul meu", "confirm_your_current_password_to_get_started": "Confirmaţi parola curentă pentru a începe.", - "delete_account": "Șterge Cont", + "delete_account": "Șterge cont", "disable_two_factor_authentication": "Dezactivează autentificarea în doi pași", "disable_two_factor_authentication_description": "Dacă este nevoie să dezactivați autentificarea în doi pași, vă recomandăm să o reactivați cât mai curând posibil.", "each_backup_code_can_be_used_exactly_once_to_grant_access_without_your_authenticator": "Fiecare cod de rezervă poate fi utilizat o singură dată pentru a acorda acces fără autentificatorul tău.", @@ -1135,7 +1122,7 @@ "two_factor_authentication": "Autentificare în doi pași", "two_factor_authentication_description": "Adăugați un strat suplimentar de securitate la contul dvs. în cazul în care parola este furată.", "two_factor_authentication_enabled_please_enter_the_six_digit_code_from_your_authenticator_app": "Autentificare în doi pași activată. Introduceți codul de șase cifre din aplicația dvs. de autentificare.", - "two_factor_code": "Codul cu doi factori", + "two_factor_code": "Codul pentru dublă autentificare", "unlock_two_factor_authentication": "Deblocați autentificarea în doi pași cu un plan superior", "update_personal_info": "Actualizează informațiile tale personale", "warning_cannot_delete_account": "Ești singurul proprietar al acestei organizații. Te rugăm să transferi proprietatea către un alt membru mai întâi.", @@ -1188,7 +1175,7 @@ } }, "surveys": { - "all_set_time_to_create_first_survey": "Ești gata! Timp să creezi primul tău chestionar", + "all_set_time_to_create_first_survey": "Ești gata! Este timpul să creezi primul tău chestionar", "alphabetical": "Alfabetic", "copy_survey": "Copiază sondajul", "copy_survey_description": "Copiază acest sondaj într-un alt mediu", @@ -1251,9 +1238,7 @@ "automatically_close_survey_after": "Închideți automat sondajul după", "automatically_close_the_survey_after_a_certain_number_of_responses": "Închideți automat sondajul după un număr anumit de răspunsuri.", "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "Închideți automat sondajul dacă utilizatorul nu răspunde după un anumit număr de secunde.", - "automatically_closes_the_survey_at_the_beginning_of_the_day_utc": "Închide automat sondajul la începutul zilei (UTC).", "automatically_mark_the_survey_as_complete_after": "Marcați automat sondajul ca finalizat după", - "automatically_release_the_survey_at_the_beginning_of_the_day_utc": "Eliberați automat sondajul la începutul zilei (UTC).", "back_button_label": "Etichetă buton \"Înapoi\"", "background_styling": "Stilizare fundal", "brand_color": "Culoarea brandului", @@ -1277,7 +1262,7 @@ "caution_explanation_new_responses_separated": "Răspunsurile înainte de schimbare pot să nu fie sau să fie incluse doar parțial în rezumatul sondajului.", "caution_explanation_only_new_responses_in_summary": "Toate datele, inclusiv răspunsurile anterioare, rămân disponibile ca descărcare pe pagina de rezumat a sondajului.", "caution_explanation_responses_are_safe": "Răspunsurile mai vechi și mai noi se amestecă, ceea ce poate duce la rezumate de date înșelătoare.", - "caution_recommendation": "Aceasta poate cauza inconsistențe de date în rezumatul sondajului. Vă recomandăm să duplicați sondajul în schimb.", + "caution_recommendation": "Aceasta poate cauza inconsistențe de date în rezultatul sondajului. Vă recomandăm să duplicați sondajul în schimb.", "caution_text": "Schimbările vor duce la inconsecvențe", "centered_modal_overlay_color": "Culoare suprapunere modală centralizată", "change_anyway": "Schimbă oricum", @@ -1301,19 +1286,18 @@ "choose_the_actions_which_trigger_the_survey": "Alegeți acțiunile care declanșează sondajul.", "choose_where_to_run_the_survey": "Alegeți unde să rulați chestionarul.", "city": "Oraș", - "close_survey_on_date": "Închide sondajul la dată", "close_survey_on_response_limit": "Închideți sondajul la limită de răspunsuri", "color": "Culoare", "column_used_in_logic_error": "Această coloană este folosită în logica întrebării {questionIndex}. Vă rugăm să o eliminați din logică mai întâi.", "columns": "Coloane", "company": "Companie", "company_logo": "Sigla companiei", - "completed_responses": "răspunsuri parțiale sau finalizate", + "completed_responses": "Răspunsuri completate", "concat": "Concat +", "conditional_logic": "Logică condițională", "confirm_default_language": "Confirmați limba implicită", "confirm_survey_changes": "Confirmă modificările sondajului", - "contact_fields": "C�mpuri de contact", + "contact_fields": "Câmpuri de contact", "contains": "Conține", "continue_to_settings": "Continuă către Setări", "control_which_file_types_can_be_uploaded": "Controlează ce tipuri de fișiere pot fi încărcate.", @@ -1340,7 +1324,7 @@ "does_not_include_all_of": "Nu include toate", "does_not_include_one_of": "Nu include una dintre", "does_not_start_with": "Nu începe cu", - "edit_recall": "Editează Amintirea", + "edit_recall": "Editează Referințele", "edit_translations": "Editează traducerile {lang}", "enable_participants_to_switch_the_survey_language_at_any_point_during_the_survey": "Permite participanților să schimbe limba sondajului în orice moment în timpul sondajului.", "enable_recaptcha_to_protect_your_survey_from_spam": "Protecția împotriva spamului folosește reCAPTCHA v3 pentru a filtra răspunsurile de spam.", @@ -1348,6 +1332,7 @@ "end_screen_card": "Ecran final card", "ending_card": "Cardul de finalizare", "ending_card_used_in_logic": "Această carte de încheiere este folosită în logica întrebării {questionIndex}.", + "ending_used_in_quota": "Finalul acesta este folosit în cota \"{quotaName}\"", "ends_with": "Se termină cu", "equals": "Egal", "equals_one_of": "Egal unu dintre", @@ -1358,22 +1343,23 @@ "fallback_for": "Varianta de rezervă pentru", "fallback_missing": "Rezerva lipsă", "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{fieldId} este folosit în logică întrebării {questionIndex}. Vă rugăm să-l eliminați din logică mai întâi.", + "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "Câmpul ascuns \"{fieldId}\" este folosit în cota \"{quotaName}\"", "field_name_eg_score_price": "Nume câmp, de exemplu, scor, preț", "first_name": "Prenume", "five_points_recommended": "5 puncte (recomandat)", - "follow_ups": "Urmăriri", + "follow_ups": "Follow-up", "follow_ups_delete_modal_text": "Sigur doriți să ștergeți acest follow-up?", - "follow_ups_delete_modal_title": "Ștergeți urmărirea?", + "follow_ups_delete_modal_title": "Ștergeți follow-up-ul?", "follow_ups_empty_description": "Trimite mesaje respondentilor, ție sau colegilor de echipă.", - "follow_ups_empty_heading": "Trimitere automată de urmăriri", - "follow_ups_ending_card_delete_modal_text": "Această cartă de sfârșit este folosită în urmăriri ulterioare. Ștergerea sa o va elimina din toate urmăriri ulterioare. Ești sigur că vrei să o ștergi?", + "follow_ups_empty_heading": "Trimitere automată de follow-up", + "follow_ups_ending_card_delete_modal_text": "Această cartă de sfârșit este folosită în follow-up-uri ulterioare. Ștergerea sa o va elimina din toate follow-up-uri ulterioare. Ești sigur că vrei să o ștergi?", "follow_ups_ending_card_delete_modal_title": "Șterge cardul de finalizare?", "follow_ups_hidden_field_error": "Câmpul ascuns este utilizat într-un follow-up. Vă rugăm să îl eliminați mai întâi din follow-up.", "follow_ups_item_ending_tag": "Finalizare", "follow_ups_item_issue_detected_tag": "Problemă detectată", "follow_ups_item_response_tag": "Orice răspuns", "follow_ups_item_send_email_tag": "Trimite email", - "follow_ups_modal_action_attach_response_data_description": "Adăugați datele răspunsului la sondaj la urmărire", + "follow_ups_modal_action_attach_response_data_description": "Adăugați datele răspunsului la sondaj la follow-up", "follow_ups_modal_action_attach_response_data_label": "Atașează datele răspunsului", "follow_ups_modal_action_body_label": "Corp", "follow_ups_modal_action_body_placeholder": "Corpul emailului", @@ -1389,20 +1375,22 @@ "follow_ups_modal_action_subject_placeholder": "Subiectul emailului", "follow_ups_modal_action_to_description": "Adresă de email către care se trimite emailul", "follow_ups_modal_action_to_label": "Către", - "follow_ups_modal_action_to_warning": "Nu s-a detectat niciun câmp de e-mail în sondaj", + "follow_ups_modal_action_to_warning": "Nu s-au găsit opțiuni valide pentru trimiterea e-mailurilor, vă rugăm să adăugați întrebări de tip text deschis / informații de contact sau câmpuri ascunse", "follow_ups_modal_create_heading": "Creați o nouă urmărire", + "follow_ups_modal_created_successfull_toast": "Urmărirea a fost creată și va fi salvată odată ce salvați sondajul.", "follow_ups_modal_edit_heading": "Editează acest follow-up", "follow_ups_modal_edit_no_id": "Nu a fost furnizat un ID de urmărire al chestionarului, nu pot actualiza urmărirea chestionarului", - "follow_ups_modal_name_label": "Numele urmăririi", - "follow_ups_modal_name_placeholder": "Denumirea urmăririi tale", + "follow_ups_modal_name_label": "Numele ", + "follow_ups_modal_name_placeholder": "Denumirea follow-up-ului tău", "follow_ups_modal_subheading": "Trimite mesaje respondentilor, ție sau colegilor de echipă", "follow_ups_modal_trigger_description": "Când ar trebui să fie declanșat acest follow-up?", "follow_ups_modal_trigger_label": "Declanșator", "follow_ups_modal_trigger_type_ending": "Respondentul vede un sfârșit specific", "follow_ups_modal_trigger_type_ending_select": "Selectează finalurile:", - "follow_ups_modal_trigger_type_ending_warning": "Nu s-au găsit finalizări în sondaj!", + "follow_ups_modal_trigger_type_ending_warning": "Vă rugăm să selectați cel puțin un sfârșit sau să schimbați tipul declanșatorului", "follow_ups_modal_trigger_type_response": "Respondent finalizează sondajul", - "follow_ups_new": "Urmărire nouă", + "follow_ups_modal_updated_successfull_toast": "Urmărirea a fost actualizată și va fi salvată odată ce salvați sondajul.", + "follow_ups_new": "Follow-up nou", "follow_ups_upgrade_button_text": "Actualizați pentru a activa urmărările", "form_styling": "Stilizare formular", "formbricks_sdk_is_not_connected": "SDK Formbricks nu este conectat", @@ -1459,10 +1447,10 @@ "logic_error_warning_text": "Schimbarea tipului de întrebare va elimina condițiile de logică din această întrebare", "long_answer": "Răspuns lung", "lower_label": "Etichetă inferioară", - "manage_languages": "Gestionați Limbile", + "manage_languages": "Gestionați limbile", "max_file_size": "Dimensiune maximă fișier", "max_file_size_limit_is": "Limita dimensiunii maxime a fișierului este", - "multiply": "Înmulțire *", + "multiply": "Multiplicare", "needed_for_self_hosted_cal_com_instance": "Necesar pentru un exemplu autogăzduit Cal.com", "next_button_label": "Etichetă buton \"Următorul\"", "next_question": "Întrebarea următoare", @@ -1502,6 +1490,38 @@ "question_duplicated": "Întrebare duplicată.", "question_id_updated": "ID întrebare actualizat", "question_used_in_logic": "Această întrebare este folosită în logica întrebării {questionIndex}.", + "question_used_in_quota": "Întrebarea aceasta este folosită în cota \"{quotaName}\"", + "quotas": { + "add_quota": "Adăugați cotă", + "change_quota_for_public_survey": "Schimbați cota pentru sondaj public?", + "confirm_quota_changes": "Confirmă modificările cotelor", + "confirm_quota_changes_body": "Aveți modificări nesalvate în quota dumneavoastră. Doriți să le salvați înainte de a pleca?", + "continue_survey_normally": "Continuă chestionarul în mod normal", + "count_partial_submissions": "Număr contestații parțiale", + "count_partial_submissions_description": "Includeți respondenții care îndeplinesc criteriile de cotă dar nu au completat sondajul", + "create_quota_for_public_survey": "Creați cotă pentru sondaj public?", + "create_quota_for_public_survey_description": "Doar răspunsurile viitoare vor fi încorporate în cotă", + "create_quota_for_public_survey_text": "Acest sondaj este deja public. Răspunsurile actuale nu vor fi luate în considerare pentru noua cotă.", + "delete_quota_confirmation_text": "Acest lucru va șterge definitiv cota {quotaName}.", + "duplicate_quota": "Duplicare cotă", + "edit_quota": "Editează cota", + "end_survey_for_matching_participants": "Încheiere sondaj pentru participanții eligibili", + "inclusion_criteria": "Criterii de includere", + "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, one {Deja aveți {value} răspuns pentru această cotă, astfel încât limita trebuie să fie mai mare decât {value}.} other {Deja aveți {value} răspunsuri pentru această cotă, astfel încât limita trebuie să fie mai mare decât {value}.} }", + "limited_to_x_responses": "Limitat la {limit}", + "new_quota": "Contingent Nou", + "quota_created_successfull_toast": "\"Cota creată cu succes!\"", + "quota_deleted_successfull_toast": "\"Cota ștearsă cu succes!\"", + "quota_duplicated_successfull_toast": "\"Cota duplicată cu succes!\"", + "quota_name_placeholder": "de exemplu, Participanți cu vârsta 18-25 ani", + "quota_updated_successfull_toast": "\"Cota actualizată cu succes!\"", + "response_limit": "Limitări", + "save_changes_confirmation_body": "Orice modificări ale criteriilor de includere afectează doar răspunsurile viitoare. \nRecomandăm fie să duplicați un existent, fie să creați o nouă cotă.", + "save_changes_confirmation_text": "Răspunsurile existente rămân în cotă", + "select_ending_card": "Selectează cardul de finalizare", + "upgrade_prompt_title": "Folosește cote cu un plan superior", + "when_quota_has_been_reached": "Când cota a fost atinsă" + }, "randomize_all": "Randomizează tot", "randomize_all_except_last": "Randomizează tot cu excepția ultimului", "range": "Interval", @@ -1509,18 +1529,17 @@ "redirect_thank_you_card": "Redirecționează cardul de mulțumire", "redirect_to_url": "Redirecționează către URL", "redirect_to_url_not_available_on_free_plan": "\"Redirecționarea către URL nu este disponibilă în planul gratuit\"", - "release_survey_on_date": "Eliberați sondajul la dată", "remove_description": "Eliminați descrierea", "remove_translations": "Eliminați traducerile", - "require_answer": "Cere Răspuns", + "require_answer": "Cere răspuns", "required": "Obligatoriu", "reset_to_theme_styles": "Resetare la stilurile temei", "reset_to_theme_styles_main_text": "Sigur doriți să resetați stilul la stilurile de temă? Acest lucru va elimina toate stilizările personalizate.", "response_limit_can_t_be_set_to_0": "Limitul de răspunsuri nu poate fi setat la 0", "response_limit_needs_to_exceed_number_of_received_responses": "Limita răspunsurilor trebuie să depășească numărul de răspunsuri primite ({responseCount}).", "response_limits_redirections_and_more": "Limite de răspunsuri, redirecționări și altele.", - "response_options": "Opțiuni Răspuns", - "roundness": "Rotunjirea", + "response_options": "Opțiuni răspuns", + "roundness": "Rotunjire", "row_used_in_logic_error": "Această linie este folosită în logica întrebării {questionIndex}. Vă rugăm să-l eliminați din logică mai întâi.", "rows": "Rânduri", "save_and_close": "Salvează & Închide", @@ -1580,7 +1599,7 @@ "three_points": "3 puncte", "times": "ori", "to_keep_the_placement_over_all_surveys_consistent_you_can": "Pentru a menține amplasarea consecventă pentru toate sondajele, puteți", - "trigger_survey_when_one_of_the_actions_is_fired": "Declanșați sondajul atunci când una dintre acțiuni este declanșată...", + "trigger_survey_when_one_of_the_actions_is_fired": "Declanșați sondajul atunci când una dintre acțiuni este realizată...", "try_lollipop_or_mountain": "Încercați „lollipop” sau „mountain”...", "type_field_id": "ID câmp tip", "unlock_targeting_description": "Vizează grupuri specifice de utilizatori pe baza atributelor sau a informațiilor despre dispozitiv", @@ -1596,6 +1615,7 @@ "url_not_supported": "URL nesuportat", "use_with_caution": "Folosește cu precauție", "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "{variable} este folosit în logica întrebării {questionIndex}. Vă rugăm să-l eliminați din logică mai întâi.", + "variable_is_used_in_quota_please_remove_it_from_quota_first": "Variabila \"{variableName}\" este folosită în cota \"{quotaName}\"", "variable_name_is_already_taken_please_choose_another": "Numele variabilei este deja utilizat, vă rugăm să alegeți altul.", "variable_name_must_start_with_a_letter": "Numele variabilei trebuie să înceapă cu o literă.", "verify_email_before_submission": "Verifică emailul înainte de trimitere", @@ -1619,7 +1639,7 @@ "complete_responses": "Răspunsuri complete", "partial_responses": "Răspunsuri parțiale" }, - "new_survey": "Chestionar Nou", + "new_survey": "Chestionar nou", "no_surveys_created_yet": "Nu au fost create încă chestionare", "open_options": "Opțiuni deschise", "preview_survey_in_a_new_tab": "Previzualizare chestionar în alt tab", @@ -1630,11 +1650,14 @@ "address_line_2": "Adresă Linie 2", "an_error_occurred_deleting_the_tag": "A apărut o eroare la ștergerea etichetei", "browser": "Browser", + "bulk_delete_response_quotas": "Răspunsurile fac parte din cotele pentru acest sondaj. Cum doriți să gestionați cotele?", "city": "Oraș", "company": "Companie", "completed": "Finalizat ✅", "country": "Țară", + "decrement_quotas": "Decrementați toate limitele cotelor, inclusiv acest răspuns", "delete_response_confirmation": "Aceasta va șterge răspunsul la sondaj, inclusiv toate răspunsurile, etichetele, documentele atașate și metadatele răspunsului.", + "delete_response_quotas": "Răspunsul face parte din cotele pentru acest sondaj. Cum doriți să gestionați cotele?", "device": "Dispozitiv", "device_info": "Informații despre dispozitiv", "email": "Email", @@ -1732,7 +1755,7 @@ "send_email": { "copy_embed_code": "Copiază codul de inserare", "description": "Inserați sondajul dvs. într-un e-mail pentru a obține răspunsuri de la audiența dvs.", - "email_preview_tab": "Previzualizare Email", + "email_preview_tab": "Previzualizare email", "email_sent": "Email trimis!", "email_subject_label": "Subiect", "email_to_label": "Către", @@ -1766,6 +1789,7 @@ "configure_alerts": "Configurează alertele", "congrats": "Felicitări! Sondajul dumneavoastră este activ.", "connect_your_website_or_app_with_formbricks_to_get_started": "Conectează-ți site-ul sau aplicația cu Formbricks pentru a începe.", + "current_count": "Număr curent", "custom_range": "Interval personalizat...", "delete_all_existing_responses_and_displays": "Șterge toate răspunsurile și afișările existente", "download_qr_code": "Descărcare cod QR", @@ -1776,7 +1800,7 @@ "filter_updated_successfully": "Filtru actualizat cu succes", "filtered_responses_csv": "Răspunsuri filtrate (CSV)", "filtered_responses_excel": "Răspunsuri filtrate (Excel)", - "go_to_setup_checklist": "Mergi la Lista de Verificare a Configurării \uD83D\uDC49", + "go_to_setup_checklist": "Mergi la lista de verificare a configurării \uD83D\uDC49", "impressions": "Impresii", "impressions_tooltip": "Număr de ori când sondajul a fost vizualizat.", "in_app": { @@ -1819,6 +1843,7 @@ "last_month": "Ultima lună", "last_quarter": "Ultimul trimestru", "last_year": "Anul trecut", + "limit": "Limită", "no_responses_found": "Nu s-au găsit răspunsuri", "other_values_found": "Alte valori găsite", "overall": "General", @@ -1827,6 +1852,8 @@ "qr_code_download_failed": "Descărcarea codului QR a eșuat", "qr_code_download_with_start_soon": "Descărcarea codului QR va începe în curând", "qr_code_generation_failed": "A apărut o problemă la încărcarea codului QR al chestionarului. Vă rugăm să încercați din nou.", + "quotas_completed": "Cote completate", + "quotas_completed_tooltip": "Numărul de cote completate de respondenți.", "reset_survey": "Resetează chestionarul", "reset_survey_warning": "Resetarea unui sondaj elimină toate răspunsurile și afișajele asociate cu acest sondaj. Aceasta nu poate fi anulată.", "selected_responses_csv": "Răspunsuri selectate (CSV)", @@ -1842,7 +1869,7 @@ "this_quarter": "Trimestrul acesta", "this_year": "Anul acesta", "time_to_complete": "Timp de finalizare", - "ttc_tooltip": "Timp mediu pentru a completa sondajul.", + "ttc_tooltip": "Timp mediu pentru a completa întrebarea.", "unknown_question_type": "Tip de întrebare necunoscut", "use_personal_links": "Folosește linkuri personale", "waiting_for_response": "Așteptând un răspuns \uD83E\uDDD8‍♂️", @@ -1853,7 +1880,6 @@ "survey_deleted_successfully": "\"Sondaj șters cu succes!\"", "survey_duplicated_successfully": "\"Sondaj duplicat cu succes!\"", "survey_duplication_error": "Eșec la duplicarea sondajului.", - "survey_status_tooltip": "Pentru a actualiza starea sondajului, actualizați programarea și setările de închidere în opțiunile de răspuns la sondaj.", "templates": { "all_channels": "Toate canalele", "all_industries": "Toate industriile", @@ -1943,7 +1969,7 @@ "intro": { "get_started": "Începeți", "made_with_love_in_kiel": "Creat cu \uD83E\uDD0D în Germania", - "paragraph_1": "Formbricks este o Suită de Management al Experiențelor construită pe baza platformei de sondaje open source care crește cel mai rapid din lume.", + "paragraph_1": "Formbricks este o suită de management al experiențelor construită pe baza platformei de sondaje open source care crește cel mai rapid din lume.", "paragraph_2": "Rulați sondaje direcționate pe site-uri web, în aplicații sau oriunde online. Adunați informații valoroase pentru a crea experiențe irezistibile pentru clienți, utilizatori și angajați.", "paragraph_3": "Suntem angajați la cel mai înalt grad de confidențialitate a datelor. Găzduirea proprie vă oferă control deplin asupra datelor dumneavoastră.", "welcome_to_formbricks": "Bine ai venit la Formbricks!" @@ -2043,7 +2069,7 @@ "career_development_survey_question_4_headline": "Sunt mulțumit de investiția pe care organizația mea o face în formare și educație.", "career_development_survey_question_4_lower_label": "Dezacord puternic", "career_development_survey_question_4_upper_label": "De acord cu tărie", - "career_development_survey_question_5_choice_1": "Dezvoltare de Produs", + "career_development_survey_question_5_choice_1": "Dezvoltare de produs", "career_development_survey_question_5_choice_2": "Marketing", "career_development_survey_question_5_choice_3": "Relații Publice", "career_development_survey_question_5_choice_4": "Contabilitate", @@ -2113,7 +2139,7 @@ "collect_feedback_question_5_headline": "Mai dorești să împărtășești altceva cu echipa noastră?", "collect_feedback_question_5_placeholder": "Tastează răspunsul aici...", "collect_feedback_question_6_choice_1": "Google", - "collect_feedback_question_6_choice_2": "Rețele Sociale", + "collect_feedback_question_6_choice_2": "Rețele sociale", "collect_feedback_question_6_choice_3": "Prieteni", "collect_feedback_question_6_choice_4": "Podcast", "collect_feedback_question_6_choice_5": "Altele", @@ -2242,7 +2268,7 @@ "earned_advocacy_score_question_5_headline": "Ce te-a făcut să îi descurajezi?", "earned_advocacy_score_question_5_placeholder": "Tastează răspunsul aici...", "employee_satisfaction_description": "Evaluează satisfacția angajaților și identifică domeniile de îmbunătățire.", - "employee_satisfaction_name": "Satisfacție a Angajatului", + "employee_satisfaction_name": "Satisfacție a angajatului", "employee_satisfaction_question_1_headline": "Cât de satisfăcut sunteți de rolul dvs. actual?", "employee_satisfaction_question_1_lower_label": "Nesatisfăcut", "employee_satisfaction_question_1_upper_label": "Foarte mulțumit", @@ -2266,7 +2292,7 @@ "employee_satisfaction_question_7_choice_5": "Deloc probabil", "employee_satisfaction_question_7_headline": "Cât de probabil este să recomandați compania noastră unui prieten?", "employee_well_being_description": "Evaluează bunăstarea angajatului prin echilibrul între muncă și viață, volumul de muncă și mediul de lucru.", - "employee_well_being_name": "Bunăstarea Angajatului", + "employee_well_being_name": "Bunăstarea angajatului", "employee_well_being_question_1_headline": "Simt că am un echilibru bun între viața mea profesională și cea personală.", "employee_well_being_question_1_lower_label": "Echilibru foarte slab", "employee_well_being_question_1_upper_label": "Echilibru excelent", @@ -2328,7 +2354,7 @@ "fake_door_follow_up_question_2_choice_4": "Aspectul 4", "fake_door_follow_up_question_2_headline": "Ce ar trebui să includem cu siguranță în construirea acestuia?", "feature_chaser_description": "Urmăriți utilizatorii care tocmai au folosit o funcție specifică.", - "feature_chaser_name": "Urmăritor de Funcționalități", + "feature_chaser_name": "Urmăritor de funcționalități", "feature_chaser_question_1_headline": "Cât de importantă este [ADD FEATURE] pentru tine?", "feature_chaser_question_1_lower_label": "Neimportant", "feature_chaser_question_1_upper_label": "Foarte important", @@ -2369,7 +2395,7 @@ "identify_customer_goals_description": "Înțelegeți mai bine dacă mesajele voastre creează așteptările corecte privind valoarea pe care o oferă produsul vostru.", "identify_customer_goals_name": "Identifică Obiectivele Clienților", "identify_sign_up_barriers_description": "Oferiți o reducere pentru a obține informații despre barierele de înscriere.", - "identify_sign_up_barriers_name": "Identificați Barierele de Înscriere", + "identify_sign_up_barriers_name": "Identificați barierele de înscriere", "identify_sign_up_barriers_question_1_button_label": "Obține reducere de 10%", "identify_sign_up_barriers_question_1_dismiss_button_label": "Nu, mulţumesc", "identify_sign_up_barriers_question_1_headline": "Răspunde acestui scurt sondaj, primește 10% reducere!", @@ -2405,7 +2431,7 @@ "identify_upsell_opportunities_question_1_choice_4": "5+ ore", "identify_upsell_opportunities_question_1_headline": "Câte ore economisește echipa dumneavoastră pe săptămână folosind $[projectName]?", "improve_activation_rate_description": "Identifică punctele slabe în fluxul de onboarding pentru a crește activarea utilizatorilor.", - "improve_activation_rate_name": "Îmbunătățește Rata de Activare", + "improve_activation_rate_name": "Îmbunătățește rata de activare", "improve_activation_rate_question_1_choice_1": "Nu părea util pentru mine", "improve_activation_rate_question_1_choice_2": "Dificil de configurat sau utilizat", "improve_activation_rate_question_1_choice_3": "Lipsit de funcții/funcționalități", @@ -2427,12 +2453,12 @@ "improve_newsletter_content_name": "Îmbunătățește Conținutul Newsletterului", "improve_newsletter_content_question_1_headline": "Cum ați evalua newsletterul din această săptămână?", "improve_newsletter_content_question_1_lower_label": "Însă", - "improve_newsletter_content_question_1_upper_label": "Groza", + "improve_newsletter_content_question_1_upper_label": "Grozav", "improve_newsletter_content_question_2_headline": "Ce ar fi făcut ca newsletter-ul din această săptămână să fie mai util?", "improve_newsletter_content_question_2_placeholder": "Tastează răspunsul aici...", "improve_newsletter_content_question_3_button_label": "Bucuros să ajut!", "improve_newsletter_content_question_3_dismiss_button_label": "Găsește-ți proprii prieteni", - "improve_newsletter_content_question_3_headline": "Mulțumim! ❤️ Răspândește iubirea către UN prieten.", + "improve_newsletter_content_question_3_headline": "Mulțumim! ❤️ Răspândește iubirea către un prieten.", "improve_newsletter_content_question_3_html": "

Cine gândește ca tine? Ne-ai face o mare favoare dacă ai împărtăși episodul acestei săptămâni cu prietenul tău de creier!

", "improve_trial_conversion_description": "Află de ce oamenii au încetat perioada de încercare. Aceste informații te ajută să îți îmbunătățești procesul de achiziție.", "improve_trial_conversion_name": "Îmbunătățește Conversia În Proba", @@ -2464,7 +2490,7 @@ "integration_setup_survey_question_3_headline": "Ce alte instrumente ați dori să utilizați cu $[projectName]?", "integration_setup_survey_question_3_subheader": "Continuăm să dezvoltăm integrări, a ta poate fi următoarea:", "interview_prompt_description": "Invită un subset specific de utilizatori să programeze un interviu cu echipa ta de produs.", - "interview_prompt_name": "Întrebare Interviu", + "interview_prompt_name": "Întrebare interviu", "interview_prompt_question_1_button_label": "Rezervă intervalul", "interview_prompt_question_1_headline": "Ai 15 minute să discuți cu noi? \uD83D\uDE4F", "interview_prompt_question_1_html": "Ești unul dintre utilizatorii noștri frecvenți. Ne-ar plăcea să te intervievăm pe scurt!", @@ -2503,16 +2529,16 @@ "long_term_retention_check_in_question_9_lower_label": "Nemulțumit", "long_term_retention_check_in_question_9_upper_label": "Foarte mulțumit", "market_attribution_description": "Aflați cum au auzit utilizatorii pentru prima dată despre produsul dumneavoastră.", - "market_attribution_name": "Atribuirea Marketingului", + "market_attribution_name": "Atribuirea marketingului", "market_attribution_question_1_choice_1": "Recomandare", - "market_attribution_question_1_choice_2": "Rețele Sociale", + "market_attribution_question_1_choice_2": "Rețele sociale", "market_attribution_question_1_choice_3": "Reclame", "market_attribution_question_1_choice_4": "Căutare Google", - "market_attribution_question_1_choice_5": "Într-un Podcast", + "market_attribution_question_1_choice_5": "Într-un podcast", "market_attribution_question_1_headline": "Cum ați aflat pentru prima dată despre noi?", "market_attribution_question_1_subheader": "Vă rugăm să selectați una dintre următoarele opțiuni:", "market_site_clarity_description": "Identificați utilizatorii care părăsesc site-ul dvs. de marketing. Îmbunătățiți mesajele dvs.", - "market_site_clarity_name": "Claritate Site de Marketing", + "market_site_clarity_name": "Claritate site de marketing", "market_site_clarity_question_1_choice_1": "Da, complet", "market_site_clarity_question_1_choice_2": "Un fel de...", "market_site_clarity_question_1_choice_3": "Nu, deloc", @@ -2590,17 +2616,17 @@ "onboarding_segmentation_question_2_headline": "Care este dimensiunea companiei dumneavoastră?", "onboarding_segmentation_question_2_subheader": "Vă rugăm să selectați una dintre următoarele opțiuni:", "onboarding_segmentation_question_3_choice_1": "Recomandare", - "onboarding_segmentation_question_3_choice_2": "Rețele Sociale", + "onboarding_segmentation_question_3_choice_2": "Rețele sociale", "onboarding_segmentation_question_3_choice_3": "Reclame", "onboarding_segmentation_question_3_choice_4": "Căutare Google", "onboarding_segmentation_question_3_choice_5": "Într-un Podcast", "onboarding_segmentation_question_3_headline": "Cum ai aflat pentru prima dată despre noi?", "onboarding_segmentation_question_3_subheader": "Vă rugăm să selectați una dintre următoarele opțiuni:", - "picture_selection": "Selecție Poze", + "picture_selection": "Selecție poze", "picture_selection_description": "Cereți respondenților să aleagă una sau mai multe imagini", "preview_survey_ending_card_description": "Vă rugăm să continuați onboarding-ul.", "preview_survey_ending_card_headline": "Ai reușit!", - "preview_survey_name": "Previzualizare Chestionar", + "preview_survey_name": "Previzualizare chestionar", "preview_survey_question_1_headline": "Cum ai evalua {projectName}?", "preview_survey_question_1_lower_label": "Nu este bine", "preview_survey_question_1_subheader": "Aceasta este o previzualizare a chestionarului.", @@ -2612,7 +2638,7 @@ "preview_survey_welcome_card_headline": "Bun venit!", "preview_survey_welcome_card_html": "Mulțumesc pentru feedback-ul dvs - să începem!", "prioritize_features_description": "Identificați caracteristicile de care utilizatorii dumneavoastră au cel mai mult și cel mai puțin nevoie.", - "prioritize_features_name": "Prioritizați Caracteristicile", + "prioritize_features_name": "Prioritizați caracteristicile", "prioritize_features_question_1_choice_1": "Caracteristica 1", "prioritize_features_question_1_choice_2": "Caracteristica 2", "prioritize_features_question_1_choice_3": "Caracteristica 3", @@ -2656,7 +2682,7 @@ "product_market_fit_superhuman_question_6_headline": "Cum putem îmbunătăți $[projectName] pentru dumneavoastră?", "product_market_fit_superhuman_question_6_subheader": "Vă rugăm să fiți cât mai specific posibil.", "professional_development_growth_survey_description": "Evaluează satisfacția angajaților cu privire la oportunitățile de dezvoltare și creștere profesională.", - "professional_development_growth_survey_name": "Sondaj de Creștere și Dezvoltare Profesională", + "professional_development_growth_survey_name": "Sondaj de creștere și dezvoltare profesională", "professional_development_growth_survey_question_1_headline": "Simt că am oportunități să cresc și să-mi dezvolt abilitățile la muncă.", "professional_development_growth_survey_question_1_lower_label": "Nicio oportunitate de creștere", "professional_development_growth_survey_question_1_upper_label": "Multe oportunități de creștere", diff --git a/apps/web/locales/zh-Hans-CN.json b/apps/web/locales/zh-Hans-CN.json new file mode 100644 index 0000000000..24a5ee53c6 --- /dev/null +++ b/apps/web/locales/zh-Hans-CN.json @@ -0,0 +1,2891 @@ +{ + "auth": { + "continue_with_azure": "继续 通过 Microsoft", + "continue_with_email": "继续使用 Email", + "continue_with_github": "继续 使用 GitHub", + "continue_with_google": "继续 使用 Google", + "continue_with_oidc": "继续 使用 {oidcDisplayName}", + "continue_with_openid": "继续使用 OpenID", + "continue_with_saml": "继续 使用 SAML SSO", + "email-change": { + "confirm_password_description": "请 确认您的 密码后 再 更改您的 电子邮件地址", + "email_change_success": "邮箱 地址 更改 成功", + "email_change_success_description": "您 已 成功 更改 邮箱 地址 。请 使用 新 邮箱 地址 登录 。", + "email_verification_failed": "电子邮件 验证 失败", + "email_verification_loading": "电子邮件 验证 正在 进行 中...", + "email_verification_loading_description": "我们正在更新您 在 我们 的 系统 中 的 电子邮件地址。 这 可能 需要 几 秒钟。", + "invalid_or_expired_token": "电子邮件更改失败。您的 token 无效或已过期。", + "new_email": "新 邮箱", + "old_email": "旧 邮箱" + }, + "forgot-password": { + "back_to_login": "返回 登录", + "email-sent": { + "heading": "密码 重置 成功 请求", + "text": "如果 这个 邮箱 存在 账户,您 将 很快 收到 密码 重置 说明。" + }, + "reset": { + "confirm_password": "确认 密码", + "new_password": "新 密码", + "no_token_provided": "未提供 Token", + "passwords_do_not_match": "密码 不匹配", + "success": { + "heading": "密码 成功 重置", + "text": "您 现在 可以 使用 您 的 新 密码 登录" + } + }, + "reset_password": "重置密码", + "reset_password_description": "你将会被登出以重置你的密码。" + }, + "invite": { + "create_account": "创建一个帐户", + "email_does_not_match": "糟糕! 邮箱错误 \uD83E\uDD26", + "email_does_not_match_description": "邀请中的电子邮件与您的不匹配。", + "go_to_app": "进入 应用", + "happy_to_have_you": "很高兴有 你 \uD83E\uDD17", + "happy_to_have_you_description": "请创建一个帐户或登录。", + "invite_expired": "邀请 已失效 \uD83D\uDE25", + "invite_expired_description": "邀请 有效期为 7 天。 请 请求 新 的邀请。", + "invite_not_found": "邀请 未 找到 \uD83D\uDE25", + "invite_not_found_description": "邀请码无法找到或已被使用。", + "login": "登录", + "welcome_to_organization": "你 已 进入 \uD83C\uDF89", + "welcome_to_organization_description": "欢迎 进入 组织" + }, + "last_used": "最近使用", + "login": { + "backup_code": "备用代码", + "create_an_account": "创建一个帐户", + "enter_your_backup_code": "输入 你的 备用代码", + "enter_your_two_factor_authentication_code": "输入 你的 双因素 认证 代码", + "forgot_your_password": "忘记你的密码?", + "login_to_your_account": "登录到你的帐户", + "login_with_email": "使用 邮箱 登录", + "lost_access": "失去访问?", + "new_to_formbricks": "新用户 Formbricks ?", + "use_a_backup_code": "使用 备用代码" + }, + "saml_connection_error": "出了问题。请查看应用 控制台 以获取更多详情。", + "signup": { + "captcha_failed": "验证码 验证 失败", + "have_an_account": "有账户?", + "log_in": "登录", + "password_validation_contain_at_least_1_number": "包含至少 1 个 数字", + "password_validation_minimum_8_and_maximum_128_characters": "至少 8 个 和 最多 128 个 字符", + "password_validation_uppercase_and_lowercase": "大小写混合", + "please_verify_captcha": "请 验证 reCAPTCHA", + "privacy_policy": "隐私政策", + "terms_of_service": "服务条款", + "title": "创建你的 Formbricks 账户" + }, + "signup_without_verification_success": { + "user_successfully_created": "用户已成功创建", + "user_successfully_created_info": "我们已检查与 {email} 相关联的账户。如果没有,我们已为您创建一个。如果已有账户,则未作任何更改。请在下面登录以继续。" + }, + "testimonial_1": "我们 测量 文档的 清晰度, 并 通过 一个 平台 学习 客户 流失。 很棒的 产品, 反应 灵敏的 团队!", + "testimonial_all_features_included": "包括 所有 功能", + "testimonial_free_and_open_source": "免费 开源", + "testimonial_no_credit_card_required": "无需信用卡", + "testimonial_title": "将 客户 洞察 转化 为 无法 抗拒 的 体验", + "verification-requested": { + "invalid_email_address": "无效 的 电子 邮件 地址", + "invalid_token": "无效的 token ☹️", + "new_email_verification_success": "如果 地址 有效,验证 电子邮件 已发送。", + "no_email_provided": "未提供 邮箱", + "please_confirm_your_email_address": "请 确认您的 电子邮件地址", + "resend_verification_email": "重新 发送 验证 邮件", + "verification_email_resent_successfully": "验证 电子邮件 已 发送!请 检查 您的 收件箱。", + "verification_email_successfully_sent_info": "如果有一个 账户 与 {email} 相关 联,我们已将 验证 链接 发送到该 地址 。请查看您的 收件箱 以完成 注册 。", + "you_didnt_receive_an_email_or_your_link_expired": "您 没 有 收 到 电 子 邮 件 或者 链接 已 过 期 ?" + }, + "verify": { + "no_token_provided": "未提供 Token", + "verifying": "验证 ..." + } + }, + "billing_confirmation": { + "back_to_billing_overview": "返回到账单概览", + "thanks_for_upgrading": "非常感谢您升级 Formbricks 订阅。", + "upgrade_successful": "升级 成功" + }, + "c": { + "link_expired": "您的 链接 已过期。", + "link_expired_description": "您 使用 的 链接 已失效。" + }, + "common": { + "accepted": "已接受", + "account": "账号", + "account_settings": "帐户设置", + "action": "操作", + "actions": "操作", + "actions_description": "代码 和 无代码 操作 用于 触发 拦截 调查 在 应用程序 和 网站 中。", + "active_surveys": "活跃 调查", + "activity": "活动", + "add": "添加", + "add_action": "添加 操作", + "add_filter": "添加 过滤器", + "add_logo": "添加徽标", + "add_member": "添加成员", + "add_new_project": "添加 新 项目", + "add_project": "添加项目", + "add_to_team": "添加 到 团队", + "all": "全部", + "all_questions": "所有问题", + "allow": "允许", + "allow_users_to_exit_by_clicking_outside_the_survey": "允许 用户 通过 点击 调查 外部 退出", + "an_unknown_error_occurred_while_deleting_table_items": "删除 {type} 时发生未知错误", + "and": "和", + "and_response_limit_of": "和 响应限制", + "anonymous": "匿名", + "api_keys": "API 密钥", + "app": "应用", + "app_survey": "应用 程序 调查", + "apply_filters": "应用 筛选", + "are_you_sure": "你 确定 吗?", + "attributes": "属性", + "back": "返回", + "billing": "账单", + "booked": "已 预定", + "bottom_left": "右下", + "bottom_right": "右下", + "cancel": "取消", + "centered_modal": "居中 模态", + "choices": "选项", + "choose_environment": "选择 环境", + "choose_organization": "选择 组织", + "choose_project": "选择 项目", + "clear_all": "清除所有", + "clear_filters": "清除 过滤器", + "clear_selection": "清除 选择", + "click": "点击", + "clicks": "点击", + "close": "关闭", + "code": "代码", + "collapse_rows": "折叠 行", + "completed": "完成", + "configuration": "配置", + "confirm": "确认", + "connect": "连接", + "connect_formbricks": "连接 Formbricks", + "connected": "已连接", + "contacts": "联系人", + "continue": "继续", + "copied": "已复制", + "copied_to_clipboard": "已 复制到 剪贴板", + "copy": "复制", + "copy_code": "复制 代码", + "copy_link": "复制 链接", + "count_contacts": "{value, plural, other {{value} 联系人} }", + "count_responses": "{value, plural, other {{value} 回复} }", + "create_new_organization": "创建 新的 组织", + "create_project": "创建 项目", + "create_segment": "创建 细分", + "create_survey": "创建 调查", + "created": "创建", + "created_at": "创建 于", + "created_by": "由 创建", + "customer_success": "客户成功", + "dark_overlay": "深色遮罩层", + "date": "日期", + "default": "默认", + "delete": "删除", + "description": "描述", + "dev_env": "开发 环境", + "development_environment_banner": "您 在 开发 环境 中。 设置 以 测试 调查 , 操作 和 属性。", + "disable": "禁用", + "disallow": "不允许", + "discard": "丢弃", + "dismissed": "忽略", + "docs": "文档", + "documentation": "文档", + "download": "下载", + "draft": "草稿", + "duplicate": "复制", + "e_commerce": "电子商务", + "edit": "编辑", + "email": "邮箱", + "ending_card": "结尾卡片", + "enterprise_license": "企业 许可证", + "environment_not_found": "环境 未找到", + "environment_notice": "你 目前 位于 {environment} 环境。", + "error": "错误", + "error_component_description": "这个资源不存在或您没有权限访问它。", + "error_component_title": "错误 加载 资源", + "error_rate_limit_description": "请求 达到 最大 上限 , 请 稍后 再试 。", + "error_rate_limit_title": "速率 限制 超过", + "expand_rows": "展开 行", + "finish": "完成", + "follow_these": "遵循 这些", + "formbricks_version": "Formbricks 版本", + "full_name": "全名", + "gathering_responses": "收集反馈", + "general": "通用", + "go_back": "返回 ", + "go_to_dashboard": "转到 Dashboard", + "hidden": "隐藏", + "hidden_field": "隐藏 字段", + "hidden_fields": "隐藏 字段", + "hide_column": "隐藏 列", + "image": "图片", + "images": "图片", + "import": "导入", + "impressions": "印象", + "imprint": "印记", + "in_progress": "进行中", + "inactive_surveys": "不 活跃 调查", + "input_type": "输入类型", + "integration": "集成", + "integrations": "集成", + "invalid_date": "无效 日期", + "invalid_file_type": "无效 的 文件 类型", + "invite": "邀请", + "invite_them": "邀请 他们", + "key": "键", + "label": "标签", + "language": "语言", + "learn_more": "了解 更多", + "light_overlay": "浅色遮罩层", + "limits_reached": "限制 达到", + "link": "链接", + "link_survey": "链接 调查", + "link_surveys": "链接 调查", + "load_more": "加载 更多", + "loading": "加载", + "logo": "徽标", + "logout": "退出登录", + "look_and_feel": "外观 & 感觉", + "manage": "管理", + "marketing": "市场营销", + "maximum": "最大值", + "member": "成员", + "members": "成员", + "membership_not_found": "未找到会员资格", + "metadata": "元数据", + "minimum": "最低", + "mobile_overlay_app_works_best_on_desktop": "Formbricks 在 更大 的 屏幕 上 效果 最佳。 若 需要 管理 或 构建 调查, 请 切换 到 其他 设备。", + "mobile_overlay_surveys_look_good": "别 担心 – 您 的 调查 在 每 一 种 设备 和 屏幕 尺寸 上 看起来 都 很 棒!", + "mobile_overlay_title": "噢, 检测 到 小 屏幕!", + "move_down": "下移", + "move_up": "上移", + "multiple_languages": "多种 语言", + "name": "名称", + "new": "新建", + "new_version_available": "Formbricks {version} 在 这里。立即 升级!", + "next": "下一步", + "no_background_image_found": "未找到 背景 图片。", + "no_code": "无代码", + "no_files_uploaded": "没有 文件 被 上传", + "no_quotas_found": "未找到配额", + "no_result_found": "没有 结果", + "no_results": "没有 结果", + "no_surveys_found": "未找到 调查", + "not_authenticated": "您 未 认证 以 执行 该 操作。", + "not_authorized": "未授权", + "not_connected": "未连接", + "note": "注释", + "notifications": "通知", + "number": "数字", + "off": "关闭", + "on": "开启", + "only_one_file_allowed": "只 允许 一个 文件", + "only_owners_managers_and_manage_access_members_can_perform_this_action": "只有 所有者 和 管理者 可以 执行 此 操作。", + "option_id": "选项 ID", + "option_ids": "选项 ID", + "or": "或", + "organization": "组织", + "organization_id": "组织 ID", + "organization_not_found": "组织 未找到", + "organization_settings": "组织 设置", + "organization_teams_not_found": "未找到 组织 团队", + "other": "其他", + "others": "其他", + "overview": "概览", + "password": "密码", + "paused": "暂停", + "pending_downgrade": "等待降级", + "people_manager": "人民经理", + "person": "人员", + "phone": "电话", + "photo_by": "摄影:", + "pick_a_date": "选择 日期", + "picture": "图片", + "placeholder": "占位符", + "please_select_at_least_one_survey": "请选择至少 一个调查", + "please_select_at_least_one_trigger": "请选择至少 一个触发条件", + "please_upgrade_your_plan": "请 升级 您的 计划。", + "preview": "预览", + "preview_survey": "预览 Survey", + "privacy": "隐私政策", + "product_manager": "产品经理", + "profile": "资料", + "profile_id": "资料 ID", + "progress": "进度", + "project_configuration": "项目 配置", + "project_creation_description": "将 调查 组织 在 项目 中 以 便于 更好 的 访问 控制。", + "project_id": "项目 ID", + "project_name": "项目 名称", + "project_name_placeholder": "例如 Formbricks", + "project_not_found": "项目 未找到", + "project_permission_not_found": "找不到 项目 权限", + "projects": "项目", + "question": "问题", + "question_id": "问题 ID", + "questions": "问题", + "quota": "配额", + "quotas": "配额", + "quotas_description": "限制 符合 特定 条件 的 参与者 的 响应 数量 。", + "read_docs": "阅读 文档", + "recipients": "收件人", + "remove": "移除", + "reorder_and_hide_columns": "重新排序和隐藏列", + "report_survey": "报告调查", + "request_pricing": "请求 定价", + "request_trial_license": "申请试用许可证", + "reset_to_default": "重置为 默认", + "response": "响应", + "responses": "反馈", + "restart": "重新启动", + "role": "角色", + "role_organization": "角色 (组织)", + "saas": "SaaS", + "sales": "销售", + "save": "保存", + "save_changes": "保存 更改", + "saving": "保存", + "search": "搜索", + "security": "安全", + "segment": "细分", + "segments": "细分", + "select": "选择", + "select_all": "选择 全部", + "select_survey": "选择 调查", + "select_teams": "选择 团队", + "selected": "已选择", + "selected_questions": "选择的问题", + "selection": "选择", + "selections": "选择", + "send_test_email": "发送 测试 电子邮件", + "session_not_found": "会话 未找到", + "settings": "设置", + "share_feedback": "分享 反馈", + "show": "显示", + "show_response_count": "显示 响应 计数", + "shown": "显示", + "size": "尺寸", + "skipped": "跳过", + "skips": "跳过", + "some_files_failed_to_upload": "某些文件上传失败", + "something_went_wrong": "出错了", + "something_went_wrong_please_try_again": "出错了 。请 尝试 再次 操作 。", + "sort_by": "排序 依据", + "start_free_trial": "开始 免费试用", + "status": "状态", + "step_by_step_manual": "分步 手册", + "storage_not_configured": "文件存储 未设置,上传 可能 失败", + "styling": "样式", + "submit": "提交", + "summary": "概要", + "survey": "调查", + "survey_completed": "调查 完成", + "survey_id": "调查 ID", + "survey_languages": "调查 语言", + "survey_live": "调查 运行中", + "survey_not_found": "调查 未找到", + "survey_paused": "调查 暂停。", + "survey_type": "调查 类型", + "surveys": "调查", + "switch_to": "切换到 {environment}", + "table_items_deleted_successfully": "{type} 删除 成功", + "table_settings": "表设置", + "tags": "标签", + "targeting": "定位", + "team": "团队", + "team_access": "团队 访问", + "team_id": "团队 ID", + "team_name": "团队 名称", + "teams": "访问控制", + "teams_not_found": "未找到 团队", + "text": "文本", + "time": "时间", + "time_to_finish": "完成 时间", + "title": "标题", + "top_left": "左上", + "top_right": "右上", + "try_again": "再试一次", + "type": "类型", + "unlock_more_projects_with_a_higher_plan": "通过 更 高级 划解锁 更多 项目", + "update": "更新", + "updated": "已更新", + "updated_at": "更新 于", + "upload": "上传", + "upload_input_description": "点击 或 拖动 上传 文件", + "url": "URL", + "user": "用户", + "user_id": "用户 ID", + "user_not_found": "用户 不存在", + "variable": "变量", + "variables": "变量", + "verified_email": "已验证 电子邮件", + "video": "视频", + "warning": "警告", + "we_were_unable_to_verify_your_license_because_the_license_server_is_unreachable": "我们无法验证您的许可证,因为许可证服务器无法访问。", + "webhook": "Webhook", + "webhooks": "Webhooks", + "website_and_app_connection": "网站 & 应用程序 连接", + "website_app_survey": "网站 & 应用 调查", + "website_survey": "网站 调查", + "welcome_card": "欢迎 卡片", + "you": "你 ", + "you_are_downgraded_to_the_community_edition": "您已降级到社区版。", + "you_are_not_authorised_to_perform_this_action": "您 未 获得 授权 以 执行 该 操作。", + "you_have_reached_your_limit_of_project_limit": "您 已经 达到 项目 限制 {projectLimit}。", + "you_have_reached_your_monthly_miu_limit_of": "您 已经 达到 每月 的 MIU 限制", + "you_have_reached_your_monthly_response_limit_of": "您 已经 达到 每月 的 响应 限制", + "you_will_be_downgraded_to_the_community_edition_on_date": "您将在 {date} 降级到社区版。" + }, + "emails": { + "accept": "接受", + "click_or_drag_to_upload_files": "点击 或 拖动 上传 文件", + "email_customization_preview_email_heading": "嘿 {userName}", + "email_customization_preview_email_subject": "Formbricks 电子邮件自定义预览", + "email_customization_preview_email_text": "这 是 一封 电子邮件 预览,展示 哪个 徽标 将在 电子邮件 中 渲染。", + "email_footer_text_1": "祝 你 有 美好 的 一天!", + "email_footer_text_2": "Formbricks 团队", + "email_template_text_1": "这封邮件是通过 Formbricks 发送的。", + "embed_survey_preview_email_didnt_request": "未 申请此服务?", + "embed_survey_preview_email_environment_id": "环境 ID", + "embed_survey_preview_email_fight_spam": "帮助 我们 打击 垃圾邮件 并 将 此 邮件 转发 给 hola@formbricks.com", + "embed_survey_preview_email_heading": "预览邮件嵌入", + "embed_survey_preview_email_subject": "Formbricks 电子邮件调查预览", + "embed_survey_preview_email_text": "这是 代码 片段 嵌入到 邮件 中的 样子:", + "forgot_password_email_change_password": "更改 密码", + "forgot_password_email_did_not_request": "如果您 未 请求此 项 ,请 忽略 此邮件 。", + "forgot_password_email_heading": "更改 密码", + "forgot_password_email_link_valid_for_24_hours": "链接在 24 小时 内有效。", + "forgot_password_email_subject": "重置您的 Formbricks 密码", + "forgot_password_email_text": "您 已 请求 一个 链接 来 更改 您的 密码。 您 可以 点击 下方 链接 完成 这个 操作:", + "imprint": "印记", + "invite_accepted_email_heading": "嗨", + "invite_accepted_email_subject": "你 有 一个 新 成员 进入 组织 了!", + "invite_accepted_email_text_par1": "只是 告诉 你", + "invite_accepted_email_text_par2": "接受了 你的 邀请。 合作 愉快!", + "invite_email_button_label": "加入 组织", + "invite_email_heading": "嗨", + "invite_email_text_par1": "您的 同事", + "invite_email_text_par2": "邀请您加入他们在 Formbricks 。要接受邀请,请点击下面的链接:", + "invite_member_email_subject": "您 被 邀请 来 协作 于 Formbricks!", + "new_email_verification_text": "要 验证 您 的 新 邮箱 地址 ,请 点击 下方 的 按钮 :", + "password_changed_email_heading": "密码 已更改", + "password_changed_email_text": "您的 密码已成功更改", + "password_reset_notify_email_subject": "您的 Formbricks 密码已更改", + "privacy_policy": "隐私政策", + "reject": "拒绝", + "render_email_response_value_file_upload_response_link_not_included": "未包括上传文件的链接 数据隐私原因", + "response_finished_email_subject": "对 {surveyName} 的回答已完成 ✅", + "response_finished_email_subject_with_email": "{personEmail} 刚刚完成了你的 {surveyName} 调查 ✅", + "schedule_your_meeting": "安排你的会议", + "select_a_date": "选择 日期", + "survey_response_finished_email_congrats": "恭喜,您收到了一份新的问卷回复!有人刚刚完成了您的问卷:{surveyName}", + "survey_response_finished_email_dont_want_notifications": "不希望收到这些通知?", + "survey_response_finished_email_hey": "嗨 \uD83D\uDC4B", + "survey_response_finished_email_turn_off_notifications_for_all_new_forms": "关闭 所有新创建 表单 的通知", + "survey_response_finished_email_turn_off_notifications_for_this_form": "关闭 此表单 的通知", + "survey_response_finished_email_view_more_responses": "查看 {responseCount} 更多 响应", + "survey_response_finished_email_view_survey_summary": "查看 问卷 摘要", + "verification_email_click_on_this_link": "您 也 可以 点击 此 链接:", + "verification_email_heading": "马上就好!", + "verification_email_hey": "嗨 \uD83D\uDC4B", + "verification_email_if_expired_request_new_token": "如果 它 已经过期 , 请 在此 请求 新令牌:", + "verification_email_link_valid_for_24_hours": "链接在 24 小时 内有效。", + "verification_email_request_new_verification": "请求 新的 验证", + "verification_email_subject": "请验证您的电子邮件以使用 Formbricks", + "verification_email_survey_name": "调查 名称", + "verification_email_take_survey": "参与 调查", + "verification_email_text": "要开始使用 Formbricks,请在下面验证您的电子邮件:", + "verification_email_thanks": "感谢 验证 您的 邮箱!", + "verification_email_to_fill_survey": "请点击下面的按钮完成调查:", + "verification_email_verify_email": "验证 电子邮件", + "verification_new_email_subject": "邮箱 更改 验证", + "verification_security_notice": "如果您没有请求更改此邮件,请忽略此邮件 或 立即联系客服。", + "verified_link_survey_email_subject": "您的调查已准备好进行填写。" + }, + "environments": { + "actions": { + "action_copied_successfully": "动作 复制 成功", + "action_copy_failed": "操作 复制 失败", + "action_created_successfully": "动作 创建 成功", + "action_deleted_successfully": "动作 删除 成功", + "action_type": "操作类型", + "action_updated_successfully": "动作 更新 成功", + "action_with_key_already_exists": "键为 {key} 的动作已存在", + "action_with_name_already_exists": "名称为 {name} 的动作已存在", + "add_css_class_or_id": "添加 CSS class 或 id", + "add_regular_expression_here": "在 这里 添加 正则 表达式", + "add_url": "添加 URL", + "click": "点击", + "contains": "包含", + "create_action": "创建 操作", + "css_selector": "CSS 选择器", + "delete_action_text": "您 确定 要 删除 此 操作 吗?这 也 会 从 您 的 所有 调 查中 移除 此 操作 作为 触发 。", + "does_not_contain": "不包含", + "does_not_exactly_match": "不完全匹配", + "eg_clicked_download": "例如 点击了 下载", + "eg_download_cta_click_on_home": "例如 download_cta_click_on_home", + "eg_install_app": "例如 安装 应用程序", + "ends_with": "以...结束", + "enter_a_url_to_see_if_a_user_visiting_it_would_be_tracked": "输入一个 URL 查看访问者是否会被跟踪。", + "enter_url": "例如 https://app.com/dashboard", + "exactly_matches": "完全匹配", + "exit_intent": "退出 意图", + "fifty_percent_scroll": "50% 滚动", + "how_do_code_actions_work": "代码 操作 是 如何 工作 的?", + "if_a_user_clicks_a_button_with_a_specific_css_class_or_id": "如果 用户 单击 一个 按钮 有 特定 CSS class 或 id", + "if_a_user_clicks_a_button_with_a_specific_text": "如果 用户 单击 一个 按钮 有 特定 文本", + "in_your_code_read_more_in_our": "在 您 的 代码 中。 阅读 更多 在 我们 的", + "inner_text": "内文", + "invalid_action_type_code": "代码 操作 的 操作 类型 无效", + "invalid_action_type_no_code": "无代码 操作 的 操作 类型 无效", + "invalid_css_selector": "无效 CSS 选择器", + "invalid_match_type": "所选 选项 不可用", + "invalid_regex": "请 使用 有效 的 正则 表达式", + "limit_the_pages_on_which_this_action_gets_captured": "限制 捕获 此操作 的 页面", + "limit_to_specific_pages": "限制 特定 页面", + "matches_regex": "匹配 正则表达式", + "on_all_pages": "在 所有 页面", + "page_filter": "页面 过滤器", + "page_view": "页面 查看", + "select_match_type": "选择 匹配 类型", + "starts_with": "以...开始", + "test_match": "测试匹配", + "test_your_url": "测试你的URL", + "this_action_was_created_automatically_you_cannot_make_changes_to_it": "此操作是自动创建的。您 不能对此进行更改。", + "this_action_will_be_triggered_when_the_page_is_loaded": "页面 加载 时,将 触发 此 操作", + "this_action_will_be_triggered_when_the_user_scrolls_50_percent_of_the_page": "当 用户 滚动 页面 50% 时,将 触发 此 操作", + "this_action_will_be_triggered_when_the_user_tries_to_leave_the_page": "当 用户 试图 离开 页面 时,将 触发 此 操作", + "this_is_a_code_action_please_make_changes_in_your_code_base": "这是一个代码操作。请在您的代码库中进行更改。", + "track_new_user_action": "跟踪 新用户 操作", + "track_user_action_to_display_surveys_or_create_user_segment": "跟踪 用户 操作以显示调查 或 创建用户段", + "url": "URL", + "user_actions": "用户操作", + "user_clicked_download_button": "用户 点击了 下载 按钮", + "what_did_your_user_do": "用户 做了 什么?", + "what_is_the_user_doing": "用户 在做 什么?", + "you_can_track_code_action_anywhere_in_your_app_using": "您 可以 在 应用 中 使用 代码 操作 进行 跟踪", + "your_survey_would_be_shown_on_this_url": "您的 调查 会 显示 在 此 URL 上", + "your_survey_would_not_be_shown": "您的 调查 不会 显示。" + }, + "connect": { + "congrats": "恭喜!", + "connection_successful_message": "做得好 !我们 已经 连接。", + "do_it_later": "稍后 再说", + "finish_onboarding": "完成 入职培训", + "headline": "连接 您的 应用 或 网站", + "import_formbricks_and_initialize_the_widget_in_your_component": "在你的组件 (例如 App.tsx) 中 导入 Formbricks 并初始化 小组件 :", + "insert_this_code_into_the_head_tag_of_your_website": "插入 此代码 到 您 网站 的 head 标签 中:", + "subtitle": "不到 4 分钟", + "waiting_for_your_signal": "等待 您的 信号..." + }, + "contacts": { + "contact_deleted_successfully": "联系人 删除 成功", + "contact_not_found": "未找到此 联系人", + "contacts_table_refresh": "刷新 联系人", + "contacts_table_refresh_success": "联系人 已成功刷新", + "delete_contact_confirmation": "这将删除与此联系人相关的所有调查问卷回复和联系人属性。基于此联系人数据的任何定位和个性化将会丢失。", + "delete_contact_confirmation_with_quotas": "{value, plural, one {这将删除与此联系人相关的所有调查回复和联系人属性。基于此联系人数据的任何定位和个性化将丢失。如果此联系人有影响调查配额的回复,配额数量将减少,但配额限制将保持不变。} other {这将删除与这些联系人相关的所有调查回复和联系人属性。基于这些联系人数据的任何定位和个性化将丢失。如果这些联系人有影响调查配额的回复,配额数量将减少,但配额限制将保持不变。}}", + "no_responses_found": "未找到 响应", + "not_provided": "未提供", + "search_contact": "搜索 联系人", + "select_attribute": "选择 属性", + "unlock_contacts_description": "管理 联系人 并 发送 定向 调查", + "unlock_contacts_title": "通过 更 高级 划解锁 联系人", + "upload_contacts_modal_attributes_description": "将您 CSV 中的列映射到 Formbricks 中的属性。", + "upload_contacts_modal_attributes_new": "新 属性", + "upload_contacts_modal_attributes_search_or_add": "搜索或添加属性", + "upload_contacts_modal_attributes_should_be_mapped_to": "应该映射到", + "upload_contacts_modal_attributes_title": "属性", + "upload_contacts_modal_description": "上传 CSV,快速 导入 具有 属性 的 联系人", + "upload_contacts_modal_download_example_csv": "下载 示例 CSV", + "upload_contacts_modal_duplicates_description": "如果联系人已经存在,应该如何处理?", + "upload_contacts_modal_duplicates_overwrite_description": "覆盖 已有 联系人", + "upload_contacts_modal_duplicates_overwrite_title": "覆盖", + "upload_contacts_modal_duplicates_skip_description": "跳过 重复 联系人", + "upload_contacts_modal_duplicates_skip_title": "跳过", + "upload_contacts_modal_duplicates_title": "重复", + "upload_contacts_modal_duplicates_update_description": "更新 已有 联系人", + "upload_contacts_modal_duplicates_update_title": "更新", + "upload_contacts_modal_pick_different_file": "选择不同的文件", + "upload_contacts_modal_preview": "这是 你 的 数据 预览。", + "upload_contacts_modal_upload_btn": "上传 联系人" + }, + "formbricks_logo": "Formbricks Logo", + "integrations": { + "activepieces_integration_description": "立即连接 Formbricks 和流行应用,免编程自动化任务。", + "additional_settings": "附加 设置", + "airtable": { + "airtable_base": "Airtable 基础", + "airtable_integration": "Airtable 集成", + "airtable_integration_description": "将响应直接与 Airtable 同步。", + "airtable_integration_is_not_configured": "Airtable 集成 未配置", + "airtable_logo": "Airtable 徽标", + "connect_with_airtable": "连接 Airtable", + "link_airtable_table": "链接 Airtable 表格", + "link_new_table": "链接 new table", + "no_bases_found": "未找到 Airtable 基础", + "no_integrations_yet": "您的 Airtable 集成会在您 添加 后 出现在这里。 ⏲️", + "please_create_a_base": "请 在 Airtable 上创建 一个 base", + "please_select_a_base": "请选择 一个 基础", + "please_select_a_table": "请选择 一张 表", + "sync_responses_with_airtable": "将响应与 Airtable 同步", + "table_name": "表 名称" + }, + "airtable_integration_description": "即时用调查数据 填充 您的 Airtable 表格", + "connected_with_email": "已连接 {email}", + "connecting_integration_failed_please_try_again": "集成连接失败。 请 再试 一次!", + "create_survey_warning": "您 必须 创建 一个 调查 才能 设置 这个 集成", + "delete_integration": "删除 Integration", + "delete_integration_confirmation": "您 确定 要 删除 此 集成 吗?", + "google_sheet_integration_description": "即时用调查数据 填充 您的 spreadsheets", + "google_sheets": { + "connect_with_google_sheets": "连接 Google Sheets", + "enter_a_valid_spreadsheet_url_error": "请输入一个有效的 spreadsheet url", + "google_connection": "Google 连接", + "google_connection_deletion_description": "将响应直接与 Google Sheets 同步。", + "google_sheet_integration_is_not_configured": "您的 Formbricks 实例中尚未配置 Google Sheet 集成。", + "google_sheet_logo": "Google 表格标志", + "google_sheet_name": "Google 表格名称", + "google_sheets_integration": "Google Sheets 集成", + "google_sheets_integration_description": "将响应直接与 Google Sheets 同步。", + "link_google_sheet": "链接 Google 表格", + "link_new_sheet": "链接 新 表格", + "no_integrations_yet": "您的 Google Sheet 集成会在您 添加 后 出现在这里。 ⏲️", + "spreadsheet_url": "电子表格 URL" + }, + "include_created_at": "包括 创建 于", + "include_hidden_fields": "包括 隐藏 字段", + "include_metadata": "包含 元数据 (浏览器 、国家 等)", + "include_variables": "包括 变量", + "integration_added_successfully": "集成 添加成功", + "integration_removed_successfully": "集成 移除 成功", + "integration_updated_successfully": "集成 更新 成功", + "make_integration_description": "通过 Make 与 1000 个以上的应用集成 Formbricks", + "manage_webhooks": "管理 Webhooks", + "n8n_integration_description": "通过 n8n 与 350 个以上的应用集成 Formbricks", + "notion": { + "col_name_of_type_is_not_supported": "\"类型 {type} 的 {col_name} 不受 notion API 支持。该数据不会反映在您的 notion 数据库中。\"", + "connect_with_notion": "连接 Notion", + "connected_with_workspace": "已连接 {workspace} 工作区", + "create_at_least_one_database_to_setup_this_integration": "您 必须 至少 创建 一个 数据库 才能 设置 这个 集成", + "database_name": "数据库 名称", + "duplicate_connection_warning": "与 此 数据库 的 连接 已 处于 活跃 状态。请 谨慎 更改。", + "link_database": "链接 数据库", + "link_new_database": "链接 新 数据库", + "link_notion_database": "链接 Notion 数据库", + "map_formbricks_fields_to_notion_property": "映射 Formbricks 字段 到 Notion 属性", + "no_databases_found": "您的 Notion 集成会在您 添加 后 出现在这里。 ⏲️", + "notion_integration": "Notion 集成", + "notion_integration_description": "将 反馈 直接 发送 到 Notion。", + "notion_integration_is_not_configured": "您的 Formbricks 实例中尚未配置 Notion 集成。", + "notion_logo": "Notion 标志", + "please_complete_mapping_fields_with_notion_property": "请 用 Notion 属性 完成 映射 字段", + "please_resolve_mapping_errors": "请 解决 映射 错误", + "please_select_a_database": "请选择 一个 数据库", + "please_select_at_least_one_mapping": "请选择至少 一个映射", + "que_name_of_type_cant_be_mapped_to": "“{que_name}” 的问题类型为“{question_label}”不能映射到“{col_name}”列,其类型为“{col_type}”。请使用类型为“{mapped_type}”的列。", + "select_a_database": "选择 数据库", + "select_a_field_to_map": "选择一个字段进行映射", + "select_a_survey_question": "选择 问卷 问题 ", + "update_connection": "重新连接 Notion", + "update_connection_tooltip": "重新连接 集成 以 包含 新 添加 的 数据库 。 您 现有 的 集成 将 保持 不变 。" + }, + "notion_integration_description": "将 数据 发送到 您的 Notion 数据库", + "please_select_a_survey_error": "请选择 一个 调查", + "select_at_least_one_question_error": "请选择至少 一个问题", + "slack": { + "already_connected_another_survey": "您 已 经 将 另 一 个 调 查 连 接 到 此 频 道 。", + "channel_name": "频道名称", + "connect_with_slack": "连接 Slack", + "connect_your_first_slack_channel": "连接你的第一个 Slack channel 开始。", + "connected_with_team": "已连接 {team}", + "create_at_least_one_channel_error": "您 必须 至少 创建 一个 频道 才能 设置 这个 集成", + "dont_see_your_channel": "找不到 你的频道?", + "link_channel": "链接 channel", + "link_slack_channel": "链接 Slack channel", + "please_select_a_channel": "请选择 一个 频道", + "select_channel": "选择频道", + "slack_integration": "Slack 集成", + "slack_integration_description": "将 反馈 直接 发送 到 Slack。", + "slack_integration_is_not_configured": "您的 Formbricks 实例中尚未配置 Slack 集成。", + "slack_logo": "Slack 标志", + "slack_reconnect_button": "重新连接", + "slack_reconnect_button_description": "注意: 我们最近更改了我们的 Slack 集成以支持私人频道。 请重新连接您的 Slack 工作区。" + }, + "slack_integration_description": "立即将 您的 Slack 工作区 与 Formbricks 连接", + "to_configure_it": "配置 它。", + "webhook_integration_description": "根据您调查中的操作触发 Webhooks", + "webhooks": { + "add_webhook": "添加 Webhook", + "add_webhook_description": "发送 调查 响应 数据 到 自定义 端点", + "all_current_and_new_surveys": "所有 当前 和 新的 调查", + "created_by_third_party": "由 第三方 创建", + "discord_webhook_not_supported": "Discord webhooks 目前不 支持。", + "empty_webhook_message": "您的 Webhooks 会在您 添加 后 出现在这里。 ⏲️", + "endpoint_pinged": "太好了! 我们能 ping 该 webhook!", + "endpoint_pinged_error": "无法 ping 该 webhook!", + "please_check_console": "请查看控制台以获取更多详情", + "please_enter_a_url": "请输入一个 URL", + "response_created": "创建 响应", + "response_finished": "响应 完成", + "response_updated": "更新 响应", + "source": "来源", + "test_endpoint": "测试 端点", + "triggers": "触发器", + "webhook_added_successfully": "Webhook 添加成功", + "webhook_delete_confirmation": "您 确定 要 删除 此 Webhook 吗?这 将 停止 向 您 发送 更多 通知 。", + "webhook_deleted_successfully": "Webhook 删除 成功", + "webhook_name_placeholder": "可选 : 为 您的 Webhook 标注 标签 以 便于 识别", + "webhook_test_failed_due_to": "Webhook 测试因失败", + "webhook_updated_successfully": "Webhook 更新 成功", + "webhook_url_placeholder": "粘贴 你 要 事件 写 入 的 URL" + }, + "website_or_app_integration_description": "将 Formbricks 集成到您的网站或应用", + "zapier_integration_description": "通过 Zapier 与 5000 个以上的应用集成 Formbricks" + }, + "project": { + "api_keys": { + "add_api_key": "添加 API 密钥", + "api_key": "API Key", + "api_key_copied_to_clipboard": "API 密钥 已复制到 剪贴板", + "api_key_created": "API Key 已创建", + "api_key_deleted": "API Key 已删除", + "api_key_label": "API Key Label", + "api_key_security_warning": "出于安全原因,API 密钥在创建后只会显示一次。 请立即将其复制到您的目标位置。", + "api_key_updated": "API Key 已更新", + "duplicate_access": "不允许 复制 项目 访问", + "no_api_keys_yet": "您 还 没有 任 何 API key", + "no_env_permissions_found": "未找到环境权限", + "organization_access": "组织 访问", + "organization_access_description": "选择 组织 范围 资源 的 读取 或 写入 权限。", + "permissions": "权限", + "project_access": "项目 访问", + "secret": "密钥", + "unable_to_delete_api_key": "无法删除 API Key" + }, + "app-connection": { + "app_connection": "应用程序 连接", + "app_connection_description": "连接 您 的 应用 与 Formbricks。", + "cache_update_delay_description": "当 你 对 调查 、 联系人 、 操作 或 其他 数据 进行 更新 时 , 可能 需要 最多 5 分钟 更改 才能 显示 在 你 本地 运行 Formbricks SDK 的 应用程序 中 。 这个 延迟 是 由于 我们 当前 缓存 系统 的 限制 。 我们 正在 积极 重新设计 缓存 并 将 在 Formbricks 4.0 中 发布 修复 。", + "cache_update_delay_title": "更改 将 在 5 分钟 后 由于 缓存 而 显示", + "environment_id": "你的 环境 ID", + "environment_id_description": "这个 id 独特地 标识 这个 Formbricks 环境。", + "formbricks_sdk_connected": "Formbricks SDK 已连接", + "formbricks_sdk_not_connected": "Formbricks SDK 尚未连接。", + "formbricks_sdk_not_connected_description": "连接 您 的 网站 或 应用 与 Formbricks", + "how_to_setup": "如何设置", + "how_to_setup_description": "遵循这些步骤在你的应用中设置 Formbricks 小部件。", + "receiving_data": "接收 数据 \uD83D\uDC83\uD83D\uDD7A", + "recheck": "重新检查", + "setup_alert_description": "按照 此 步骤教程 在 5 分钟 以内 连接 你的 应用 或 网站。", + "setup_alert_title": "如何 连接" + }, + "general": { + "cannot_delete_only_project": "这是 您 唯一的 项目,不可 删除。请 先 创建一个新的 项目。", + "delete_project": "删除 项目", + "delete_project_confirmation": "您 确定 要 删除 {projectName} 吗 ?此 操作 无法 撤销。", + "delete_project_name_includes_surveys_responses_people_and_more": "删除 {projectName} 包括所有 调查、 回应、 人员、 动作 和 属性。", + "delete_project_settings_description": "删除 项目 包括所有 调查、 回应、 人员、 动作 和 属性。此 操作 无法 撤消。", + "error_saving_project_information": "保存 项目 信息 时 出错", + "only_owners_or_managers_can_delete_projects": "只有 所有者 或 经理 可以 删除 项目", + "project_deleted_successfully": "项目 删除 成功", + "project_name_settings_description": "更改 您 的 项目 名称。", + "project_name_updated_successfully": "项目 名称 更新 成功", + "recontact_waiting_time": "再联系 等待 时间", + "recontact_waiting_time_settings_description": "控制用户可以通过所有应用程序 调查 的 频率。", + "this_action_cannot_be_undone": "此 操作 无法 撤消。", + "wait_x_days_before_showing_next_survey": "等待 X 天后再显示下一个 调查:", + "waiting_period_updated_successfully": "等待期限 更新 成功", + "whats_your_project_called": "你的 项目 叫什么?" + }, + "languages": { + "add_language": "添加语言", + "alias": "别名", + "alias_tooltip": "别名 是 用于 在 链接 调查 和 SDK 中 标识 语言 的 备用 名称 (可选)", + "cannot_remove_language_warning": "您 不能 删除 该 语言 , 因为 它 仍然 用于 这些 问卷 中:", + "conflict_between_identifier_and_alias": "添加语言的标识符与您的别名之一存在冲突。别名和标识符不能相同。", + "conflict_between_selected_alias_and_another_language": "所选别名与具有此标识符的另一种语言存在冲突。请将此标识符的语言添加到您的项目中以避免不一致。", + "delete_language_confirmation": "您 确定 要 删除 此 语言 吗 ?此 操作 无法 撤销。", + "duplicate_language_or_language_id": "重复语言或语言 ID", + "edit_languages": "编辑 语言", + "identifier": "标识符(ISO)", + "incomplete_translations": "未完成的 翻译", + "language": "语言", + "language_deleted_successfully": "语言 删除 成功", + "languages_updated_successfully": "语言 更新 成功", + "multi_language_surveys": "多语言调查", + "multi_language_surveys_description": "添加语言以创建多语言调查。", + "no_language_found": "未找到语言。 在下方添加您的第一门语言。", + "please_select_a_language": "请选择 一门 语言", + "remove_language": "移除 语言", + "remove_language_from_surveys_to_remove_it_from_project": "请 从 这些 调查 中 移除 该 语言 以 从 项目 中 移除 它。", + "search_items": "搜索 项目", + "translate": "翻译" + }, + "look": { + "add_background_color": "添加背景色", + "add_background_color_description": "为 logo 容器添加背景色。", + "app_survey_placement": "应用 程序 调查 放置", + "app_survey_placement_settings_description": "更改 调查 显示 在 您 的 web 应用 或 网站 上 的 位置", + "centered_modal_overlay_color": "居中 模态遮罩层颜色", + "email_customization": "电子邮件自定义", + "email_customization_description": "更改 Formbricks 代表您发送的电子邮件的外观和感觉", + "enable_custom_styling": "启用 自定义 样式", + "enable_custom_styling_description": "允许用户在 survey editor 中覆盖此主题。", + "failed_to_remove_logo": "未能移除 logo", + "failed_to_update_logo": "未能更新 logo", + "formbricks_branding": "Formbricks 品牌", + "formbricks_branding_hidden": "Formbricks 品牌隐藏。", + "formbricks_branding_settings_description": "我们 很高兴 得到 你的 支持 ,但 也 理解 你 如果 想 关闭 它 。", + "formbricks_branding_shown": "Formbricks 品牌显示。", + "logo_removed_successfully": "标识 移除 成功", + "logo_settings_description": "上传 贵 公司 的 徽标 用于 品牌 调查 和 链接 预览", + "logo_updated_successfully": "标识 更新 成功", + "logo_upload_failed": "徽标上传失败,请重试。", + "placement_updated_successfully": "位置 更新 成功", + "remove_branding_with_a_higher_plan": "通过更高等级的计划 移除 品牌", + "remove_logo": "移除 logo", + "remove_logo_confirmation": "您确定要删除该 logo 吗?", + "replace_logo": "替换 logo", + "reset_styling": "重置 样式", + "reset_styling_confirmation": "您 确定 要 将 样式 重置 为 默认 吗?", + "show_formbricks_branding_in": "在 {type} 调查中显示 Formbricks 品牌", + "show_powered_by_formbricks": "显示 'Powered by Formbricks' 签名", + "styling_updated_successfully": "样式 更新 成功", + "theme": "主题", + "theme_settings_description": "为所有调查创建一个 主题 样式。您可以为每个 调查 启用 自定义 样式。" + }, + "tags": { + "add": "添加", + "add_tag": "添加 标签", + "count": "数量", + "delete_tag_confirmation": "您 确定 要 删除 此 标签 吗?", + "empty_message": "标记一个提交以在此处找到您的标签列表。", + "manage_tags": "管理标签", + "manage_tags_description": "合并 和 删除 response 标签。", + "merge": "合并", + "no_tag_found": "未找到 标签", + "search_tags": "搜索 标签...", + "tag": "标签", + "tag_already_exists": "标签 已 存在", + "tag_deleted": "标签 已删除", + "tag_updated": "标签 更新", + "tags_merged": "标签 合并" + }, + "teams": { + "manage_teams": "管理 团队", + "no_teams_found": "未找到 团队", + "only_organization_owners_and_managers_can_manage_teams": "只有 组织 拥有者 和 经理 可以 管理 团队。", + "permission": "权限", + "team_name": "团队名称", + "team_settings_description": "查看 哪些 团队 可以 访问 该 项目。" + } + }, + "projects_environments_organizations_not_found": "项目 、 环境 或 组织 未 找到", + "segments": { + "add_filter_below": "在下方添加 过滤器", + "add_your_first_filter_to_get_started": "添加 您 的 第一个 过滤器 以 开始", + "cannot_delete_segment_used_in_surveys": "您 不能 删除 此 段 ,因为 它 仍然 用于 这些 问卷 中:", + "clone_and_edit_segment": "复制 和 编辑 段", + "create_group": "创建 群组", + "create_your_first_segment": "创建 您 的 第一个 细分 以 开始", + "delete_segment": "删除段", + "desktop": "桌面", + "devices": "设备", + "edit_segment": "编辑 段落", + "error_resetting_filters": "重置 筛选条件 错误", + "error_saving_segment": "保存 段 出错", + "ex_fully_activated_recurring_users": "例如 完全 激活 的 定期 用户", + "ex_power_users": "例如 高级 用户", + "filters_reset_successfully": "筛选器 重置 成功", + "here": "这里", + "hide_filters": "隐藏 过滤器", + "identifying_users": "识别 用户", + "invalid_segment": "无效 细分", + "invalid_segment_filters": "无效 的 筛选条件 。请 检查 筛选条件 后 再试 ", + "load_segment": "载入 段落", + "most_active_users_in_the_last_30_days": "过去 30 天最活跃用户", + "no_attributes_yet": "暂无属性!", + "no_filters_yet": "还 没有 筛选器!", + "no_segments_yet": "您 目前 尚无 保存 的 段。", + "person_and_attributes": "人员 及 属性", + "phone": "电话", + "please_remove_the_segment_from_these_surveys_in_order_to_delete_it": "请 从 这些 调查 中 移除 该 部分 以 进行 删除。", + "pre_segment_users": "用 属性 筛选 器对 用户 进行 预分段 。", + "remove_all_filters": "清除 所有 筛选器", + "reset_all_filters": "重置 所有 筛选器", + "save_as_new_segment": "保存为新段落", + "save_your_filters_as_a_segment_to_use_it_in_other_surveys": "将 你的 过滤器 保存为 一个 分段 以便 在 其他 调查 中 使用", + "segment_created_successfully": "片段 创建 成功", + "segment_deleted_successfully": "片段 删除 成功", + "segment_id": "细分 ID", + "segment_saved_successfully": "片段 保存 成功", + "segment_updated_successfully": "片段 更新 成功", + "segments_help_you_target_users_with_same_characteristics_easily": "细分 帮助 您 轻松 定位 具有 相同 特征 的 用户", + "target_audience": "目标 受众", + "this_action_resets_all_filters_in_this_survey": "此操作将重置此问卷中的所有筛选器。", + "this_segment_is_used_in_other_surveys": "该 段落 已 被 用于 其他 问卷 调查。进行 修改", + "title_is_required": "标题 是 必需的", + "unknown_filter_type": "未知 过滤器 类型", + "unlock_segments_description": "将 联系人 组织成 段,以 目标 具体 用户 群体", + "unlock_segments_title": "通过 更 高级 划解锁 细分", + "user_targeting_is_currently_only_available_when": "目标用户 功能 当前 仅 限于 当", + "value_cannot_be_empty": "值 不能为空。", + "value_must_be_a_number": "值 必须 是 一个 数字。", + "view_filters": "查看 筛选条件", + "where": "位置", + "with_the_formbricks_sdk": "与 Formbricks SDK" + }, + "settings": { + "api_keys": { + "add_api_key": "添加 API 密钥", + "add_permission": "添加 权限", + "api_keys_description": "管理 API 密钥 以 访问 Formbricks 管理 API" + }, + "billing": { + "1000_monthly_responses": "每月 1,000 回复", + "1_project": "1 个 项目", + "2000_contacts": "2,000 联系人", + "3_projects": "3 个 项目", + "5000_monthly_responses": "5,000 每月 回复", + "7500_contacts": "7,500 联系人", + "all_integrations": "所有 集成", + "annually": "每年", + "api_webhooks": "API & Webhooks", + "app_surveys": "应用 程序 调查", + "attribute_based_targeting": "基于属性的目标定位", + "current": "当前", + "current_plan": "当前 计划", + "current_tier_limit": "当前 层 级 限制", + "custom": "自定义 & Scale", + "custom_contacts_limit": "自定义联系人限制", + "custom_project_limit": "自定义项目限制", + "custom_response_limit": "自定义 响应限制", + "email_embedded_surveys": "邮件 嵌入 调查", + "email_follow_ups": "邮件 跟进", + "enterprise_description": "高级支持和自定义限制。", + "everybody_has_the_free_plan_by_default": "默认情况下,所有人都有免费计划!", + "everything_in_free": "所有 在 Free", + "everything_in_startup": "所有 在 Startup", + "free": "免费", + "free_description": "无限调查、团队成员和更多。", + "get_2_months_free": "获取 2 个月 免费", + "hosted_in_frankfurt": "托管在 法兰克福", + "ios_android_sdks": "iOS & Android 的 移动 调查 SDK", + "link_surveys": "链接 调查 (可共享)", + "logic_jumps_hidden_fields_recurring_surveys": "逻辑 跳转 , 隐藏 字段 , 定期 调查 , 等", + "manage_card_details": "管理卡片详情", + "manage_subscription": "管理 订阅", + "monthly": "每月", + "monthly_identified_users": "每月 已识别的 用户", + "per_month": "每月", + "per_year": "每年", + "plan_upgraded_successfully": "计划 升级 成功", + "premium_support_with_slas": "优质支持与 SLAs", + "remove_branding": "移除 品牌", + "startup": "初创企业", + "startup_description": "包含免费版的所有功能以及附加功能.", + "switch_plan": "切换 计划", + "switch_plan_confirmation_text": "你确定要切换到 {plan} 计划吗?你将被收取 {price} {period} 。", + "team_access_roles": "团队访问角色", + "unable_to_upgrade_plan": "无法升级计划", + "unlimited_miu": "无限 MIU", + "unlimited_projects": "无限项目", + "unlimited_responses": "无限反馈", + "unlimited_surveys": "无限 调查", + "unlimited_team_members": "无限团队成员", + "upgrade": "升级", + "uptime_sla_99": "正常运行时间 SLA (99%)", + "website_surveys": "网站 调查" + }, + "enterprise": { + "audit_logs": "审计日志", + "coming_soon": "即将推出", + "contacts_and_segments": "联系人管理 & 分段", + "enterprise_features": "企业 功能", + "get_an_enterprise_license_to_get_access_to_all_features": "获取 企业 许可证 来 访问 所有 功能。", + "keep_full_control_over_your_data_privacy_and_security": "保持 对 您 的 数据 隐私 和 安全 的 完全 控制。", + "no_call_needed_no_strings_attached_request_a_free_30_day_trial_license_to_test_all_features_by_filling_out_this_form": "无需 电话 ,无需 附加 条件: 申请 免费 30 天 试用 授权以 通过 填写 此 表格 测试 所有 功能:", + "no_credit_card_no_sales_call_just_test_it": "无需信用卡 。无需销售电话 。只需测试一下 :)", + "on_request": "按请求", + "organization_roles": "组织角色(管理员,编辑,开发者等)", + "questions_please_reach_out_to": "问题 ? 请 联系", + "request_30_day_trial_license": "申请 30 天 的 试用许可证", + "saml_sso": "SAML SSO", + "service_level_agreement": "服务水平协议", + "soc2_hipaa_iso_27001_compliance_check": "SOC2 , HIPAA , ISO 27001 合规检查", + "sso": "SSO (Google 、Microsoft 、OpenID Connect)", + "teams": "团队 & 访问 角色(读取, 读取 & 写入, 管理)", + "unlock_the_full_power_of_formbricks_free_for_30_days": "解锁 Formbricks 的全部功能。免费使用 30 天。", + "your_enterprise_license_is_active_all_features_unlocked": "您的企业许可证已激活 所有功能已解锁" + }, + "general": { + "bulk_invite_warning_description": "在免费计划中,所有组织成员都会被分配为 \"Owner \"角色。", + "cannot_delete_only_organization": "这是 您 唯一的 组织,不可 删除。请 先 创建一个新的 组织。", + "cannot_leave_only_organization": "您 不能 离开 此 组织,因为 这是 您 唯一的 组织。请 先 创建一个新的 组织。", + "copy_invite_link_to_clipboard": "复制 invite 链接 到 剪贴板", + "create_new_organization": "创建 新的 组织", + "create_new_organization_description": "创建一个新 组织 来处理不同的 项目 集。", + "customize_email_with_a_higher_plan": "通过更高的计划 自定义电子邮件", + "delete_member_confirmation": "删除的 成员 将无法访问 你的组织 的 所有项目 和 调查。", + "delete_organization": "删除 组织", + "delete_organization_description": "删除 组织 的 所有 项目 包括所有 调查、回应、人员、动作 和 属性", + "delete_organization_warning": "在 您 继续 删除 这个 组织 前, 请 注意 以下 后果:", + "delete_organization_warning_1": "永久删除与此组织关联的所有项目。", + "delete_organization_warning_2": "此操作无法撤消。 一旦 消失 就 消失 。", + "delete_organization_warning_3": "请在下列字段中输入 {organizationName} 以确认此组织的最终删除:", + "eliminate_branding_with_whitelabel": "消除 Formbricks 品牌 并启用 额外的 白标 自定义 选项", + "email_customization_preview_email_heading": "嘿 {userName}", + "email_customization_preview_email_text": "这 是 一封 电子邮件 预览,展示 哪个 徽标 将在 电子邮件 中 渲染。", + "error_deleting_organization_please_try_again": "删除 组织时 出错 。 请重试 。", + "from_your_organization": "来自你的组织", + "invitation_sent_once_more": "再次发送邀请。", + "invite_deleted_successfully": "邀请 删除 成功", + "invited_on": "受邀于 {date}", + "invites_failed": "邀请失败", + "leave_organization": "离开 组织", + "leave_organization_description": "您将离开此组织,并失去对所有调查和响应的访问权限。只有再次被邀请后,您才能重新加入。", + "leave_organization_ok_btn_text": "是, 离开 组织", + "leave_organization_title": "你 确定 吗?", + "logo_in_email_header": "电子邮件 标头 中的 标志", + "logo_removed_successfully": "标识 移除 成功", + "logo_saved_successfully": "标识 保存 成功", + "manage_members": "管理 成员", + "manage_members_description": "在 您 的 组织 中 添加 或 删除 成员。", + "member_deleted_successfully": "成员 删除 成功", + "member_invited_successfully": "成员 邀请 成功", + "once_its_gone_its_gone": "一旦 删除,无法 恢复。", + "only_org_owner_can_perform_action": "只有 组织 所有者 可以 访问 此 设置。", + "organization_created_successfully": "组织 创建 成功", + "organization_deleted_successfully": "组织 删除 成功", + "organization_invite_link_ready": "您的组织邀请链接已准备好!", + "organization_name": "组织 名称", + "organization_name_description": "为您的组织 提供一个描述性的名称", + "organization_name_placeholder": "例如 Power Puff Girls", + "organization_name_updated_successfully": "组织 名称 更新 成功", + "organization_settings": "组织 设置", + "please_add_a_logo": "请添加 徽标", + "please_check_csv_file": "请 检查 CSV 文件 并 确保 它 符合 我们 的 格式", + "please_save_logo_before_sending_test_email": "请在发送测试邮件前保存 logo。", + "remove_logo": "移除 logo", + "replace_logo": "替换 logo", + "resend_invitation_email": "重新发送邀请邮件", + "share_invite_link": "分享邀请链接", + "share_this_link_to_let_your_organization_member_join_your_organization": "分享 这个 链接 以 让 你的 组织 成员 加入 你的 组织:", + "test_email_sent_successfully": "测试 邮件 发送 成功", + "use_multi_language_surveys_with_a_higher_plan": "在 更高 计划 中 使用 多语言 调查", + "use_multi_language_surveys_with_a_higher_plan_description": "以 不同 语言 调查 你的 用户" + }, + "notifications": { + "auto_subscribe_to_new_surveys": "自动 订阅 新 调查", + "email_alerts_surveys": "邮件 提醒 (调查)", + "every_response": "每 次 响应", + "every_response_tooltip": "发送 完整 的 反馈,无 部分", + "need_slack_or_discord_notifications": "需要 Slack 或 Discord 通知", + "notification_settings_updated": "通知 设置 已更新", + "set_up_an_alert_to_get_an_email_on_new_responses": "设置 提醒, 在 新 回复 时获取 邮件", + "use_the_integration": "使用 集成", + "want_to_loop_in_organization_mates": "想 要 加入 组织 成员", + "you_will_not_be_auto_subscribed_to_this_organizations_surveys_anymore": "您将不再自动订阅此组织的调查!", + "you_will_not_receive_any_more_emails_for_responses_on_this_survey": "您 将 不会 再 收到 关于 此 调查 的 任何 回复 邮件!" + }, + "profile": { + "account_deletion_consequences_warning": "帐户 删除 后果", + "backup_code": "备用代码", + "confirm_delete_account": "删除您的账户以及所有个人信息和数据", + "confirm_delete_my_account": "删除我的账户", + "confirm_your_current_password_to_get_started": "确认 您 的 当前 密码 以 开始。", + "delete_account": "删除账号", + "disable_two_factor_authentication": "禁用 双因素 认证", + "disable_two_factor_authentication_description": "如果你需要禁用 2FA ,我们建议尽快重新启用。", + "each_backup_code_can_be_used_exactly_once_to_grant_access_without_your_authenticator": "每个备用代码只能使用一次,以在没有您的身份验证器的情况下授予访问权限。", + "email_change_initiated": "您的 邮箱 更改 请求 已启动。", + "enable_two_factor_authentication": "启用 双因素 认证", + "enter_the_code_from_your_authenticator_app_below": "从 你的 身份验证 应用 中 输入 代码 。", + "lost_access": "失去访问", + "or_enter_the_following_code_manually": "或者 手动输入 以下 代码:", + "organizations_delete_message": "您 是 这些 组织 的 唯一 所有者,因此它们 也将 被 删除。 ", + "permanent_removal_of_all_of_your_personal_information_and_data": "永久删除您所有的个人信息和数据", + "personal_information": "个人信息", + "please_enter_email_to_confirm_account_deletion": "请在下列字段中输入 {email} 以确认您账户的最终删除:", + "profile_updated_successfully": "您的个人资料已更新成功", + "save_the_following_backup_codes_in_a_safe_place": "请 将 以下 备份 代码 保存在 安全地 方。", + "scan_the_qr_code_below_with_your_authenticator_app": "用 你的 身份验证 应用 扫描 下方 的 二维码。", + "security_description": "管理你的密码和其他安全设置,如双因素认证 (2FA)。", + "two_factor_authentication": "双因素 认证", + "two_factor_authentication_description": "为你的账户增加额外的安全层,以防密码被盗。", + "two_factor_authentication_enabled_please_enter_the_six_digit_code_from_your_authenticator_app": "双因素 认证 已启用 。 请输入 从 你的 身份验证 应用 中 的 六 位 数 字 代码 。", + "two_factor_code": "双重身份验证码", + "unlock_two_factor_authentication": "使用 更高 级 方案 解锁 双 重 因素 验证", + "update_personal_info": "更新你的个人信息", + "warning_cannot_delete_account": "您 是 该 组织 的 唯一 拥有者 。 请 先 将 所有权 转移 给 其他 成员 。", + "warning_cannot_undo": "此 无法 撤销。" + }, + "teams": { + "add_members_description": "将 成员 添加到 团队 ,并 确定 他们 的 角色", + "add_projects_description": "控制 团队 成员 可以 访问 的 项目。", + "all_members_added": "所有成员已添加到此团队。", + "all_projects_added": "所有 项目 已添加到此团队。", + "are_you_sure_you_want_to_delete_this_team": "您 确定 要 删除 这个 团队 吗?这也会 移除 对 与 这个 团队 相关 的 所有 项目 和 调查 的 访问。", + "billing_role_description": "仅 能 访问 账单 信息。", + "bulk_invite": "批量 邀请", + "contributor": "贡献者", + "create": "创建", + "create_first_team_message": "您 需要 先 创建 一个 团队。", + "create_new_team": "创建 新 团队", + "delete_team": "删除团队", + "empty_teams_state": "创建 您 的 第一个 团队。", + "enter_team_name": "输入 团队 名称", + "individual": "个人", + "invite_member": "邀请 成员", + "invite_member_description": "将 您 的 同事 添加 到 该 组织。", + "manage": "管理", + "manage_team": "管理团队", + "manage_team_disabled": "只有 组织 拥有者、经理 和 团队 管理员 可以 管理 团队。", + "manager_role_description": "经理 可以 访问 所有 项目 并 添加 移除 成员。", + "member_role_description": "成员 可以 在 选定 项目 中 工作。", + "member_role_info_message": "要 给 新 成员 访问 项目 ,请 将 他们 添加 到 下方 的 团队 。通过 团队 你 可以 管理 谁 可以 访问 哪个 项目 。", + "owner_role_description": "所有者拥有对组织的完全控制权。", + "please_fill_all_member_fields": "请 填写 所有 字段 以 添加 新 成员。", + "please_fill_all_project_fields": "请 填写 所有 字段 以 添加 新 项目。", + "read": "阅读", + "read_write": "读 & 写", + "team_admin": "团队管理员", + "team_created_successfully": "团队 创建 成功", + "team_deleted_successfully": "团队 删除 成功", + "team_deletion_not_allowed": "您 不 可以 删除 此 团队。", + "team_name": "团队 名称", + "team_name_settings_title": "{teamName} 设置", + "team_select_placeholder": "搜索 团队 名称...", + "team_settings_description": "管理 团队成员、访问 权限 和 更多。", + "team_updated_successfully": "团队 更新 成功", + "teams": "团队", + "teams_description": "将 成员 分配 到 团队 ,并 给 团队 访问 项目 的 权限。", + "unlock_teams_description": "管理 哪些 组织成员 可以 访问 特定 项目 和 调查。", + "unlock_teams_title": "通过 更 高级 划解锁 团队", + "upgrade_plan_notice_message": "解锁更多组织角色功能 通过升级计划。", + "you_are_a_member": "你是 会员" + } + }, + "surveys": { + "all_set_time_to_create_first_survey": "一切准备就绪!是时候创建您的第一个调查了", + "alphabetical": "字母顺序", + "copy_survey": "复制 调查", + "copy_survey_description": "复制 此 调查 到 另 一个 环境", + "copy_survey_error": "复制 调查 失败", + "copy_survey_link_to_clipboard": "复制 survey 链接 到 剪贴板", + "copy_survey_partially_success": "{success} 个调查成功复制,{error} 个失败。", + "copy_survey_success": "调查成功复制!", + "delete_survey_and_responses_warning": "您 确定 要 删除 此 调查 及 所有 回复 吗?", + "edit": { + "1_choose_the_default_language_for_this_survey": "1. 选择 此 调查 的 默认 语言:", + "2_activate_translation_for_specific_languages": "2. 激活 特定 语言 的 翻译:", + "add": "添加 +", + "add_a_delay_or_auto_close_the_survey": "添加 延迟 或 自动 关闭 调查", + "add_a_four_digit_pin": "添加 一个 四 位 数 PIN", + "add_a_new_question_to_your_survey": "添加一个新问题到您的调查中", + "add_a_variable_to_calculate": "添加 变量 以 计算", + "add_action_below": "在下面添加操作", + "add_choice_below": "在下方添加选项", + "add_color_coding": "添加 颜色 编码", + "add_color_coding_description": "添加 红色 、橙色 和 绿色 颜色 编码 到 选项。", + "add_column": "添加 列", + "add_condition_below": "在下面添加条件", + "add_custom_styles": "添加 自定义 样式", + "add_delay_before_showing_survey": "在 显示 问卷 前 添加 延迟", + "add_description": "添加 描述", + "add_ending": "添加结尾", + "add_ending_below": "在下方 添加 结尾", + "add_fallback": "添加", + "add_fallback_placeholder": "添加 一个 占位符,以显示该问题是否被跳过:", + "add_hidden_field_id": "添加 隐藏 字段 ID", + "add_highlight_border": "添加 高亮 边框", + "add_highlight_border_description": "在 你的 调查 卡片 添加 外 边框。", + "add_logic": "添加逻辑", + "add_option": "添加 选项", + "add_other": "添加 \"其他\"", + "add_photo_or_video": "添加 照片 或 视频", + "add_pin": "添加 PIN", + "add_question": "添加问题", + "add_question_below": "在下面 添加 问题", + "add_row": "添加 行", + "add_variable": "添加 变量", + "address_fields": "地址字段", + "address_line_1": "地址 第1行", + "address_line_2": "地址 第2行", + "adjust_survey_closed_message": "调整 \"调查 关闭\" 消息", + "adjust_survey_closed_message_description": "更改 访客 看到 调查 关闭 时 的 消息。", + "adjust_the_theme_in_the": "调整主题在", + "all_other_answers_will_continue_to": "所有其他答案将继续", + "allow_file_type": "允许 文件类型", + "allow_multi_select": "允许 多选", + "allow_multiple_files": "允许 多 个 文件", + "allow_users_to_select_more_than_one_image": "允许 用户 选择 多于 一个 图片", + "always_show_survey": "始终 显示 调查", + "and_launch_surveys_in_your_website_or_app": "并 在 你 的 网站 或 应用 中 启动 问卷 。", + "animation": "动画", + "app_survey_description": "在 你的 网络 应用 或 网站 中 嵌入 问卷 收集 反馈 。", + "assign": "指派 =", + "audience": "受众", + "auto_close_on_inactivity": "自动关闭 在 无活动时", + "automatically_close_survey_after": "自动 关闭 调查 后", + "automatically_close_the_survey_after_a_certain_number_of_responses": "自动 关闭 调查 在 达到 一定数量 的 回应 后", + "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "用户未在一定秒数内应答时 自动关闭 问卷", + "automatically_mark_the_survey_as_complete_after": "自动 标记 调查 为 完成 在", + "back_button_label": "\"返回\" 按钮标签", + "background_styling": "背景 样式", + "brand_color": "品牌 颜色", + "brightness": "亮度", + "button_label": "按钮标签", + "button_to_continue_in_survey": "按钮 继续 调查", + "button_to_link_to_external_url": "按钮 链接 到 外部 URL", + "button_url": "按钮 URL", + "cal_username": "Cal.com 用户名 或 用户名/事件", + "calculate": "计算", + "capture_a_new_action_to_trigger_a_survey_on": "捕获一个新动作以触发调查。", + "capture_new_action": "捕获 新动作", + "card_arrangement_for_survey_type_derived": "{surveyTypeDerived} 调查 的 卡片 布局", + "card_background_color": "卡片 的 背景 颜色", + "card_border_color": "卡片 的 边框 颜色", + "card_styling": "卡 样式", + "casual": "休闲", + "caution_edit_duplicate": "复制 并 编辑", + "caution_edit_published_survey": "编辑 已 发布 的 survey?", + "caution_explanation_intro": "我们 理解 您 可能 仍然 希望 进行 更改 。 如果 您 做 , 以下 事情 会 发生 :", + "caution_explanation_new_responses_separated": "更改 之前 的 回复 可能 未 全部 或 仅 部分 包含 在 调查 总结中。", + "caution_explanation_only_new_responses_in_summary": "所有 数据 , 包括 过去 的 回复 , 仍 可 在 调查 总结 页 下载 。", + "caution_explanation_responses_are_safe": "旧 与 新 的 回复 混合 , 这 可能 导致 数据 总结 有误 。", + "caution_recommendation": "这 可能 会 导致 调查 统计 数据 的 不一致 。 我们 建议 复制 调查 。", + "caution_text": "更改 会导致 不一致", + "centered_modal_overlay_color": "居中 模态遮罩层颜色", + "change_anyway": "还是更改", + "change_background": "更改 背景", + "change_question_type": "更改 问题类型", + "change_survey_type": "更改 调查 类型 会影 响 现有 访问", + "change_the_background_color_of_the_card": "更改 卡片 的 背景 颜色", + "change_the_background_color_of_the_input_fields": "更改 输入字段 的 背景颜色", + "change_the_background_to_a_color_image_or_animation": "将 背景 更改为 颜色 、 图像 或 动画。", + "change_the_border_color_of_the_card": "更改 卡片 的 边框 颜色", + "change_the_border_color_of_the_input_fields": "更改 输入字段 的边框颜色。", + "change_the_border_radius_of_the_card_and_the_inputs": "更改 卡片 和 输入 的 边框 半径", + "change_the_brand_color_of_the_survey": "更改调查的品牌颜色", + "change_the_placement_of_this_survey": "更改 此 调查 的 放置。", + "change_the_question_color_of_the_survey": "更改调查的 问题颜色", + "changes_saved": "更改 已 保存", + "changing_survey_type_will_remove_existing_distribution_channels": "更改 调查 类型 会影 响 分享 方式 。 如果 受访者 已经 拥有 当前 类型 的 访问 链接 , 在 更改 之后 ,他们 可能 会 失去 访问 权限 。", + "character_limit_toggle_description": "限制 答案的短或长程度。", + "character_limit_toggle_title": "添加 字符限制", + "checkbox_label": "复选框 标签", + "choose_the_actions_which_trigger_the_survey": "选择 触发 调查 的 动作 。", + "choose_where_to_run_the_survey": "选择 调查 运行 的 位置 。", + "city": "城市", + "close_survey_on_response_limit": "在响应限制时关闭 调查", + "color": "颜色", + "column_used_in_logic_error": "\"这个 列 在 问题 {questionIndex} 的 逻辑 中 使用。请 先 从 逻辑 中 删除 它。\"", + "columns": "列", + "company": "公司", + "company_logo": "公司 徽标", + "completed_responses": "完成反馈。", + "concat": "拼接 +", + "conditional_logic": "条件逻辑", + "confirm_default_language": "确认 默认 语言", + "confirm_survey_changes": "确认调查变更", + "contact_fields": "联络字段", + "contains": "包含", + "continue_to_settings": "继续 到 设置", + "control_which_file_types_can_be_uploaded": "控制 可以 上传的 文件 类型", + "convert_to_multiple_choice": "转换为多选题", + "convert_to_single_choice": "转换为单选题", + "country": "国家", + "create_group": "创建 群组", + "create_your_own_survey": "创建 你 的 调查", + "css_selector": "CSS 选择器", + "custom_hostname": "自 定 义 主 机 名", + "darken_or_lighten_background_of_your_choice": "根据 您 的 选择 暗化 或 亮化 背景。", + "date_format": "日期格式", + "days_before_showing_this_survey_again": "显示 此 调查 之前 的 天数。", + "decide_how_often_people_can_answer_this_survey": "决定 人 可以 回答 这份 调查 的 频率 。", + "delete_choice": "删除 选择", + "description": "描述", + "disable_the_visibility_of_survey_progress": "禁用问卷 进度 的可见性。", + "display_an_estimate_of_completion_time_for_survey": "显示 调查 预计 完成 时间", + "display_number_of_responses_for_survey": "显示 调查 响应 数量", + "divide": "划分 /", + "does_not_contain": "不包含", + "does_not_end_with": "不 以 结尾", + "does_not_equal": "不等于", + "does_not_include_all_of": "不包括所有 ", + "does_not_include_one_of": "不包括一 个", + "does_not_start_with": "不 以 开头", + "edit_recall": "编辑 调用", + "edit_translations": "编辑 {lang} 翻译", + "enable_participants_to_switch_the_survey_language_at_any_point_during_the_survey": "启用 参与者 在 调查 过程中 的 任何 时间 点 切换 调查 语言。", + "enable_recaptcha_to_protect_your_survey_from_spam": "垃圾 邮件 保护 使用 reCAPTCHA v3 来 过滤 掉 垃圾 响应 。", + "enable_spam_protection": "垃圾 邮件 保护", + "end_screen_card": "结束 屏幕 卡片", + "ending_card": "结尾卡片", + "ending_card_used_in_logic": "\"这个 结束卡片 在 问题 {questionIndex} 的 逻辑 中 使用。\"", + "ending_used_in_quota": "此 结尾 正在 被 \"{quotaName}\" 配额 使用", + "ends_with": "以...结束", + "equals": "等于", + "equals_one_of": "等于 其中 一个", + "error_publishing_survey": "发布调查时发生了错误", + "error_saving_changes": "保存 更改 时 出错", + "even_after_they_submitted_a_response_e_g_feedback_box": "即使 他们 提交 了 回复(例如 反馈框)", + "everyone": "所有 人", + "fallback_for": "后备 用于", + "fallback_missing": "备用 缺失", + "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "\"{fieldId} 在 问题 {questionIndex} 的 逻辑 中 使用。请 先 从 逻辑 中 删除 它。\"", + "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "隐藏 字段 \"{fieldId}\" 正在 被 \"{quotaName}\" 配额 使用", + "field_name_eg_score_price": "字段 名称 例如 评分 ,价格", + "first_name": "名字", + "five_points_recommended": "5 点 (推荐)", + "follow_ups": "跟进", + "follow_ups_delete_modal_text": "您 确定 要 删除 此 跟进 吗?", + "follow_ups_delete_modal_title": "删除 跟进?", + "follow_ups_empty_description": "向 受访者 、 自己 或 团队 成员 发送 消息", + "follow_ups_empty_heading": "发送 自动 跟进", + "follow_ups_ending_card_delete_modal_text": "此结束卡片 用于 后续跟踪. 删除 它 将会 从 所有 后续跟踪 中 移除. 确定 要 删除 它 吗?", + "follow_ups_ending_card_delete_modal_title": "删除 结尾卡片?", + "follow_ups_hidden_field_error": "隐藏 字段 用于 后续 。请 先 从 后续 中 移除 它 。", + "follow_ups_item_ending_tag": "结尾", + "follow_ups_item_issue_detected_tag": "问题 检测", + "follow_ups_item_response_tag": "任何 响应", + "follow_ups_item_send_email_tag": "发送 邮件", + "follow_ups_modal_action_attach_response_data_description": "添加 调查 响应 数据 到 跟进", + "follow_ups_modal_action_attach_response_data_label": "附加响应数据", + "follow_ups_modal_action_body_label": "正文", + "follow_ups_modal_action_body_placeholder": "电子邮件正文", + "follow_ups_modal_action_email_content": "电子邮件 内容", + "follow_ups_modal_action_email_settings": "邮件设置", + "follow_ups_modal_action_from_description": "发送邮件的电子邮箱地址", + "follow_ups_modal_action_from_label": "从", + "follow_ups_modal_action_label": "操作", + "follow_ups_modal_action_replyTo_description": "如果 收件人 点击 回复,以下 电子邮件 地址 将会 接收 它", + "follow_ups_modal_action_replyTo_label": "回复 到", + "follow_ups_modal_action_subject": "感谢 你的 回答!", + "follow_ups_modal_action_subject_label": "主题", + "follow_ups_modal_action_subject_placeholder": "电子邮件主题", + "follow_ups_modal_action_to_description": "发送邮件的电子邮箱地址", + "follow_ups_modal_action_to_label": "到", + "follow_ups_modal_action_to_warning": "为 发送 邮件 找不到 有效 选项 ,请 增加 一些 开放文本 / 联系 信息 问题 或 隐藏 字段", + "follow_ups_modal_create_heading": "创建一个新的跟进", + "follow_ups_modal_created_successfull_toast": "后续 操作 已 创建, 并且 在 你 保存 调查 后 将 被 保存。", + "follow_ups_modal_edit_heading": "编辑此跟进", + "follow_ups_modal_edit_no_id": "未 提供 调查 跟进 id ,无法 更新 调查 跟进", + "follow_ups_modal_name_label": "跟进 名称", + "follow_ups_modal_name_placeholder": "命名 你的 跟进", + "follow_ups_modal_subheading": "向 受访者 、 自己 或 团队 成员 发送 消息", + "follow_ups_modal_trigger_description": "何时 应该 触发 该 跟进 ?", + "follow_ups_modal_trigger_label": "触发", + "follow_ups_modal_trigger_type_ending": "受访者 看到 一个 特定 的 结尾", + "follow_ups_modal_trigger_type_ending_select": "选择结尾:", + "follow_ups_modal_trigger_type_ending_warning": "请选择至少 一个结束条件 或更改触发条件类型", + "follow_ups_modal_trigger_type_response": "受访者 完成 调查", + "follow_ups_modal_updated_successfull_toast": "后续 操作 已 更新, 并且 在 你 保存 调查 后 将 被 保存。", + "follow_ups_new": "新的跟进", + "follow_ups_upgrade_button_text": "升级 以启用 跟进", + "form_styling": "表单 样式", + "formbricks_sdk_is_not_connected": "Formbricks SDK 未连接", + "four_points": "4 分", + "heading": "标题", + "hidden_field_added_successfully": "隐藏字段 添加成功", + "hide_advanced_settings": "隐藏 高级设置", + "hide_back_button": "隐藏 \"返回\" 按钮", + "hide_back_button_description": "不 显示 调查 中 的 返回 按钮", + "hide_logo": "隐藏 徽标", + "hide_progress_bar": "隐藏 进度 条", + "hide_the_logo_in_this_specific_survey": "隐藏此特定调查中的 logo", + "hostname": "主 机 名", + "how_funky_do_you_want_your_cards_in_survey_type_derived_surveys": "在 {surveyTypeDerived} 调查 中,您 想要 卡片 多么 有趣", + "if_you_need_more_please": "如果你需要更多,请", + "if_you_really_want_that_answer_ask_until_you_get_it": "如果 你 真想 要 那个 答案,就 不断 询问 直到 得到。", + "ignore_waiting_time_between_surveys": "忽略 调查 之间 的 等待 时间", + "image": "图片", + "includes_all_of": "包括所有 ", + "includes_one_of": "包括一 个", + "initial_value": "初始 值", + "inner_text": "内文", + "input_border_color": "输入 边框 颜色", + "input_color": "输入颜色", + "invalid_targeting": "无效的目标: 请检查 您 的受众过滤器", + "invalid_video_url_warning": "请输入有效的 YouTube、Vimeo 或 Loom URL 。我们目前不支持其他 视频 托管服务提供商。", + "invalid_youtube_url": "无效的 YouTube URL", + "is_accepted": "已被接受", + "is_after": "是 在 之后", + "is_any_of": "是 其中 任何", + "is_before": "在 之前", + "is_booked": "已 被 预定", + "is_clicked": "已点击", + "is_completely_submitted": "已完全提交", + "is_empty": "是 空", + "is_not_empty": "不是 空", + "is_not_set": "未设置", + "is_partially_submitted": "部分提交", + "is_set": "已设置", + "is_skipped": "已跳过", + "is_submitted": "已提交", + "jump_to_question": "跳 转 到 问题", + "keep_current_order": "保持 当前 顺序", + "keep_showing_while_conditions_match": "条件 符合 时 保持 显示", + "key": "键", + "last_name": "姓", + "let_people_upload_up_to_25_files_at_the_same_time": "允许 人们 同时 上传 最多 25 个 文件", + "limit_file_types": "限制 文件 类型", + "limit_the_maximum_file_size": "限制 最大 文件 大小", + "limit_upload_file_size_to": "将 上传 文件 大小 限制 为", + "link_survey_description": "分享 问卷 页面 链接 或 将其 嵌入 网页 或 电子邮件 中。", + "load_segment": "载入 段落", + "logic_error_warning": "更改 将 导致 逻辑 错误", + "logic_error_warning_text": "更改问题类型 会 移除 此问题 的 逻辑条件", + "long_answer": "长答案", + "lower_label": "下限标签", + "manage_languages": "管理 语言", + "max_file_size": "最大 文件 大小", + "max_file_size_limit_is": "最大 文件 大小 限制 是", + "multiply": "乘 *", + "needed_for_self_hosted_cal_com_instance": "需要用于 自建 Cal.com 实例", + "next_button_label": "\"下一步\" 按钮标签", + "next_question": "下一个问题", + "no_hidden_fields_yet_add_first_one_below": "还没有隐藏字段。 在下面添加第一个。", + "no_images_found_for": "未找到与 \"{query}\" 相关的图片", + "no_languages_found_add_first_one_to_get_started": "没有找到语言。添加第一个以开始。", + "no_option_found": "找不到选择", + "no_variables_yet_add_first_one_below": "还没有变量。 在下面添加第一个。", + "number": "数字", + "once_set_the_default_language_for_this_survey_can_only_be_changed_by_disabling_the_multi_language_option_and_deleting_all_translations": "一旦设置,此调查的默认语言只能通过禁用多语言选项并删除所有翻译来更改。", + "only_display_the_survey_to_a_subset_of_the_users": "仅 显示 给 部分 用户", + "only_lower_case_letters_numbers_and_underscores_are_allowed": "仅允许小写字母、数字和下划线。", + "only_people_who_match_your_targeting_can_be_surveyed": "只有符合 您的目标 定位 的人 可以 被调查 。", + "option_idx": "选项 {choiceIndex}", + "option_used_in_logic_error": "\"这个 选项 在 问题 {questionIndex} 的 逻辑 中 使用。请 先 从 逻辑 中 删除 它。\"", + "optional": "可选", + "options": "选项", + "override_theme_with_individual_styles_for_this_survey": "使用 个性化 样式 替代 这份 问卷 的 主题。", + "overwrite_placement": "覆盖 放置", + "overwrite_the_global_placement_of_the_survey": "覆盖 全局 调查 放置", + "overwrites_waiting_period_between_surveys_to_x_days": "将 调查 之间 的 等待期 覆盖 为 {days} 天。", + "pick_a_background_from_our_library_or_upload_your_own": "从我们的库中选择一种 背景 或 上传您自己的。", + "picture_idx": "图片 {idx}", + "pin_can_only_contain_numbers": "PIN 只能包含数字。", + "pin_must_be_a_four_digit_number": "PIN 必须是 四 位数字。", + "please_enter_a_file_extension": "请输入 文件 扩展名。", + "please_set_a_survey_trigger": "请 设置 一个 调查 触发", + "please_specify": "请 指定", + "prevent_double_submission": "防止 重复 提交", + "prevent_double_submission_description": "只允许每个 email 地址提供 1 个回复", + "protect_survey_with_pin": "使用 PIN 保护 调查", + "protect_survey_with_pin_description": "只有 拥有 PIN 的 用户 可以 访问 调查。", + "publish": "发布", + "question": "问题", + "question_color": "问题颜色", + "question_deleted": "问题 已删除", + "question_duplicated": "问题重复。", + "question_id_updated": "问题 ID 更新", + "question_used_in_logic": "\"这个 问题 在 问题 {questionIndex} 的 逻辑 中 使用。\"", + "question_used_in_quota": "此 问题 正在 被 \"{quotaName}\" 配额 使用", + "quotas": { + "add_quota": "添加 配额", + "change_quota_for_public_survey": "更改 公共调查 的配额?", + "confirm_quota_changes": "确认配额变更", + "confirm_quota_changes_body": "您在配额中有未保存的更改。离开前是否要保存?", + "continue_survey_normally": "正常 继续 调查", + "count_partial_submissions": "统计 部分 提交", + "count_partial_submissions_description": "包含 符合 配额 标准 但 未 完成 调查 的 受访者", + "create_quota_for_public_survey": "为公共调查 创建 配额?", + "create_quota_for_public_survey_description": "只有未来的答案将纳入配额", + "create_quota_for_public_survey_text": "此 调查 已经 是 公开 的 。现有 的 回复 将 不 会 考虑 在 新 配额 中 。", + "delete_quota_confirmation_text": "这将永久删除配额 {quotaName}。", + "duplicate_quota": "复制 配额", + "edit_quota": "编辑 配额", + "end_survey_for_matching_participants": "为 符合 条件 的 参与者 结束 调查", + "inclusion_criteria": "纳入标准", + "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, other {你已为此配额收到 {value} 个回复, 所以限额必须大于 {value}.} }", + "limited_to_x_responses": "限制 为 {limit}", + "new_quota": "新 配额", + "quota_created_successfull_toast": "配额 创建 成功", + "quota_deleted_successfull_toast": "配额 删除 成功", + "quota_duplicated_successfull_toast": "配额 复制 成功", + "quota_name_placeholder": "例如, 年龄 18-25 岁 参与者", + "quota_updated_successfull_toast": "配额 更新 成功", + "response_limit": "限额", + "save_changes_confirmation_body": "任何 对 包含 条件 的 更改 仅 影响 将来 的 响应。\n我们 建议 复制 一个 现有 的 或 创建 一个 新 的 配额。", + "save_changes_confirmation_text": "现有 的 响应 保留 在 配额 中", + "select_ending_card": "选择结尾卡片", + "upgrade_prompt_title": "在更高的计划中使用配额", + "when_quota_has_been_reached": "达到 配额 时" + }, + "randomize_all": "随机排列", + "randomize_all_except_last": "随机排列,最后一个除外", + "range": "范围", + "recontact_options": "重新 联系 选项", + "redirect_thank_you_card": "重定向感谢卡", + "redirect_to_url": "重定向到 URL", + "redirect_to_url_not_available_on_free_plan": "重 定 向 到 URL 不 可 用 于 免 费 计 划", + "remove_description": "移除 描述", + "remove_translations": "移除 翻译", + "require_answer": "需要回答", + "required": "必需的", + "reset_to_theme_styles": "重置 为 主题 风格", + "reset_to_theme_styles_main_text": "您 确定 要 将 样式 重置 为 主题 样式吗?这 将 删除 所有 自定义 样式。", + "response_limit_can_t_be_set_to_0": "不 能 将 响应 限制 设置 为 0", + "response_limit_needs_to_exceed_number_of_received_responses": "限制 响应 需要 超过 收到 的 响应 数量 ({responseCount})。", + "response_limits_redirections_and_more": "响应 限制 、 重定向 和 更多 。", + "response_options": "响应 选项", + "roundness": "圆度", + "row_used_in_logic_error": "\"这个 行 在 问题 {questionIndex} 的 逻辑 中 使用。请 先 从 逻辑 中 删除 它。\"", + "rows": "行", + "save_and_close": "保存 和 关闭", + "scale": "规模", + "search_for_images": "搜索 图片", + "seconds_after_trigger_the_survey_will_be_closed_if_no_response": "触发后 如果 没有 应答 将 在 几秒 后 关闭 调查", + "seconds_before_showing_the_survey": "显示问卷前 几秒", + "select_or_type_value": "选择 或 输入 值", + "select_ordering": "选择排序", + "select_saved_action": "选择 保存的 操作", + "select_type": "选择 类型", + "send_survey_to_audience_who_match": "发送 调查 给 符合 要求 的 受众", + "send_your_respondents_to_a_page_of_your_choice": "将 你 的 受访者 发送到 你 选择 的 页面。", + "set_the_global_placement_in_the_look_feel_settings": "在外观 设置中 设置 全局 放置。", + "settings_saved_successfully": "设置 保存 成功", + "seven_points": "7 分", + "show_advanced_settings": "显示 高级设置", + "show_button": "显示 按钮", + "show_language_switch": "显示 语言 切换", + "show_multiple_times": "显示 多次", + "show_only_once": "仅 显示 一次", + "show_survey_maximum_of": "显示 调查 最大 一次", + "show_survey_to_users": "显示 问卷 给 % 的 用户", + "show_to_x_percentage_of_targeted_users": "显示 给 {percentage}% 的 目标 用户", + "simple": "简单", + "six_points": "6 分", + "skip_button_label": "\"跳过\" 按钮标签", + "smiley": "笑脸", + "spam_protection_note": "垃圾 邮件 保护 对于 与 iOS 、 React Native 和 Android SDK 一起 显示 的 调查 无效 。 它 将 破坏 调查。", + "spam_protection_threshold_description": "设置 值 在 0 和 1 之间,响应 低于 此 值 将 被 拒绝。", + "spam_protection_threshold_heading": "响应 阈值", + "star": "星", + "starts_with": "以...开始", + "state": "状态", + "straight": "笔直", + "style_the_question_texts_descriptions_and_input_fields": "样式 问题文字、描述和输入字段。", + "style_the_survey_card": "样式 调查卡", + "styling_set_to_theme_styles": "样式 设置 为 主题 风格", + "subheading": "子标题", + "subtract": "减 -", + "suggest_colors": "建议颜色", + "survey_completed_heading": "调查 完成", + "survey_completed_subheading": "此 免费 & 开源 调查 已 关闭", + "survey_display_settings": "调查显示设置", + "survey_placement": "调查 放置", + "survey_trigger": "调查 触发", + "switch_multi_lanugage_on_to_get_started": "打开多语言以开始 \uD83D\uDC49", + "targeted": "定位", + "ten_points": "10 分", + "the_survey_will_be_shown_multiple_times_until_they_respond": "调查 将 显示 多次 直到 他们 回复", + "the_survey_will_be_shown_once_even_if_person_doesnt_respond": "调查 将 显示 一次,即使 你 不 回复。", + "then": "然后", + "this_action_will_remove_all_the_translations_from_this_survey": "此操作将删除该调查中的所有翻译。", + "this_extension_is_already_added": "此扩展已经添加。", + "this_file_type_is_not_supported": "此 文件 类型 不 支持。", + "this_setting_overwrites_your": "此 设置 覆盖 你的", + "three_points": "3 分", + "times": "次数", + "to_keep_the_placement_over_all_surveys_consistent_you_can": "为了 保持 所有 调查 的 放置 一致,您 可以", + "trigger_survey_when_one_of_the_actions_is_fired": "当 其中 一个 动作 被 触发 时 启动 调查…", + "try_lollipop_or_mountain": "尝试 'lollipop' 或 'mountain' ...", + "type_field_id": "类型 字段 ID", + "unlock_targeting_description": "根据 属性 或 设备信息 定位 特定 用户组", + "unlock_targeting_title": "通过 更 高级 划解锁 定位", + "unsaved_changes_warning": "您在调查中有未保存的更改。离开前是否要保存?", + "until_they_submit_a_response": "直到 他们 提交 回复", + "upgrade_notice_description": "创建 多语言 调查 并 解锁 更多 功能", + "upgrade_notice_title": "解锁 更高 计划 中 的 多语言 调查", + "upload": "上传", + "upload_at_least_2_images": "至少 上传 2 张 图片", + "upper_label": "上限标签", + "url_filters": "URL 过滤器", + "url_not_supported": "URL 不支持", + "use_with_caution": "谨慎 使用", + "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "\"{variable} 在 问题 {questionIndex} 的 逻辑 中 使用。请 先 从 逻辑 中 删除 它。\"", + "variable_is_used_in_quota_please_remove_it_from_quota_first": "变量 \"{variableName}\" 正在 被 \"{quotaName}\" 配额 使用", + "variable_name_is_already_taken_please_choose_another": "变量名已被占用,请选择其他。", + "variable_name_must_start_with_a_letter": "变量名 必须 以字母开头。", + "verify_email_before_submission": "提交 之前 验证电子邮件", + "verify_email_before_submission_description": "仅允许 拥有 有效 电子邮件 的 人 回应。", + "wait": "等待", + "wait_a_few_seconds_after_the_trigger_before_showing_the_survey": "触发后等待几秒再显示问卷", + "waiting_period": "等待期", + "welcome_message": "欢迎 信息", + "when_conditions_match_waiting_time_will_be_ignored_and_survey_shown": "当 条件 匹配 时,等待 时间 将 被 忽略 并 显示 调查。", + "without_a_filter_all_of_your_users_can_be_surveyed": "没有 过滤器 时 ,所有 用户 都可以 被 调查 。", + "you_have_not_created_a_segment_yet": "您 还没有 创建 段落", + "you_need_to_have_two_or_more_languages_set_up_in_your_project_to_work_with_translations": "您 需要在您的项目中设置两种或更多语言才能进行翻译。", + "your_description_here_recall_information_with": "在此输入描述。 调用信息与 @", + "your_question_here_recall_information_with": "在此输入你的问题。 调用信息与 @", + "your_web_app": "您的 网页应用", + "zip": "邮编" + }, + "error_deleting_survey": "删除 调查 时发生错误", + "filter": { + "complete_and_partial_responses": "完整 和 部分 反馈", + "complete_responses": "完整反馈", + "partial_responses": "部分 反馈" + }, + "new_survey": "新 调查", + "no_surveys_created_yet": "尚未创建调查", + "open_options": "打开 选项", + "preview_survey_in_a_new_tab": "在 新 标签 中 预览 survey", + "read_only_user_not_allowed_to_create_survey_warning": "作为 只读 用户,你 无法 创建 调查。请 询问 一位 具有 写 访问 权限 的 用户 创建 调查 或 请 一位 经理 升级 你的 角色。", + "relevance": "相关性", + "responses": { + "address_line_1": "地址 第1行", + "address_line_2": "地址 第2行", + "an_error_occurred_deleting_the_tag": "删除 标签 时发生错误", + "browser": "浏览器", + "bulk_delete_response_quotas": "这些 响应是 此 调查配额 的一部分。 您 希望 如何 处理 这些 配额?", + "city": "城市", + "company": "公司", + "completed": "完成 ✅", + "country": "国家", + "decrement_quotas": "减少所有配额限制,包括此回应", + "delete_response_confirmation": "这 将 删除 调查 回应, 包括 所有 答案、 标签、 附件文档 和 回应元数据。", + "delete_response_quotas": "该响应是 此 调查配额 的一部分。 您 希望 如何 处理 这些 配额?", + "device": "设备", + "device_info": "设备信息", + "email": "邮件", + "error_downloading_responses": "下载 回应 时 出现 错误", + "first_name": "名字", + "how_to_identify_users": "如何 识别 用户", + "last_name": "姓", + "not_completed": "未完成 ⏳", + "os": "操作系统", + "person_attributes": "人员 属性", + "phone": "电话", + "respondent_skipped_questions": "受访者跳过 这些问题。", + "response_deleted_successfully": "响应 删除 成功", + "single_use_id": "单次 使用 ID", + "source": "来源", + "state_region": "州 / 地区", + "survey_closed": "调查 关闭", + "tag_already_exists": "标签 已 存在", + "this_response_is_in_progress": "此 响应 正在 进行中。", + "zip_post_code": "邮政编码" + }, + "search_by_survey_name": "按 调查 名称 搜索", + "share": { + "anonymous_links": { + "custom_single_use_id_description": "如果 不 加密 单次 使用 ID ,任何 “suid=...” 的 值 都 可以 用于 一个 响应", + "custom_single_use_id_title": "您 可以 在 URL 中 设置 任意 值 作为 一次性 ID。", + "custom_start_point": "自定义 起点", + "data_prefilling": "数据 预填充", + "description": "来自 这些 link 的 响应 将是 匿名 的", + "disable_multi_use_link_modal_button": "禁用 多次 使用 链接", + "disable_multi_use_link_modal_description": "禁用多次使用的链接将阻止任何人通过该链接提交响应。", + "disable_multi_use_link_modal_description_subtext": "这也会破坏在网站、 电子邮件 、社交媒体和 使用此 多次 使用 链接 的 二维码 上的任何活动嵌入 。", + "disable_multi_use_link_modal_title": "你确定吗?这可能会破坏 活动 嵌入。", + "disable_single_use_link_modal_button": "禁用 单次 使用 链接", + "disable_single_use_link_modal_description": "如果 你 分享了 单一 使用 链接,参与者 将 无法 再 回应 调查。", + "generate_and_download_links": "生成 & 下载 链接", + "generate_links_error": "单次 使用 链接 无法 生成 。请 直接 使用 API ", + "multi_use_link": "多次 使用 链接", + "multi_use_link_description": "使用 一个 链接 从 匿名 响应者 收集 多个 响应", + "multi_use_powers_other_channels_description": "如果 禁用 它, 这些 其他 分发 渠道 也 会 被 禁用。", + "multi_use_powers_other_channels_title": "此 链接 支持 网站 股用、电子邮件 股用、社交媒体 股用 和 二维码。", + "nav_title": "匿名链接", + "number_of_links_label": "链接数 (1 - 5,000)", + "single_use_link": "单次 使用 链接", + "single_use_link_description": "允许 每个 survey 链接 仅 能答复一次", + "single_use_links": "单次 使用 链接", + "source_tracking": "来源 跟踪", + "url_encryption_description": "仅在 需要 设置 自定义 单次使用 ID 时 才 禁用。", + "url_encryption_label": "单次 使用 ID 的 URL 加密" + }, + "dynamic_popup": { + "alert_button": "编辑 survey", + "alert_description": "此 问卷 当前 配置 为 链接 问卷, 不 支持 动态 弹出 窗。 您 可以 在 问卷 编辑器 的 设置 选项 中 进行 修改。", + "alert_title": "更改调查类型为应用内", + "attribute_based_targeting": "基于 属性 的 目标 定位", + "code_no_code_triggers": "代码 和 无代码 触发器", + "description": "Formbricks 调查 可以 嵌入 为 弹出窗口 , 基于 用户 互动 。", + "nav_title": "动态 (弹出窗口)", + "recontact_options": "重新 联系 选项" + }, + "embed_on_website": { + "description": "Formbricks 调查可以作为静态元素嵌入。", + "embed_code_copied_to_clipboard": "嵌入代码 已复制到 剪贴板", + "embed_mode": "嵌入模式", + "embed_mode_description": "嵌入您的 调查 , 使用极简设计, 去除填充和背景。", + "nav_title": "网站 嵌入" + }, + "link_settings": { + "description": "为链接提供自定义 标题 、描述 和 图片 ,用于公开共享 。", + "language_help_text": "元数据是根据 URL 中的 `lang` 参数加载的。", + "link_description": "链接 描述", + "link_description_description": "描述 在 55-200 个字符之间 的表现 最佳 。", + "link_title": "链接 标题", + "link_title_description": "简短 标题 效果 最佳 作为 Meta Titles。", + "preview_image": "预览 图像", + "preview_image_description": "文件大小小于4MB 的横向图片效果最佳。", + "title": "链接设置" + }, + "personal_links": { + "create_and_manage_segments": "在 联系人 > 细分 下创建和管理您的细分", + "description": "为 一个 细分 生成 个人 链接 ,并 将 调查 响应 与 每个 联系人 匹配。", + "expiry_date_description": "一旦链接过期,收件人就不能再响应问卷。", + "expiry_date_optional": "到期日期( 可选)", + "generate_and_download_links": "生成 & 下载 链接", + "generating_links": "生成链接", + "generating_links_toast": "正在生成链接,下载将很快开始…", + "links_generated_success_toast": "链接 已生成成功,下载 将很快 开始。", + "nav_title": "个人 链接", + "no_segments_available": "没有可用的片段", + "select_segment": "选择 细分", + "upgrade_prompt_description": "为 一个 细分 生成 个人 链接 ,并 将 调查 响应 链接 到 每个 联系人。", + "upgrade_prompt_title": "在更高的计划中使用 个人 链接", + "work_with_segments": "个人链接与片段一起工作。" + }, + "send_email": { + "copy_embed_code": "复制 嵌入代码", + "description": "将你的调查嵌入到电子邮件中,以获取你所在受众的回复。", + "email_preview_tab": "邮件预览", + "email_sent": "邮件 已发送!", + "email_subject_label": "主题", + "email_to_label": "到", + "embed_code_copied_to_clipboard": "嵌入代码 已复制到 剪贴板", + "embed_code_copied_to_clipboard_failed": "复制失败,请重试", + "embed_code_tab": "嵌入代码", + "formbricks_email_survey_preview": "Formbricks 电子邮件调查预览", + "nav_title": "邮件嵌入", + "send_preview": "发送 预览", + "send_preview_email": "发送 预览 邮件" + }, + "share_settings_title": "分享 设置", + "share_view_title": "通过 分享", + "social_media": { + "description": "从您的 社交媒体 网络联系人获取回复。", + "source_tracking_enabled": " 启用 来源 跟踪", + "source_tracking_enabled_alert_description": "当 从 此 对话 框 共享 时,社交 媒体 将 被 附加 到 调查 链接,以便 了解 每个 网络 的 响应 来源。", + "title": "社交媒体" + } + }, + "summary": { + "added_filter_for_responses_where_answer_to_question": "为 回答 问题 {questionIdx} 的 答复 增加 了 筛选器,筛选条件 是 {filterComboBoxValue} - {filterValue}", + "added_filter_for_responses_where_answer_to_question_is_skipped": "为 回答 问题 {questionIdx} 的 答复 增加 了 筛选器,筛选条件 是 略过", + "all_responses_csv": "所有 反馈 (CSV)", + "all_responses_excel": "所有 反馈 (Excel)", + "all_time": "所有 时间", + "almost_there": "快到了!安装 widget 以 开始 接收 回复。", + "average": "平均", + "completed": "完成", + "completed_tooltip": "调查 已 完成 的 次数", + "configure_alerts": "配置 警报", + "congrats": "恭喜!您的调查已上线。", + "connect_your_website_or_app_with_formbricks_to_get_started": "将您 的网站 或应用 与 Formbricks 连接 , 以开始 使用。", + "current_count": "当前数量", + "custom_range": "自定义 范围...", + "delete_all_existing_responses_and_displays": "删除 所有 现有 的 回复 和 显示", + "download_qr_code": "下载 二维码", + "drop_offs": "流失", + "drop_offs_tooltip": "调查 被 开始 但 未 完成 的 次数", + "failed_to_copy_link": "复制链接失败", + "filter_added_successfully": "筛选器 添加成功", + "filter_updated_successfully": "筛选器 更新 成功", + "filtered_responses_csv": "过滤 反馈 (CSV)", + "filtered_responses_excel": "过滤 反馈 (Excel)", + "go_to_setup_checklist": "前往 设置 检查列表 \uD83D\uDC49", + "impressions": "印象", + "impressions_tooltip": "调查 被 查看 的 次数", + "in_app": { + "connection_description": "调查将显示给符合以下条件的您网站用户", + "connection_title": "Formbricks SDK 已连接", + "description": "Formbricks 调查 可以 嵌入 为 弹出窗口 , 基于 用户 互动 。", + "display_criteria": "显示 条件", + "display_criteria.audience_description": "目标 受众", + "display_criteria.code_trigger": "代码 操作", + "display_criteria.everyone": "所有人", + "display_criteria.no_code_trigger": "无代码", + "display_criteria.overwritten": "已覆盖", + "display_criteria.randomizer": "{percentage}% 随机器", + "display_criteria.randomizer_description": "只有 {percentage}% 的人执行操作时可能会被调查。", + "display_criteria.recontact_description": "重新 联系 选项", + "display_criteria.targeted": "定位", + "display_criteria.time_based_always": "始终 显示 调查", + "display_criteria.time_based_day": "天", + "display_criteria.time_based_days": "天", + "display_criteria.time_based_description": "全球 等待 时间", + "display_criteria.trigger_description": "调查 触发", + "documentation_title": "分发 截获 调查 在 所有 平台", + "html_embed": " 中的 HTML 嵌入", + "ios_sdk": "iOS SDK 用于 Apple 应用", + "javascript_sdk": "JavaScript SDK", + "kotlin_sdk": "Kotlin SDK 用于 Android 应用", + "no_connection_description": "将您 的网站 或 应用 与 Formbricks 连接 , 以发布 截获 调查。", + "no_connection_title": "您 还 未 连 接!", + "react_native_sdk": "RN 应用 的 React Native SDK", + "title": "拦截 调查 设置" + }, + "includes_all": "包括所有 ", + "includes_either": "包含 任意一个", + "install_widget": "安装 Formbricks 小组件", + "is_equal_to": "等于", + "is_less_than": "少于", + "last_30_days": "最近 30 天", + "last_6_months": "过去 6个月", + "last_7_days": "最近 7 天", + "last_month": "上个月", + "last_quarter": "上季度", + "last_year": "去年", + "limit": "限额", + "no_responses_found": "未找到响应", + "other_values_found": "找到其他值", + "overall": "整体", + "qr_code": "二维码", + "qr_code_description": "通过 QR 码 收集 的 响应 是 匿名 的。", + "qr_code_download_failed": "二维码下载失败", + "qr_code_download_with_start_soon": "二维码下载将很快开始", + "qr_code_generation_failed": "加载 调查 QR 码 时出现问题。 请重试。", + "quotas_completed": "配额完成", + "quotas_completed_tooltip": "受访者完成的配额数量。", + "reset_survey": "重置 调查", + "reset_survey_warning": "重置 一个调查 会移除与 此调查 相关 的 所有响应 和 展示 。此操作 不能 撤销 。", + "selected_responses_csv": "选定 反馈 (CSV)", + "selected_responses_excel": "选定 反馈 (Excel)", + "setup_integrations": "设置 集成", + "share_survey": "分享 问卷调查", + "show_all_responses_that_match": "显示所有匹配的响应", + "show_all_responses_where": "显示所有的响应,条件为...", + "starts": "开始", + "starts_tooltip": "调查 被 开始 的 次数", + "survey_reset_successfully": "调查已重置成功!{responseCount} 个 反馈 和 {displayCount} 个 显示 已删除。", + "this_month": "本月", + "this_quarter": "本季度", + "this_year": "今年", + "time_to_complete": "完成时间", + "ttc_tooltip": "完成 本 问题 的 平均 时间", + "unknown_question_type": "未知 问题 类型", + "use_personal_links": "使用 个人 链接", + "waiting_for_response": "等待回复 \uD83E\uDDD8‍♂️", + "whats_next": "接下来 是 什么?", + "your_survey_is_public": "您的 调查 是 公共 的", + "youre_not_plugged_in_yet": "您 还 没 有 连 接!" + }, + "survey_deleted_successfully": "调查 删除 成功", + "survey_duplicated_successfully": "调查成功复制。", + "survey_duplication_error": "无法复制 调查。", + "templates": { + "all_channels": "所有 渠道", + "all_industries": "所有 行业", + "all_roles": "所有 角色", + "create_a_new_survey": "创建 新 调查", + "multiple_industries": "多个 行业", + "use_this_template": "使用 此 模板", + "uses_branching_logic": "此调查 使用 分支逻辑。" + } + }, + "xm-templates": { + "ces": "客户努力评分", + "ces_description": "利用 每个 接触点 来 了解 客户 互动 的 轻松 程度", + "csat": "CSAT", + "csat_description": "实施 最佳 实践 来 衡量 客户 满意度", + "enps": "员工净推荐值", + "enps_description": "通用反馈以了解员工参与度和满意度", + "five_star_rating": "五 星 评分", + "five_star_rating_description": "通用 反馈 解决方案 来 衡量 总体 满意度", + "headline": "您 想 获得 什么 类型 的 反馈?", + "nps": "净推荐值", + "nps_description": "实施 已验证 的 最佳 实践 来 了解 人们 购买 的 原因", + "smileys": "笑脸", + "smileys_description": "使用 视觉 指标 来 捕捉 客户 接触点 的 反馈" + } + }, + "organizations": { + "landing": { + "no_projects_warning_subtitle": "联系 组织 所有者 以 获得 项目 访问 权限。 或 创建 自己 的 组织 以 开始。", + "no_projects_warning_title": "您的账户尚未有权限访问任何项目。" + }, + "projects": { + "new": { + "channel": { + "channel_select_subtitle": "分享 一个 链接 或 在 应用程序 或 网站 上 显示 你的 调查。", + "channel_select_title": "你需要哪种类型的调查?", + "in_product_surveys": "在产品 调查", + "in_product_surveys_description": "嵌入 在 应用程序 或 网站 中。", + "link_and_email_surveys": "链接 和 电子邮件 调查", + "link_and_email_surveys_description": "可以 在 任何 在线地 点 接触 人们。" + }, + "mode": { + "formbricks_cx": "Formbricks CX", + "formbricks_cx_description": "调查 和 报告 来 了解 客户 需要 什么。", + "formbricks_surveys": "Formbricks 调查", + "formbricks_surveys_description": "多用途 调查 平台,适用于 网页、应用 和 邮件 调查。", + "what_are_you_here_for": "您 在 这里 是 做 什么?" + }, + "settings": { + "brand_color": "品牌 颜色", + "brand_color_description": "将 survey 的 主要 颜色 与 你的 品牌 匹配。", + "create_new_team": "创建 新 团队", + "project_creation_failed": "项目 创建 失败", + "project_name": "产品 名称", + "project_name_description": "你的 产品 叫什么?", + "project_settings_subtitle": "当 人们 认出 你的 品牌,他们 更 可能 开始 和 完成 回应。", + "project_settings_title": "让 受访者 知道 是 你", + "team_description": "谁 都能 访问 该 项目?" + } + } + } + }, + "s": { + "check_inbox_or_spam": "请 也 检查 您 的 垃圾邮件 文件夹 如果 您 没有 在 收件箱 中 看到 邮件。", + "completed": "此 调查 关闭", + "create_your_own": "创建 你 的 开源 调查", + "enter_pin": "此调查已受保护。输入下方 PIN", + "just_curious": "只是好奇 ?", + "link_invalid": "此调查只能通过邀请参加。", + "paused": "此调查暂时暂停。", + "please_try_again_with_the_original_link": "请 尝试 使用 原始 链接", + "preview_survey_questions": "预览 问卷调查 问题。", + "question_preview": "问题 预览", + "response_already_received": "我们 已经 收到 这个 邮件 地址 的 回复。", + "response_submitted": "与 此 调查 和 联系人 关联 的 响应 已 存在", + "survey_already_answered_heading": "调查 已经 被 回答", + "survey_already_answered_subheading": "此 链接 只能 使用 一次。", + "survey_sent_to": "问卷 已发送至 {email}", + "this_looks_fishy": "这 看起来不 妥", + "verify_email": "验证 电子邮件。", + "verify_email_before_submission": "验证 您的 邮件 以 响应", + "verify_email_before_submission_button": "验证", + "verify_email_before_submission_description": "要 响应 此 调查,请 验证 您的 邮件", + "want_to_respond": "想要 参与 吗?" + }, + "setup": { + "intro": { + "get_started": "开始使用", + "made_with_love_in_kiel": "以 \uD83E\uDD0D 在 德国 制作", + "paragraph_1": "Formbricks 是一个体验管理套件, 基于全球增长最快的开源调查平台构建。", + "paragraph_2": "在网站、应用程序或任何在线平台上运行 定向 调查。收集 有价值 的见解,为客户、用户和员工打造 无法抗拒 的体验。", + "paragraph_3": "我们致力于最高级别的数据隐私。 自行托管以保持对您的数据的完全控制。", + "welcome_to_formbricks": "欢迎来到 Formbricks !" + }, + "invite": { + "add_another_member": "添加另一个成员", + "continue": "继续", + "failed_to_invite": "邀请失败", + "invitation_sent_to": "邀请已发送至", + "invite_your_organization_members": "邀请 您 的 组织 成员", + "life_s_no_fun_alone": "独 自 一 人 生 活 不 有 趣 。", + "skip": "跳过", + "smtp_not_configured": "SMTP 未配置", + "smtp_not_configured_description": "无法 发送 邀请,因为 电子邮件 服务 未 配置。您 可以 稍后 在 组织 设置 中 复制 邀请 链接。" + }, + "organization": { + "create": { + "continue": "继续", + "delete_account": "删除账号", + "delete_account_description": "如果 您 想要 删除 您 的 账户,您 可以 通过 点击 下面 的 按钮 来 执行。", + "description": "使 它 成为 你的。", + "no_membership_found": "未找到会员资格!", + "no_membership_found_description": "您 目前 不 是 任何 组织 的 成员 。如果 您 认为 这是 一个 错误 ,请 联系 组织 所有者 。", + "title": "设置你的组织" + } + }, + "signup": { + "create_administrator": "创建 管理员", + "this_user_has_all_the_power": "此 用户 拥有 所有 权力。" + } + }, + "templates": { + "address": "地址", + "address_description": "请求提供 邮寄地址", + "alignment_and_engagement_survey_description": "衡量员工与 公司 愿景 、战略 和 沟通 的 对齐程度 以及 团队合作 。", + "alignment_and_engagement_survey_name": "与 公司 愿景 的 对齐 和 参与度", + "alignment_and_engagement_survey_question_1_headline": "我 明白 我的 角色 如何 有助于 公司 的 整体 战略。", + "alignment_and_engagement_survey_question_1_lower_label": "没有 理解", + "alignment_and_engagement_survey_question_1_upper_label": "完全 理解", + "alignment_and_engagement_survey_question_2_headline": "我 觉得 我的 价值观 与 公司 的使命 和 文化 相符。", + "alignment_and_engagement_survey_question_2_lower_label": "不 相符", + "alignment_and_engagement_survey_question_3_headline": "我 与 团队 有效 协作 以 实现 我们 的 目标。", + "alignment_and_engagement_survey_question_3_lower_label": "协作 不佳", + "alignment_and_engagement_survey_question_3_upper_label": "出色的 协作", + "alignment_and_engagement_survey_question_4_headline": "公司 如何 改进 其 愿景 与 战略 的 协同?", + "alignment_and_engagement_survey_question_4_placeholder": "输入您的答案...", + "back": "返回", + "book_interview": "预约 面试", + "build_product_roadmap_description": "识别 用户 最 想要 的 一个 东西 并 构建 它 。", + "build_product_roadmap_name": "构建 产品 路线图", + "build_product_roadmap_question_1_headline": "您 对 $[projectName] 的 功能 和 特性 满意 吗?", + "build_product_roadmap_question_1_lower_label": "一点也不 满意", + "build_product_roadmap_question_1_upper_label": "极度满意", + "build_product_roadmap_question_2_headline": "我们可以做出哪一项更改来最大限度地改善您的 $[projectName] 体验?", + "build_product_roadmap_question_2_placeholder": "在此输入您的答案...", + "card_abandonment_survey": "购物车 被遗弃 调查", + "card_abandonment_survey_description": "了解 在 你的 网上商店 购物车 被遗弃 的 背后 原因。", + "card_abandonment_survey_question_1_button_label": "确定!", + "card_abandonment_survey_question_1_dismiss_button_label": "不,谢谢", + "card_abandonment_survey_question_1_headline": "你有 2 分钟来帮助我们改进吗?", + "card_abandonment_survey_question_1_html": "

我们 注意到 你在 购物车 中 留下 了一些 商品。我们 很 想 了解 为什么。

", + "card_abandonment_survey_question_2_choice_1": "高 运输 成本", + "card_abandonment_survey_question_2_choice_2": "发现更好的 价格", + "card_abandonment_survey_question_2_choice_3": "仅 浏览", + "card_abandonment_survey_question_2_choice_4": "决定不购买", + "card_abandonment_survey_question_2_choice_5": "支付 问题", + "card_abandonment_survey_question_2_choice_6": "其他", + "card_abandonment_survey_question_2_headline": "您未完成购买的主要原因是什么?", + "card_abandonment_survey_question_2_subheader": "请选择以下选项之一:", + "card_abandonment_survey_question_3_headline": "请 详细 说明 您 未完成购买 的 原因:", + "card_abandonment_survey_question_4_headline": "您如何评价 您 的整体购物体验?", + "card_abandonment_survey_question_4_lower_label": "非常 不 满意", + "card_abandonment_survey_question_4_upper_label": "非常 满意", + "card_abandonment_survey_question_5_choice_1": "降低 运输 成本", + "card_abandonment_survey_question_5_choice_2": "折扣 或 促销", + "card_abandonment_survey_question_5_choice_3": "更多 支付 选项", + "card_abandonment_survey_question_5_choice_4": "更好 的 产品 描述", + "card_abandonment_survey_question_5_choice_5": "改进 网站 导航", + "card_abandonment_survey_question_5_choice_6": "其他", + "card_abandonment_survey_question_5_headline": "哪些 因素 能 促使 您 在 将来 完成购买?", + "card_abandonment_survey_question_5_subheader": "请选择所有适用项:", + "card_abandonment_survey_question_6_headline": "你想通过电子邮件接收折扣代码吗?", + "card_abandonment_survey_question_6_label": "是 的, 请 联系 我。", + "card_abandonment_survey_question_7_headline": "请 分享您的 电子邮件地址:", + "card_abandonment_survey_question_8_headline": "还有其他的意见或建议吗?", + "career_development_survey_description": "评估员工对职业成长和发展机会的满意度。", + "career_development_survey_name": "职业发展调研", + "career_development_survey_question_1_headline": "我 对 $[projectName] 的 个人 和 职业 发展 机会 感到 满意。", + "career_development_survey_question_1_lower_label": "强烈 不同意", + "career_development_survey_question_1_upper_label": "强烈 同意", + "career_development_survey_question_2_headline": "我 对 $[projectName] 提供 给 我 的 职业 发展 机会 感到 满意。", + "career_development_survey_question_2_lower_label": "强烈 不同意", + "career_development_survey_question_2_upper_label": "强烈 同意", + "career_development_survey_question_3_headline": "我 对 我 的 组织 提供 的 工作相关 培训 感到 满意。", + "career_development_survey_question_3_lower_label": "强烈 不同意", + "career_development_survey_question_3_upper_label": "强烈 同意", + "career_development_survey_question_4_headline": "我 对 我 的 组织 在 培训 和 教育 方面 所 做 的 投资 感到 满意。", + "career_development_survey_question_4_lower_label": "强烈 不同意", + "career_development_survey_question_4_upper_label": "强烈 同意", + "career_development_survey_question_5_choice_1": "产品开发", + "career_development_survey_question_5_choice_2": "市场营销", + "career_development_survey_question_5_choice_3": "公共关系", + "career_development_survey_question_5_choice_4": "会计", + "career_development_survey_question_5_choice_5": "运营", + "career_development_survey_question_5_choice_6": "其他", + "career_development_survey_question_5_headline": "你 在 哪个 职能 部门 工作?", + "career_development_survey_question_5_subheader": "请选择以下之一", + "career_development_survey_question_6_choice_1": "个人 贡献者", + "career_development_survey_question_6_choice_2": "管理者", + "career_development_survey_question_6_choice_3": "高级 经理", + "career_development_survey_question_6_choice_4": "副 总裁", + "career_development_survey_question_6_choice_5": "执行", + "career_development_survey_question_6_choice_6": "其他", + "career_development_survey_question_6_headline": "以下哪项最能描述你 当前 的职位等级?", + "career_development_survey_question_6_subheader": "请选择以下之一", + "cess_survey_name": "CES 调查", + "cess_survey_question_1_headline": "$[projectName] 使我 轻松 能 [ADD GOAL]", + "cess_survey_question_1_lower_label": "强烈 不同意", + "cess_survey_question_1_upper_label": "强烈 同意", + "cess_survey_question_2_headline": "谢谢!我们怎样才能让你更轻松地 [ADD GOAL] ?", + "cess_survey_question_2_placeholder": "在此输入您的答案...", + "changing_subscription_experience_description": "了解人们在更改 他们的 订阅时 的 想法。", + "changing_subscription_experience_name": "更改 订阅 体验", + "changing_subscription_experience_question_1_choice_1": "极其困难", + "changing_subscription_experience_question_1_choice_2": "花 了 一段 时间,但 我 明白 了", + "changing_subscription_experience_question_1_choice_3": "还 可以", + "changing_subscription_experience_question_1_choice_4": "相当容易", + "changing_subscription_experience_question_1_choice_5": "非常容易, 爱 它!", + "changing_subscription_experience_question_1_headline": "更改 订阅 计划的 难易程度 如何?", + "changing_subscription_experience_question_2_choice_1": "是 的 , 非常 清晰 。", + "changing_subscription_experience_question_2_choice_2": "一开始 我 感到 困惑 ,但 找到了 我 需要的 东西 。", + "changing_subscription_experience_question_2_choice_3": "有些复杂。", + "changing_subscription_experience_question_2_headline": "价格 信息 容易 理解 吗?", + "churn_survey": "流失 调查", + "churn_survey_description": "找出用户为何取消订阅。这些洞察是纯金!", + "churn_survey_question_1_choice_1": "难以 使用", + "churn_survey_question_1_choice_2": "太 贵 了", + "churn_survey_question_1_choice_3": "我 缺少 功能", + "churn_survey_question_1_choice_4": "糟糕的 客户 服务", + "churn_survey_question_1_choice_5": "我只是 不再 需要 它", + "churn_survey_question_1_headline": "你 为什么 取消 订阅 ?", + "churn_survey_question_1_subheader": "很遗憾 看到 你 离开。 帮助 我们 做 得 更好:", + "churn_survey_question_2_button_label": "发送", + "churn_survey_question_2_headline": "什么 能 让 $[projectName] 更 加 容易 使用 ?", + "churn_survey_question_3_button_label": "获取 30% 折扣", + "churn_survey_question_3_dismiss_button_label": "跳过", + "churn_survey_question_3_headline": "明 年 获 30% 优惠 !", + "churn_survey_question_3_html": "

我们 希望 您 可以 继续 成为 我们 的 客户。很 乐意 为 您 提供 下 一年 30% 的 折扣。

", + "churn_survey_question_4_headline": "您 缺少 什么 功能 ?", + "churn_survey_question_5_button_label": "发送 邮件 给 CEO", + "churn_survey_question_5_dismiss_button_label": "跳过", + "churn_survey_question_5_headline": "很 遗憾 听到 \uD83D\uDE14 直接 与 我们 的 CEO 交谈 !", + "churn_survey_question_5_html": "

我们 旨在 提供 最佳 的 客户服务。请 发送 电邮 给 我们 的 CEO,她 将 会 亲自 处理 您 的 问题。

", + "collect_feedback_description": "收集有关产品或服务的全面反馈。", + "collect_feedback_name": "收集反馈", + "collect_feedback_question_1_headline": "您如何评价 您 的整体体验?", + "collect_feedback_question_1_lower_label": "不 好", + "collect_feedback_question_1_subheader": "不要 担心 , 请 诚实 .", + "collect_feedback_question_1_upper_label": "非常好", + "collect_feedback_question_2_headline": "太好了!你喜欢什么", + "collect_feedback_question_2_placeholder": "在此输入您的答案...", + "collect_feedback_question_3_headline": "谢谢分享!你不喜欢什么", + "collect_feedback_question_3_placeholder": "在此输入您的答案...", + "collect_feedback_question_4_headline": "你如何评价我们的沟通?", + "collect_feedback_question_4_lower_label": "不 好", + "collect_feedback_question_4_upper_label": "非常好", + "collect_feedback_question_5_headline": "还有什么您想与我们团队分享?", + "collect_feedback_question_5_placeholder": "在此输入您的答案...", + "collect_feedback_question_6_choice_1": "谷歌", + "collect_feedback_question_6_choice_2": "社交媒体", + "collect_feedback_question_6_choice_3": "朋友", + "collect_feedback_question_6_choice_4": "播客", + "collect_feedback_question_6_choice_5": "其他", + "collect_feedback_question_6_headline": "你 是 如何 听说 我们 的?", + "collect_feedback_question_7_headline": "最后,我们希望回复您的反馈。 请分享您的邮箱:", + "collect_feedback_question_7_placeholder": "example@email.com", + "consent": "同意", + "consent_description": "请求同意 条款、条件 或 数据使用", + "contact_info": "联系信息", + "contact_info_description": "请求提供 姓名、姓氏、电子邮件、电话号码 和 公司 信息", + "csat_description": "衡量 产品 或 服务 的 客户满意度 。", + "csat_name": "客户满意度得分 ( CSAT )", + "csat_question_10_headline": "你还有其他的评论、问题或担忧吗?", + "csat_question_10_placeholder": "在 此 输入 您 的 答案...", + "csat_question_1_headline": "您有多大可能向朋友或同事推荐这款 $[projectName] ?", + "csat_question_1_lower_label": "不可能", + "csat_question_1_upper_label": "非常 可能", + "csat_question_2_choice_1": "有点 满意", + "csat_question_2_choice_2": "非常 满意", + "csat_question_2_choice_3": "既不 满意 也 不 不满意", + "csat_question_2_choice_4": "有点 不满意", + "csat_question_2_choice_5": "非常 不 满意", + "csat_question_2_headline": "总的来说,您对我们的 $[projectName] 满意 还是 不满意?", + "csat_question_2_subheader": "请选择一个:", + "csat_question_3_choice_1": "无效", + "csat_question_3_choice_10": "独特", + "csat_question_3_choice_2": "有用", + "csat_question_3_choice_3": "不实用", + "csat_question_3_choice_4": "价格 过高", + "csat_question_3_choice_5": "高质量", + "csat_question_3_choice_6": "可靠", + "csat_question_3_choice_7": "物有所值", + "csat_question_3_choice_8": "质量差", + "csat_question_3_choice_9": "不可靠", + "csat_question_3_headline": "您会用以下哪个词来形容我们的 $[projectName]?", + "csat_question_3_subheader": "全选适用项:", + "csat_question_4_choice_1": "极好", + "csat_question_4_choice_2": "非常 好", + "csat_question_4_choice_3": "有点 好", + "csat_question_4_choice_4": "不太好", + "csat_question_4_choice_5": "完全 不好", + "csat_question_4_headline": "我们的 $[projectName] 满足 您 的 需求 程度 如何?", + "csat_question_4_subheader": "选择一项:", + "csat_question_5_choice_1": "非常高质量", + "csat_question_5_choice_2": "高质量", + "csat_question_5_choice_3": "低质量", + "csat_question_5_choice_4": "非常低质量", + "csat_question_5_choice_5": "不 高 不 低", + "csat_question_5_headline": "您 如何 评价 $[projectName] 的 质量?", + "csat_question_5_subheader": "选择一项:", + "csat_question_6_choice_1": "优秀", + "csat_question_6_choice_2": "高于 平均水平", + "csat_question_6_choice_3": "平均", + "csat_question_6_choice_4": "低于 平均", + "csat_question_6_choice_5": "差", + "csat_question_6_headline": "您 如何 评价 $[projectName] 的 性价比?", + "csat_question_6_subheader": "请选择 一个:", + "csat_question_7_choice_1": "特别 响应", + "csat_question_7_choice_2": "非常及时", + "csat_question_7_choice_3": "响应 轻微", + "csat_question_7_choice_4": "不太 响应", + "csat_question_7_choice_5": "一点都不 响应", + "csat_question_7_headline": "我们 对 您 关于 我们 服务 的 问题 响应 得 如何?", + "csat_question_7_subheader": "请选择一个:", + "csat_question_8_choice_1": "这是 我 的 第一次 购买", + "csat_question_8_choice_2": "不到 六个月", + "csat_question_8_choice_3": "六个月 到 一年", + "csat_question_8_choice_4": "1年 到 2年", + "csat_question_8_choice_5": "3年 或 更久", + "csat_question_8_headline": "您已经成为 $[projectName] 的客户多长时间?", + "csat_question_8_subheader": "请选择 一个:", + "csat_question_9_choice_1": "极有可能", + "csat_question_9_choice_2": "非常 可能", + "csat_question_9_choice_3": "有点可能", + "csat_question_9_choice_4": "不太可能", + "csat_question_9_choice_5": "完全不可能", + "csat_question_9_headline": "您有多大可能性会再次购买我们的 $[projectName] ?", + "csat_question_9_subheader": "选择一项:", + "csat_survey_name": "$[projectName] CSAT", + "csat_survey_question_1_headline": "您 对 您 的 $[projectName] 体验 满意 吗?", + "csat_survey_question_1_lower_label": "极度不满意", + "csat_survey_question_1_upper_label": "极度满意", + "csat_survey_question_2_headline": "太好了! 我们可以做些什么来改善您的体验?", + "csat_survey_question_2_placeholder": "在此输入您的答案...", + "csat_survey_question_3_headline": "糟糕, 对不起!我们可以做些什么来改善您的体验?", + "csat_survey_question_3_placeholder": "在此输入您的答案...", + "cta_description": "显示 信息 并 提示用户采取 特定行动", + "custom_survey_description": "创建 一个 没有 模板 的 调查。", + "custom_survey_name": "从零开始", + "custom_survey_question_1_headline": "你 想 知道 什么?", + "custom_survey_question_1_placeholder": "在此输入您的答案...", + "customer_effort_score_description": "确定 使用 某个 功能 的 容易 程度。", + "customer_effort_score_name": "客户 努力 得分 (CES)", + "customer_effort_score_question_1_headline": "$[projectName] 使我 轻松 能 [ADD GOAL]", + "customer_effort_score_question_1_lower_label": "强烈 不同意", + "customer_effort_score_question_1_upper_label": "强烈 同意", + "customer_effort_score_question_2_headline": "谢谢!我们怎样才能让你更轻松地 [ADD GOAL] ?", + "customer_effort_score_question_2_placeholder": "在此输入您的答案...", + "date": "日期", + "date_description": "请求选择 日期", + "default_ending_card_button_label": "创建 你 的 调查", + "default_ending_card_headline": "谢谢!", + "default_ending_card_subheader": "我们 感谢 您 的 反馈。", + "default_welcome_card_button_label": "下一步", + "default_welcome_card_headline": "欢迎!", + "default_welcome_card_html": "感谢 提供 您 的 反馈 - 一起 出发!", + "docs_feedback_description": "衡量 每个 开发者 文档 页面 的 清晰度 。", + "docs_feedback_name": "文档反馈", + "docs_feedback_question_1_choice_1": "是 \uD83D\uDC4D", + "docs_feedback_question_1_choice_2": "否 \uD83D\uDC4E", + "docs_feedback_question_1_headline": "此 页面 有用 吗?", + "docs_feedback_question_2_headline": "请详细说明:", + "docs_feedback_question_3_headline": "页面 URL", + "earned_advocacy_score_description": "EAS 是 NPS 的变体,但询问实际的过去行为,而非空洞的意图。", + "earned_advocacy_score_name": "倡导得分 ( EAS )", + "earned_advocacy_score_question_1_choice_1": "是", + "earned_advocacy_score_question_1_choice_2": "否", + "earned_advocacy_score_question_1_headline": "你 有 积极 推荐 $[projectName] 给 其他人 吗?", + "earned_advocacy_score_question_2_headline": "你 为什么 推荐 我们 ?", + "earned_advocacy_score_question_2_placeholder": "在此输入您的答案...", + "earned_advocacy_score_question_3_headline": "太遗憾。 为什么?", + "earned_advocacy_score_question_3_placeholder": "在此输入您的答案...", + "earned_advocacy_score_question_4_choice_1": "是", + "earned_advocacy_score_question_4_choice_2": "否", + "earned_advocacy_score_question_4_headline": "你 曾经 积极 劝阻 他人 选择 $[projectName] 吗 ?", + "earned_advocacy_score_question_5_headline": "是什么 让 你 劝阻 他们?", + "earned_advocacy_score_question_5_placeholder": "在此输入您的答案...", + "employee_satisfaction_description": "衡量员工满意度及找出改善的领域。", + "employee_satisfaction_name": "员工 满意度", + "employee_satisfaction_question_1_headline": "您 对 当前 角色 的 满意度 如何?", + "employee_satisfaction_question_1_lower_label": "不 满意", + "employee_satisfaction_question_1_upper_label": "非常 满意", + "employee_satisfaction_question_2_choice_1": "极其 有意义", + "employee_satisfaction_question_2_choice_2": "非常 有意义", + "employee_satisfaction_question_2_choice_3": "适度 有意义", + "employee_satisfaction_question_2_choice_4": "有点 意义", + "employee_satisfaction_question_2_choice_5": "毫无 意义", + "employee_satisfaction_question_2_headline": "您 认为 您 的 工作 有多 大意 义?", + "employee_satisfaction_question_3_headline": "你 在这里 工作 最享受 的 什么?", + "employee_satisfaction_question_3_placeholder": "在此输入您的答案...", + "employee_satisfaction_question_5_headline": "对您从经理那里获得的支持进行 评级。", + "employee_satisfaction_question_5_lower_label": "差", + "employee_satisfaction_question_5_upper_label": "优秀", + "employee_satisfaction_question_6_headline": "您 会 对 我们 的 工作场所 提出 哪些 改进 建议?", + "employee_satisfaction_question_6_placeholder": "在此输入您的答案...", + "employee_satisfaction_question_7_choice_1": "极有可能", + "employee_satisfaction_question_7_choice_2": "非常 可能", + "employee_satisfaction_question_7_choice_3": "适度 可能", + "employee_satisfaction_question_7_choice_4": "不太可能", + "employee_satisfaction_question_7_choice_5": "完全不可能", + "employee_satisfaction_question_7_headline": "您 会 多 大 程 度 地 向 朋 友 推 荐 我 们 的 公 司?", + "employee_well_being_description": "通过 工作与生活 的 平衡、工作量 和 环境 来 评估 员工 福祉。", + "employee_well_being_name": "员工 福祉", + "employee_well_being_question_1_headline": "我 觉得 我的 工作 和 个人 生活 有 一个 良好 的 平衡。", + "employee_well_being_question_1_lower_label": "非常 差 的 平衡", + "employee_well_being_question_1_upper_label": "优秀 的 平衡", + "employee_well_being_question_2_headline": "我的负担 是 可控的, 使 我 能 在 不 觉 得 压力 过大 的 情况 下 保持 高效。", + "employee_well_being_question_2_lower_label": "过重的负担", + "employee_well_being_question_2_upper_label": "完全 可控", + "employee_well_being_question_3_headline": "工作环境 支持 我 的 身心健康。", + "employee_well_being_question_3_lower_label": "不支持", + "employee_well_being_question_3_upper_label": "非常支持", + "employee_well_being_question_4_headline": "工作中 可能 还有哪些变化 会 改善 您 的 整体 福祉?", + "employee_well_being_question_4_placeholder": "在此输入您的答案...", + "enps_survey_name": "eNPS 调查", + "enps_survey_question_1_headline": "您 有 多 大 可 能 向 朋 友 或 同 事 推 荐 在 这 家 公 司 工 作?", + "enps_survey_question_1_lower_label": "完全不可能", + "enps_survey_question_1_upper_label": "极有可能", + "enps_survey_question_2_headline": "为了帮助我们改进,您能否描述一下您给予此评分的原因?", + "enps_survey_question_3_headline": "还有其他的评论、反馈或问题吗?", + "evaluate_a_product_idea_description": "调查 用户关于 产品 或 功能 创意 。快速 获得 反馈 。", + "evaluate_a_product_idea_name": "评估产品创意", + "evaluate_a_product_idea_question_1_button_label": "干吧!", + "evaluate_a_product_idea_question_1_dismiss_button_label": "跳过", + "evaluate_a_product_idea_question_1_headline": "我们 喜欢 你 的 $[projectName] 使用 方式!我们 想 听听 你 对 功能 创意 的 想法。有 空 吗?", + "evaluate_a_product_idea_question_1_html": "

我们 尊重 您 的 时间 并 简短 \uD83E\uDD38

", + "evaluate_a_product_idea_question_2_headline": "谢谢! 今天 [PROBLEM AREA] 对你来说 有多困难 或 容易?", + "evaluate_a_product_idea_question_2_lower_label": "非常 困难", + "evaluate_a_product_idea_question_2_upper_label": "非常容易", + "evaluate_a_product_idea_question_3_headline": "在 [PROBLEM AREA] 方面,什么 是 你 最大 的 困难?", + "evaluate_a_product_idea_question_3_placeholder": "在此输入您的答案...", + "evaluate_a_product_idea_question_4_button_label": "下一步", + "evaluate_a_product_idea_question_4_dismiss_button_label": "跳过", + "evaluate_a_product_idea_question_4_headline": "我们 正在 研究 一个 想法,来 帮助 解决 [PROBLEM AREA]。", + "evaluate_a_product_idea_question_4_html": "

在此处 插入 概念简介。 添加必要 细节 ,但 保持 简洁 易懂 。

", + "evaluate_a_product_idea_question_5_headline": "这个 功能 对 你 的 价值 如何 ?", + "evaluate_a_product_idea_question_5_lower_label": "不 重要", + "evaluate_a_product_idea_question_5_upper_label": "非常 重要", + "evaluate_a_product_idea_question_6_headline": "了解 。 为什么 这个 功能 对 你 没有 价值 ?", + "evaluate_a_product_idea_question_6_placeholder": "在此输入您的答案...", + "evaluate_a_product_idea_question_7_headline": "这个 功能 中 什么 是 对 你 最 有 价值 的 ?", + "evaluate_a_product_idea_question_7_placeholder": "在此输入您的答案...", + "evaluate_a_product_idea_question_8_headline": "还有 什么 需要 我们 注意 的 吗?", + "evaluate_a_product_idea_question_8_placeholder": "在 此 输入 您 的 答案...", + "evaluate_content_quality_description": "衡量 您 的 内容 营销 是否 准确 命中。", + "evaluate_content_quality_name": "衡量 内容 质量", + "evaluate_content_quality_question_1_headline": "这篇文章能多好地解决你希望了解的内容?", + "evaluate_content_quality_question_1_lower_label": "完全 不好", + "evaluate_content_quality_question_1_upper_label": "极好", + "evaluate_content_quality_question_2_headline": "哼! 你期望什么呢?", + "evaluate_content_quality_question_2_placeholder": "在此输入您的答案...", + "evaluate_content_quality_question_3_headline": "太棒了!还有什么您想让我们涵盖的吗?", + "evaluate_content_quality_question_3_placeholder": "主题, 趋势, 教程...", + "fake_door_follow_up_description": "与遇到您 的 一 个 假 门 实验 的用户 跟进。", + "fake_door_follow_up_name": "虚拟 门 跟进", + "fake_door_follow_up_question_1_headline": "这个 功能 对 你 来说 有多 重要?", + "fake_door_follow_up_question_1_lower_label": "不 重要", + "fake_door_follow_up_question_1_upper_label": "非常 重要", + "fake_door_follow_up_question_2_choice_1": "方面 1", + "fake_door_follow_up_question_2_choice_2": "方面 2", + "fake_door_follow_up_question_2_choice_3": "方面 3", + "fake_door_follow_up_question_2_choice_4": "方面 4", + "fake_door_follow_up_question_2_headline": "在 这 个 项目 中 一定 应该 包含 什么?", + "feature_chaser_description": "跟进 刚刚 使用 了 特定 功能 的 用户。", + "feature_chaser_name": "功能 追逐者", + "feature_chaser_question_1_headline": "[ADD FEATURE] 对 你 来说 有多 重要?", + "feature_chaser_question_1_lower_label": "不 重要", + "feature_chaser_question_1_upper_label": "非常 重要", + "feature_chaser_question_2_choice_1": "方面 1", + "feature_chaser_question_2_choice_2": "方面 2", + "feature_chaser_question_2_choice_3": "方面 3", + "feature_chaser_question_2_choice_4": "方面 4", + "feature_chaser_question_2_headline": "哪个方面最重要?", + "feedback_box_description": "给予 你的 用户 机会 无缝 分享 他们 的 想法 ", + "feedback_box_name": "反馈箱", + "feedback_box_question_1_choice_1": "Bug 报告 \uD83D\uDC1E", + "feedback_box_question_1_choice_2": "功能请求 \uD83D\uDCA1", + "feedback_box_question_1_headline": "老板 , 你 在 想 什么 ?", + "feedback_box_question_1_subheader": "感谢您分享。我们会尽快回复您。", + "feedback_box_question_2_headline": "出了 什么 问题?", + "feedback_box_question_2_subheader": "细节越多越好 :)", + "feedback_box_question_3_button_label": "是的,通知我", + "feedback_box_question_3_dismiss_button_label": "不,谢谢", + "feedback_box_question_3_headline": "想 了解 最新信息吗?", + "feedback_box_question_3_html": "

我们会 尽快 解决 此问题。 您 想 在 我们 解决 后 收到 通知 吗?

", + "feedback_box_question_4_button_label": "请求功能", + "feedback_box_question_4_headline": "太好了,告诉我们更多!", + "feedback_box_question_4_placeholder": "在此输入您的答案...", + "feedback_box_question_4_subheader": "您 希望 我们 解决 什么 问题?", + "file_upload": "文件 上传", + "file_upload_description": "使响应者能够上传 文档、图像 或其他文件", + "finish": "完成", + "follow_ups_modal_action_body": "

嗨 \uD83D\uDC4B

感谢您的回应,我们会很快与您联系。

祝您有美好的一天!

", + "free_text": "自由文本", + "free_text_description": "收集开放式反馈", + "free_text_placeholder": "在 此 输入 您 的 答案...", + "gauge_feature_satisfaction_description": "评估 产品 特定 功能 的 满意度。", + "gauge_feature_satisfaction_name": "测量 功能 满意度", + "gauge_feature_satisfaction_question_1_headline": "完成 ... 有多容易?", + "gauge_feature_satisfaction_question_1_lower_label": "不 简单", + "gauge_feature_satisfaction_question_1_upper_label": "非常容易", + "gauge_feature_satisfaction_question_2_headline": "我们 可以 改进 的 一 件事 是 什么?", + "identify_customer_goals_description": "更好 地 了解 您 的 信息 是否 创造了 您 的 产品 所 提供 价值 的 正确 期望。", + "identify_customer_goals_name": "识别 客户 目标", + "identify_sign_up_barriers_description": "提供折扣以收集有关 注册障碍 的见解。", + "identify_sign_up_barriers_name": "识别 注册 障碍", + "identify_sign_up_barriers_question_1_button_label": "获取 10% 折扣", + "identify_sign_up_barriers_question_1_dismiss_button_label": "不,谢谢", + "identify_sign_up_barriers_question_1_headline": "回答 这项 简短 调查 ,享受 9 折 优惠 !", + "identify_sign_up_barriers_question_1_html": "您 似乎 正在 考虑 注册。回答 四个 问题,任意 计划 打折 10%。", + "identify_sign_up_barriers_question_2_headline": "您有多大可能性会注册 $[projectName] ?", + "identify_sign_up_barriers_question_2_lower_label": "完全不可能", + "identify_sign_up_barriers_question_2_upper_label": "非常 可能", + "identify_sign_up_barriers_question_3_choice_1_label": "可能没有我在寻找的东西", + "identify_sign_up_barriers_question_3_choice_2_label": "仍在 比较 选项", + "identify_sign_up_barriers_question_3_choice_3_label": "看起来 复杂。", + "identify_sign_up_barriers_question_3_choice_4_label": "定价 是 担忧", + "identify_sign_up_barriers_question_3_choice_5_label": "其他原因", + "identify_sign_up_barriers_question_3_headline": "是什么阻止了您尝试 $[projectName] ?", + "identify_sign_up_barriers_question_4_headline": "您 需要 什么 ,但 $[projectName] 没有 提供 ?", + "identify_sign_up_barriers_question_4_placeholder": "在 此 输入 您 的 答案...", + "identify_sign_up_barriers_question_5_headline": "你在 选择 什么选项 ?", + "identify_sign_up_barriers_question_5_placeholder": "在此输入您的答案...", + "identify_sign_up_barriers_question_6_headline": "什么 看起来 让 你 感到 困惑 ?", + "identify_sign_up_barriers_question_6_placeholder": "在此输入您的答案...", + "identify_sign_up_barriers_question_7_headline": "关于 定价 ,你 有 什么 担心 的?", + "identify_sign_up_barriers_question_7_placeholder": "在此输入您的答案...", + "identify_sign_up_barriers_question_8_headline": "请解释:", + "identify_sign_up_barriers_question_8_placeholder": "在此输入您的答案...", + "identify_sign_up_barriers_question_9_button_label": "注册", + "identify_sign_up_barriers_question_9_dismiss_button_label": "暂时跳过", + "identify_sign_up_barriers_question_9_headline": "谢谢!这是 你的 代码:SIGNUPNOW10", + "identify_sign_up_barriers_question_9_html": "

非常 感谢 您 抽出 时间 分享 反馈 \uD83D\uDE4F

", + "identify_upsell_opportunities_description": "找出 你的 产品 为 用户 节省 了 多少 时间。 用 它 来 促进 销售 。", + "identify_upsell_opportunities_name": "识别 促进 销售 机会", + "identify_upsell_opportunities_question_1_choice_1": "少于 1 小时", + "identify_upsell_opportunities_question_1_choice_2": "1 到 2 小时", + "identify_upsell_opportunities_question_1_choice_3": "3 到 5 小时", + "identify_upsell_opportunities_question_1_choice_4": "5+ 小时", + "identify_upsell_opportunities_question_1_headline": "您的团队每周使用 $[projectName] 节省多少 小时?", + "improve_activation_rate_description": "识别 入职 流程 中的 弱点 以 提高 用户 激活", + "improve_activation_rate_name": "提高 激活 率", + "improve_activation_rate_question_1_choice_1": "对 我 没有用", + "improve_activation_rate_question_1_choice_2": "难以设置 或 使用", + "improve_activation_rate_question_1_choice_3": "缺少 功能 / 功能性", + "improve_activation_rate_question_1_choice_4": "只是 没有 时间", + "improve_activation_rate_question_1_choice_5": "其他 原因", + "improve_activation_rate_question_1_headline": "\"您尚未完成设置 $[projectName] 的主要原因是什么?\"", + "improve_activation_rate_question_2_headline": "什么 让 你 觉得 $[projectName] 没用?", + "improve_activation_rate_question_2_placeholder": "在此输入您的答案...", + "improve_activation_rate_question_3_headline": "什么 关于 设置 或 使用 $[projectName] 很困难?", + "improve_activation_rate_question_3_placeholder": "在 此 输入 您 的 答案...", + "improve_activation_rate_question_4_headline": "缺失了哪些功能或特性?", + "improve_activation_rate_question_4_placeholder": "在此输入您的答案...", + "improve_activation_rate_question_5_headline": "我们如何才能让你更轻松地开始?", + "improve_activation_rate_question_5_placeholder": "在此输入您的答案...", + "improve_activation_rate_question_6_headline": "是什么? 请解释:", + "improve_activation_rate_question_6_placeholder": "在此输入您的答案...", + "improve_activation_rate_question_6_subheader": "我们 急于 立即 修复 它。", + "improve_newsletter_content_description": "找出 你的 订阅者 如何 喜欢 你的 新闻通讯 内容 。", + "improve_newsletter_content_name": "提升 新闻通讯 内容", + "improve_newsletter_content_question_1_headline": "您 会 如何 评价 本周的新闻通讯?", + "improve_newsletter_content_question_1_lower_label": "无所谓", + "improve_newsletter_content_question_1_upper_label": "很棒", + "improve_newsletter_content_question_2_headline": "这 期 的 时事通讯 需 要 哪 些 改进 会 更 有 帮助?", + "improve_newsletter_content_question_2_placeholder": "在 此 输入 您 的 答案...", + "improve_newsletter_content_question_3_button_label": "乐意帮忙!", + "improve_newsletter_content_question_3_dismiss_button_label": "寻找 你 的 朋友", + "improve_newsletter_content_question_3_headline": "谢谢!❤️ 传播 给 一个 朋友。", + "improve_newsletter_content_question_3_html": "

谁 和 你 想法 相似? 如果 你 能 将 本周 的 节目 分享 给 你 的 智力 朋友,那 就 太 帮 了 我们 一个 大忙 了!

", + "improve_trial_conversion_description": "找出用户为何停止试用。这些洞察有助于优化您的引导漏斗。", + "improve_trial_conversion_name": "优化 试用 转换", + "improve_trial_conversion_question_1_choice_1": "我 没 有 从 中 得到 太 多 的 价值", + "improve_trial_conversion_question_1_choice_2": "我 期待 别的", + "improve_trial_conversion_question_1_choice_3": "对 它 的 功能 来说 太 贵 了", + "improve_trial_conversion_question_1_choice_4": "我 缺少 一个 功能", + "improve_trial_conversion_question_1_choice_5": "我 就 是 四处 看 看", + "improve_trial_conversion_question_1_headline": "为什么 你 停止了 试用?", + "improve_trial_conversion_question_1_subheader": "帮助 我们 更好 地 了解 你 :", + "improve_trial_conversion_question_2_button_label": "下一步", + "improve_trial_conversion_question_2_headline": "很抱歉 听到。使用 $[projectName] 时 最大的 问题 是 什么?", + "improve_trial_conversion_question_4_button_label": "获取 20% 折扣", + "improve_trial_conversion_question_4_dismiss_button_label": "跳过", + "improve_trial_conversion_question_4_headline": "很抱歉 听到!首年 可 获 20% 优惠。", + "improve_trial_conversion_question_4_html": "

我们 很 乐意 为 您 提供 年 度 计划 20% 的 折扣。

", + "improve_trial_conversion_question_5_button_label": "下一步", + "improve_trial_conversion_question_5_headline": "你 想 实现 什么?", + "improve_trial_conversion_question_5_subheader": "请选择以下选项之一:", + "improve_trial_conversion_question_6_headline": "你 现在 如何 解决 你的 问题?", + "improve_trial_conversion_question_6_subheader": "请 列举 替代 方案:", + "integration_setup_survey_description": "评估用户 添加 集成 到 产品 的 便捷程度 。 找到 盲点 。", + "integration_setup_survey_name": "集成 使用 调查", + "integration_setup_survey_question_1_headline": "设置 此集成 有多容易?", + "integration_setup_survey_question_1_lower_label": "不 简单", + "integration_setup_survey_question_1_upper_label": "非常容易", + "integration_setup_survey_question_2_headline": "为什么 难?", + "integration_setup_survey_question_2_placeholder": "在此输入您的答案...", + "integration_setup_survey_question_3_headline": "你还想将哪些工具与 $[projectName] 搭配使用?", + "integration_setup_survey_question_3_subheader": "我们 一直 在 构建 集成,你的 可以 成为 下一个:", + "interview_prompt_description": "邀请您的特定用户群体与产品团队预约访谈。", + "interview_prompt_name": "访谈 提示", + "interview_prompt_question_1_button_label": "预订 时间段", + "interview_prompt_question_1_headline": "您 有 15 分钟 和 我们 交流 吗?\uD83D\uDE4F", + "interview_prompt_question_1_html": "你 是 我们 的 多次 使用者 。 我们 非常 乐于 简短 地 采访 你 !", + "long_term_retention_check_in_description": "衡量长期用户满意度 、忠诚度及改进空间 以 保持忠实用户。", + "long_term_retention_check_in_name": "长期 保留 检查", + "long_term_retention_check_in_question_10_headline": "还有其他的反馈或评论吗?", + "long_term_retention_check_in_question_10_placeholder": "分享 任何 想法或反馈 可能 帮助 我们 改进...", + "long_term_retention_check_in_question_1_headline": "您 对 $[projectName] 总体 满意 吗?", + "long_term_retention_check_in_question_1_lower_label": "不 满意", + "long_term_retention_check_in_question_1_upper_label": "非常 满意", + "long_term_retention_check_in_question_2_headline": "你觉得 $[projectName] 中什么最有价值?", + "long_term_retention_check_in_question_2_placeholder": "描述 你 最 看重 的 功能 或 优点...", + "long_term_retention_check_in_question_3_choice_1": "功能", + "long_term_retention_check_in_question_3_choice_2": "客户 支持", + "long_term_retention_check_in_question_3_choice_3": "用户 体验", + "long_term_retention_check_in_question_3_choice_4": "定价", + "long_term_retention_check_in_question_3_choice_5": "可靠性 和 正常运行时间", + "long_term_retention_check_in_question_3_headline": "哪个方面 是 $[projectName] 中 对 您 的 体验 最 至关重要 的?", + "long_term_retention_check_in_question_4_headline": "$[projectName] 符合 您 的 期望 程度 如何?", + "long_term_retention_check_in_question_4_lower_label": "不 足", + "long_term_retention_check_in_question_4_upper_label": "超出 预期", + "long_term_retention_check_in_question_5_headline": "使用 $[projectName] 时遇到哪些挑战或烦恼?", + "long_term_retention_check_in_question_5_placeholder": "描述您希望看到的任何挑战或改进...", + "long_term_retention_check_in_question_6_headline": "您 有 多 大 可 能 向 朋 友 或 同 事 推 荐 $[projectName] ?", + "long_term_retention_check_in_question_6_lower_label": "不可能", + "long_term_retention_check_in_question_6_upper_label": "非常 可能", + "long_term_retention_check_in_question_7_choice_1": "新功能和改进", + "long_term_retention_check_in_question_7_choice_2": "增强 客户 支持", + "long_term_retention_check_in_question_7_choice_3": "更好 的 价格 选项", + "long_term_retention_check_in_question_7_choice_4": "更多 集成", + "long_term_retention_check_in_question_7_choice_5": "用户 体验 提炼", + "long_term_retention_check_in_question_7_headline": "是什么会让你更可能成为长期用户?", + "long_term_retention_check_in_question_8_headline": "如果你可以改变关于 $[projectName] 的一件事,那会是什么?", + "long_term_retention_check_in_question_8_placeholder": "分享 您 希望 我们 考虑 的 任何 变更 或 功能...", + "long_term_retention_check_in_question_9_headline": "您 对 我们 产品 的 更新 和 频率 有 多 满意?", + "long_term_retention_check_in_question_9_lower_label": "不 快乐", + "long_term_retention_check_in_question_9_upper_label": "非常 高兴", + "market_attribution_description": "了解 用户 是 如何 第一次 听说 您的 产品 的 。", + "market_attribution_name": "市场归因", + "market_attribution_question_1_choice_1": "推荐", + "market_attribution_question_1_choice_2": "社交媒体", + "market_attribution_question_1_choice_3": "广告", + "market_attribution_question_1_choice_4": "谷歌 搜索", + "market_attribution_question_1_choice_5": "在 播客", + "market_attribution_question_1_headline": "你 是 如何 第一次 听说 我们 的?", + "market_attribution_question_1_subheader": "请选择以下选项之一:", + "market_site_clarity_description": "确定 离开 营销 网站 的 用户。改进 消息。", + "market_site_clarity_name": "营销 网站 清晰度", + "market_site_clarity_question_1_choice_1": "是,完全", + "market_site_clarity_question_1_choice_2": "有点...", + "market_site_clarity_question_1_choice_3": "不,完全 不是", + "market_site_clarity_question_1_headline": "你 是否 拥有 所有 必要 信息 以 便 尝试 $[projectName] ?", + "market_site_clarity_question_2_headline": "关于 $[projectName] 你 有什么疑问或不清楚的地方?", + "market_site_clarity_question_3_button_label": "获取 折扣", + "market_site_clarity_question_3_headline": "感谢您的回答!首次 6 个月 享受 25% 折扣:", + "matrix": "矩阵", + "matrix_description": "创建一个网格以相同的标准对多个项目进行评级", + "measure_search_experience_description": "衡量 您 的 搜索 结果 的 关联性。", + "measure_search_experience_name": "衡量 搜索 体验", + "measure_search_experience_question_1_headline": "这些 搜索 结果 的 关联性 如何?", + "measure_search_experience_question_1_lower_label": "完全 不 相关", + "measure_search_experience_question_1_upper_label": "非常 相关", + "measure_search_experience_question_2_headline": "哎呀! 是什么让这些结果对你而言无关紧要?", + "measure_search_experience_question_2_placeholder": "在此输入您的答案...", + "measure_search_experience_question_3_headline": "太好了! 我们可以做些什么来改善您的体验?", + "measure_search_experience_question_3_placeholder": "在此输入您的答案...", + "measure_task_accomplishment_description": "查看 人们 是否 完成了 他们 的“任务”。 成功 的 人 是 更好 的 客户。", + "measure_task_accomplishment_name": "衡量 任务 完成", + "measure_task_accomplishment_question_1_headline": "您 今天 达到 了 来 这里 要做 的 事情 吗?", + "measure_task_accomplishment_question_1_option_1_label": "是", + "measure_task_accomplishment_question_1_option_2_label": "在 干 呢, 老板", + "measure_task_accomplishment_question_1_option_3_label": "否", + "measure_task_accomplishment_question_2_headline": "达成你的目标有多容易?", + "measure_task_accomplishment_question_2_lower_label": "非常 困难", + "measure_task_accomplishment_question_2_upper_label": "非常容易", + "measure_task_accomplishment_question_3_headline": "是什么使它变得困难 ?", + "measure_task_accomplishment_question_3_placeholder": "在此输入您的答案...", + "measure_task_accomplishment_question_4_button_label": "发送", + "measure_task_accomplishment_question_4_headline": "太好了!你今天来这里打算做什么 ?", + "measure_task_accomplishment_question_5_button_label": "发送", + "measure_task_accomplishment_question_5_headline": "是什么 阻止 了 你?", + "measure_task_accomplishment_question_5_placeholder": "在此输入您的答案...", + "multi_select": "多选", + "multi_select_description": "要求 受访者 选择 一个 或 多个 选项", + "new_integration_survey_description": "了解您的用户想要看到哪些新的集成。", + "new_integration_survey_name": "新 集成 调查", + "new_integration_survey_question_1_choice_1": "PostHog", + "new_integration_survey_question_1_choice_2": "细分", + "new_integration_survey_question_1_choice_3": "Hubspot", + "new_integration_survey_question_1_choice_4": "Twilio", + "new_integration_survey_question_1_choice_5": "其他", + "new_integration_survey_question_1_headline": "您正在使用哪些其他工具?", + "next": "下一步", + "nps": "净推荐值 ( NPS )", + "nps_description": "测量净推荐分数 ( 0-10 )", + "nps_lower_label": "完全不可能", + "nps_name": "净推荐值 ( NPS )", + "nps_question_1_headline": "您 有 多 大 可能 向 朋 友 或 同 事 推 荐 $[projectName] ?", + "nps_question_1_lower_label": "不可能", + "nps_question_1_upper_label": "非常 可能", + "nps_question_2_headline": "是什么原因让你给出这个评分?", + "nps_survey_name": "NPS 调查", + "nps_survey_question_1_headline": "您 有 多 大 可 能 向 朋 友 或 同 事 推 荐 $[projectName] ?", + "nps_survey_question_1_lower_label": "完全不可能", + "nps_survey_question_1_upper_label": "极有可能", + "nps_survey_question_2_headline": "为了帮助我们改进,您能否描述一下您给予此评分的原因?", + "nps_survey_question_3_headline": "其他评论、反馈或问题?", + "nps_upper_label": "极有可能", + "onboarding_segmentation": "入职细分", + "onboarding_segmentation_description": "了解 有关 谁 注册了 你的 产品 及 原因。", + "onboarding_segmentation_question_1_choice_1": "创始人", + "onboarding_segmentation_question_1_choice_2": "执行者", + "onboarding_segmentation_question_1_choice_3": "产品经理", + "onboarding_segmentation_question_1_choice_4": "产品负责人", + "onboarding_segmentation_question_1_choice_5": "软件工程师", + "onboarding_segmentation_question_1_headline": "您的 角色 是 什么?", + "onboarding_segmentation_question_1_subheader": "请选择以下选项之一:", + "onboarding_segmentation_question_2_choice_1": "只有 我", + "onboarding_segmentation_question_2_choice_2": "1-5 名员工", + "onboarding_segmentation_question_2_choice_3": "6-10 名员工", + "onboarding_segmentation_question_2_choice_4": "11-100 名员工", + "onboarding_segmentation_question_2_choice_5": "超过 100 名员工", + "onboarding_segmentation_question_2_headline": "您的公司规模是多少?", + "onboarding_segmentation_question_2_subheader": "请选择以下选项之一:", + "onboarding_segmentation_question_3_choice_1": "推荐", + "onboarding_segmentation_question_3_choice_2": "社交媒体", + "onboarding_segmentation_question_3_choice_3": "广告", + "onboarding_segmentation_question_3_choice_4": "谷歌 搜索", + "onboarding_segmentation_question_3_choice_5": "在 播客", + "onboarding_segmentation_question_3_headline": "你 是 如何 第一次 听说 我们 的?", + "onboarding_segmentation_question_3_subheader": "请选择以下选项之一:", + "picture_selection": "图片选择", + "picture_selection_description": "要求 受访者 选择 一个 或 多个 图片", + "preview_survey_ending_card_description": "请继续您的 入职培训。", + "preview_survey_ending_card_headline": "你 做 到 了 !", + "preview_survey_name": "预览 调查", + "preview_survey_question_1_headline": "您 如何 评价 {projectName} ?", + "preview_survey_question_1_lower_label": "不 好", + "preview_survey_question_1_subheader": "这是 survey 预览。", + "preview_survey_question_1_upper_label": "非常好", + "preview_survey_question_2_back_button_label": "返回", + "preview_survey_question_2_choice_1_label": "是 , 保持我 更新 。", + "preview_survey_question_2_choice_2_label": "不,谢谢!", + "preview_survey_question_2_headline": "想 了解 最新信息吗?", + "preview_survey_welcome_card_headline": "欢迎!", + "preview_survey_welcome_card_html": "感谢 提供 您 的 反馈 - 一起 出发!", + "prioritize_features_description": "确定 用户 最 需要 和 最 不 需要 的 功能。", + "prioritize_features_name": "优先 功能", + "prioritize_features_question_1_choice_1": "功能 1", + "prioritize_features_question_1_choice_2": "功能 2", + "prioritize_features_question_1_choice_3": "功能 3", + "prioritize_features_question_1_choice_4": "其他", + "prioritize_features_question_1_headline": "这些 功能 中 哪 个 对 你 最 有 价值 ?", + "prioritize_features_question_2_choice_1": "功能 1", + "prioritize_features_question_2_choice_2": "功能 2", + "prioritize_features_question_2_choice_3": "功能 3", + "prioritize_features_question_2_headline": "这些 功能 中 哪 个 对 你 最 没 有 价值 ?", + "prioritize_features_question_3_headline": "我们如何能进一步改进您 使用 $[projectName] 的体验 ?", + "prioritize_features_question_3_placeholder": "在此输入您的答案...", + "product_market_fit_short_description": "通过 评估 如果 你的 产品 消失,用户 会 有 多 失望 来 衡量 产品 市场 适配 ( PMF )", + "product_market_fit_short_name": "产品 市场 适配 调查 (短)", + "product_market_fit_short_question_1_choice_1": "一点也不失望", + "product_market_fit_short_question_1_choice_2": "有点失望", + "product_market_fit_short_question_1_choice_3": "非常失望", + "product_market_fit_short_question_1_headline": "如果您不能再使用 $[projectName] ,您会有多失望?", + "product_market_fit_short_question_1_subheader": "请选择以下选项之一:", + "product_market_fit_short_question_2_headline": "我们如何能为您改进 $[projectName] ?", + "product_market_fit_short_question_2_subheader": "请 尽量 具体 说明", + "product_market_fit_superhuman": "产品 市场 适配 (Superhuman)", + "product_market_fit_superhuman_description": "评估 如果 你的 产品 消失,用户 会有 多 失望 来 衡量 产品市场适配。", + "product_market_fit_superhuman_question_1_button_label": "乐意帮忙!", + "product_market_fit_superhuman_question_1_dismiss_button_label": "不,谢谢", + "product_market_fit_superhuman_question_1_headline": "您是我们的重度用户!您有 5 分钟吗?", + "product_market_fit_superhuman_question_1_html": "

我们 很 想 更好 地 了解 你的 用户 体验。 分享 你的 洞察 助益 良多。

", + "product_market_fit_superhuman_question_2_choice_1": "一点也不失望", + "product_market_fit_superhuman_question_2_choice_2": "有一点失望", + "product_market_fit_superhuman_question_2_choice_3": "非常失望", + "product_market_fit_superhuman_question_2_headline": "如果您不能再使用 $[projectName] ,您会有多失望?", + "product_market_fit_superhuman_question_2_subheader": "请选择以下选项之一:", + "product_market_fit_superhuman_question_3_choice_1": "创始人", + "product_market_fit_superhuman_question_3_choice_2": "执行者", + "product_market_fit_superhuman_question_3_choice_3": "产品经理", + "product_market_fit_superhuman_question_3_choice_4": "产品负责人", + "product_market_fit_superhuman_question_3_choice_5": "软件工程师", + "product_market_fit_superhuman_question_3_headline": "您的角色是什么?", + "product_market_fit_superhuman_question_3_subheader": "请选择以下选项之一:", + "product_market_fit_superhuman_question_4_headline": "您认为哪些类型的人会从 $[projectName] 中受益最大?", + "product_market_fit_superhuman_question_5_headline": "您从 $[projectName] 中获得的主要好处是什么?", + "product_market_fit_superhuman_question_6_headline": "我们如何能为您改进 $[projectName] ?", + "product_market_fit_superhuman_question_6_subheader": "请 尽量 具体 说明", + "professional_development_growth_survey_description": "评估员工对职业成长和发展机会的满意度。", + "professional_development_growth_survey_name": "职业发展增长调研", + "professional_development_growth_survey_question_1_headline": "我 觉得 在 工作 方面 , 我 有 机会 提升 和 发展 我的 技能 。", + "professional_development_growth_survey_question_1_lower_label": "没 有 发 展 机 会", + "professional_development_growth_survey_question_1_upper_label": "许 多 发 展 机 会", + "professional_development_growth_survey_question_2_headline": "我 有 足 够 的 自 主 权 来 决 定 我 如 何 处 理 我 的 工作。", + "professional_development_growth_survey_question_2_lower_label": "没 有 自 主 权", + "professional_development_growth_survey_question_2_upper_label": "完 全 自 主", + "professional_development_growth_survey_question_3_headline": "我 在 工 作 中 的 目 标 清 晰 并 与 我 的 发 展 保 持 一 致。", + "professional_development_growth_survey_question_3_lower_label": "不 明 确 的 目 标", + "professional_development_growth_survey_question_3_upper_label": "清 晰 并 保 持 一 致 的 目 标", + "professional_development_growth_survey_question_4_headline": "改 善 哪 些 方 面 可 以 支 持 您 的 职 业 成 长?", + "professional_development_growth_survey_question_4_placeholder": "在 此 输 入 您 的 答 案...", + "professional_development_survey_description": "评估员工对职业成长和发展机会的满意度。", + "professional_development_survey_name": "职业发展调研", + "professional_development_survey_question_1_choice_1": "是", + "professional_development_survey_question_1_choice_2": "否", + "professional_development_survey_question_1_headline": "你 感兴趣 职业发展 活动 吗?", + "professional_development_survey_question_2_choice_1": "交流 活动", + "professional_development_survey_question_2_choice_2": "会议 或 研讨会", + "professional_development_survey_question_2_choice_3": "课程 或 工作坊", + "professional_development_survey_question_2_choice_4": "指导", + "professional_development_survey_question_2_choice_5": "个人 研究", + "professional_development_survey_question_2_choice_6": "其他", + "professional_development_survey_question_2_headline": "哪种类型的 职业 发展 活动 对您的 成长 最有 价值?", + "professional_development_survey_question_2_subheader": "全选适用项", + "professional_development_survey_question_3_choice_1": "是", + "professional_development_survey_question_3_choice_2": "否", + "professional_development_survey_question_3_headline": "过去 ,您 是否 专注 于 职业 发展 ?", + "professional_development_survey_question_4_headline": "在 工作场所 追求 职业 发展 时, 您 感到 得到 多少 支持?", + "professional_development_survey_question_4_lower_label": "完全不支持", + "professional_development_survey_question_4_upper_label": "Extremely supported", + "professional_development_survey_question_5_choice_1": "为了 我 的 知识", + "professional_development_survey_question_5_choice_2": "承担更多责任", + "professional_development_survey_question_5_choice_3": "提高 我的 技能", + "professional_development_survey_question_5_choice_4": "在我当前职业道路上 晋升", + "professional_development_survey_question_5_choice_5": "寻找 一份 新的 工作", + "professional_development_survey_question_5_choice_6": "其他", + "professional_development_survey_question_5_headline": "你 想 花 时间 投入 职业 发展 的 主要 理由 是 什么 ?", + "ranking": "排序", + "ranking_description": "要求 受访者 按偏好 或 重要性 排序项目", + "rate_checkout_experience_description": "让 客户 评价 结账 体验 以 调整 转化。", + "rate_checkout_experience_name": "评价 结账 体验", + "rate_checkout_experience_question_1_headline": "完成 结账 的难易程度 如何?", + "rate_checkout_experience_question_1_lower_label": "非常 困难", + "rate_checkout_experience_question_1_upper_label": "非常容易", + "rate_checkout_experience_question_2_headline": "很抱歉!有什么可以让您更轻松?", + "rate_checkout_experience_question_2_placeholder": "在此输入您的答案...", + "rate_checkout_experience_question_3_headline": "太好了! 我们可以做些什么来改善您的体验?", + "rate_checkout_experience_question_3_placeholder": "在此输入您的答案...", + "rating": "评分", + "rating_description": "要求 受访者 对 评分 ( 星星 、 笑脸 、 数字 )", + "rating_lower_label": "不 好", + "rating_upper_label": "非常好", + "recognition_and_reward_survey_description": "评估员工对 认可 、奖励、领导支持 和 表达自由 的 满意度 。", + "recognition_and_reward_survey_name": "认可 与 奖励", + "recognition_and_reward_survey_question_1_headline": "当我表现良好时,我 的贡献会 被组织认可。", + "recognition_and_reward_survey_question_1_lower_label": "完全未被认可", + "recognition_and_reward_survey_question_1_upper_label": "高度 认可", + "recognition_and_reward_survey_question_2_headline": "我 对 所做 的 工作 感到 得到 公平 的 奖励。", + "recognition_and_reward_survey_question_2_lower_label": "不公平 奖励", + "recognition_and_reward_survey_question_2_upper_label": "非常 公平 得到奖励", + "recognition_and_reward_survey_question_3_headline": "我 感到 舒适 分享 我的 意见 在 工作中。", + "recognition_and_reward_survey_question_3_lower_label": "不 舒适", + "recognition_and_reward_survey_question_3_upper_label": "非常 舒适", + "recognition_and_reward_survey_question_4_headline": "组织 如何 能够 改进 认可 和 奖励?", + "recognition_and_reward_survey_question_4_placeholder": "在此输入您的答案...", + "review_prompt_description": "邀请喜爱您产品的用户公开评论。", + "review_prompt_name": "评论 提示", + "review_prompt_question_1_headline": "您 喜欢 $[projectName] 吗?", + "review_prompt_question_1_lower_label": "不 好", + "review_prompt_question_1_upper_label": "非常 满意", + "review_prompt_question_2_button_label": "写 评价", + "review_prompt_question_2_headline": "很高兴收到反馈 \uD83D\uDE4F 请为我们写一个评价!", + "review_prompt_question_2_html": "

这 对 我们 帮助 很大。

", + "review_prompt_question_3_button_label": "发送", + "review_prompt_question_3_headline": "很遗憾 听到!我们 可以 改进 的 一 件事 是 什么?", + "review_prompt_question_3_placeholder": "在此输入您的答案...", + "review_prompt_question_3_subheader": "帮助 我们 改善 您 的 体验。", + "schedule_a_meeting": "安排会议", + "schedule_a_meeting_description": "请求响应者预约 会议 或 通话 时间段", + "single_select": "单选", + "single_select_description": "提供一个选项列表 ( 选择一个 )", + "site_abandonment_survey": "网站 被放弃 调查", + "site_abandonment_survey_description": "了解 在 你的 网上商店 网站 被放弃 的 原因。", + "site_abandonment_survey_question_1_html": "

我们 注意到 你 正在 离开 我们 的 网站 而 没有 进行 购买。我们 很 想 了解 为什么。

", + "site_abandonment_survey_question_2_button_label": "确定!", + "site_abandonment_survey_question_2_dismiss_button_label": "不,谢谢", + "site_abandonment_survey_question_2_headline": "你 有 空 吗?", + "site_abandonment_survey_question_3_choice_1": "找不到 我 要 找 的 东西", + "site_abandonment_survey_question_3_choice_2": "找到了 更好的 网站", + "site_abandonment_survey_question_3_choice_3": "网站 太慢", + "site_abandonment_survey_question_3_choice_4": "仅 浏览", + "site_abandonment_survey_question_3_choice_5": "发现更好的 价格", + "site_abandonment_survey_question_3_choice_6": "其他", + "site_abandonment_survey_question_3_headline": "您 离开 我们 网站 的 主要 原因 是 什么?", + "site_abandonment_survey_question_3_subheader": "请选择以下选项之一:", + "site_abandonment_survey_question_4_headline": "请 详细 说明 您 离开 该网站 的 原因:", + "site_abandonment_survey_question_5_headline": "您如何评价 您 在 我们网站 上 的整体体验?", + "site_abandonment_survey_question_5_lower_label": "非常 不 满意", + "site_abandonment_survey_question_5_upper_label": "非常 满意", + "site_abandonment_survey_question_6_choice_1": "加载 时间 更快", + "site_abandonment_survey_question_6_choice_2": "更好的产品搜索功能", + "site_abandonment_survey_question_6_choice_3": "更多 产品 多样性", + "site_abandonment_survey_question_6_choice_4": "改进 的 站点 设计", + "site_abandonment_survey_question_6_choice_5": "更多客户评价", + "site_abandonment_survey_question_6_headline": "哪些 改进 会 促使 你 更久 地 停留 在 我们 的 网站 上?", + "site_abandonment_survey_question_6_subheader": "请选择所有适用项:", + "site_abandonment_survey_question_7_headline": "您 想 接收 有关 新 产品 和 优惠 的 更新 信息 吗?", + "site_abandonment_survey_question_7_label": "是 的, 请 联系 我。", + "site_abandonment_survey_question_8_headline": "请 分享您的 电子邮件地址:", + "site_abandonment_survey_question_9_headline": "还有其他的意见或建议吗?", + "skip": "跳过", + "smileys_survey_name": "笑脸 调查", + "smileys_survey_question_1_headline": "您 如何 喜欢 $[projectName]?", + "smileys_survey_question_1_lower_label": "不 好", + "smileys_survey_question_1_upper_label": "非常 满意", + "smileys_survey_question_2_button_label": "写 评价", + "smileys_survey_question_2_headline": "很高兴听到 \uD83D\uDE4F 请为我们写一个评价!", + "smileys_survey_question_2_html": "

这 对 我们 帮助 很大。

", + "smileys_survey_question_3_button_label": "发送", + "smileys_survey_question_3_headline": "很遗憾 听到!我们 可以 改进 的 一 件事 是 什么?", + "smileys_survey_question_3_placeholder": "在 此 输入 您 的 答案...", + "smileys_survey_question_3_subheader": "帮助 我们 改善 您 的 体验。", + "star_rating_survey_name": "$[projectName] 的 Rating Survey", + "star_rating_survey_question_1_headline": "您 如何 喜欢 $[projectName] ?", + "star_rating_survey_question_1_lower_label": "极度不满意", + "star_rating_survey_question_1_upper_label": "极度满意", + "star_rating_survey_question_2_button_label": "写 评价", + "star_rating_survey_question_2_headline": "很高兴听到反馈 \uD83D\uDE4F 请为我们写一个评价!", + "star_rating_survey_question_2_html": "

这 对 我们 帮助 很大。

", + "star_rating_survey_question_3_button_label": "发送", + "star_rating_survey_question_3_headline": "很遗憾 听到!我们 可以 改进 的 一 件事 是 什么?", + "star_rating_survey_question_3_placeholder": "在此输入您的答案...", + "star_rating_survey_question_3_subheader": "帮助 我们 改善 您 的 体验。", + "statement_call_to_action": "声明 (号召性用语)", + "strongly_agree": "强烈 同意", + "strongly_disagree": "强烈 不同意", + "supportive_work_culture_survey_description": "评估员工对 领导支持 、沟通 和 整体工作环境 的 感知 。", + "supportive_work_culture_survey_name": "支持性工作文化", + "supportive_work_culture_survey_question_1_headline": "我的经理为我完成工作提供所需的支持。", + "supportive_work_culture_survey_question_1_lower_label": "不支持", + "supportive_work_culture_survey_question_1_upper_label": "支持程度高", + "supportive_work_culture_survey_question_2_headline": "组织内的沟通是开放且有效的。", + "supportive_work_culture_survey_question_2_lower_label": "沟通差", + "supportive_work_culture_survey_question_2_upper_label": "出色的沟通", + "supportive_work_culture_survey_question_3_headline": "工作环境积极并支持我的身心健康。", + "supportive_work_culture_survey_question_3_lower_label": "不支持", + "supportive_work_culture_survey_question_3_upper_label": "非常支持", + "supportive_work_culture_survey_question_4_headline": "如何改进工作文化以更好地支持 你?", + "supportive_work_culture_survey_question_4_placeholder": "输入您的答案...", + "uncover_strengths_and_weaknesses_description": "找出 用户 喜欢 和 不 喜欢 关于 您的 产品 或 提供 的 什么 。", + "uncover_strengths_and_weaknesses_name": "揭示 优势 与 弱点", + "uncover_strengths_and_weaknesses_question_1_choice_1": "易于使用", + "uncover_strengths_and_weaknesses_question_1_choice_2": "物有所值", + "uncover_strengths_and_weaknesses_question_1_choice_3": "这是开源的", + "uncover_strengths_and_weaknesses_question_1_choice_4": "创始人很可爱", + "uncover_strengths_and_weaknesses_question_1_choice_5": "其他", + "uncover_strengths_and_weaknesses_question_1_headline": "你最看重 $[projectName] 的什么?", + "uncover_strengths_and_weaknesses_question_2_choice_1": "文档", + "uncover_strengths_and_weaknesses_question_2_choice_2": "自定义能力", + "uncover_strengths_and_weaknesses_question_2_choice_3": "定价", + "uncover_strengths_and_weaknesses_question_2_choice_4": "其他", + "uncover_strengths_and_weaknesses_question_2_headline": "我们 应该 改进 什么?", + "uncover_strengths_and_weaknesses_question_2_subheader": "请选择以下选项之一:", + "uncover_strengths_and_weaknesses_question_3_headline": "你想补充什么吗?", + "uncover_strengths_and_weaknesses_question_3_subheader": "请畅所欲言,我们也是。", + "understand_low_engagement_description": "识别 低参与 的 原因 以 改善 用户 采用。", + "understand_low_engagement_name": "了解低参与度", + "understand_low_engagement_question_1_choice_1": "难以 使用", + "understand_low_engagement_question_1_choice_2": "找到了 更好的 替代品", + "understand_low_engagement_question_1_choice_3": "只是 没有 时间", + "understand_low_engagement_question_1_choice_4": "缺少我 需要 的 功能", + "understand_low_engagement_question_1_choice_5": "其他", + "understand_low_engagement_question_1_headline": "您为什么最近未返回 $[projectName] 的主要原因是什么?", + "understand_low_engagement_question_2_headline": "使用$[projectName]时有什么困难?", + "understand_low_engagement_question_2_placeholder": "在此输入您的答案...", + "understand_low_engagement_question_3_headline": "好的。您在使用哪种替代方案?", + "understand_low_engagement_question_3_placeholder": "在此输入您的答案...", + "understand_low_engagement_question_4_headline": "好的。我们如何才能让你更轻松地开始?", + "understand_low_engagement_question_4_placeholder": "在此输入您的答案...", + "understand_low_engagement_question_5_headline": "好的。缺失了哪些功能或特性?", + "understand_low_engagement_question_5_placeholder": "在此输入您的答案...", + "understand_low_engagement_question_6_headline": "请添加更多详情:", + "understand_low_engagement_question_6_placeholder": "在此输入您的答案...", + "understand_purchase_intention_description": "找出访客距离购买或订阅的距离。", + "understand_purchase_intention_name": "了解 购买 意向", + "understand_purchase_intention_question_1_headline": "今天 您 从 我们 购物 的 可能性 有 多高?", + "understand_purchase_intention_question_1_lower_label": "完全不可能", + "understand_purchase_intention_question_1_upper_label": "极有可能", + "understand_purchase_intention_question_2_headline": "了解了。 您 今天 访问 的 主要 原因 是 什么?", + "understand_purchase_intention_question_2_placeholder": "在 此 输入 您 的 答案...", + "understand_purchase_intention_question_3_headline": "是什么 妨碍了 您 今天 进行 购买?", + "understand_purchase_intention_question_3_placeholder": "在此输入您的答案...", + "usability_question_10_headline": "我 需要 学习 很多 才能 正确 使用 这个 系统。", + "usability_question_1_headline": "我 可能会 经常 使用 这个 系统。", + "usability_question_2_headline": "系统 感觉 比 实际 需要 的 更 复杂。", + "usability_question_3_headline": "系统很容易上手。", + "usability_question_4_headline": "我觉得我需要 技术专家 的帮助来使用这个系统。", + "usability_question_5_headline": "系统 中 的 所有 东西 似乎 都 能 很好 协同 工作。", + "usability_question_6_headline": "系统在运作方式上感觉不一致。", + "usability_question_7_headline": "我 认为 大多数 人 可以 很快 学会 使用 这个 系统。", + "usability_question_8_headline": "使用这套系统感觉很麻烦。", + "usability_question_9_headline": "使用 系统 时 我 感到 自信。", + "usability_rating_description": "通过要求用户使用标准化的 10 问 调查 来 评价 他们对您产品的体验,以 测量 感知 的 可用性。", + "usability_score_name": "系统 可用性 得分 ( SUS )" + } +} diff --git a/apps/web/locales/zh-Hant-TW.json b/apps/web/locales/zh-Hant-TW.json index 29f99ede6a..2fa24a0c54 100644 --- a/apps/web/locales/zh-Hant-TW.json +++ b/apps/web/locales/zh-Hant-TW.json @@ -118,6 +118,7 @@ "account_settings": "帳戶設定", "action": "操作", "actions": "操作", + "actions_description": "代碼 和 無代碼 動作 用於 觸發 截取 調查 於 應用程式 和 網站上 。", "active_surveys": "啟用中的問卷", "activity": "活動", "add": "新增", @@ -125,6 +126,7 @@ "add_filter": "新增篩選器", "add_logo": "新增標誌", "add_member": "新增成員", + "add_new_project": "新增 新專案", "add_project": "新增專案", "add_to_team": "新增至團隊", "all": "全部", @@ -149,6 +151,9 @@ "cancel": "取消", "centered_modal": "置中彈窗", "choices": "選項", + "choose_environment": "選擇環境", + "choose_organization": "選擇 組織", + "choose_project": "選擇 專案", "clear_all": "全部清除", "clear_filters": "清除篩選器", "clear_selection": "清除選取", @@ -164,11 +169,14 @@ "connect_formbricks": "連線 Formbricks", "connected": "已連線", "contacts": "聯絡人", + "continue": "繼續", "copied": "已 複製", "copied_to_clipboard": "已複製到剪貼簿", "copy": "複製", "copy_code": "複製程式碼", "copy_link": "複製連結", + "count_contacts": "{value, plural, other {{value} 聯絡人} }", + "count_responses": "{value, plural, other {{value} 回應} }", "create_new_organization": "建立新組織", "create_project": "建立專案", "create_segment": "建立區隔", @@ -177,7 +185,6 @@ "created_at": "建立時間", "created_by": "建立者", "customer_success": "客戶成功", - "danger_zone": "危險區域", "dark_overlay": "深色覆蓋", "date": "日期", "default": "預設", @@ -197,10 +204,15 @@ "e_commerce": "電子商務", "edit": "編輯", "email": "電子郵件", + "ending_card": "結尾卡片", "enterprise_license": "企業授權", "environment_not_found": "找不到環境", "environment_notice": "您目前在 '{'environment'}' 環境中。", "error": "錯誤", + "error_component_description": "此資源不存在或您沒有存取權限。", + "error_component_title": "載入資源錯誤", + "error_rate_limit_description": "已達 到最大 請求 次數。請 稍後 再試。", + "error_rate_limit_title": "限流超過", "expand_rows": "展開列", "finish": "完成", "follow_these": "按照這些步驟", @@ -232,11 +244,9 @@ "label": "標籤", "language": "語言", "learn_more": "瞭解更多", - "license": "授權", "light_overlay": "淺色覆蓋", "limits_reached": "已達上限", "link": "連結", - "link_and_email": "連結與電子郵件", "link_survey": "連結問卷", "link_surveys": "連結問卷", "load_more": "載入更多", @@ -252,18 +262,20 @@ "membership_not_found": "找不到成員資格", "metadata": "元數據", "minimum": "最小值", - "mobile_overlay_text": "Formbricks 不適用於較小解析度的裝置。", + "mobile_overlay_app_works_best_on_desktop": "Formbricks 適合在大螢幕上使用。若要管理或建立問卷,請切換到其他裝置。", + "mobile_overlay_surveys_look_good": "別擔心 -你的 問卷 在每個 裝置 和 螢幕尺寸 上 都 很出色!", + "mobile_overlay_title": "糟糕 ,偵測到小螢幕!", "move_down": "下移", "move_up": "上移", "multiple_languages": "多種語言", "name": "名稱", "new": "新增", - "new_survey": "新增問卷", "new_version_available": "Formbricks '{'version'}' 已推出。立即升級!", "next": "下一步", "no_background_image_found": "找不到背景圖片。", "no_code": "無程式碼", "no_files_uploaded": "沒有上傳任何檔案", + "no_quotas_found": "找不到 配額", "no_result_found": "找不到結果", "no_results": "沒有結果", "no_surveys_found": "找不到問卷。", @@ -283,6 +295,7 @@ "organization": "組織", "organization_id": "組織 ID", "organization_not_found": "找不到組織", + "organization_settings": "組織設定", "organization_teams_not_found": "找不到組織團隊", "other": "其他", "others": "其他", @@ -306,6 +319,7 @@ "product_manager": "產品經理", "profile": "個人資料", "profile_id": "個人資料 ID", + "progress": "進度", "project_configuration": "專案組態", "project_creation_description": "組織調查 在 專案中以便更好地存取控制。", "project_id": "專案 ID", @@ -317,6 +331,9 @@ "question": "問題", "question_id": "問題 ID", "questions": "問題", + "quota": "配額", + "quotas": "額度", + "quotas_description": "限制 擁有 特定 條件 的 參與者 所 提供 的 回應 數量。", "read_docs": "閱讀文件", "recipients": "收件者", "remove": "移除", @@ -335,7 +352,6 @@ "save": "儲存", "save_changes": "儲存變更", "saving": "儲存", - "scheduled": "已排程", "search": "搜尋", "security": "安全性", "segment": "區隔", @@ -365,6 +381,7 @@ "start_free_trial": "開始免費試用", "status": "狀態", "step_by_step_manual": "逐步手冊", + "storage_not_configured": "檔案儲存未設定,上傳可能會失敗", "styling": "樣式設定", "submit": "提交", "summary": "摘要", @@ -375,10 +392,8 @@ "survey_live": "問卷已上線", "survey_not_found": "找不到問卷", "survey_paused": "問卷已暫停。", - "survey_scheduled": "問卷已排程。", "survey_type": "問卷類型", "surveys": "問卷", - "switch_organization": "切換組織", "switch_to": "切換至 '{'environment'}'", "table_items_deleted_successfully": "'{'type'}' 已成功刪除", "table_settings": "表格設定", @@ -576,8 +591,7 @@ "contacts_table_refresh": "重新整理聯絡人", "contacts_table_refresh_success": "聯絡人已成功重新整理", "delete_contact_confirmation": "這將刪除與此聯繫人相關的所有調查回應和聯繫屬性。任何基於此聯繫人數據的定位和個性化將會丟失。", - "first_name": "名字", - "last_name": "姓氏", + "delete_contact_confirmation_with_quotas": "{value, plural, one {這將刪除與這個 contact 相關的所有調查響應和聯繫人屬性。基於這個 contact 數據的任何定向和個性化功能將會丟失。如果這個 contact 有作為調查配額依據的響應,配額計數將會減少,但配額限制將保持不變。} other {這將刪除與這些 contacts 相關的所有調查響應和聯繫人屬性。基於這些 contacts 數據的任何定向和個性化功能將會丟失。如果這些 contacts 有作為調查配額依據的響應,配額計數將會減少,但配額限制將保持不變。}}", "no_responses_found": "找不到回應", "not_provided": "未提供", "search_contact": "搜尋聯絡人", @@ -738,7 +752,6 @@ }, "project": { "api_keys": { - "access_control": "存取控制", "add_api_key": "新增 API 金鑰", "api_key": "API 金鑰", "api_key_copied_to_clipboard": "API 金鑰已複製到剪貼簿", @@ -747,7 +760,6 @@ "api_key_label": "API 金鑰標籤", "api_key_security_warning": "為安全起見,API 金鑰僅在建立後顯示一次。請立即將其複製到您的目的地。", "api_key_updated": "API 金鑰已更新", - "delete_permission": "刪除 權限", "duplicate_access": "不允許重複的 project 存取", "no_api_keys_yet": "您還沒有任何 API 金鑰", "no_env_permissions_found": "找不到環境權限", @@ -759,45 +771,21 @@ "unable_to_delete_api_key": "無法刪除 API 金鑰" }, "app-connection": { - "api_host_description": "這是您 Formbricks 後端的網址。", "app_connection": "應用程式連線", "app_connection_description": "將您的應用程式連線至 Formbricks。", "cache_update_delay_description": "當您對調查、聯絡人、操作或其他資料進行更新時,可能需要長達 5 分鐘這些變更才能顯示在執行 Formbricks SDK 的本地應用程式中。此延遲是因我們目前快取系統的限制。我們正積極重新設計快取,並將在 Formbricks 4.0 中發佈修補程式。", "cache_update_delay_title": "更改將於 5 分鐘後因快取而反映", - "check_out_the_docs": "查看文件。", - "dive_into_the_docs": "深入瞭解文件。", - "does_your_widget_work": "您的小工具運作嗎?", "environment_id": "您的 EnvironmentId", "environment_id_description": "此 ID 可唯一識別此 Formbricks 環境。", - "environment_id_description_with_environment_id": "用於識別正確的環境:'{'environmentId'}' 是您的。", - "formbricks_sdk": "Formbricks SDK", "formbricks_sdk_connected": "Formbricks SDK 已連線", "formbricks_sdk_not_connected": "Formbricks SDK 尚未連線。", "formbricks_sdk_not_connected_description": "將您的網站或應用程式與 Formbricks 連線", - "have_a_problem": "有問題嗎?", "how_to_setup": "如何設定", "how_to_setup_description": "請按照這些步驟在您的應用程式中設定 Formbricks 小工具。", - "identifying_your_users": "識別您的使用者", - "if_you_are_planning_to": "如果您計劃", - "insert_this_code_into_the": "將此程式碼插入", - "need_a_more_detailed_setup_guide_for": "需要更詳細的設定指南,適用於", - "not_working": "無法運作?", - "open_an_issue_on_github": "在 GitHub 上開啟問題", - "open_the_browser_console_to_see_the_logs": "開啟瀏覽器主控台以查看記錄。", "receiving_data": "正在接收資料 \uD83D\uDC83\uD83D\uDD7A", "recheck": "重新檢查", - "scroll_to_the_top": "捲動至頂端!", - "step_1": "步驟 1:使用 pnpm、npm 或 yarn 安裝", - "step_2": "步驟 2:初始化小工具", - "step_2_description": "匯入 Formbricks 並在您的元件中初始化小工具(例如,App.tsx):", - "step_3": "步驟 3:偵錯模式", - "switch_on_the_debug_mode_by_appending": "藉由附加以下項目開啟偵錯模式", - "tag_of_your_app": "您應用程式的標籤", - "to_the_url_where_you_load_the": "到您載入", - "want_to_learn_how_to_add_user_attributes": "想瞭解如何新增使用者屬性、自訂事件等嗎?", - "you_are_done": "您已完成 \uD83C\uDF89", - "you_can_set_the_user_id_with": "您可以使用 user id 設定", - "your_app_now_communicates_with_formbricks": "您的應用程式現在可與 Formbricks 通訊 - 自動傳送事件和載入問卷!" + "setup_alert_description": "遵循 此 分步 教程 ,在 5 分鐘 內 將您的應用程式 或 網站 連線 。", + "setup_alert_title": "如何 連線" }, "general": { "cannot_delete_only_project": "這是您唯一的專案,無法刪除。請先建立新專案。", @@ -989,7 +977,6 @@ "free": "免費", "free_description": "無限問卷、團隊成員等。", "get_2_months_free": "免費獲得 2 個月", - "get_in_touch": "取得聯繫", "hosted_in_frankfurt": "託管在 Frankfurt", "ios_android_sdks": "iOS 和 Android SDK 用於行動問卷", "link_surveys": "連結問卷(可分享)", @@ -1251,9 +1238,7 @@ "automatically_close_survey_after": "在指定時間自動關閉問卷", "automatically_close_the_survey_after_a_certain_number_of_responses": "在收到一定數量的回覆後自動關閉問卷。", "automatically_close_the_survey_if_the_user_does_not_respond_after_certain_number_of_seconds": "如果用戶在特定秒數後未回應,則自動關閉問卷。", - "automatically_closes_the_survey_at_the_beginning_of_the_day_utc": "在指定日期(UTC時間)自動關閉問卷。", "automatically_mark_the_survey_as_complete_after": "在指定時間後自動將問卷標記為完成", - "automatically_release_the_survey_at_the_beginning_of_the_day_utc": "在指定日期(UTC時間)自動發佈問卷。", "back_button_label": "「返回」按鈕標籤", "background_styling": "背景樣式設定", "brand_color": "品牌顏色", @@ -1301,14 +1286,13 @@ "choose_the_actions_which_trigger_the_survey": "選擇觸發問卷的操作。", "choose_where_to_run_the_survey": "選擇在哪裡執行問卷。", "city": "城市", - "close_survey_on_date": "在指定日期關閉問卷", "close_survey_on_response_limit": "在回應次數上限關閉問卷", "color": "顏色", "column_used_in_logic_error": "此 column 用於問題 '{'questionIndex'}' 的邏輯中。請先從邏輯中移除。", "columns": "欄位", "company": "公司", "company_logo": "公司標誌", - "completed_responses": "部分或完整答复。", + "completed_responses": "完成 回應", "concat": "串連 +", "conditional_logic": "條件邏輯", "confirm_default_language": "確認預設語言", @@ -1348,6 +1332,7 @@ "end_screen_card": "結束畫面卡片", "ending_card": "結尾卡片", "ending_card_used_in_logic": "此結尾卡片用於問題 '{'questionIndex'}' 的邏輯中。", + "ending_used_in_quota": "此 結尾 正被使用於 \"{quotaName}\" 配額中", "ends_with": "結尾為", "equals": "等於", "equals_one_of": "等於其中之一", @@ -1358,6 +1343,7 @@ "fallback_for": "備用 用於 ", "fallback_missing": "遺失的回退", "fieldId_is_used_in_logic_of_question_please_remove_it_from_logic_first": "'{'fieldId'}' 用於問題 '{'questionIndex'}' 的邏輯中。請先從邏輯中移除。", + "fieldId_is_used_in_quota_please_remove_it_from_quota_first": "隱藏欄位 \"{fieldId}\" 正被使用於 \"{quotaName}\" 配額中", "field_name_eg_score_price": "欄位名稱,例如:分數、價格", "first_name": "名字", "five_points_recommended": "5 分(建議)", @@ -1389,8 +1375,9 @@ "follow_ups_modal_action_subject_placeholder": "電子郵件主旨", "follow_ups_modal_action_to_description": "傳送電子郵件的電子郵件地址", "follow_ups_modal_action_to_label": "收件者", - "follow_ups_modal_action_to_warning": "問卷中未偵測到電子郵件欄位", + "follow_ups_modal_action_to_warning": "未找到 發送電子郵件 有效選項,請添加 一些 開放文本 / 聯絡資訊 問題或隱藏欄位", "follow_ups_modal_create_heading": "建立新的後續追蹤", + "follow_ups_modal_created_successfull_toast": "後續 動作 已 建立 並 將 在 你 儲存 調查 後 儲存", "follow_ups_modal_edit_heading": "編輯此後續追蹤", "follow_ups_modal_edit_no_id": "未提供問卷後續追蹤 ID,無法更新問卷後續追蹤", "follow_ups_modal_name_label": "後續追蹤名稱", @@ -1400,8 +1387,9 @@ "follow_ups_modal_trigger_label": "觸發器", "follow_ups_modal_trigger_type_ending": "回應者看到特定結尾", "follow_ups_modal_trigger_type_ending_select": "選取結尾:", - "follow_ups_modal_trigger_type_ending_warning": "問卷中找不到結尾!", + "follow_ups_modal_trigger_type_ending_warning": "請選擇至少一個結尾或更改觸發類型", "follow_ups_modal_trigger_type_response": "回應者完成問卷", + "follow_ups_modal_updated_successfull_toast": "後續 動作 已 更新 並 將 在 你 儲存 調查 後 儲存", "follow_ups_new": "新增後續追蹤", "follow_ups_upgrade_button_text": "升級以啟用後續追蹤", "form_styling": "表單樣式設定", @@ -1502,6 +1490,38 @@ "question_duplicated": "問題已複製。", "question_id_updated": "問題 ID 已更新", "question_used_in_logic": "此問題用於問題 '{'questionIndex'}' 的邏輯中。", + "question_used_in_quota": "此問題 正被使用於 \"{quotaName}\" 配額中", + "quotas": { + "add_quota": "新增額度", + "change_quota_for_public_survey": "更改 公開 問卷 的 額度?", + "confirm_quota_changes": "確認配額變更", + "confirm_quota_changes_body": "您的 配額 中有 未儲存 的 變更。您 要 先 儲存 它們 再 離開 嗎?", + "continue_survey_normally": "正常 繼續 問卷", + "count_partial_submissions": "計算 部分提交", + "count_partial_submissions_description": "包括符合配額標準但未完成問卷的受訪者", + "create_quota_for_public_survey": "為 公開 問卷 建立 額度?", + "create_quota_for_public_survey_description": "只有 未來 的 答案 會 被 篩選 進 配額", + "create_quota_for_public_survey_text": "這個 調查 已經 是 公開 的。 現有 的 回應 將 不會 被 納入 新 額度 的 考量。", + "delete_quota_confirmation_text": "這將永久刪除配額 {quotaName}。", + "duplicate_quota": "複製 配額", + "edit_quota": "編輯 配額", + "end_survey_for_matching_participants": "結束問卷調查 對於 符合條件的參加者", + "inclusion_criteria": "納入 條件", + "limit_must_be_greater_than_or_equal_to_the_number_of_responses": "{value, plural, other {您已經有 {value} 個 回應 對於 此 配額,因此 限制 必須大於 {value}。} }", + "limited_to_x_responses": "限制為 {limit}", + "new_quota": "新 配額", + "quota_created_successfull_toast": "配額已成功建立。", + "quota_deleted_successfull_toast": "配額已成功刪除。", + "quota_duplicated_successfull_toast": "配額已成功複製。", + "quota_name_placeholder": "例如, 年齡 18-25 參與者", + "quota_updated_successfull_toast": "配額已成功更新", + "response_limit": "限制", + "save_changes_confirmation_body": "任何 變更 包括 條件 只 影響 未來 的 回覆。\n 我們 推薦 複製 現有 的 配額 或 創建 新 的 配額。", + "save_changes_confirmation_text": "現有 回應 留在 配額 內", + "select_ending_card": "選取結尾卡片", + "upgrade_prompt_title": "使用 額度 與 更高 的 計劃", + "when_quota_has_been_reached": "當 配額 已達" + }, "randomize_all": "全部隨機排序", "randomize_all_except_last": "全部隨機排序(最後一項除外)", "range": "範圍", @@ -1509,7 +1529,6 @@ "redirect_thank_you_card": "重新導向感謝卡片", "redirect_to_url": "重新導向至網址", "redirect_to_url_not_available_on_free_plan": "重新導向至網址在免費方案中不可用", - "release_survey_on_date": "在指定日期發佈問卷", "remove_description": "移除描述", "remove_translations": "移除翻譯", "require_answer": "要求回答", @@ -1596,6 +1615,7 @@ "url_not_supported": "不支援網址", "use_with_caution": "謹慎使用", "variable_is_used_in_logic_of_question_please_remove_it_from_logic_first": "'{'variable'}' 用於問題 '{'questionIndex'}' 的邏輯中。請先從邏輯中移除。", + "variable_is_used_in_quota_please_remove_it_from_quota_first": "變數 \"{variableName}\" 正被使用於 \"{quotaName}\" 配額中", "variable_name_is_already_taken_please_choose_another": "已使用此變數名稱,請選擇另一個名稱。", "variable_name_must_start_with_a_letter": "變數名稱必須以字母開頭。", "verify_email_before_submission": "提交前驗證電子郵件", @@ -1630,11 +1650,14 @@ "address_line_2": "地址 2", "an_error_occurred_deleting_the_tag": "刪除標籤時發生錯誤", "browser": "瀏覽器", + "bulk_delete_response_quotas": "回應 屬於 此 調查 的 配額 一部分 . 你 想 如何 處理 配額?", "city": "城市", "company": "公司", "completed": "已完成 ✅", "country": "國家/地區", + "decrement_quotas": "減少所有配額限制,包括此回應", "delete_response_confirmation": "這將刪除調查響應,包括所有回答、標籤、附件文件以及響應元數據。", + "delete_response_quotas": "回應 屬於 此 調查 的 配額 一部分 . 你 想 如何 處理 配額?", "device": "裝置", "device_info": "裝置資訊", "email": "電子郵件", @@ -1766,6 +1789,7 @@ "configure_alerts": "設定警示", "congrats": "恭喜!您的問卷已上線。", "connect_your_website_or_app_with_formbricks_to_get_started": "將您的網站或應用程式與 Formbricks 連線以開始使用。", + "current_count": "目前計數", "custom_range": "自訂範圍...", "delete_all_existing_responses_and_displays": "刪除 所有 現有 回應 和 顯示", "download_qr_code": "下載 QR code", @@ -1819,6 +1843,7 @@ "last_month": "上個月", "last_quarter": "上一季", "last_year": "去年", + "limit": "限制", "no_responses_found": "找不到回應", "other_values_found": "找到其他值", "overall": "整體", @@ -1827,6 +1852,8 @@ "qr_code_download_failed": "QR code 下載失敗", "qr_code_download_with_start_soon": "QR code 下載即將開始", "qr_code_generation_failed": "載入調查 QR Code 時發生問題。請再試一次。", + "quotas_completed": "配額 已完成", + "quotas_completed_tooltip": "受訪者完成的 配額 數量。", "reset_survey": "重設問卷", "reset_survey_warning": "重置 調查 會 移除 與 此 調查 相關 的 所有 回應 和 顯示 。 這 是 不可 撤銷 的 。", "selected_responses_csv": "選擇的回應 (CSV)", @@ -1842,7 +1869,7 @@ "this_quarter": "本季", "this_year": "今年", "time_to_complete": "完成時間", - "ttc_tooltip": "完成問卷的平均時間。", + "ttc_tooltip": "完成 問題 的 平均 時間。", "unknown_question_type": "未知的問題類型", "use_personal_links": "使用 個人 連結", "waiting_for_response": "正在等待回應 \uD83E\uDDD8‍♂️", @@ -1853,7 +1880,6 @@ "survey_deleted_successfully": "問卷已成功刪除!", "survey_duplicated_successfully": "問卷已成功複製。", "survey_duplication_error": "無法複製問卷。", - "survey_status_tooltip": "若要更新問卷狀態,請更新問卷回應選項中的排程和關閉設定。", "templates": { "all_channels": "所有管道", "all_industries": "所有產業", diff --git a/apps/web/modules/auth/lib/authOptions.test.ts b/apps/web/modules/auth/lib/authOptions.test.ts index 0f53d6f249..a282072fda 100644 --- a/apps/web/modules/auth/lib/authOptions.test.ts +++ b/apps/web/modules/auth/lib/authOptions.test.ts @@ -31,7 +31,7 @@ vi.mock("@/lib/constants", () => ({ SESSION_MAX_AGE: 86400, NEXTAUTH_SECRET: "test-secret", WEBAPP_URL: "http://localhost:3000", - ENCRYPTION_KEY: "test-encryption-key-32-chars-long", + ENCRYPTION_KEY: "12345678901234567890123456789012", // 32 bytes for AES-256 REDIS_URL: undefined, AUDIT_LOG_ENABLED: false, AUDIT_LOG_GET_USER_IP: false, @@ -148,7 +148,6 @@ describe("authOptions", () => { email: mockUser.email, password: mockHashedPassword, emailVerified: new Date(), - imageUrl: "http://example.com/avatar.png", twoFactorEnabled: false, }; @@ -161,7 +160,6 @@ describe("authOptions", () => { id: fakeUser.id, email: fakeUser.email, emailVerified: fakeUser.emailVerified, - imageUrl: fakeUser.imageUrl, }); }); @@ -263,7 +261,7 @@ describe("authOptions", () => { vi.mocked(applyIPRateLimit).mockResolvedValue(); // Rate limiting passes vi.spyOn(prisma.user, "findUnique").mockResolvedValue(mockUser as any); - const credentials = { token: createToken(mockUser.id, mockUser.email) }; + const credentials = { token: createToken(mockUser.id) }; await expect(tokenProvider.options.authorize(credentials, {})).rejects.toThrow( "Email already verified" @@ -282,7 +280,7 @@ describe("authOptions", () => { groupId: null, } as any); - const credentials = { token: createToken(mockUserId, mockUser.email) }; + const credentials = { token: createToken(mockUserId) }; const result = await tokenProvider.options.authorize(credentials, {}); expect(result.email).toBe(mockUser.email); @@ -305,7 +303,7 @@ describe("authOptions", () => { groupId: null, } as any); - const credentials = { token: createToken(mockUserId, mockUser.email) }; + const credentials = { token: createToken(mockUserId) }; await tokenProvider.options.authorize(credentials, {}); @@ -317,7 +315,7 @@ describe("authOptions", () => { new Error("Maximum number of requests reached. Please try again later.") ); - const credentials = { token: createToken(mockUserId, mockUser.email) }; + const credentials = { token: createToken(mockUserId) }; await expect(tokenProvider.options.authorize(credentials, {})).rejects.toThrow( "Maximum number of requests reached. Please try again later." @@ -341,7 +339,7 @@ describe("authOptions", () => { groupId: null, } as any); - const credentials = { token: createToken(mockUserId, mockUser.email) }; + const credentials = { token: createToken(mockUserId) }; await tokenProvider.options.authorize(credentials, {}); diff --git a/apps/web/modules/email/index.tsx b/apps/web/modules/email/index.tsx index d8d1637b38..aac061c58b 100644 --- a/apps/web/modules/email/index.tsx +++ b/apps/web/modules/email/index.tsx @@ -51,6 +51,8 @@ export const sendEmail = async (emailData: SendEmailDataProps): Promise return false; } try { + logger.info(emailData, "Sending email"); + const transporter = createTransport({ host: SMTP_HOST, port: SMTP_PORT, @@ -111,7 +113,7 @@ export const sendVerificationEmail = async ({ }): Promise => { try { const t = await getTranslate(); - const token = createToken(id, email, { + const token = createToken(id, { expiresIn: "1d", }); const verifyLink = `${WEBAPP_URL}/auth/verify?token=${encodeURIComponent(token)}`; @@ -136,7 +138,7 @@ export const sendForgotPasswordEmail = async (user: { locale: TUserLocale; }): Promise => { const t = await getTranslate(); - const token = createToken(user.id, user.email, { + const token = createToken(user.id, { expiresIn: "1d", }); const verifyLink = `${WEBAPP_URL}/auth/forgot-password/reset?token=${encodeURIComponent(token)}`;