mirror of
https://github.com/formbricks/formbricks.git
synced 2026-05-16 02:56:26 -05:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 208d83eb08 | |||
| 0a7482da0f |
+34
-7
@@ -3,6 +3,7 @@
|
||||
import Link from "next/link";
|
||||
import { useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { TEnvironment } from "@formbricks/types/environment";
|
||||
import { TSurvey, TSurveyElementSummaryOpenText } from "@formbricks/types/surveys/types";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { timeSince } from "@/lib/time";
|
||||
@@ -11,22 +12,31 @@ import { renderHyperlinkedContent } from "@/modules/analysis/utils";
|
||||
import { PersonAvatar } from "@/modules/ui/components/avatars";
|
||||
import { Button } from "@/modules/ui/components/button";
|
||||
import { EmptyState } from "@/modules/ui/components/empty-state";
|
||||
import { IdBadge } from "@/modules/ui/components/id-badge";
|
||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/modules/ui/components/table";
|
||||
import { ElementSummaryHeader } from "./ElementSummaryHeader";
|
||||
import { ResponseSampleModal } from "./ResponseSampleModal";
|
||||
|
||||
interface OpenTextSummaryProps {
|
||||
elementSummary: TSurveyElementSummaryOpenText;
|
||||
environmentId: string;
|
||||
environment: TEnvironment;
|
||||
survey: TSurvey;
|
||||
locale: TUserLocale;
|
||||
isReadOnly: boolean;
|
||||
}
|
||||
|
||||
export const OpenTextSummary = ({ elementSummary, environmentId, survey, locale }: OpenTextSummaryProps) => {
|
||||
export const OpenTextSummary = ({
|
||||
elementSummary,
|
||||
environment,
|
||||
survey,
|
||||
locale,
|
||||
isReadOnly,
|
||||
}: OpenTextSummaryProps) => {
|
||||
const { t } = useTranslation();
|
||||
const [visibleResponses, setVisibleResponses] = useState(10);
|
||||
const [selectedResponseId, setSelectedResponseId] = useState<string | null>(null);
|
||||
|
||||
const handleLoadMore = () => {
|
||||
// Increase the number of visible responses by 10, not exceeding the total number of responses
|
||||
setVisibleResponses((prevVisibleResponses) =>
|
||||
Math.min(prevVisibleResponses + 10, elementSummary.samples.length)
|
||||
);
|
||||
@@ -47,17 +57,22 @@ export const OpenTextSummary = ({ elementSummary, environmentId, survey, locale
|
||||
<TableRow>
|
||||
<TableHead className="w-1/4">{t("common.user")}</TableHead>
|
||||
<TableHead className="w-2/4">{t("common.response")}</TableHead>
|
||||
<TableHead className="w-1/4">{t("common.time")}</TableHead>
|
||||
<TableHead className="w-1/6">{t("common.time")}</TableHead>
|
||||
<TableHead className="w-1/6">{t("common.response_id")}</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
{elementSummary.samples.slice(0, visibleResponses).map((response) => (
|
||||
<TableRow key={response.id}>
|
||||
<TableRow
|
||||
key={response.id}
|
||||
className="cursor-pointer hover:bg-slate-50"
|
||||
onClick={() => setSelectedResponseId(response.id)}>
|
||||
<TableCell className="w-1/4">
|
||||
{response.contact ? (
|
||||
<Link
|
||||
className="ph-no-capture group flex items-center"
|
||||
href={`/environments/${environmentId}/contacts/${response.contact.id}`}>
|
||||
href={`/environments/${environment.id}/contacts/${response.contact.id}`}
|
||||
onClick={(e) => e.stopPropagation()}>
|
||||
<div className="hidden md:flex">
|
||||
<PersonAvatar personId={response.contact.id} />
|
||||
</div>
|
||||
@@ -79,9 +94,12 @@ export const OpenTextSummary = ({ elementSummary, environmentId, survey, locale
|
||||
? renderHyperlinkedContent(response.value)
|
||||
: response.value}
|
||||
</TableCell>
|
||||
<TableCell className="w-1/4">
|
||||
<TableCell className="w-1/6">
|
||||
{timeSince(new Date(response.updatedAt).toISOString(), locale)}
|
||||
</TableCell>
|
||||
<TableCell className="w-1/6" onClick={(e) => e.stopPropagation()}>
|
||||
<IdBadge id={response.id} />
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
))}
|
||||
</TableBody>
|
||||
@@ -95,6 +113,15 @@ export const OpenTextSummary = ({ elementSummary, environmentId, survey, locale
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<ResponseSampleModal
|
||||
responseId={selectedResponseId}
|
||||
onClose={() => setSelectedResponseId(null)}
|
||||
survey={survey}
|
||||
environment={environment}
|
||||
isReadOnly={isReadOnly}
|
||||
locale={locale}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
"use client";
|
||||
|
||||
import { VisuallyHidden } from "@radix-ui/react-visually-hidden";
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import { TEnvironment } from "@formbricks/types/environment";
|
||||
import { TResponseWithQuotas } from "@formbricks/types/responses";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { TTag } from "@formbricks/types/tags";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import {
|
||||
getResponseAction,
|
||||
getTagsByEnvironmentIdAction,
|
||||
} from "@/modules/analysis/components/SingleResponseCard/actions";
|
||||
import { SingleResponseCard } from "@/modules/analysis/components/SingleResponseCard";
|
||||
import {
|
||||
Dialog,
|
||||
DialogBody,
|
||||
DialogContent,
|
||||
DialogDescription,
|
||||
DialogTitle,
|
||||
} from "@/modules/ui/components/dialog";
|
||||
import { LoadingSpinner } from "@/modules/ui/components/loading-spinner";
|
||||
|
||||
interface ResponseSampleModalProps {
|
||||
responseId: string | null;
|
||||
onClose: () => void;
|
||||
survey: TSurvey;
|
||||
environment: TEnvironment;
|
||||
isReadOnly: boolean;
|
||||
locale: TUserLocale;
|
||||
}
|
||||
|
||||
export const ResponseSampleModal = ({
|
||||
responseId,
|
||||
onClose,
|
||||
survey,
|
||||
environment,
|
||||
isReadOnly,
|
||||
locale,
|
||||
}: ResponseSampleModalProps) => {
|
||||
const [response, setResponse] = useState<TResponseWithQuotas | null>(null);
|
||||
const [tags, setTags] = useState<TTag[]>([]);
|
||||
const [isLoading, setIsLoading] = useState(false);
|
||||
|
||||
// Cache fetched data per response ID to avoid re-fetching on re-open
|
||||
const cache = useRef<Map<string, { response: TResponseWithQuotas; tags: TTag[] }>>(new Map());
|
||||
|
||||
useEffect(() => {
|
||||
if (!responseId) return;
|
||||
|
||||
const cached = cache.current.get(responseId);
|
||||
if (cached) {
|
||||
setResponse(cached.response);
|
||||
setTags(cached.tags);
|
||||
return;
|
||||
}
|
||||
|
||||
setIsLoading(true);
|
||||
setResponse(null);
|
||||
|
||||
Promise.all([
|
||||
getResponseAction({ responseId }),
|
||||
getTagsByEnvironmentIdAction({ environmentId: environment.id }),
|
||||
])
|
||||
.then(([responseResult, tagsResult]) => {
|
||||
const fetchedResponse = responseResult?.data ?? null;
|
||||
const fetchedTags = tagsResult?.data ?? [];
|
||||
|
||||
if (fetchedResponse) {
|
||||
const entry = { response: fetchedResponse as TResponseWithQuotas, tags: fetchedTags };
|
||||
cache.current.set(responseId, entry);
|
||||
setResponse(entry.response);
|
||||
setTags(entry.tags);
|
||||
}
|
||||
})
|
||||
.finally(() => {
|
||||
setIsLoading(false);
|
||||
});
|
||||
}, [responseId, environment.id]);
|
||||
|
||||
const handleOpenChange = (open: boolean) => {
|
||||
if (!open) onClose();
|
||||
};
|
||||
|
||||
return (
|
||||
<Dialog open={!!responseId} onOpenChange={handleOpenChange}>
|
||||
<DialogContent width="wide">
|
||||
<VisuallyHidden asChild>
|
||||
<DialogTitle>Survey Response Details</DialogTitle>
|
||||
</VisuallyHidden>
|
||||
<VisuallyHidden asChild>
|
||||
<DialogDescription>Full response details</DialogDescription>
|
||||
</VisuallyHidden>
|
||||
<DialogBody>
|
||||
{isLoading || !response ? (
|
||||
<div className="py-12">
|
||||
<LoadingSpinner />
|
||||
</div>
|
||||
) : (
|
||||
<SingleResponseCard
|
||||
survey={survey}
|
||||
response={response}
|
||||
environment={environment}
|
||||
environmentTags={tags}
|
||||
isReadOnly={isReadOnly}
|
||||
locale={locale}
|
||||
/>
|
||||
)}
|
||||
</DialogBody>
|
||||
</DialogContent>
|
||||
</Dialog>
|
||||
);
|
||||
};
|
||||
+11
-2
@@ -41,9 +41,17 @@ interface SummaryListProps {
|
||||
environment: TEnvironment;
|
||||
survey: TSurvey;
|
||||
locale: TUserLocale;
|
||||
isReadOnly: boolean;
|
||||
}
|
||||
|
||||
export const SummaryList = ({ summary, environment, responseCount, survey, locale }: SummaryListProps) => {
|
||||
export const SummaryList = ({
|
||||
summary,
|
||||
environment,
|
||||
responseCount,
|
||||
survey,
|
||||
locale,
|
||||
isReadOnly,
|
||||
}: SummaryListProps) => {
|
||||
const { setSelectedFilter, selectedFilter } = useResponseFilter();
|
||||
const { t } = useTranslation();
|
||||
const setFilter = (
|
||||
@@ -113,9 +121,10 @@ export const SummaryList = ({ summary, environment, responseCount, survey, local
|
||||
<OpenTextSummary
|
||||
key={elementSummary.element.id}
|
||||
elementSummary={elementSummary}
|
||||
environmentId={environment.id}
|
||||
environment={environment}
|
||||
survey={survey}
|
||||
locale={locale}
|
||||
isReadOnly={isReadOnly}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
+3
@@ -51,6 +51,7 @@ interface SummaryPageProps {
|
||||
locale: TUserLocale;
|
||||
initialSurveySummary?: TSurveySummary;
|
||||
isQuotasAllowed: boolean;
|
||||
isReadOnly: boolean;
|
||||
}
|
||||
|
||||
export const SummaryPage = ({
|
||||
@@ -60,6 +61,7 @@ export const SummaryPage = ({
|
||||
locale,
|
||||
initialSurveySummary,
|
||||
isQuotasAllowed,
|
||||
isReadOnly,
|
||||
}: SummaryPageProps) => {
|
||||
const { t } = useTranslation();
|
||||
const searchParams = useSearchParams();
|
||||
@@ -230,6 +232,7 @@ export const SummaryPage = ({
|
||||
survey={surveyMemoized}
|
||||
environment={environment}
|
||||
locale={locale}
|
||||
isReadOnly={isReadOnly}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
|
||||
+1
@@ -91,6 +91,7 @@ const SurveyPage = async (props: { params: Promise<{ environmentId: string; surv
|
||||
locale={user.locale ?? DEFAULT_LOCALE}
|
||||
initialSurveySummary={initialSurveySummary}
|
||||
isQuotasAllowed={isQuotasAllowed}
|
||||
isReadOnly={isReadOnly}
|
||||
/>
|
||||
|
||||
<IdBadge id={surveyId} label={t("common.survey_id")} variant="column" />
|
||||
|
||||
+11
-3
@@ -214,6 +214,9 @@ checksums:
|
||||
common/failed_to_load_organizations: 512808a2b674c7c28bca73f8f91fd87e
|
||||
common/failed_to_load_workspaces: 6ee3448097394517dc605074cd4e6ea4
|
||||
common/field_placeholder: ec26d96643d86da164162204ec6c650f
|
||||
common/file_size_must_be_less_than_5_mb: a7d8ef9f888bfb3de2b589947fa2a63f
|
||||
common/file_storage_not_set_up: ed82fc9c54da2f16245eaea9f8aa08f3
|
||||
common/file_upload_service_unavailable: 93a6a904cef89cc18d2c4a65e2d581cc
|
||||
common/filter: 626325a05e4c8800f7ede7012b0cadaf
|
||||
common/finish: ffa7a10f71182b48fefed7135bee24fa
|
||||
common/first_name: cf040a5d6a9fd696be400380cc99f54b
|
||||
@@ -432,7 +435,6 @@ checksums:
|
||||
common/trial_one_day_remaining: 2d64d39fca9589c4865357817bcc24d5
|
||||
common/try_again: 33dd8820e743e35a66e6977f69e9d3b5
|
||||
common/type: f04471a7ddac844b9ad145eb9911ef75
|
||||
common/unknown_survey: dd8f6985e17ccf19fac1776e18b2c498
|
||||
common/unlock_more_workspaces_with_a_higher_plan: fe1590075b855bb4306c9388b65143b0
|
||||
common/update: 079fc039262fd31b10532929685c2d1b
|
||||
common/updated: 8aa8ff2dc2977ca4b269e80a513100b4
|
||||
@@ -638,6 +640,7 @@ checksums:
|
||||
environments/contacts/attributes_msg_email_or_userid_required: febc8b0cda4dd45d2c3cdb1ac2d45dcb
|
||||
environments/contacts/attributes_msg_new_attribute_created: 5cba6158c4305c05104814ec1479267c
|
||||
environments/contacts/attributes_msg_userid_already_exists: 9c695538befc152806c460f52a73821a
|
||||
environments/contacts/collapse_response: d697c361333407ba0ddef3e5bb277f5d
|
||||
environments/contacts/contact_deleted_successfully: c5b64a42a50e055f9e27ec49e20e03fa
|
||||
environments/contacts/create_attribute: 87320615901f95b4f35ee83c290a3a6c
|
||||
environments/contacts/create_new_attribute: c17d407dacd0b90f360f9f5e899d662f
|
||||
@@ -657,6 +660,7 @@ checksums:
|
||||
environments/contacts/edit_attribute_values_description: 21593dfaf4cad965ffc17685bc005509
|
||||
environments/contacts/edit_attributes: a5c3b540441d34b4c0b7faab8f0f0c89
|
||||
environments/contacts/edit_attributes_success: 39f93b1a6f1605bc5951f4da5847bb22
|
||||
environments/contacts/expand_response: f3b8ca2a0cf6b7af31c318b5e0dbbea8
|
||||
environments/contacts/generate_personal_link: 9ac0865f6876d40fe858f94eae781eb8
|
||||
environments/contacts/generate_personal_link_description: b9dbaf9e2d8362505b7e3cfa40f415a6
|
||||
environments/contacts/invalid_csv_column_names: dcb8534e7d4c00b9ea7bdaf389f72328
|
||||
@@ -677,6 +681,7 @@ checksums:
|
||||
environments/contacts/select_a_survey: 1f49086dfb874307aae1136e88c3d514
|
||||
environments/contacts/select_attribute: d93fb60eb4fbb42bf13a22f6216fbd79
|
||||
environments/contacts/select_attribute_key: 673a6683fab41b387d921841cded7e38
|
||||
environments/contacts/survey_response_created: e4a6eaac2acd8defca3ff57eae045ba6
|
||||
environments/contacts/survey_viewed: 646d413218626787b0373ffd71cb7451
|
||||
environments/contacts/survey_viewed_at: 2ab535237af5c3c3f33acc792a7e70a4
|
||||
environments/contacts/system_attributes: eadb6a8888c7b32c0e68881f945ae9b6
|
||||
@@ -1809,6 +1814,7 @@ checksums:
|
||||
environments/surveys/responses/completed: 2dca9d2e4c0fe669801112a66d679f6d
|
||||
environments/surveys/responses/country: 73581fc33a1e83e6a56db73558e7b5c6
|
||||
environments/surveys/responses/decrement_quotas: 9ef63d3e9214c508eb040eb41c25a5c4
|
||||
environments/surveys/responses/delete_response: d86cb6fe4af953cde58f12092962bca4
|
||||
environments/surveys/responses/delete_response_confirmation: 83a43954ca60c8ef30b9683253a6f5ea
|
||||
environments/surveys/responses/delete_response_quotas: 6719c90d8019000ca0a74586fb3b6a65
|
||||
environments/surveys/responses/device: c009f849d689c745de9e38ad17644c7a
|
||||
@@ -1833,8 +1839,10 @@ checksums:
|
||||
environments/surveys/responses/this_response_is_in_progress: 7d785fcb597ea30466467084fd474904
|
||||
environments/surveys/responses/zip_post_code: ab7dc45bd5f9e37930586e2db17e4304
|
||||
environments/surveys/search_by_survey_name: 44cf2e6f8ba43d233fb33939431eba99
|
||||
environments/surveys/share/anonymous_links/custom_single_use_id_description: 53c6d2b6cf597115b1f5a280ce7e9cab
|
||||
environments/surveys/share/anonymous_links/custom_single_use_id_title: 9d708fe4ced64ddedd307fb61827cd03
|
||||
environments/surveys/share/anonymous_links/custom_single_use_id_description: 994c76257cc373388a3870caf9d85dc7
|
||||
environments/surveys/share/anonymous_links/custom_single_use_id_placeholder: e089b0f1838164b2ef2f74076477d8f2
|
||||
environments/surveys/share/anonymous_links/custom_single_use_id_required: 36f60e76ebed5af11661ac7bbadd9a2b
|
||||
environments/surveys/share/anonymous_links/custom_single_use_id_title: 0a1b97ed6fd82d9b0f9f43750d45fbe3
|
||||
environments/surveys/share/anonymous_links/custom_start_point: 4ea6552b37339d17e02f3bce8c7e4125
|
||||
environments/surveys/share/anonymous_links/data_prefilling: 82f0e31e90f1f2ca31361df9893e117c
|
||||
environments/surveys/share/anonymous_links/description: d13534a22f135420651ebfd218a4f01b
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "Noch 1 Tag in deiner Testphase",
|
||||
"try_again": "Versuch's nochmal",
|
||||
"type": "Typ",
|
||||
"unknown_survey": "Unbekannte Umfrage",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Schalten Sie mehr Projekte mit einem höheren Tarif frei.",
|
||||
"update": "Aktualisierung",
|
||||
"updated": "Aktualisiert",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "Entweder E-Mail oder Benutzer-ID ist erforderlich. Die vorhandenen Werte wurden beibehalten.",
|
||||
"attributes_msg_new_attribute_created": "Neues Attribut “{key}” mit Typ “{dataType}” erstellt",
|
||||
"attributes_msg_userid_already_exists": "Die Benutzer-ID existiert bereits für diese Umgebung und wurde nicht aktualisiert.",
|
||||
"collapse_response": "Antwort einklappen",
|
||||
"contact_deleted_successfully": "Kontakt erfolgreich gelöscht",
|
||||
"create_attribute": "Attribut erstellen",
|
||||
"create_new_attribute": "Neues Attribut erstellen",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Ändern Sie die Werte für bestimmte Attribute dieses Kontakts.",
|
||||
"edit_attributes": "Attribute bearbeiten",
|
||||
"edit_attributes_success": "Kontaktattribute erfolgreich aktualisiert",
|
||||
"expand_response": "Antwort ausklappen",
|
||||
"generate_personal_link": "Persönlichen Link generieren",
|
||||
"generate_personal_link_description": "Wähle eine veröffentlichte Umfrage aus, um einen personalisierten Link für diesen Kontakt zu generieren.",
|
||||
"invalid_csv_column_names": "Ungültige CSV-Spaltennamen: {columns}. Spaltennamen, die zu neuen Attributen werden, dürfen nur Kleinbuchstaben, Zahlen und Unterstriche enthalten und müssen mit einem Buchstaben beginnen.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Wähle eine Umfrage aus",
|
||||
"select_attribute": "Attribut auswählen",
|
||||
"select_attribute_key": "Attributschlüssel auswählen",
|
||||
"survey_response_created": "Antwort erstellt",
|
||||
"survey_viewed": "Umfrage angesehen",
|
||||
"survey_viewed_at": "Angesehen am",
|
||||
"system_attributes": "Systemattribute",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Erledigt ✅",
|
||||
"country": "Land",
|
||||
"decrement_quotas": "Alle Grenzwerte der Kontingente einschließlich dieser Antwort verringern",
|
||||
"delete_response": "Antwort löschen",
|
||||
"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",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Nach Umfragenamen suchen",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Erstelle eine lesbare Einmal-ID und kopiere einen signierten Link dafür.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Verwende eine benutzerdefinierte Einmal-ID in der URL.",
|
||||
"custom_start_point": "Benutzerdefinierter Startpunkt",
|
||||
"data_prefilling": "Daten-Prefilling",
|
||||
"description": "Antworten, die von diesen Links kommen, werden anonym",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "1 day left in your trial",
|
||||
"try_again": "Try again",
|
||||
"type": "Type",
|
||||
"unknown_survey": "Unknown survey",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Unlock more workspaces with a higher plan.",
|
||||
"update": "Update",
|
||||
"updated": "Updated",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "Either email or user ID is required. The existing values were preserved.",
|
||||
"attributes_msg_new_attribute_created": "Created new attribute “{key}” with type “{dataType}”",
|
||||
"attributes_msg_userid_already_exists": "The user ID already exists for this environment and was not updated.",
|
||||
"collapse_response": "Collapse response",
|
||||
"contact_deleted_successfully": "Contact deleted successfully",
|
||||
"create_attribute": "Create attribute",
|
||||
"create_new_attribute": "Create new attribute",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Change the values for specific attributes for this contact.",
|
||||
"edit_attributes": "Edit Attributes",
|
||||
"edit_attributes_success": "Contact attributes updated successfully",
|
||||
"expand_response": "Expand response",
|
||||
"generate_personal_link": "Generate Personal Link",
|
||||
"generate_personal_link_description": "Select a published survey to generate a personalized link for this contact.",
|
||||
"invalid_csv_column_names": "Invalid CSV column name(s): {columns}. Column names that will become new attributes must only contain lowercase letters, numbers, and underscores, and must start with a letter.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Select a survey",
|
||||
"select_attribute": "Select Attribute",
|
||||
"select_attribute_key": "Select attribute key",
|
||||
"survey_response_created": "Response created",
|
||||
"survey_viewed": "Survey viewed",
|
||||
"survey_viewed_at": "Viewed At",
|
||||
"system_attributes": "System Attributes",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Completed ✅",
|
||||
"country": "Country",
|
||||
"decrement_quotas": "Decrement all limits of quotas including this response",
|
||||
"delete_response": "Delete 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",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "1 día restante en tu prueba",
|
||||
"try_again": "Intentar de nuevo",
|
||||
"type": "Tipo",
|
||||
"unknown_survey": "Encuesta desconocida",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Desbloquea más proyectos con un plan superior.",
|
||||
"update": "Actualizar",
|
||||
"updated": "Actualizado",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "Se requiere el correo electrónico o el ID de usuario. Se conservaron los valores existentes.",
|
||||
"attributes_msg_new_attribute_created": "Se creó el atributo nuevo “{key}” con el tipo “{dataType}”",
|
||||
"attributes_msg_userid_already_exists": "El ID de usuario ya existe para este entorno y no se actualizó.",
|
||||
"collapse_response": "Contraer respuesta",
|
||||
"contact_deleted_successfully": "Contacto eliminado correctamente",
|
||||
"create_attribute": "Crear atributo",
|
||||
"create_new_attribute": "Crear atributo nuevo",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Cambia los valores de atributos específicos para este contacto.",
|
||||
"edit_attributes": "Editar atributos",
|
||||
"edit_attributes_success": "Atributos del contacto actualizados correctamente",
|
||||
"expand_response": "Expandir respuesta",
|
||||
"generate_personal_link": "Generar enlace personal",
|
||||
"generate_personal_link_description": "Selecciona una encuesta publicada para generar un enlace personalizado para este contacto.",
|
||||
"invalid_csv_column_names": "Nombre(s) de columna CSV no válido(s): {columns}. Los nombres de columna que se convertirán en nuevos atributos solo deben contener letras minúsculas, números y guiones bajos, y deben comenzar con una letra.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Selecciona una encuesta",
|
||||
"select_attribute": "Seleccionar atributo",
|
||||
"select_attribute_key": "Seleccionar clave de atributo",
|
||||
"survey_response_created": "Respuesta creada",
|
||||
"survey_viewed": "Encuesta vista",
|
||||
"survey_viewed_at": "Vista el",
|
||||
"system_attributes": "Atributos del sistema",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Completado ✅",
|
||||
"country": "País",
|
||||
"decrement_quotas": "Reducir todos los límites de cuotas que incluyen esta respuesta",
|
||||
"delete_response": "Eliminar respuesta",
|
||||
"delete_response_confirmation": "Esto eliminará la respuesta de la encuesta, incluyendo todas las respuestas, etiquetas, documentos adjuntos y metadatos de respuesta.",
|
||||
"delete_response_quotas": "La respuesta forma parte de cuotas para esta encuesta. ¿Cómo quieres gestionar las cuotas?",
|
||||
"device": "Dispositivo",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Buscar por nombre de encuesta",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Crea un ID legible de un solo uso y copia un enlace firmado para él.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Usa un ID personalizado de un solo uso en la URL.",
|
||||
"custom_start_point": "Punto de inicio personalizado",
|
||||
"data_prefilling": "Prellenado de datos",
|
||||
"description": "Las respuestas procedentes de estos enlaces serán anónimas",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "1 jour restant dans votre période d'essai",
|
||||
"try_again": "Réessayer",
|
||||
"type": "Type",
|
||||
"unknown_survey": "Enquête inconnue",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Débloquez plus de projets avec un forfait supérieur.",
|
||||
"update": "Mise à jour",
|
||||
"updated": "Mise à jour",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "L'e-mail ou l'identifiant utilisateur est requis. Les valeurs existantes ont été conservées.",
|
||||
"attributes_msg_new_attribute_created": "Nouvel attribut “{key}” créé avec le type “{dataType}”",
|
||||
"attributes_msg_userid_already_exists": "L'identifiant utilisateur existe déjà pour cet environnement et n'a pas été mis à jour.",
|
||||
"collapse_response": "Réduire la réponse",
|
||||
"contact_deleted_successfully": "Contact supprimé avec succès",
|
||||
"create_attribute": "Créer un attribut",
|
||||
"create_new_attribute": "Créer un nouvel attribut",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Modifiez les valeurs d'attributs spécifiques pour ce contact.",
|
||||
"edit_attributes": "Modifier les attributs",
|
||||
"edit_attributes_success": "Attributs du contact mis à jour avec succès",
|
||||
"expand_response": "Développer la réponse",
|
||||
"generate_personal_link": "Générer un lien personnel",
|
||||
"generate_personal_link_description": "Sélectionnez une enquête publiée pour générer un lien personnalisé pour ce contact.",
|
||||
"invalid_csv_column_names": "Nom(s) de colonne CSV invalide(s) : {columns}. Les noms de colonnes qui deviendront de nouveaux attributs ne doivent contenir que des lettres minuscules, des chiffres et des underscores, et doivent commencer par une lettre.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Sélectionner une enquête",
|
||||
"select_attribute": "Sélectionner un attribut",
|
||||
"select_attribute_key": "Sélectionner une clé d'attribut",
|
||||
"survey_response_created": "Réponse créée",
|
||||
"survey_viewed": "Enquête consultée",
|
||||
"survey_viewed_at": "Consultée le",
|
||||
"system_attributes": "Attributs système",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Terminé ✅",
|
||||
"country": "Pays",
|
||||
"decrement_quotas": "Décrémentez toutes les limites des quotas y compris cette réponse",
|
||||
"delete_response": "Supprimer la 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",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Recherche par nom d'enquête",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Créez un identifiant à usage unique lisible et copiez un lien signé pour celui-ci.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Utilisez un identifiant personnalisé à usage unique dans l'URL.",
|
||||
"custom_start_point": "Point de départ personnalisé",
|
||||
"data_prefilling": "Préremplissage des données",
|
||||
"description": "Les réponses provenant de ces liens seront anonymes",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "1 nap van hátra a próbaidőszakából",
|
||||
"try_again": "Próbálja újra",
|
||||
"type": "Típus",
|
||||
"unknown_survey": "Ismeretlen kérdőív",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Több munkaterület feloldása egy magasabb csomaggal.",
|
||||
"update": "Frissítés",
|
||||
"updated": "Frissítve",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "Vagy e-mail-cím, vagy felhasználó-azonosító szükséges. A meglévő értékek megmaradtak.",
|
||||
"attributes_msg_new_attribute_created": "Az új „{dataType}” típusú „{key}” attribútum létrehozva",
|
||||
"attributes_msg_userid_already_exists": "A felhasználó-azonosító már létezik ennél a környezetnél, és nem lett frissítve.",
|
||||
"collapse_response": "Válasz összecsukása",
|
||||
"contact_deleted_successfully": "A partner sikeresen törölve",
|
||||
"create_attribute": "Attribútum létrehozása",
|
||||
"create_new_attribute": "Új attribútum létrehozása",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Bizonyos attribútumok értékének megváltoztatása ennél a partnernél.",
|
||||
"edit_attributes": "Attribútumok szerkesztése",
|
||||
"edit_attributes_success": "A partner attribútumai sikeresen frissítve",
|
||||
"expand_response": "Válasz kibontása",
|
||||
"generate_personal_link": "Személyes hivatkozás előállítása",
|
||||
"generate_personal_link_description": "Válasszon egy közzétett kérdőívet, hogy személyre szabott hivatkozást állítson elő ehhez a partnerhez.",
|
||||
"invalid_csv_column_names": "Érvénytelen CSV-oszlopnevek: {columns}. Az új attribútumokká váló oszlopnevek csak ékezet nélküli kisbetűket, számokat és aláhúzásjeleket tartalmazhatnak, valamint betűvel kell kezdődniük.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Kérdőív kiválasztása",
|
||||
"select_attribute": "Attribútum kiválasztása",
|
||||
"select_attribute_key": "Attribútum kulcsának kiválasztása",
|
||||
"survey_response_created": "Válasz létrehozva",
|
||||
"survey_viewed": "Kérdőív megtekintve",
|
||||
"survey_viewed_at": "Megtekintve ekkor:",
|
||||
"system_attributes": "Rendszerattribútumok",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Befejezve ✅",
|
||||
"country": "Ország",
|
||||
"decrement_quotas": "A kvóták összes korlátjának csökkentése, beleértve ezt a választ is",
|
||||
"delete_response": "Válasz törlése",
|
||||
"delete_response_confirmation": "Ez törölni fogja a kérdőívre adott választ, beleértve az összes választ, címkét, csatolt dokumentumot és a válasz metaadatait.",
|
||||
"delete_response_quotas": "A válasz a kérdőív kvótáinak részét képezik. Hogyan szeretné kezelni a kvótákat?",
|
||||
"device": "Eszköz",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Keresés kérdőívnév alapján",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Hozzon létre egy olvasható, egyszer használatos azonosítót, és másoljon ki egy aláírt linket hozzá.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Használjon egyedi, egyszer használatos azonosítót az URL-ben.",
|
||||
"custom_start_point": "Egyéni kezdési pont",
|
||||
"data_prefilling": "Adatok előre kitöltése",
|
||||
"description": "Az ezekről a hivatkozásokról érkező válaszok névtelenek lesznek",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "トライアル期間の残り1日",
|
||||
"try_again": "もう一度お試しください",
|
||||
"type": "種類",
|
||||
"unknown_survey": "不明なフォーム",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "上位プランでより多くのワークスペースを利用できます。",
|
||||
"update": "更新",
|
||||
"updated": "更新済み",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "メールアドレスまたはユーザーIDのいずれかが必要です。既存の値は保持されました。",
|
||||
"attributes_msg_new_attribute_created": "新しい属性“{key}”を型“{dataType}”で作成しました",
|
||||
"attributes_msg_userid_already_exists": "この環境にはすでにユーザーIDが存在するため、更新されませんでした。",
|
||||
"collapse_response": "回答を折りたたむ",
|
||||
"contact_deleted_successfully": "連絡先を正常に削除しました",
|
||||
"create_attribute": "属性を作成",
|
||||
"create_new_attribute": "新しい属性を作成",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "この連絡先の特定の属性の値を変更します。",
|
||||
"edit_attributes": "属性を編集",
|
||||
"edit_attributes_success": "連絡先属性が正常に更新されました",
|
||||
"expand_response": "回答を展開する",
|
||||
"generate_personal_link": "個人リンクを生成",
|
||||
"generate_personal_link_description": "公開されたフォームを選択して、この連絡先用のパーソナライズされたリンクを生成します。",
|
||||
"invalid_csv_column_names": "無効なCSV列名: {columns}。新しい属性となる列名は、小文字、数字、アンダースコアのみを含み、文字で始まる必要があります。",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "フォームを選択",
|
||||
"select_attribute": "属性を選択",
|
||||
"select_attribute_key": "属性キーを選択",
|
||||
"survey_response_created": "回答が作成されました",
|
||||
"survey_viewed": "フォームを閲覧",
|
||||
"survey_viewed_at": "閲覧日時",
|
||||
"system_attributes": "システム属性",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "完了 ✅",
|
||||
"country": "国",
|
||||
"decrement_quotas": "すべて の 制限 を 減少 し、 この 回答 を 含む しきい値",
|
||||
"delete_response": "回答を削除",
|
||||
"delete_response_confirmation": "これにより、すべての回答、タグ、添付されたドキュメント、および回答メタデータを含むフォームの回答が削除されます。",
|
||||
"delete_response_quotas": "この回答は、このアンケートの割り当ての一部です。 割り当てをどのように処理しますか?",
|
||||
"device": "デバイス",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "フォーム名で検索",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "読みやすいワンタイムIDを作成し、それに対応する署名付きリンクをコピーします。",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "URLにカスタムワンタイムIDを使用する。",
|
||||
"custom_start_point": "カスタム開始点",
|
||||
"data_prefilling": "データの事前入力",
|
||||
"description": "これらのリンクからの回答は匿名になります",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "1 dag over in je proefperiode",
|
||||
"try_again": "Probeer het opnieuw",
|
||||
"type": "Type",
|
||||
"unknown_survey": "Onbekende enquête",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Ontgrendel meer werkruimtes met een hoger abonnement.",
|
||||
"update": "Update",
|
||||
"updated": "Bijgewerkt",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "E-mail of gebruikers-ID is vereist. De bestaande waarden zijn behouden.",
|
||||
"attributes_msg_new_attribute_created": "Nieuw attribuut “{key}” aangemaakt met type “{dataType}”",
|
||||
"attributes_msg_userid_already_exists": "De gebruikers-ID bestaat al voor deze omgeving en is niet bijgewerkt.",
|
||||
"collapse_response": "Antwoord inklappen",
|
||||
"contact_deleted_successfully": "Contact succesvol verwijderd",
|
||||
"create_attribute": "Attribuut aanmaken",
|
||||
"create_new_attribute": "Nieuw attribuut aanmaken",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Wijzig de waarden voor specifieke attributen voor dit contact.",
|
||||
"edit_attributes": "Attributen bewerken",
|
||||
"edit_attributes_success": "Contactattributen succesvol bijgewerkt",
|
||||
"expand_response": "Antwoord uitklappen",
|
||||
"generate_personal_link": "Persoonlijke link genereren",
|
||||
"generate_personal_link_description": "Selecteer een gepubliceerde enquête om een gepersonaliseerde link voor dit contact te genereren.",
|
||||
"invalid_csv_column_names": "Ongeldige CSV-kolomna(a)m(en): {columns}. Kolomnamen die nieuwe kenmerken worden, mogen alleen kleine letters, cijfers en underscores bevatten en moeten beginnen met een letter.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Selecteer een enquête",
|
||||
"select_attribute": "Selecteer Kenmerk",
|
||||
"select_attribute_key": "Selecteer kenmerksleutel",
|
||||
"survey_response_created": "Antwoord aangemaakt",
|
||||
"survey_viewed": "Enquête bekeken",
|
||||
"survey_viewed_at": "Bekeken op",
|
||||
"system_attributes": "Systeemkenmerken",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Voltooid ✅",
|
||||
"country": "Land",
|
||||
"decrement_quotas": "Verlaag alle limieten van quota, inclusief dit antwoord",
|
||||
"delete_response": "Antwoord verwijderen",
|
||||
"delete_response_confirmation": "Hierdoor wordt het enquêteantwoord verwijderd, inclusief alle antwoorden, tags, bijgevoegde documenten en metagegevens van het antwoord.",
|
||||
"delete_response_quotas": "De respons maakt deel uit van de quota voor dit onderzoek. Hoe wilt u omgaan met de quota?",
|
||||
"device": "Apparaat",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Zoek op enquêtenaam",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Maak een leesbare eenmalige ID aan en kopieer een ondertekende link hiervoor.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Gebruik een aangepaste eenmalige ID in de URL.",
|
||||
"custom_start_point": "Aangepast startpunt",
|
||||
"data_prefilling": "Gegevens vooraf invullen",
|
||||
"description": "Reacties afkomstig van deze links zijn anoniem",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "1 dia restante no seu período de teste",
|
||||
"try_again": "Tenta de novo",
|
||||
"type": "Tipo",
|
||||
"unknown_survey": "Pesquisa desconhecida",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Desbloqueie mais projetos com um plano superior.",
|
||||
"update": "atualizar",
|
||||
"updated": "atualizado",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "E-mail ou ID de usuário é obrigatório. Os valores existentes foram preservados.",
|
||||
"attributes_msg_new_attribute_created": "Novo atributo “{key}” criado com tipo “{dataType}”",
|
||||
"attributes_msg_userid_already_exists": "O ID de usuário já existe para este ambiente e não foi atualizado.",
|
||||
"collapse_response": "Recolher resposta",
|
||||
"contact_deleted_successfully": "Contato excluído com sucesso",
|
||||
"create_attribute": "Criar atributo",
|
||||
"create_new_attribute": "Criar novo atributo",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Altere os valores de atributos específicos para este contato.",
|
||||
"edit_attributes": "Editar atributos",
|
||||
"edit_attributes_success": "Atributos do contato atualizados com sucesso",
|
||||
"expand_response": "Expandir resposta",
|
||||
"generate_personal_link": "Gerar link pessoal",
|
||||
"generate_personal_link_description": "Selecione uma pesquisa publicada para gerar um link personalizado para este contato.",
|
||||
"invalid_csv_column_names": "Nome(s) de coluna CSV inválido(s): {columns}. Os nomes de colunas que se tornarão novos atributos devem conter apenas letras minúsculas, números e sublinhados, e devem começar com uma letra.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Selecione uma pesquisa",
|
||||
"select_attribute": "Selecionar Atributo",
|
||||
"select_attribute_key": "Selecionar chave de atributo",
|
||||
"survey_response_created": "Resposta criada",
|
||||
"survey_viewed": "Pesquisa visualizada",
|
||||
"survey_viewed_at": "Visualizada em",
|
||||
"system_attributes": "Atributos do sistema",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Concluído ✅",
|
||||
"country": "País",
|
||||
"decrement_quotas": "Diminua todos os limites de cotas, incluindo esta resposta",
|
||||
"delete_response": "Excluir 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",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Buscar pelo nome da pesquisa",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Crie um ID de uso único legível e copie um link assinado para ele.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Use um ID de uso único personalizado na URL.",
|
||||
"custom_start_point": "Ponto de início personalizado",
|
||||
"data_prefilling": "preenchimento automático de dados",
|
||||
"description": "Respostas vindas desses links serão anônimas",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "1 dia restante no teu período de teste",
|
||||
"try_again": "Tente novamente",
|
||||
"type": "Tipo",
|
||||
"unknown_survey": "Inquérito desconhecido",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Desbloqueie mais projetos com um plano superior.",
|
||||
"update": "Atualizar",
|
||||
"updated": "Atualizado",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "É necessário um email ou ID de utilizador. Os valores existentes foram preservados.",
|
||||
"attributes_msg_new_attribute_created": "Criado novo atributo “{key}” com tipo “{dataType}”",
|
||||
"attributes_msg_userid_already_exists": "O ID de utilizador já existe para este ambiente e não foi atualizado.",
|
||||
"collapse_response": "Recolher resposta",
|
||||
"contact_deleted_successfully": "Contacto eliminado com sucesso",
|
||||
"create_attribute": "Criar atributo",
|
||||
"create_new_attribute": "Criar novo atributo",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Altere os valores de atributos específicos para este contacto.",
|
||||
"edit_attributes": "Editar atributos",
|
||||
"edit_attributes_success": "Atributos do contacto atualizados com sucesso",
|
||||
"expand_response": "Expandir resposta",
|
||||
"generate_personal_link": "Gerar Link Pessoal",
|
||||
"generate_personal_link_description": "Selecione um inquérito publicado para gerar um link personalizado para este contacto.",
|
||||
"invalid_csv_column_names": "Nome(s) de coluna CSV inválido(s): {columns}. Os nomes de colunas que se tornarão novos atributos devem conter apenas letras minúsculas, números e underscores, e devem começar com uma letra.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Selecione um inquérito",
|
||||
"select_attribute": "Selecionar Atributo",
|
||||
"select_attribute_key": "Selecionar chave de atributo",
|
||||
"survey_response_created": "Resposta criada",
|
||||
"survey_viewed": "Inquérito visualizado",
|
||||
"survey_viewed_at": "Visualizado em",
|
||||
"system_attributes": "Atributos do sistema",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Concluído ✅",
|
||||
"country": "País",
|
||||
"decrement_quotas": "Decrementar todos os limites das cotas incluindo esta resposta",
|
||||
"delete_response": "Eliminar 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",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Pesquisar por nome do inquérito",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Cria um ID de utilização única legível e copia uma ligação assinada para o mesmo.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Usa um ID de utilização única personalizado no URL.",
|
||||
"custom_start_point": "Ponto de início personalizado",
|
||||
"data_prefilling": "Pré-preenchimento de dados",
|
||||
"description": "Respostas provenientes destes links serão anónimas",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "1 zi rămasă în perioada ta de probă",
|
||||
"try_again": "Încearcă din nou",
|
||||
"type": "Tip",
|
||||
"unknown_survey": "Chestionar necunoscut",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Deblochează mai multe workspaces cu un plan superior.",
|
||||
"update": "Actualizare",
|
||||
"updated": "Actualizat",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "Este necesar fie un email, fie un ID de utilizator. Valorile existente au fost păstrate.",
|
||||
"attributes_msg_new_attribute_created": "A fost creat un nou atribut „{key}” cu tipul „{dataType}”",
|
||||
"attributes_msg_userid_already_exists": "ID-ul de utilizator există deja pentru acest mediu și nu a fost actualizat.",
|
||||
"collapse_response": "Restrânge răspunsul",
|
||||
"contact_deleted_successfully": "Contact șters cu succes",
|
||||
"create_attribute": "Creează atribut",
|
||||
"create_new_attribute": "Creează atribut nou",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Modifică valorile anumitor atribute pentru acest contact.",
|
||||
"edit_attributes": "Editează atributele",
|
||||
"edit_attributes_success": "Atributele contactului au fost actualizate cu succes",
|
||||
"expand_response": "Extinde răspunsul",
|
||||
"generate_personal_link": "Generează link personal",
|
||||
"generate_personal_link_description": "Selectați un sondaj publicat pentru a genera un link personalizat pentru acest contact.",
|
||||
"invalid_csv_column_names": "Nume de coloană CSV nevalide: {columns}. Numele coloanelor care vor deveni atribute noi trebuie să conțină doar litere mici, cifre și caractere de subliniere și trebuie să înceapă cu o literă.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Selectați un sondaj",
|
||||
"select_attribute": "Selectează atributul",
|
||||
"select_attribute_key": "Selectează cheia atributului",
|
||||
"survey_response_created": "Răspuns creat",
|
||||
"survey_viewed": "Chestionar vizualizat",
|
||||
"survey_viewed_at": "Vizualizat la",
|
||||
"system_attributes": "Atribute de sistem",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Finalizat ✅",
|
||||
"country": "Țară",
|
||||
"decrement_quotas": "Decrementați toate limitele cotelor, inclusiv acest răspuns",
|
||||
"delete_response": "Șterge răspunsul",
|
||||
"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",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Căutare după nume chestionar",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Creează un ID de unică folosință lizibil și copiază un link semnat pentru acesta.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Folosește un ID personalizat de unică folosință în URL.",
|
||||
"custom_start_point": "Punct de start personalizat",
|
||||
"data_prefilling": "Precompletare date",
|
||||
"description": "Răspunsurile provenite de la aceste linkuri vor fi anonime",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "Остался 1 день пробного периода",
|
||||
"try_again": "Попробуйте ещё раз",
|
||||
"type": "Тип",
|
||||
"unknown_survey": "Неизвестный опрос",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Откройте больше рабочих пространств с более высоким тарифом.",
|
||||
"update": "Обновить",
|
||||
"updated": "Обновлено",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "Требуется либо email, либо user ID. Существующие значения были сохранены.",
|
||||
"attributes_msg_new_attribute_created": "Создан новый атрибут «{key}» с типом «{dataType}»",
|
||||
"attributes_msg_userid_already_exists": "Этот user ID уже существует в данной среде и не был обновлён.",
|
||||
"collapse_response": "Свернуть ответ",
|
||||
"contact_deleted_successfully": "Контакт успешно удалён",
|
||||
"create_attribute": "Создать атрибут",
|
||||
"create_new_attribute": "Создать новый атрибут",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Измените значения определённых атрибутов для этого контакта.",
|
||||
"edit_attributes": "Редактировать атрибуты",
|
||||
"edit_attributes_success": "Атрибуты контакта успешно обновлены",
|
||||
"expand_response": "Развернуть ответ",
|
||||
"generate_personal_link": "Сгенерировать персональную ссылку",
|
||||
"generate_personal_link_description": "Выберите опубликованный опрос, чтобы сгенерировать персональную ссылку для этого контакта.",
|
||||
"invalid_csv_column_names": "Недопустимые имена столбцов в CSV: {columns}. Имена столбцов, которые станут новыми атрибутами, должны содержать только строчные буквы, цифры и подчёркивания, а также начинаться с буквы.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Выберите опрос",
|
||||
"select_attribute": "Выберите атрибут",
|
||||
"select_attribute_key": "Выберите ключ атрибута",
|
||||
"survey_response_created": "Ответ создан",
|
||||
"survey_viewed": "Опрос просмотрен",
|
||||
"survey_viewed_at": "Просмотрено",
|
||||
"system_attributes": "Системные атрибуты",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Завершено ✅",
|
||||
"country": "Страна",
|
||||
"decrement_quotas": "Уменьшить все лимиты квот, включая этот ответ",
|
||||
"delete_response": "Удалить ответ",
|
||||
"delete_response_confirmation": "Это действие удалит ответ на опрос, включая все ответы, теги, вложенные документы и метаданные ответа.",
|
||||
"delete_response_quotas": "Ответ входит в квоты для этого опроса. Как вы хотите обработать квоты?",
|
||||
"device": "Устройство",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Поиск по названию опроса",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Создайте читаемый одноразовый ID и скопируйте подписанную ссылку для него.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Используй собственный одноразовый ID в URL.",
|
||||
"custom_start_point": "Пользовательская точка старта",
|
||||
"data_prefilling": "Предзаполнение данных",
|
||||
"description": "Ответы, полученные по этим ссылкам, будут анонимными",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "1 dag kvar av din provperiod",
|
||||
"try_again": "Försök igen",
|
||||
"type": "Typ",
|
||||
"unknown_survey": "Okänd enkät",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Lås upp fler arbetsytor med ett högre abonnemang.",
|
||||
"update": "Uppdatera",
|
||||
"updated": "Uppdaterad",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "Antingen e-post eller användar-ID krävs. De befintliga värdena har bevarats.",
|
||||
"attributes_msg_new_attribute_created": "Nytt attribut ”{key}” med typen ”{dataType}” har skapats",
|
||||
"attributes_msg_userid_already_exists": "Användar-ID finns redan för denna miljö och uppdaterades inte.",
|
||||
"collapse_response": "Dölj svar",
|
||||
"contact_deleted_successfully": "Kontakt borttagen",
|
||||
"create_attribute": "Skapa attribut",
|
||||
"create_new_attribute": "Skapa nytt attribut",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Ändra värdena för specifika attribut för denna kontakt.",
|
||||
"edit_attributes": "Redigera attribut",
|
||||
"edit_attributes_success": "Kontaktens attribut har uppdaterats",
|
||||
"expand_response": "Visa svar",
|
||||
"generate_personal_link": "Generera personlig länk",
|
||||
"generate_personal_link_description": "Välj en publicerad enkät för att generera en personlig länk för denna kontakt.",
|
||||
"invalid_csv_column_names": "Ogiltiga CSV-kolumnnamn: {columns}. Kolumnnamn som ska bli nya attribut får bara innehålla små bokstäver, siffror och understreck, och måste börja med en bokstav.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Välj en enkät",
|
||||
"select_attribute": "Välj attribut",
|
||||
"select_attribute_key": "Välj attributnyckel",
|
||||
"survey_response_created": "Svar skapat",
|
||||
"survey_viewed": "Enkät visad",
|
||||
"survey_viewed_at": "Visad kl.",
|
||||
"system_attributes": "Systemattribut",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Slutförd ✅",
|
||||
"country": "Land",
|
||||
"decrement_quotas": "Minska alla gränser för kvoter inklusive detta svar",
|
||||
"delete_response": "Ta bort svar",
|
||||
"delete_response_confirmation": "Detta kommer att ta bort enkätsvaret, inklusive alla svar, taggar, bifogade dokument och svarsmetadata.",
|
||||
"delete_response_quotas": "Svaret är del av kvoter för denna enkät. Hur vill du hantera kvoterna?",
|
||||
"device": "Enhet",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Sök efter enkätnamn",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Skapa ett läsbart engångs-ID och kopiera en signerad länk för det.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "Använd ett anpassat engångs-ID i URL:en.",
|
||||
"custom_start_point": "Anpassad startpunkt",
|
||||
"data_prefilling": "Dataförfyllning",
|
||||
"description": "Svar från dessa länkar kommer att vara anonyma",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "Deneme sürenizde 1 gün kaldı",
|
||||
"try_again": "Tekrar dene",
|
||||
"type": "Tür",
|
||||
"unknown_survey": "Bilinmeyen anket",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "Daha yüksek bir planla daha fazla çalışma alanının kilidini açın.",
|
||||
"update": "Güncelle",
|
||||
"updated": "Güncellendi",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "Email veya kullanıcı kimliği gereklidir. Mevcut değerler korundu.",
|
||||
"attributes_msg_new_attribute_created": "\"{key}\" adında \"{dataType}\" türünde yeni özellik oluşturuldu",
|
||||
"attributes_msg_userid_already_exists": "Kullanıcı kimliği bu ortamda zaten mevcut ve güncellenmedi.",
|
||||
"collapse_response": "Yanıtı daralt",
|
||||
"contact_deleted_successfully": "Contact başarıyla silindi",
|
||||
"create_attribute": "Özellik oluştur",
|
||||
"create_new_attribute": "Yeni özellik oluştur",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "Bu kişi için belirli özelliklerin değerlerini değiştirin.",
|
||||
"edit_attributes": "Özellikleri Düzenle",
|
||||
"edit_attributes_success": "Contact attributes başarıyla güncellendi",
|
||||
"expand_response": "Yanıtı genişlet",
|
||||
"generate_personal_link": "Kişisel Bağlantı Oluştur",
|
||||
"generate_personal_link_description": "Bu kişi için kişiselleştirilmiş bir bağlantı oluşturmak üzere yayınlanmış bir survey seçin.",
|
||||
"invalid_csv_column_names": "Geçersiz CSV sütun adı/adları: {columns}. Yeni özellik olacak sütun adları yalnızca küçük harfler, rakamlar ve alt çizgi içermeli ve bir harfle başlamalıdır.",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "Bir survey seçin",
|
||||
"select_attribute": "Özellik Seçin",
|
||||
"select_attribute_key": "Özellik anahtarı seçin",
|
||||
"survey_response_created": "Yanıt oluşturuldu",
|
||||
"survey_viewed": "Survey görüntülendi",
|
||||
"survey_viewed_at": "Görüntülenme Tarihi",
|
||||
"system_attributes": "Sistem Özellikleri",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "Tamamlandı ✅",
|
||||
"country": "Ülke",
|
||||
"decrement_quotas": "Bu yanıtı içeren tüm kota limitlerini azalt",
|
||||
"delete_response": "Yanıtı sil",
|
||||
"delete_response_confirmation": "Bu işlem, tüm yanıtlar, etiketler, ekli belgeler ve yanıt meta verileri dahil olmak üzere survey yanıtını silecek.",
|
||||
"delete_response_quotas": "Yanıt bu survey'in kotalarına dahil. Kotaları nasıl yönetmek istiyorsunuz?",
|
||||
"device": "Cihaz",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "Survey adına göre ara",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "Okunabilir bir tek kullanımlık kimlik oluşturun ve bunun için imzalı bir bağlantı kopyalayın.",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "URL'de özel bir tek kullanımlık kimlik kullanın.",
|
||||
"custom_start_point": "Özel başlangıç noktası",
|
||||
"data_prefilling": "Veri ön doldurma",
|
||||
"description": "Bu bağlantılardan gelen yanıtlar anonim olacaktır",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "试用期还剩 1 天",
|
||||
"try_again": "再试一次",
|
||||
"type": "类型",
|
||||
"unknown_survey": "未知调查",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "升级套餐以解锁更多工作区。",
|
||||
"update": "更新",
|
||||
"updated": "已更新",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "需要填写邮箱或用户ID。已保留现有值。",
|
||||
"attributes_msg_new_attribute_created": "已创建新属性“{key}”,类型为“{dataType}”",
|
||||
"attributes_msg_userid_already_exists": "该环境下的用户ID已存在,未进行更新。",
|
||||
"collapse_response": "收起回复",
|
||||
"contact_deleted_successfully": "联系人 删除 成功",
|
||||
"create_attribute": "创建属性",
|
||||
"create_new_attribute": "创建新属性",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "更改此联系人的特定属性值。",
|
||||
"edit_attributes": "编辑属性",
|
||||
"edit_attributes_success": "联系人属性更新成功",
|
||||
"expand_response": "展开回复",
|
||||
"generate_personal_link": "生成个人链接",
|
||||
"generate_personal_link_description": "选择一个已发布的调查,为此联系人生成个性化链接。",
|
||||
"invalid_csv_column_names": "无效的 CSV 列名:{columns}。作为新属性的列名只能包含小写字母、数字和下划线,并且必须以字母开头。",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "选择一个调查",
|
||||
"select_attribute": "选择 属性",
|
||||
"select_attribute_key": "选择属性键",
|
||||
"survey_response_created": "回复已创建",
|
||||
"survey_viewed": "已查看调查",
|
||||
"survey_viewed_at": "查看时间",
|
||||
"system_attributes": "系统属性",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "完成 ✅",
|
||||
"country": "国家",
|
||||
"decrement_quotas": "减少所有配额限制,包括此回应",
|
||||
"delete_response": "删除回复",
|
||||
"delete_response_confirmation": "这 将 删除 调查 回应, 包括 所有 答案、 标签、 附件文档 和 回应元数据。",
|
||||
"delete_response_quotas": "该响应是 此 调查配额 的一部分。 您 希望 如何 处理 这些 配额?",
|
||||
"device": "设备",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "按 调查 名称 搜索",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "创建一个可读的一次性 ID,并复制其签名链接。",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "在 URL 中使用自定义一次性 ID。",
|
||||
"custom_start_point": "自定义 起点",
|
||||
"data_prefilling": "数据 预填充",
|
||||
"description": "来自 这些 link 的 响应 将是 匿名 的",
|
||||
|
||||
@@ -462,7 +462,6 @@
|
||||
"trial_one_day_remaining": "試用期剩餘 1 天",
|
||||
"try_again": "再試一次",
|
||||
"type": "類型",
|
||||
"unknown_survey": "未知問卷",
|
||||
"unlock_more_workspaces_with_a_higher_plan": "升級方案以解鎖更多工作區。",
|
||||
"update": "更新",
|
||||
"updated": "已更新",
|
||||
@@ -677,6 +676,7 @@
|
||||
"attributes_msg_email_or_userid_required": "必須填寫電子郵件或使用者 ID。已保留現有值。",
|
||||
"attributes_msg_new_attribute_created": "已建立新屬性「{key}」,型別為「{dataType}」",
|
||||
"attributes_msg_userid_already_exists": "此環境已存在該使用者 ID,未進行更新。",
|
||||
"collapse_response": "收合回應",
|
||||
"contact_deleted_successfully": "聯絡人已成功刪除",
|
||||
"create_attribute": "建立屬性",
|
||||
"create_new_attribute": "建立新屬性",
|
||||
@@ -696,6 +696,7 @@
|
||||
"edit_attribute_values_description": "變更此聯絡人特定屬性的值。",
|
||||
"edit_attributes": "編輯屬性",
|
||||
"edit_attributes_success": "聯絡人屬性已成功更新",
|
||||
"expand_response": "展開回應",
|
||||
"generate_personal_link": "產生個人連結",
|
||||
"generate_personal_link_description": "選擇一個已發佈的問卷,為此聯絡人產生個人化連結。",
|
||||
"invalid_csv_column_names": "無效的 CSV 欄位名稱:{columns}。作為新屬性的欄位名稱只能包含小寫字母、數字和底線,且必須以字母開頭。",
|
||||
@@ -716,6 +717,7 @@
|
||||
"select_a_survey": "選擇問卷",
|
||||
"select_attribute": "選取屬性",
|
||||
"select_attribute_key": "選取屬性鍵值",
|
||||
"survey_response_created": "回應已建立",
|
||||
"survey_viewed": "已查看問卷",
|
||||
"survey_viewed_at": "查看時間",
|
||||
"system_attributes": "系統屬性",
|
||||
@@ -1891,6 +1893,7 @@
|
||||
"completed": "已完成 ✅",
|
||||
"country": "國家/地區",
|
||||
"decrement_quotas": "減少所有配額限制,包括此回應",
|
||||
"delete_response": "刪除回應",
|
||||
"delete_response_confirmation": "這將刪除調查響應,包括所有回答、標籤、附件文件以及響應元數據。",
|
||||
"delete_response_quotas": "回應 屬於 此 調查 的 配額 一部分 . 你 想 如何 處理 配額?",
|
||||
"device": "裝置",
|
||||
@@ -1918,10 +1921,10 @@
|
||||
"search_by_survey_name": "依問卷名稱搜尋",
|
||||
"share": {
|
||||
"anonymous_links": {
|
||||
"custom_single_use_id_description": "Create a readable single-use ID and copy a signed link for it.",
|
||||
"custom_single_use_id_description": "建立可讀的單次使用 ID,並複製其簽署連結。",
|
||||
"custom_single_use_id_placeholder": "CUSTOM-ID",
|
||||
"custom_single_use_id_required": "Enter a custom single-use ID.",
|
||||
"custom_single_use_id_title": "Use a custom single-use ID in the URL.",
|
||||
"custom_single_use_id_title": "在網址中使用自訂的單次使用 ID。",
|
||||
"custom_start_point": "自訂 開始 點",
|
||||
"data_prefilling": "資料預先填寫",
|
||||
"description": "從 這些 連結 獲得 的 回應 將是 匿名 的",
|
||||
|
||||
@@ -4,7 +4,7 @@ import { z } from "zod";
|
||||
import { ZId } from "@formbricks/types/common";
|
||||
import { ResourceNotFoundError } from "@formbricks/types/errors";
|
||||
import { deleteResponse, getResponse } from "@/lib/response/service";
|
||||
import { createTag } from "@/lib/tag/service";
|
||||
import { createTag, getTagsByEnvironmentId } from "@/lib/tag/service";
|
||||
import { addTagToRespone, deleteTagOnResponse } from "@/lib/tagOnResponse/service";
|
||||
import { authenticatedActionClient } from "@/lib/utils/action-client";
|
||||
import { checkAuthorizationUpdated } from "@/lib/utils/action-client/action-client-middleware";
|
||||
@@ -175,6 +175,32 @@ export const deleteResponseAction = authenticatedActionClient.inputSchema(ZDelet
|
||||
})
|
||||
);
|
||||
|
||||
const ZGetTagsByEnvironmentIdAction = z.object({
|
||||
environmentId: ZId,
|
||||
});
|
||||
|
||||
export const getTagsByEnvironmentIdAction = authenticatedActionClient
|
||||
.inputSchema(ZGetTagsByEnvironmentIdAction)
|
||||
.action(async ({ parsedInput, ctx }) => {
|
||||
await checkAuthorizationUpdated({
|
||||
userId: ctx.user.id,
|
||||
organizationId: await getOrganizationIdFromEnvironmentId(parsedInput.environmentId),
|
||||
access: [
|
||||
{
|
||||
type: "organization",
|
||||
roles: ["owner", "manager"],
|
||||
},
|
||||
{
|
||||
type: "projectTeam",
|
||||
minPermission: "read",
|
||||
projectId: await getProjectIdFromEnvironmentId(parsedInput.environmentId),
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
return await getTagsByEnvironmentId(parsedInput.environmentId);
|
||||
});
|
||||
|
||||
const ZGetResponseAction = z.object({
|
||||
responseId: ZId,
|
||||
});
|
||||
|
||||
+2
@@ -9,6 +9,7 @@ import { TTag } from "@formbricks/types/tags";
|
||||
import { TUserLocale } from "@formbricks/types/user";
|
||||
import { getFormattedErrorMessage } from "@/lib/utils/helper";
|
||||
import { TagError } from "@/modules/projects/settings/types/tag";
|
||||
import { IdBadge } from "@/modules/ui/components/id-badge";
|
||||
import { Tag } from "@/modules/ui/components/tag";
|
||||
import { TagsCombobox } from "@/modules/ui/components/tags-combobox";
|
||||
import { createTagAction, createTagToResponseAction, deleteTagOnResponseAction } from "../actions";
|
||||
@@ -133,6 +134,7 @@ export const ResponseTagsWrapper: React.FC<ResponseTagsWrapperProps> = ({
|
||||
return (
|
||||
<div className="flex items-center justify-between gap-4 border-t border-slate-200 px-6 py-3">
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<IdBadge id={responseId} />
|
||||
<SingleResponseCardMetadata response={response} locale={locale} />
|
||||
{tagsState?.map((tag) => (
|
||||
<Tag
|
||||
|
||||
@@ -18,8 +18,8 @@ import { DisplayCard } from "./display-card";
|
||||
import { ResponseSurveyCard } from "./response-survey-card";
|
||||
|
||||
type TTimelineItem =
|
||||
| { type: "display"; data: Pick<TDisplay, "id" | "createdAt" | "surveyId"> }
|
||||
| { type: "response"; data: TResponseWithQuotas };
|
||||
| { type: "display"; data: Pick<TDisplay, "id" | "createdAt" | "surveyId">; survey: TSurvey }
|
||||
| { type: "response"; data: TResponseWithQuotas; survey: TSurvey };
|
||||
|
||||
interface ActivityTimelineProps {
|
||||
surveys: TSurvey[];
|
||||
@@ -41,7 +41,7 @@ export const ActivityTimeline = ({
|
||||
environmentTags,
|
||||
locale,
|
||||
projectPermission,
|
||||
}: ActivityTimelineProps) => {
|
||||
}: Readonly<ActivityTimelineProps>) => {
|
||||
const { t } = useTranslation();
|
||||
const [responses, setResponses] = useState(initialResponses);
|
||||
const [isReversed, setIsReversed] = useState(false);
|
||||
@@ -66,16 +66,20 @@ export const ActivityTimeline = ({
|
||||
setResponses((prev) => prev.map((r) => (r.id === responseId ? updatedResponse : r)));
|
||||
};
|
||||
|
||||
const timelineItems = useMemo(() => {
|
||||
const displayItems: TTimelineItem[] = displays.map((d) => ({
|
||||
type: "display" as const,
|
||||
data: d,
|
||||
}));
|
||||
const surveyById = useMemo(() => {
|
||||
return new Map(surveys.map((s) => [s.id, s]));
|
||||
}, [surveys]);
|
||||
|
||||
const responseItems: TTimelineItem[] = responses.map((r) => ({
|
||||
type: "response" as const,
|
||||
data: r,
|
||||
}));
|
||||
const timelineItems = useMemo(() => {
|
||||
const displayItems: TTimelineItem[] = displays.flatMap((d) => {
|
||||
const survey = surveyById.get(d.surveyId);
|
||||
return survey ? [{ type: "display" as const, data: d, survey }] : [];
|
||||
});
|
||||
|
||||
const responseItems: TTimelineItem[] = responses.flatMap((r) => {
|
||||
const survey = surveyById.get(r.surveyId);
|
||||
return survey ? [{ type: "response" as const, data: r, survey }] : [];
|
||||
});
|
||||
|
||||
const merged = [...displayItems, ...responseItems].sort((a, b) => {
|
||||
const aTime = new Date(a.data.createdAt).getTime();
|
||||
@@ -84,7 +88,7 @@ export const ActivityTimeline = ({
|
||||
});
|
||||
|
||||
return isReversed ? [...merged].reverse() : merged;
|
||||
}, [displays, responses, isReversed]);
|
||||
}, [displays, responses, surveyById, isReversed]);
|
||||
|
||||
const toggleSort = () => {
|
||||
setIsReversed((prev) => !prev);
|
||||
@@ -112,7 +116,7 @@ export const ActivityTimeline = ({
|
||||
<DisplayCard
|
||||
key={`display-${item.data.id}`}
|
||||
display={item.data}
|
||||
surveys={surveys}
|
||||
survey={item.survey}
|
||||
environmentId={environment.id}
|
||||
locale={locale}
|
||||
/>
|
||||
@@ -120,7 +124,7 @@ export const ActivityTimeline = ({
|
||||
<ResponseSurveyCard
|
||||
key={`response-${item.data.id}`}
|
||||
response={item.data}
|
||||
surveys={surveys}
|
||||
survey={item.survey}
|
||||
user={user}
|
||||
environmentTags={environmentTags}
|
||||
environment={environment}
|
||||
|
||||
@@ -10,14 +10,13 @@ import { timeSince } from "@/lib/time";
|
||||
|
||||
interface DisplayCardProps {
|
||||
display: Pick<TDisplay, "id" | "createdAt" | "surveyId">;
|
||||
surveys: TSurvey[];
|
||||
survey: TSurvey;
|
||||
environmentId: string;
|
||||
locale: TUserLocale;
|
||||
}
|
||||
|
||||
export const DisplayCard = ({ display, surveys, environmentId, locale }: DisplayCardProps) => {
|
||||
export const DisplayCard = ({ display, survey, environmentId, locale }: Readonly<DisplayCardProps>) => {
|
||||
const { t } = useTranslation();
|
||||
const survey = surveys.find((s) => s.id === display.surveyId);
|
||||
|
||||
return (
|
||||
<div className="flex items-center justify-between rounded-xl border border-slate-200 bg-white p-4 shadow-sm">
|
||||
@@ -27,15 +26,11 @@ export const DisplayCard = ({ display, surveys, environmentId, locale }: Display
|
||||
</div>
|
||||
<div>
|
||||
<p className="text-xs text-slate-500">{t("environments.contacts.survey_viewed")}</p>
|
||||
{survey ? (
|
||||
<Link
|
||||
href={`/environments/${environmentId}/surveys/${survey.id}/summary`}
|
||||
className="text-sm font-medium text-slate-700 hover:underline">
|
||||
{survey.name}
|
||||
</Link>
|
||||
) : (
|
||||
<span className="text-sm font-medium text-slate-500">{t("common.unknown_survey")}</span>
|
||||
)}
|
||||
<Link
|
||||
href={`/environments/${environmentId}/surveys/${survey.id}/summary`}
|
||||
className="text-sm font-medium text-slate-700 hover:underline">
|
||||
{survey.name}
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
<span className="text-sm text-slate-500">{timeSince(display.createdAt.toString(), locale)}</span>
|
||||
|
||||
@@ -1,16 +1,37 @@
|
||||
"use client";
|
||||
|
||||
import { ChevronDownIcon, ChevronUpIcon, MessageSquareTextIcon, TrashIcon } from "lucide-react";
|
||||
import Link from "next/link";
|
||||
import { useMemo, useState } from "react";
|
||||
import toast from "react-hot-toast";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { TEnvironment } from "@formbricks/types/environment";
|
||||
import { TResponseWithQuotas } from "@formbricks/types/responses";
|
||||
import { TSurvey } from "@formbricks/types/surveys/types";
|
||||
import { TTag } from "@formbricks/types/tags";
|
||||
import { TUser, TUserLocale } from "@formbricks/types/user";
|
||||
import { timeSince } from "@/lib/time";
|
||||
import { getFormattedErrorMessage } from "@/lib/utils/helper";
|
||||
import { replaceHeadlineRecall } from "@/lib/utils/recall";
|
||||
import { SingleResponseCard } from "@/modules/analysis/components/SingleResponseCard";
|
||||
import {
|
||||
deleteResponseAction,
|
||||
getResponseAction,
|
||||
} from "@/modules/analysis/components/SingleResponseCard/actions";
|
||||
import { ResponseTagsWrapper } from "@/modules/analysis/components/SingleResponseCard/components/ResponseTagsWrapper";
|
||||
import { SingleResponseCardBody } from "@/modules/analysis/components/SingleResponseCard/components/SingleResponseCardBody";
|
||||
import {
|
||||
isSubmissionTimeMoreThan5Minutes,
|
||||
isValidValue,
|
||||
} from "@/modules/analysis/components/SingleResponseCard/util";
|
||||
import { getElementsFromBlocks } from "@/modules/survey/lib/client-utils";
|
||||
import { Button } from "@/modules/ui/components/button";
|
||||
import { DecrementQuotasCheckbox } from "@/modules/ui/components/decrement-quotas-checkbox";
|
||||
import { DeleteDialog } from "@/modules/ui/components/delete-dialog";
|
||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/modules/ui/components/tooltip";
|
||||
|
||||
interface ResponseSurveyCardProps {
|
||||
response: TResponseWithQuotas;
|
||||
surveys: TSurvey[];
|
||||
survey: TSurvey;
|
||||
user: TUser;
|
||||
environmentTags: TTag[];
|
||||
environment: TEnvironment;
|
||||
@@ -22,7 +43,7 @@ interface ResponseSurveyCardProps {
|
||||
|
||||
export const ResponseSurveyCard = ({
|
||||
response,
|
||||
surveys,
|
||||
survey,
|
||||
user,
|
||||
environmentTags,
|
||||
environment,
|
||||
@@ -30,22 +51,209 @@ export const ResponseSurveyCard = ({
|
||||
updateResponse,
|
||||
locale,
|
||||
isReadOnly,
|
||||
}: ResponseSurveyCardProps) => {
|
||||
const survey = surveys.find((s) => s.id === response.surveyId);
|
||||
}: Readonly<ResponseSurveyCardProps>) => {
|
||||
const { t } = useTranslation();
|
||||
const [isExpanded, setIsExpanded] = useState(true);
|
||||
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
|
||||
const [isDeleting, setIsDeleting] = useState(false);
|
||||
|
||||
if (!survey) return null;
|
||||
const hasQuotas = (response?.quotas && response.quotas.length > 0) ?? false;
|
||||
const [decrementQuotas, setDecrementQuotas] = useState(hasQuotas);
|
||||
|
||||
const surveyWithReplacedRecall = useMemo(
|
||||
() => replaceHeadlineRecall(survey, "default"),
|
||||
[survey]
|
||||
);
|
||||
|
||||
const skippedQuestions: string[][] = useMemo(() => {
|
||||
const questions = getElementsFromBlocks(surveyWithReplacedRecall.blocks);
|
||||
|
||||
const flushTemp = (temp: string[], result: string[][], shouldReverse = false) => {
|
||||
if (temp.length > 0) {
|
||||
if (shouldReverse) temp.reverse();
|
||||
result.push([...temp]);
|
||||
temp.length = 0;
|
||||
}
|
||||
};
|
||||
|
||||
const processFinishedResponse = () => {
|
||||
const result: string[][] = [];
|
||||
const temp: string[] = [];
|
||||
for (const question of questions) {
|
||||
if (isValidValue(response.data[question.id])) {
|
||||
flushTemp(temp, result);
|
||||
} else {
|
||||
temp.push(question.id);
|
||||
}
|
||||
}
|
||||
flushTemp(temp, result);
|
||||
return result;
|
||||
};
|
||||
|
||||
const processUnfinishedResponse = () => {
|
||||
const result: string[][] = [];
|
||||
const temp: string[] = [];
|
||||
for (let index = questions.length - 1; index >= 0; index--) {
|
||||
const question = questions[index];
|
||||
const hasNoData = !response.data[question.id];
|
||||
const shouldSkip =
|
||||
hasNoData && (result.length === 0 || !isValidValue(response.data[question.id]));
|
||||
if (shouldSkip) {
|
||||
temp.push(question.id);
|
||||
} else {
|
||||
flushTemp(temp, result, true);
|
||||
}
|
||||
}
|
||||
flushTemp(temp, result);
|
||||
return result;
|
||||
};
|
||||
|
||||
return response.finished ? processFinishedResponse() : processUnfinishedResponse();
|
||||
}, [response.finished, response.data, surveyWithReplacedRecall.blocks]);
|
||||
|
||||
const canResponseBeDeleted = response.finished
|
||||
? true
|
||||
: isSubmissionTimeMoreThan5Minutes(response.updatedAt);
|
||||
|
||||
const handleDeleteResponse = async () => {
|
||||
setIsDeleting(true);
|
||||
try {
|
||||
if (isReadOnly) {
|
||||
throw new Error(t("common.not_authorized"));
|
||||
}
|
||||
const result = await deleteResponseAction({ responseId: response.id, decrementQuotas });
|
||||
if (result?.serverError) {
|
||||
toast.error(getFormattedErrorMessage(result));
|
||||
return;
|
||||
}
|
||||
updateResponseList([response.id]);
|
||||
toast.success(t("environments.surveys.responses.response_deleted_successfully"));
|
||||
setDeleteDialogOpen(false);
|
||||
} catch (error) {
|
||||
if (error instanceof Error) toast.error(error.message);
|
||||
} finally {
|
||||
setIsDeleting(false);
|
||||
}
|
||||
};
|
||||
|
||||
const updateFetchedResponses = async () => {
|
||||
const updatedResponse = await getResponseAction({ responseId: response.id });
|
||||
if (updatedResponse?.data) {
|
||||
updateResponse(response.id, updatedResponse.data as TResponseWithQuotas);
|
||||
}
|
||||
};
|
||||
|
||||
const bodyId = `response-card-body-${response.id}`;
|
||||
const showDeleteButton = !!user && !isReadOnly;
|
||||
|
||||
return (
|
||||
<SingleResponseCard
|
||||
response={response}
|
||||
survey={replaceHeadlineRecall(survey, "default")}
|
||||
user={user}
|
||||
environmentTags={environmentTags}
|
||||
environment={environment}
|
||||
updateResponseList={updateResponseList}
|
||||
updateResponse={updateResponse}
|
||||
isReadOnly={isReadOnly}
|
||||
locale={locale}
|
||||
/>
|
||||
<div className="rounded-xl border border-slate-200 bg-white shadow-sm">
|
||||
<div className="flex items-center justify-between p-4">
|
||||
<div className="flex min-w-0 items-center gap-3">
|
||||
<div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-slate-100">
|
||||
<MessageSquareTextIcon className="h-4 w-4 text-slate-600" />
|
||||
</div>
|
||||
<div className="min-w-0">
|
||||
<p className="text-xs text-slate-500">
|
||||
{t("environments.contacts.survey_response_created")}
|
||||
</p>
|
||||
<Link
|
||||
href={`/environments/${environment.id}/surveys/${survey.id}/summary`}
|
||||
className="block truncate text-sm font-medium text-slate-700 hover:underline">
|
||||
{survey.name}
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex items-center gap-1 text-sm text-slate-500">
|
||||
<time className="px-1" dateTime={response.createdAt.toString()}>
|
||||
{timeSince(response.createdAt.toString(), locale)}
|
||||
</time>
|
||||
{showDeleteButton &&
|
||||
(canResponseBeDeleted ? (
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
onClick={() => setDeleteDialogOpen(true)}
|
||||
aria-label={t("environments.surveys.responses.delete_response")}>
|
||||
<TrashIcon className="h-4 w-4" />
|
||||
</Button>
|
||||
) : (
|
||||
<TooltipProvider>
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
disabled
|
||||
className="text-slate-400"
|
||||
aria-label={t("environments.surveys.responses.delete_response")}>
|
||||
<TrashIcon className="h-4 w-4" />
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent side="left">
|
||||
{t("environments.surveys.responses.this_response_is_in_progress")}
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
</TooltipProvider>
|
||||
))}
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
onClick={() => setIsExpanded((prev) => !prev)}
|
||||
aria-expanded={isExpanded}
|
||||
aria-controls={bodyId}
|
||||
aria-label={
|
||||
isExpanded
|
||||
? t("environments.contacts.collapse_response")
|
||||
: t("environments.contacts.expand_response")
|
||||
}>
|
||||
{isExpanded ? (
|
||||
<ChevronUpIcon className="h-4 w-4 text-slate-400" />
|
||||
) : (
|
||||
<ChevronDownIcon className="h-4 w-4 text-slate-400" />
|
||||
)}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{isExpanded && (
|
||||
<div id={bodyId}>
|
||||
<SingleResponseCardBody
|
||||
survey={surveyWithReplacedRecall}
|
||||
response={response}
|
||||
skippedQuestions={skippedQuestions}
|
||||
locale={locale}
|
||||
/>
|
||||
|
||||
<ResponseTagsWrapper
|
||||
key={response.id}
|
||||
environmentId={environment.id}
|
||||
responseId={response.id}
|
||||
tags={response.tags.map((tag) => ({ tagId: tag.id, tagName: tag.name }))}
|
||||
environmentTags={environmentTags}
|
||||
updateFetchedResponses={updateFetchedResponses}
|
||||
isReadOnly={isReadOnly}
|
||||
response={response}
|
||||
locale={locale}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<DeleteDialog
|
||||
open={deleteDialogOpen}
|
||||
setOpen={setDeleteDialogOpen}
|
||||
deleteWhat={t("common.response")}
|
||||
onDelete={handleDeleteResponse}
|
||||
isDeleting={isDeleting}
|
||||
text={t("environments.surveys.responses.delete_response_confirmation")}>
|
||||
{hasQuotas && (
|
||||
<DecrementQuotasCheckbox
|
||||
title={t("environments.surveys.responses.delete_response_quotas")}
|
||||
checked={decrementQuotas}
|
||||
onCheckedChange={setDecrementQuotas}
|
||||
/>
|
||||
)}
|
||||
</DeleteDialog>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -44,10 +44,12 @@ checksums:
|
||||
errors/file_input/duplicate_files: 198dd29e67beb6abc5b2534ede7d7f68
|
||||
errors/file_input/file_size_exceeded: 072045b042a39fa1df76200f8fa36dd4
|
||||
errors/file_input/file_size_exceeded_alert: d8e482a2ff05e78bbacaed9e9db9b5eb
|
||||
errors/file_input/invalid_file_name: 9f9a632eaf77ef92552f755f43e7b25d
|
||||
errors/file_input/no_valid_file_types_selected: 795acdedcffbcf06e57ea93fc16771ce
|
||||
errors/file_input/only_one_file_can_be_uploaded_at_a_time: 1eda42bd46887f9702049e23fa7cb127
|
||||
errors/file_input/placeholder_text: 15b61e390b6c5501d3e3b9da9f6c7930
|
||||
errors/file_input/upload_failed: 735fdfc1a37ab035121328237ddd6fd0
|
||||
errors/file_input/upload_service_unavailable: cd67a5c3ea1e6ff10636a7eec9f98740
|
||||
errors/file_input/uploading: baef62e2015a34d6747ed6e4192a27b1
|
||||
errors/file_input/you_can_only_upload_a_maximum_of_files: 72fe144f81075e5b06bae53b3a84d4db
|
||||
errors/invalid_device_error/message: 8813dcd0e3e41934af18d7a15f8c83f4
|
||||
|
||||
Reference in New Issue
Block a user