diff --git a/apps/web/locales/de-DE.json b/apps/web/locales/de-DE.json index 618f542f5f..66bcc2d43e 100644 --- a/apps/web/locales/de-DE.json +++ b/apps/web/locales/de-DE.json @@ -1667,6 +1667,7 @@ "add_filter": "Filter hinzufügen", "add_to_dashboard": "Zum Dashboard hinzufügen", "advanced_chart_builder_config_prompt": "Konfiguriere dein Diagramm und klicke auf \"Abfrage ausführen\", um eine Vorschau zu sehen", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "KI ist auf dieser Instanz nicht konfiguriert. Kontaktiere deinen Administrator.", "ai_not_available": "KI-Datenanalyse ist nicht verfügbar.", "ai_not_enabled": "KI-Datenanalyse ist für diese Organisation deaktiviert. Aktiviere sie in den Organisationseinstellungen.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "z.B. Wie viele Nutzer haben sich letzte Woche angemeldet?", "ai_query_section_description": "Beschreibe, was du sehen möchtest, und lass die KI das Diagramm erstellen.", "ai_query_section_title": "Frag deine Daten", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Bereits im Dashboard", "and_filter_logic": "UND", "apply_changes": "Änderungen übernehmen", @@ -2591,16 +2593,19 @@ "nav_label": "Feedback-Verzeichnisse", "no_access": "Du hast keine Berechtigung, Feedback-Verzeichnisse zu verwalten.", "no_connectors": "Noch keine Feedback-Quellen mit diesem Verzeichnis verknüpft.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Wenn du diese Feedback-Quellen pausierst, werden keine neuen Einträge mehr hinzugefügt.", "pause_connectors_confirmation_title": "Verknüpfte Feedback-Quellen pausieren?", "select_workspaces_placeholder": "Workspaces auswählen...", "show_archived": "Archivierte anzeigen", "title": "Feedback-Verzeichnisse", "unarchive": "Aus Archiv wiederherstellen", - "unarchive_workspace_conflict": "Dieses Verzeichnis kann nicht wiederhergestellt werden, weil ein oder mehrere zugewiesene Workspaces archiviert sind.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Organisiere Feedback-Datensätze in Verzeichnissen und leite Daten zum richtigen Workspace weiter. Verfügbar in den Pro- und Scale-Plänen.", "upgrade_prompt_title": "Upgrade durchführen, um Feedback-Datensatz-Verzeichnisse freizuschalten", "workspace_access": "Workspace-Zugriff", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Bereits verknüpfte Workspaces", "workspaces_being_added": "Workspaces, denen Zugriff gewährt wird" }, @@ -3675,6 +3680,8 @@ "add_source": "Quelle hinzufügen", "allowed_values": "Zulässige Werte: {values}", "api_ingestion": "API-Erfassung", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Sende Feedback-Datensätze über die Management-API.", "auto_generated": "Automatisch generiert", "change_file": "Datei ändern", @@ -3865,7 +3872,8 @@ "value_boolean": "Wert (Boolescher Wert)", "value_date": "Wert (Datum)", "value_number": "Wert (Anzahl)", - "value_text": "Wert (Text)" + "value_text": "Wert (Text)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/en-US.json b/apps/web/locales/en-US.json index 9e03ff7a21..d7ee2b66b1 100644 --- a/apps/web/locales/en-US.json +++ b/apps/web/locales/en-US.json @@ -1667,6 +1667,7 @@ "add_filter": "Add filter", "add_to_dashboard": "Add to Dashboard", "advanced_chart_builder_config_prompt": "Configure your chart and click \"Run Query\" to preview", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "AI is not configured on this instance. Contact your administrator.", "ai_not_available": "AI data analysis is not available.", "ai_not_enabled": "AI data analysis is disabled for this organization. Enable it in organization settings.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "e.g. How many users signed up last week?", "ai_query_section_description": "Describe what you want to see and let AI build the chart.", "ai_query_section_title": "Ask your data", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Already on dashboard", "and_filter_logic": "AND", "apply_changes": "Apply Changes", @@ -2591,16 +2593,19 @@ "nav_label": "Feedback Directories", "no_access": "You do not have permission to manage feedback directories.", "no_connectors": "No feedback sources linked to this directory yet.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Pausing these feedback sources will stop new records from being added.", "pause_connectors_confirmation_title": "Pause linked feedback sources?", "select_workspaces_placeholder": "Select workspaces...", "show_archived": "Show archived", "title": "Feedback Directories", "unarchive": "Unarchive", - "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces are archived.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Organize feedback records into directories and route data to the right workspace. Available on the Pro and Scale plans.", "upgrade_prompt_title": "Upgrade to unlock Feedback Directories", "workspace_access": "Workspace access", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Already linked workspaces", "workspaces_being_added": "Workspaces being granted access" }, @@ -3675,6 +3680,8 @@ "add_source": "Add source", "allowed_values": "Allowed values: {values}", "api_ingestion": "API ingestion", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Send feedback records using the Management API.", "auto_generated": "Auto-generated", "change_file": "Change file", @@ -3865,7 +3872,8 @@ "value_boolean": "Value (Boolean)", "value_date": "Value (Date)", "value_number": "Value (Number)", - "value_text": "Value (Text)" + "value_text": "Value (Text)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/es-ES.json b/apps/web/locales/es-ES.json index 6b3a906865..4e1d754f14 100644 --- a/apps/web/locales/es-ES.json +++ b/apps/web/locales/es-ES.json @@ -1667,6 +1667,7 @@ "add_filter": "Añadir filtro", "add_to_dashboard": "Añadir al panel de control", "advanced_chart_builder_config_prompt": "Configura tu gráfico y haz clic en \"Ejecutar consulta\" para previsualizar", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "La IA no está configurada en esta instancia. Contacta con tu administrador.", "ai_not_available": "El análisis de datos con IA no está disponible.", "ai_not_enabled": "El análisis de datos con IA está desactivado para esta organización. Actívalo en la configuración de la organización.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "p. ej. ¿Cuántos usuarios se registraron la semana pasada?", "ai_query_section_description": "Describe lo que quieres ver y deja que la IA construya el gráfico.", "ai_query_section_title": "Pregunta a tus datos", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Ya está en el panel", "and_filter_logic": "Y", "apply_changes": "Aplicar cambios", @@ -2591,16 +2593,19 @@ "nav_label": "Directorios de Feedback", "no_access": "No tienes permiso para gestionar directorios de feedback.", "no_connectors": "Aún no hay fuentes de comentarios vinculadas a este directorio.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Pausar estas fuentes de comentarios detendrá la adición de nuevos registros.", "pause_connectors_confirmation_title": "¿Pausar las fuentes de comentarios vinculadas?", "select_workspaces_placeholder": "Selecciona espacios de trabajo...", "show_archived": "Mostrar archivados", "title": "Directorios de feedback", "unarchive": "Desarchivar", - "unarchive_workspace_conflict": "No se puede desarchivar este directorio porque uno o más espacios de trabajo asignados están archivados.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Organiza los registros de feedback en directorios y dirige los datos al espacio de trabajo adecuado. Disponible en los planes Pro y Scale.", "upgrade_prompt_title": "Mejora tu plan para desbloquear los Directorios de Registros de Feedback", "workspace_access": "Acceso al espacio de trabajo", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Espacios de trabajo ya vinculados", "workspaces_being_added": "Espacios de trabajo a los que se concede acceso" }, @@ -3675,6 +3680,8 @@ "add_source": "Añadir fuente", "allowed_values": "Valores permitidos: {values}", "api_ingestion": "Ingesta de API", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Envía registros de feedback mediante la API de gestión.", "auto_generated": "Generado automáticamente", "change_file": "Cambiar archivo", @@ -3865,7 +3872,8 @@ "value_boolean": "Valor (booleano)", "value_date": "Valor (Fecha)", "value_number": "Valor (Número)", - "value_text": "Valor (Texto)" + "value_text": "Valor (Texto)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/fr-FR.json b/apps/web/locales/fr-FR.json index 9c4a3ba024..bf5271b1eb 100644 --- a/apps/web/locales/fr-FR.json +++ b/apps/web/locales/fr-FR.json @@ -1667,6 +1667,7 @@ "add_filter": "Ajouter un filtre", "add_to_dashboard": "Ajouter au tableau de bord", "advanced_chart_builder_config_prompt": "Configurez votre graphique et cliquez sur « Exécuter la requête » pour prévisualiser", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "L'IA n'est pas configurée sur cette instance. Contacte ton administrateur.", "ai_not_available": "L'analyse de données par IA n'est pas disponible.", "ai_not_enabled": "L'analyse de données par IA est désactivée pour cette organisation. Active-la dans les paramètres de l'organisation.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "ex. Combien d'utilisateurs se sont inscrits la semaine dernière ?", "ai_query_section_description": "Décrivez ce que vous souhaitez voir et laissez l'IA créer le graphique.", "ai_query_section_title": "Interrogez vos données", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Déjà sur le tableau de bord", "and_filter_logic": "ET", "apply_changes": "Appliquer les modifications", @@ -2591,16 +2593,19 @@ "nav_label": "Répertoires de feedback", "no_access": "Tu n'as pas la permission de gérer les répertoires de retours.", "no_connectors": "Aucune source de retours liée à ce répertoire pour le moment.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Mettre en pause ces sources de retours empêchera l'ajout de nouveaux enregistrements.", "pause_connectors_confirmation_title": "Mettre en pause les sources de retours liées ?", "select_workspaces_placeholder": "Sélectionner des espaces de travail...", "show_archived": "Afficher les éléments archivés", "title": "Répertoires de retours", "unarchive": "Désarchiver", - "unarchive_workspace_conflict": "Impossible de désarchiver ce répertoire, car un ou plusieurs espaces de travail attribués sont archivés.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Organisez les enregistrements de feedback dans des répertoires et dirigez les données vers le bon espace de travail. Disponible avec les forfaits Pro et Scale.", "upgrade_prompt_title": "Passez à un forfait supérieur pour débloquer les Répertoires d'enregistrements de feedback", "workspace_access": "Accès à l’espace de travail", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Espaces de travail déjà liés", "workspaces_being_added": "Espaces de travail en cours d'ajout" }, @@ -3675,6 +3680,8 @@ "add_source": "Ajouter une source", "allowed_values": "Valeurs autorisées : {values}", "api_ingestion": "Ingestion par API", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Envoyer des enregistrements de feedback via l'API de gestion.", "auto_generated": "Généré automatiquement", "change_file": "Changer de fichier", @@ -3865,7 +3872,8 @@ "value_boolean": "Valeur (booléenne)", "value_date": "Valeur (Date)", "value_number": "Valeur (Nombre)", - "value_text": "Valeur (texte)" + "value_text": "Valeur (texte)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/hu-HU.json b/apps/web/locales/hu-HU.json index 9fb3d9d252..8a86196848 100644 --- a/apps/web/locales/hu-HU.json +++ b/apps/web/locales/hu-HU.json @@ -1667,6 +1667,7 @@ "add_filter": "Szűrő hozzáadása", "add_to_dashboard": "Hozzáadás a vezérlőpulthoz", "advanced_chart_builder_config_prompt": "Állítsd be a diagramot, és kattints a \"Lekérdezés futtatása\" gombra az előnézethez", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "Az AI nincs konfigurálva ezen a példányon. Kérjük, lépjen kapcsolatba a rendszergazdával.", "ai_not_available": "Az AI adatelemzés nem elérhető.", "ai_not_enabled": "Az AI adatelemzés le van tiltva ezen szervezet számára. Kérjük, engedélyezze a szervezeti beállításokban.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "pl. Hány felhasználó regisztrált a múlt héten?", "ai_query_section_description": "Írd le, mit szeretnél látni, és hagyd, hogy az AI elkészítse a diagramot.", "ai_query_section_title": "Kérdezd meg az adataidat", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Már a vezérlőpulton van", "and_filter_logic": "ÉS", "apply_changes": "Módosítások alkalmazása", @@ -2591,16 +2593,19 @@ "nav_label": "Visszajelzési könyvtárak", "no_access": "Önnek nincs jogosultsága a visszajelzési könyvtárak kezeléséhez.", "no_connectors": "Még nincsenek visszajelzési források kapcsolva ehhez a könyvtárhoz.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Ezen visszajelzési források szüneteltetése megállítja az új rekordok hozzáadását.", "pause_connectors_confirmation_title": "Szünetelteti a kapcsolódó visszajelzési forrásokat?", "select_workspaces_placeholder": "Munkaterületek kiválasztása...", "show_archived": "Archivált elemek megjelenítése", "title": "Visszajelzési könyvtárak", "unarchive": "Archiválás visszavonása", - "unarchive_workspace_conflict": "A könyvtár nem állítható vissza, mert egy vagy több hozzárendelt munkaterület archiválva van.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Szervezze a visszajelzési rekordokat könyvtárakba, és irányítsa az adatokat a megfelelő munkaterületre. A Pro és Scale csomagokban érhető el.", "upgrade_prompt_title": "Frissítsen a csomagon, hogy feloldja a Visszajelzési Rekord Könyvtárakat", "workspace_access": "Munkaterület-hozzáférés", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Már kapcsolt munkaterületek", "workspaces_being_added": "Hozzáférést kapó munkaterületek" }, @@ -3675,6 +3680,8 @@ "add_source": "Forrás hozzáadása", "allowed_values": "Engedélyezett értékek: {values}", "api_ingestion": "API betöltés", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Visszajelzési rekordok küldése a Management API használatával.", "auto_generated": "Automatikusan generált", "change_file": "Fájl módosítása", @@ -3865,7 +3872,8 @@ "value_boolean": "Érték (logikai)", "value_date": "Érték (dátum)", "value_number": "Érték (szám)", - "value_text": "Érték (szöveg)" + "value_text": "Érték (szöveg)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/ja-JP.json b/apps/web/locales/ja-JP.json index 025d253c03..9b3e8e9068 100644 --- a/apps/web/locales/ja-JP.json +++ b/apps/web/locales/ja-JP.json @@ -1667,6 +1667,7 @@ "add_filter": "フィルターを追加", "add_to_dashboard": "ダッシュボードに追加", "advanced_chart_builder_config_prompt": "チャートを設定して「クエリを実行」をクリックしてプレビューを表示", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "このインスタンスではAIが設定されていません。管理者にお問い合わせください。", "ai_not_available": "AIデータ分析は利用できません。", "ai_not_enabled": "この組織ではAIデータ分析が無効になっています。組織設定で有効にしてください。", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "例: 先週何人のユーザーが登録しましたか?", "ai_query_section_description": "表示したい内容を説明すると、AIがチャートを作成します。", "ai_query_section_title": "データに質問する", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "すでにダッシュボードに追加済み", "and_filter_logic": "AND", "apply_changes": "変更を適用", @@ -2591,16 +2593,19 @@ "nav_label": "フィードバックディレクトリ", "no_access": "フィードバックディレクトリを管理する権限がありません。", "no_connectors": "このディレクトリにリンクされたフィードバックソースがまだありません。", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "これらのフィードバックソースを一時停止すると、新しいレコードの追加が停止されます。", "pause_connectors_confirmation_title": "リンクされたフィードバックソースを一時停止しますか?", "select_workspaces_placeholder": "ワークスペースを選択...", "show_archived": "アーカイブ済みを表示", "title": "フィードバックディレクトリ", "unarchive": "アーカイブ解除", - "unarchive_workspace_conflict": "割り当てられているワークスペースの1つ以上がアーカイブされているため、このディレクトリをアーカイブ解除できません。", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "フィードバックレコードをディレクトリで整理し、適切なワークスペースにデータを振り分けられます。ProプランおよびScaleプランでご利用いただけます。", "upgrade_prompt_title": "アップグレードしてフィードバックレコードディレクトリを利用", "workspace_access": "ワークスペースアクセス", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "既にリンクされているワークスペース", "workspaces_being_added": "アクセス権が付与されるワークスペース" }, @@ -3675,6 +3680,8 @@ "add_source": "ソースを追加", "allowed_values": "許可される値: {values}", "api_ingestion": "API取り込み", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "管理APIを使用してフィードバックレコードを送信します。", "auto_generated": "自動生成", "change_file": "ファイルを変更", @@ -3865,7 +3872,8 @@ "value_boolean": "値 (ブール値)", "value_date": "値 (日付)", "value_number": "値(数値)", - "value_text": "値 (テキスト)" + "value_text": "値 (テキスト)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/nl-NL.json b/apps/web/locales/nl-NL.json index 8427e2aa51..4e5695f735 100644 --- a/apps/web/locales/nl-NL.json +++ b/apps/web/locales/nl-NL.json @@ -1667,6 +1667,7 @@ "add_filter": "Filter toevoegen", "add_to_dashboard": "Toevoegen aan dashboard", "advanced_chart_builder_config_prompt": "Configureer je grafiek en klik op \"Query uitvoeren\" om een voorbeeld te zien", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "AI is niet geconfigureerd op deze instantie. Neem contact op met je beheerder.", "ai_not_available": "AI-data-analyse is niet beschikbaar.", "ai_not_enabled": "AI-data-analyse is uitgeschakeld voor deze organisatie. Schakel het in bij de organisatie-instellingen.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "bijv. Hoeveel gebruikers hebben zich vorige week aangemeld?", "ai_query_section_description": "Beschrijf wat je wilt zien en laat AI de grafiek bouwen.", "ai_query_section_title": "Vraag het aan je data", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Al op dashboard", "and_filter_logic": "EN", "apply_changes": "Wijzigingen toepassen", @@ -2591,16 +2593,19 @@ "nav_label": "Feedbackmappen", "no_access": "Je hebt geen toestemming om feedbackmappen te beheren.", "no_connectors": "Nog geen feedbackbronnen gekoppeld aan deze directory.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Het pauzeren van deze feedbackbronnen stopt het toevoegen van nieuwe gegevens.", "pause_connectors_confirmation_title": "Gekoppelde feedbackbronnen pauzeren?", "select_workspaces_placeholder": "Selecteer werkruimtes...", "show_archived": "Gearchiveerde weergeven", "title": "Feedbackmappen", "unarchive": "Dearchiveren", - "unarchive_workspace_conflict": "Deze map kan niet worden gedearchiveerd omdat een of meer toegewezen workspaces zijn gearchiveerd.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Organiseer feedbackrecords in mappen en routeer gegevens naar de juiste workspace. Beschikbaar op de Pro- en Scale-abonnementen.", "upgrade_prompt_title": "Upgrade om Feedbackrecord Mappen te ontgrendelen", "workspace_access": "Workspace-toegang", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Reeds gekoppelde werkruimtes", "workspaces_being_added": "Werkruimtes die toegang krijgen" }, @@ -3675,6 +3680,8 @@ "add_source": "Bron toevoegen", "allowed_values": "Toegestane waarden: {values}", "api_ingestion": "API-inname", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Verstuur feedbackrecords via de Management API.", "auto_generated": "Automatisch gegenereerd", "change_file": "Bestand wijzigen", @@ -3865,7 +3872,8 @@ "value_boolean": "Waarde (Booleaans)", "value_date": "Waarde (datum)", "value_number": "Waarde (getal)", - "value_text": "Waarde (tekst)" + "value_text": "Waarde (tekst)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/pt-BR.json b/apps/web/locales/pt-BR.json index 9d9d91fa18..4b42e382ac 100644 --- a/apps/web/locales/pt-BR.json +++ b/apps/web/locales/pt-BR.json @@ -1667,6 +1667,7 @@ "add_filter": "Adicionar filtro", "add_to_dashboard": "Adicionar ao painel", "advanced_chart_builder_config_prompt": "Configure seu gráfico e clique em \"Executar consulta\" para visualizar", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "A IA não está configurada nesta instância. Entre em contato com seu administrador.", "ai_not_available": "A análise de dados com IA não está disponível.", "ai_not_enabled": "A análise de dados com IA está desabilitada para esta organização. Habilite nas configurações da organização.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "ex: Quantos usuários se cadastraram na semana passada?", "ai_query_section_description": "Descreva o que você quer ver e deixe a IA construir o gráfico.", "ai_query_section_title": "Pergunte aos seus dados", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Já está no painel", "and_filter_logic": "E", "apply_changes": "Aplicar alterações", @@ -2591,16 +2593,19 @@ "nav_label": "Diretórios de Feedback", "no_access": "Você não tem permissão para gerenciar diretórios de feedback.", "no_connectors": "Nenhuma fonte de feedback vinculada a este diretório ainda.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Pausar essas fontes de feedback impedirá que novos registros sejam adicionados.", "pause_connectors_confirmation_title": "Pausar fontes de feedback vinculadas?", "select_workspaces_placeholder": "Selecionar espaços de trabalho...", "show_archived": "Mostrar arquivados", "title": "Diretórios de Feedback", "unarchive": "Desarquivar", - "unarchive_workspace_conflict": "Não é possível desarquivar este diretório porque um ou mais workspaces atribuídos estão arquivados.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Organize registros de feedback em diretórios e direcione dados para o workspace certo. Disponível nos planos Pro e Scale.", "upgrade_prompt_title": "Faça upgrade para desbloquear Diretórios de Registros de Feedback", "workspace_access": "Acesso ao workspace", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Workspaces já vinculados", "workspaces_being_added": "Workspaces recebendo acesso" }, @@ -3675,6 +3680,8 @@ "add_source": "Adicionar fonte", "allowed_values": "Valores permitidos: {values}", "api_ingestion": "Ingestão de API", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Envie registros de feedback usando a API de Gerenciamento.", "auto_generated": "Gerado automaticamente", "change_file": "Alterar arquivo", @@ -3865,7 +3872,8 @@ "value_boolean": "Valor (Booleano)", "value_date": "Valor (Data)", "value_number": "Valor (Número)", - "value_text": "Valor (Texto)" + "value_text": "Valor (Texto)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/pt-PT.json b/apps/web/locales/pt-PT.json index a9cd2bb5df..178b243577 100644 --- a/apps/web/locales/pt-PT.json +++ b/apps/web/locales/pt-PT.json @@ -1667,6 +1667,7 @@ "add_filter": "Adicionar filtro", "add_to_dashboard": "Adicionar ao painel", "advanced_chart_builder_config_prompt": "Configura o teu gráfico e clica em \"Executar consulta\" para pré-visualizar", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "A IA não está configurada nesta instância. Contacta o teu administrador.", "ai_not_available": "A análise de dados por IA não está disponível.", "ai_not_enabled": "A análise de dados por IA está desativada para esta organização. Ativa-a nas definições da organização.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "ex: Quantos utilizadores se registaram na semana passada?", "ai_query_section_description": "Descreve o que queres ver e deixa a IA construir o gráfico.", "ai_query_section_title": "Pergunta aos teus dados", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Já está no painel", "and_filter_logic": "E", "apply_changes": "Aplicar alterações", @@ -2591,16 +2593,19 @@ "nav_label": "Diretórios de Feedback", "no_access": "Não tens permissão para gerir diretórios de feedback.", "no_connectors": "Ainda sem fontes de feedback associadas a este diretório.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Pausar estas fontes de feedback irá impedir a adição de novos registos.", "pause_connectors_confirmation_title": "Pausar fontes de feedback associadas?", "select_workspaces_placeholder": "Selecionar espaços de trabalho...", "show_archived": "Mostrar arquivados", "title": "Diretórios de Feedback", "unarchive": "Desarquivar", - "unarchive_workspace_conflict": "Não é possível desarquivar este diretório porque um ou mais workspaces atribuídos estão arquivados.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Organiza os registos de feedback em diretórios e encaminha os dados para o workspace certo. Disponível nos planos Pro e Scale.", "upgrade_prompt_title": "Faz upgrade para desbloquear Diretórios de Registos de Feedback", "workspace_access": "Acesso ao workspace", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Workspaces já vinculados", "workspaces_being_added": "Workspaces a receber acesso" }, @@ -3675,6 +3680,8 @@ "add_source": "Adicionar fonte", "allowed_values": "Valores permitidos: {values}", "api_ingestion": "Ingestão de API", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Envia registos de feedback através da API de gestão.", "auto_generated": "Gerado automaticamente", "change_file": "Alterar ficheiro", @@ -3865,7 +3872,8 @@ "value_boolean": "Valor (Booleano)", "value_date": "Valor (Data)", "value_number": "Valor (Número)", - "value_text": "Valor (Texto)" + "value_text": "Valor (Texto)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/ro-RO.json b/apps/web/locales/ro-RO.json index 6c14f531bf..9138e78985 100644 --- a/apps/web/locales/ro-RO.json +++ b/apps/web/locales/ro-RO.json @@ -1667,6 +1667,7 @@ "add_filter": "Adaugă filtru", "add_to_dashboard": "Adaugă la Tablou de Bord", "advanced_chart_builder_config_prompt": "Configurează graficul și apasă pe \"Rulează interogarea\" pentru previzualizare", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "AI nu este configurat pe această instanță. Contactează administratorul.", "ai_not_available": "Analiza datelor cu AI nu este disponibilă.", "ai_not_enabled": "Analiza datelor cu AI este dezactivată pentru această organizație. Activează-o în setările organizației.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "ex: Câți utilizatori s-au înscris săptămâna trecută?", "ai_query_section_description": "Descrie ce vrei să vezi și lasă AI-ul să construiască graficul.", "ai_query_section_title": "Întreabă-ți datele", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Deja pe tabloul de bord", "and_filter_logic": "ȘI", "apply_changes": "Aplică modificările", @@ -2591,16 +2593,19 @@ "nav_label": "Directoare de feedback", "no_access": "Nu ai permisiunea de a gestiona directoarele de feedback.", "no_connectors": "Nicio sursă de feedback conectată la acest director încă.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Pauza acestor surse de feedback va opri adăugarea de noi înregistrări.", "pause_connectors_confirmation_title": "Pui pe pauză sursele de feedback conectate?", "select_workspaces_placeholder": "Selectează spații de lucru...", "show_archived": "Afișează arhivate", "title": "Directoare de Feedback", "unarchive": "Dezarhivează", - "unarchive_workspace_conflict": "Acest director nu poate fi dezarhivat deoarece unul sau mai multe spații de lucru alocate sunt arhivate.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Organizează înregistrările de feedback în directoare și direcționează datele către workspace-ul potrivit. Disponibile în planurile Pro și Scale.", "upgrade_prompt_title": "Actualizează pentru a debloca Directoarele pentru Înregistrări de Feedback", "workspace_access": "Acces la spațiul de lucru", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Spații de lucru deja conectate", "workspaces_being_added": "Spații de lucru cărora li se acordă acces" }, @@ -3675,6 +3680,8 @@ "add_source": "Adaugă sursă", "allowed_values": "Valori permise: {values}", "api_ingestion": "Ingestie API", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Trimite înregistrări de feedback folosind API-ul de management.", "auto_generated": "Generat automat", "change_file": "Schimbă fișierul", @@ -3865,7 +3872,8 @@ "value_boolean": "Valoare (booleană)", "value_date": "Valoare (data)", "value_number": "Valoare (număr)", - "value_text": "Valoare (Text)" + "value_text": "Valoare (Text)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/ru-RU.json b/apps/web/locales/ru-RU.json index eeb2287948..ee1c08c28b 100644 --- a/apps/web/locales/ru-RU.json +++ b/apps/web/locales/ru-RU.json @@ -1667,6 +1667,7 @@ "add_filter": "Добавить фильтр", "add_to_dashboard": "Добавить на панель", "advanced_chart_builder_config_prompt": "Настрой график и нажми «Выполнить запрос», чтобы посмотреть предварительный просмотр", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "ИИ не настроен на этом экземпляре. Свяжитесь с администратором.", "ai_not_available": "Анализ данных с помощью ИИ недоступен.", "ai_not_enabled": "Анализ данных с помощью ИИ отключён для этой организации. Включите его в настройках организации.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "например: Сколько пользователей зарегистрировались на прошлой неделе?", "ai_query_section_description": "Опиши, что хочешь увидеть, и AI построит график.", "ai_query_section_title": "Спроси свои данные", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Уже на дашборде", "and_filter_logic": "И", "apply_changes": "Применить изменения", @@ -2591,16 +2593,19 @@ "nav_label": "Каталоги отзывов", "no_access": "У тебя нет прав для управления директориями обратной связи.", "no_connectors": "К этому каталогу пока не привязаны источники отзывов.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Приостановка этих источников отзывов остановит добавление новых записей.", "pause_connectors_confirmation_title": "Приостановить связанные источники отзывов?", "select_workspaces_placeholder": "Выберите рабочие области...", "show_archived": "Показать архивные", "title": "Директории обратной связи", "unarchive": "Разархивировать", - "unarchive_workspace_conflict": "Невозможно разархивировать этот каталог, потому что один или несколько назначенных рабочих пространств архивированы.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Организуй записи обратной связи в директории и направляй данные в нужное рабочее пространство. Доступно в тарифах Pro и Scale.", "upgrade_prompt_title": "Обнови тариф, чтобы получить доступ к директориям записей обратной связи", "workspace_access": "Доступ к рабочему пространству", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Уже связанные рабочие пространства", "workspaces_being_added": "Рабочие пространства, которым предоставляется доступ" }, @@ -3675,6 +3680,8 @@ "add_source": "Добавить источник", "allowed_values": "Допустимые значения: {values}", "api_ingestion": "Импорт через API", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Отправляйте записи обратной связи через Management API.", "auto_generated": "Автоматически генерируется", "change_file": "Изменить файл", @@ -3865,7 +3872,8 @@ "value_boolean": "Значение (логическое)", "value_date": "Значение (Дата)", "value_number": "Значение (число)", - "value_text": "Значение (текст)" + "value_text": "Значение (текст)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/sv-SE.json b/apps/web/locales/sv-SE.json index cc447a9f22..e3d2042fe1 100644 --- a/apps/web/locales/sv-SE.json +++ b/apps/web/locales/sv-SE.json @@ -1667,6 +1667,7 @@ "add_filter": "Lägg till filter", "add_to_dashboard": "Lägg till på instrumentpanelen", "advanced_chart_builder_config_prompt": "Konfigurera ditt diagram och klicka på \"Kör fråga\" för att förhandsgranska", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "AI är inte konfigurerad på denna instans. Kontakta din administratör.", "ai_not_available": "AI-dataanalys är inte tillgänglig.", "ai_not_enabled": "AI-dataanalys är inaktiverad för denna organisation. Aktivera det i organisationsinställningarna.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "t.ex. Hur många användare registrerade sig förra veckan?", "ai_query_section_description": "Beskriv vad du vill se så bygger AI diagrammet åt dig.", "ai_query_section_title": "Fråga din data", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Redan på instrumentpanelen", "and_filter_logic": "OCH", "apply_changes": "Verkställ ändringar", @@ -2591,16 +2593,19 @@ "nav_label": "Feedbackkataloger", "no_access": "Du har inte behörighet att hantera feedback-kataloger.", "no_connectors": "Inga feedbackkällor länkade till den här katalogen ännu.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Att pausa dessa feedbackkällor kommer att stoppa nya poster från att läggas till.", "pause_connectors_confirmation_title": "Pausa länkade feedbackkällor?", "select_workspaces_placeholder": "Välj arbetsytor...", "show_archived": "Visa arkiverade", "title": "Feedback-kataloger", "unarchive": "Avarkivera", - "unarchive_workspace_conflict": "Den här katalogen kan inte avarkiveras eftersom en eller flera tilldelade arbetsytor är arkiverade.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Organisera feedbackposter i kataloger och dirigera data till rätt arbetsyta. Tillgängligt på Pro- och Scale-planerna.", "upgrade_prompt_title": "Uppgradera för att låsa upp Feedbackpostkataloger", "workspace_access": "Arbetsyteåtkomst", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Redan länkade arbetsytor", "workspaces_being_added": "Arbetsytor som beviljas åtkomst" }, @@ -3675,6 +3680,8 @@ "add_source": "Lägg till källa", "allowed_values": "Tillåtna värden: {values}", "api_ingestion": "API ingestion", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Send feedback records using the Management API.", "auto_generated": "Automatiskt genererad", "change_file": "Byt fil", @@ -3865,7 +3872,8 @@ "value_boolean": "Värde (booleskt)", "value_date": "Värde (datum)", "value_number": "Värde (antal)", - "value_text": "Värde (text)" + "value_text": "Värde (text)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/tr-TR.json b/apps/web/locales/tr-TR.json index 0f7eaf0170..650235e568 100644 --- a/apps/web/locales/tr-TR.json +++ b/apps/web/locales/tr-TR.json @@ -1667,6 +1667,7 @@ "add_filter": "Filtre ekle", "add_to_dashboard": "Panoya Ekle", "advanced_chart_builder_config_prompt": "Grafiğini yapılandır ve önizleme için \"Sorguyu Çalıştır\"a tıkla", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "Bu örnekte AI yapılandırılmamış. Yöneticinle iletişime geç.", "ai_not_available": "AI veri analizi mevcut değil.", "ai_not_enabled": "Bu organizasyon için AI veri analizi devre dışı. Organizasyon ayarlarından etkinleştir.", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "örn. Geçen hafta kaç kullanıcı kaydoldu?", "ai_query_section_description": "Ne görmek istediğini anlat, AI grafiği oluştursun.", "ai_query_section_title": "Verilerine sor", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "Zaten panoda", "and_filter_logic": "VE", "apply_changes": "Değişiklikleri Uygula", @@ -2591,16 +2593,19 @@ "nav_label": "Geri Bildirim Dizinleri", "no_access": "Geri bildirim dizinlerini yönetme yetkin yok.", "no_connectors": "Bu dizine henüz bağlı geri bildirim kaynağı yok.", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "Bu geri bildirim kaynaklarını duraklatmak, yeni kayıtların eklenmesini durdurur.", "pause_connectors_confirmation_title": "Bağlı geri bildirim kaynakları duraklatılsın mı?", "select_workspaces_placeholder": "Çalışma alanlarını seç...", "show_archived": "Arşivlenmişleri göster", "title": "Geri Bildirim Dizinleri", "unarchive": "Arşivden çıkar", - "unarchive_workspace_conflict": "Atanmış çalışma alanlarından biri veya daha fazlası arşivlendiği için bu dizin arşivden çıkarılamaz.", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "Geri bildirim kayıtlarını dizinler halinde düzenleyin ve verileri doğru çalışma alanına yönlendirin. Pro ve Scale planlarında kullanılabilir.", "upgrade_prompt_title": "Geri Bildirim Kayıt Dizinlerinin Kilidini Açmak İçin Yükseltin", "workspace_access": "Çalışma alanı erişimi", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "Zaten bağlı çalışma alanları", "workspaces_being_added": "Erişim verilen çalışma alanları" }, @@ -3675,6 +3680,8 @@ "add_source": "Kaynak ekle", "allowed_values": "İzin verilen değerler: {values}", "api_ingestion": "API ingestion", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Send feedback records using the Management API.", "auto_generated": "Otomatik olarak oluşturuldu", "change_file": "Dosyayı değiştir", @@ -3865,7 +3872,8 @@ "value_boolean": "Değer (Boolean)", "value_date": "Değer (Tarih)", "value_number": "Değer (Sayı)", - "value_text": "Değer (Metin)" + "value_text": "Değer (Metin)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/locales/zh-Hans-CN.json b/apps/web/locales/zh-Hans-CN.json index 154c4d0811..61ca98379c 100644 --- a/apps/web/locales/zh-Hans-CN.json +++ b/apps/web/locales/zh-Hans-CN.json @@ -1667,6 +1667,7 @@ "add_filter": "添加过滤器", "add_to_dashboard": "添加到 Dashboard", "advanced_chart_builder_config_prompt": "配置你的图表,然后点击“运行查询”预览", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "此实例未配置 AI。请联系您的管理员。", "ai_not_available": "AI 数据分析不可用。", "ai_not_enabled": "此组织已禁用 AI 数据分析。请在组织设置中启用。", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "例如:上周有多少用户注册?", "ai_query_section_description": "描述你想要看到的内容,让 AI 帮你生成图表。", "ai_query_section_title": "向你的数据提问", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "已在仪表板上", "and_filter_logic": "且", "apply_changes": "应用更改", @@ -2591,16 +2593,19 @@ "nav_label": "反馈目录", "no_access": "你没有管理反馈目录的权限。", "no_connectors": "暂未关联反馈来源到此目录。", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "暂停这些反馈来源后,将不会有新记录添加进来。", "pause_connectors_confirmation_title": "暂停关联反馈来源?", "select_workspaces_placeholder": "选择工作区...", "show_archived": "显示已归档", "title": "反馈目录", "unarchive": "取消归档", - "unarchive_workspace_conflict": "无法取消归档该目录,因为一个或多个已分配工作区已归档。", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "将反馈记录整理到目录中,并将数据路由到正确的工作空间。专业版和规模版方案可用。", "upgrade_prompt_title": "升级以解锁反馈记录目录", "workspace_access": "工作区访问权限", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "已关联的工作区", "workspaces_being_added": "将被授权访问的工作区" }, @@ -3675,6 +3680,8 @@ "add_source": "添加来源", "allowed_values": "允许的值:{values}", "api_ingestion": "API ingestion", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Send feedback records using the Management API.", "auto_generated": "自动生成", "change_file": "更换文件", @@ -3865,7 +3872,8 @@ "value_boolean": "值(布尔值)", "value_date": "值(日期)", "value_number": "值(数量)", - "value_text": "值(文本)" + "value_text": "值(文本)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "客户努力评分", diff --git a/apps/web/locales/zh-Hant-TW.json b/apps/web/locales/zh-Hant-TW.json index 04792ec761..0dafe70e62 100644 --- a/apps/web/locales/zh-Hant-TW.json +++ b/apps/web/locales/zh-Hant-TW.json @@ -1667,6 +1667,7 @@ "add_filter": "新增篩選器", "add_to_dashboard": "新增到儀表板", "advanced_chart_builder_config_prompt": "設定你的圖表,然後點擊「執行查詢」預覽", + "ai_enable_in_settings": "Enable it in organization settings.", "ai_instance_not_configured": "此執行個體未設定 AI。請聯絡您的管理員。", "ai_not_available": "AI 資料分析無法使用。", "ai_not_enabled": "此組織已停用 AI 資料分析。請在組織設定中啟用。", @@ -1674,6 +1675,7 @@ "ai_query_placeholder": "例如:上週有多少用戶註冊?", "ai_query_section_description": "描述你想看到的內容,讓 AI 幫你建立圖表。", "ai_query_section_title": "詢問你的數據", + "ai_upgrade_plan": "Upgrade plan.", "already_on_dashboard": "已在儀表板上", "and_filter_logic": "且", "apply_changes": "套用變更", @@ -2591,16 +2593,19 @@ "nav_label": "意見回饋目錄", "no_access": "你沒有權限管理意見回饋目錄。", "no_connectors": "此目錄尚未連結任何回饋來源。", + "no_unassigned_workspaces_description": "Every workspace is already linked to an active feedback directory. Remove a workspace from its current directory before assigning it here.", + "no_unassigned_workspaces_title": "No unassigned workspaces available", "pause_connectors_confirmation_description": "暫停這些回饋來源將停止新增記錄。", "pause_connectors_confirmation_title": "暫停已連結的回饋來源?", "select_workspaces_placeholder": "選擇工作區...", "show_archived": "顯示已封存", "title": "意見回饋目錄", "unarchive": "取消封存", - "unarchive_workspace_conflict": "無法取消封存此目錄,因為一個或多個已指派工作區已封存。", + "unarchive_workspace_conflict": "Cannot unarchive this directory because one or more assigned workspaces already belong to another active feedback directory.", "upgrade_prompt_description": "將回饋記錄整理至目錄中,並將資料導向正確的工作區。專業版和企業版方案提供此功能。", "upgrade_prompt_title": "升級以解鎖回饋記錄目錄功能", "workspace_access": "工作區存取權限", + "workspace_assigned_to_directory": "{workspaceName} is linked to {directoryName}", "workspaces_already_linked": "已連結的工作區", "workspaces_being_added": "正在授予存取權限的工作區" }, @@ -3675,6 +3680,8 @@ "add_source": "新增來源", "allowed_values": "允許的值:{values}", "api_ingestion": "API ingestion", + "api_ingestion_setup_description": "Use the REST API to send feedback records directly into Formbricks. The API ingestion docs include the endpoint, payload shape, and authentication details.", + "api_ingestion_setup_title": "Set up API ingestion", "api_ingestion_settings_description": "Send feedback records using the Management API.", "auto_generated": "自動生成", "change_file": "更換檔案", @@ -3865,7 +3872,8 @@ "value_boolean": "值(布林值)", "value_date": "值(日期)", "value_number": "值(數量)", - "value_text": "值(文字)" + "value_text": "值(文字)", + "view_rest_api_docs": "View REST API docs" }, "xm-templates": { "ces": "CES", diff --git a/apps/web/modules/ee/analysis/charts/components/ai-query-section.tsx b/apps/web/modules/ee/analysis/charts/components/ai-query-section.tsx index c829a75c3e..314b3fe5a7 100644 --- a/apps/web/modules/ee/analysis/charts/components/ai-query-section.tsx +++ b/apps/web/modules/ee/analysis/charts/components/ai-query-section.tsx @@ -8,10 +8,9 @@ import { useTranslation } from "react-i18next"; import { getFormattedErrorMessage } from "@/lib/utils/helper"; import { generateAIChartAction } from "@/modules/ee/analysis/charts/actions"; import type { AnalyticsResponse } from "@/modules/ee/analysis/types/analysis"; -import { Alert } from "@/modules/ui/components/alert"; +import { Alert, AlertDescription } from "@/modules/ui/components/alert"; import { Button } from "@/modules/ui/components/button"; import { Input } from "@/modules/ui/components/input"; -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/modules/ui/components/tooltip"; interface AIQuerySectionProps { workspaceId: string; @@ -31,7 +30,13 @@ export function AIQuerySection({ const [userQuery, setUserQuery] = useState(""); const [isGenerating, setIsGenerating] = useState(false); const { t } = useTranslation(); - const showAIDataAnalysisDisabledAlert = !isAIAvailable && aiUnavailableReason === "not_enabled"; + + const aiUnavailableMessage = + { + not_in_plan: t("workspace.analysis.charts.ai_not_in_plan"), + not_enabled: t("workspace.analysis.charts.ai_not_enabled"), + instance_not_configured: t("workspace.analysis.charts.ai_instance_not_configured"), + }[aiUnavailableReason ?? ""] ?? t("workspace.analysis.charts.ai_not_available"); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); @@ -83,54 +88,36 @@ export function AIQuerySection({ maxLength={2000} disabled={!isAIAvailable || isGenerating} /> - {showAIDataAnalysisDisabledAlert ? ( - - ) : ( - - - -
- -
-
- {!isAIAvailable && ( - - {{ - not_in_plan: t("workspace.analysis.charts.ai_not_in_plan"), - not_enabled: t("workspace.analysis.charts.ai_not_enabled"), - instance_not_configured: t("workspace.analysis.charts.ai_instance_not_configured"), - }[aiUnavailableReason ?? ""] ?? t("workspace.analysis.charts.ai_not_available")} - - )} -
-
- )} + - {showAIDataAnalysisDisabledAlert && ( + {!isAIAvailable && ( - {t("workspace.surveys.edit.ai_data_analysis_disabled")} - - Enable it in organization settings. - + + {aiUnavailableMessage} + {aiUnavailableReason === "not_enabled" && ( + + {t("workspace.analysis.charts.ai_enable_in_settings")} + + )} + {aiUnavailableReason === "not_in_plan" && ( + + {t("workspace.analysis.charts.ai_upgrade_plan")} + + )} + )} diff --git a/apps/web/modules/ee/feedback-directory/components/feedback-directory-settings/feedback-directory-settings-modal.tsx b/apps/web/modules/ee/feedback-directory/components/feedback-directory-settings/feedback-directory-settings-modal.tsx index 45807eb9fe..0c0571c73d 100644 --- a/apps/web/modules/ee/feedback-directory/components/feedback-directory-settings/feedback-directory-settings-modal.tsx +++ b/apps/web/modules/ee/feedback-directory/components/feedback-directory-settings/feedback-directory-settings-modal.tsx @@ -23,6 +23,7 @@ import { getTranslatedFeedbackDirectoryError, } from "@/modules/ee/feedback-directory/types/feedback-directory"; import { TOrganizationWorkspace } from "@/modules/ee/teams/team-list/types/workspace"; +import { Alert, AlertDescription, AlertTitle } from "@/modules/ui/components/alert"; import { Button } from "@/modules/ui/components/button"; import { Dialog, @@ -96,6 +97,34 @@ export const FeedbackDirectorySettingsModal = ({ [orgWorkspaces, workspaceAccessMap, directory?.id] ); + const workspaceConflictDetails = useMemo( + () => + orgWorkspaces + .map((workspace) => { + const assignment = workspaceAccessMap.get(workspace.id); + if (!assignment || assignment.feedbackDirectoryId === directory?.id) { + return null; + } + + return { + workspaceId: workspace.id, + workspaceName: workspace.name, + feedbackDirectoryName: assignment.feedbackDirectoryName, + }; + }) + .filter( + ( + conflict + ): conflict is { + workspaceId: string; + workspaceName: string; + feedbackDirectoryName: string; + } => conflict !== null + ) + .sort((a, b) => a.workspaceName.localeCompare(b.workspaceName, undefined, { sensitivity: "base" })), + [orgWorkspaces, workspaceAccessMap, directory?.id] + ); + const initialWorkspaceIds = useMemo( () => directory?.workspaces.map((workspace) => workspace.workspaceId) ?? [], [directory?.workspaces] @@ -117,6 +146,10 @@ export const FeedbackDirectorySettingsModal = ({ setValue, reset, } = form; + const selectedWorkspaceIds = form.watch("workspaceIds") ?? []; + const hasUnassignedWorkspace = workspaceOptions.some((option) => !option.disabled); + const showWorkspaceAccessBlockedExplanation = + workspaceConflictDetails.length > 0 && !hasUnassignedWorkspace; const workspaceNameById = useMemo(() => { const map = new Map(orgWorkspaces.map((workspace) => [workspace.id, workspace.name])); @@ -290,7 +323,7 @@ export const FeedbackDirectorySettingsModal = ({ { setValue("workspaceIds", selected, { shouldDirty: true }); }} @@ -298,6 +331,32 @@ export const FeedbackDirectorySettingsModal = ({ placeholder={t("workspace.settings.feedback_directories.select_workspaces_placeholder")} containerClassName="focus-within:ring-0 focus-within:ring-offset-0" /> + {showWorkspaceAccessBlockedExplanation && ( + +
+ + {t("workspace.settings.feedback_directories.no_unassigned_workspaces_title")} + + +

+ {t( + "workspace.settings.feedback_directories.no_unassigned_workspaces_description" + )} +

+
    + {workspaceConflictDetails.map((conflict) => ( +
  • + {t("workspace.settings.feedback_directories.workspace_assigned_to_directory", { + workspaceName: conflict.workspaceName, + directoryName: conflict.feedbackDirectoryName, + })} +
  • + ))} +
+
+
+
+ )} {isEdit && ( diff --git a/apps/web/modules/ee/feedback-directory/lib/feedback-directory.test.ts b/apps/web/modules/ee/feedback-directory/lib/feedback-directory.test.ts index fc5588b31d..898486f520 100644 --- a/apps/web/modules/ee/feedback-directory/lib/feedback-directory.test.ts +++ b/apps/web/modules/ee/feedback-directory/lib/feedback-directory.test.ts @@ -402,6 +402,7 @@ describe("FeedbackDirectory Service", () => { }); test("unarchives directory", async () => { + vi.mocked(prisma.feedbackDirectory.findUnique).mockResolvedValueOnce(mockDirectoryDetailsDbRow as any); vi.mocked(prisma.feedbackDirectory.update).mockResolvedValueOnce({} as any); const result = await updateFeedbackDirectory(mockDirectoryId, mockOrganizationId, { @@ -409,12 +410,35 @@ describe("FeedbackDirectory Service", () => { }); expect(result).toBe(true); + expect(prisma.feedbackDirectoryWorkspace.findFirst).toHaveBeenCalledWith({ + where: { + workspaceId: { in: [mockWorkspaceId1, mockWorkspaceId2] }, + feedbackDirectoryId: { not: mockDirectoryId }, + feedbackDirectory: { isArchived: false }, + }, + select: { workspaceId: true }, + }); expect(prisma.feedbackDirectory.update).toHaveBeenCalledWith({ where: { id: mockDirectoryId }, data: { isArchived: false }, }); }); + test("throws InvalidInputError when unarchiving would assign a workspace to two active directories", async () => { + vi.mocked(prisma.feedbackDirectory.findUnique).mockResolvedValueOnce(mockDirectoryDetailsDbRow as any); + vi.mocked(prisma.feedbackDirectoryWorkspace.findFirst).mockResolvedValueOnce({ + workspaceId: mockWorkspaceId1, + } as any); + + await expect( + updateFeedbackDirectory(mockDirectoryId, mockOrganizationId, { + isArchived: false, + }) + ).rejects.toThrow(new InvalidInputError("WORKSPACE_ALREADY_ASSIGNED_TO_DIFFERENT_DIRECTORY")); + + expect(prisma.feedbackDirectory.update).not.toHaveBeenCalled(); + }); + test("updates workspace assignments with diff", async () => { // getFeedbackDirectoryDetails call vi.mocked(prisma.feedbackDirectory.findUnique).mockResolvedValueOnce(mockDirectoryDetailsDbRow as any); diff --git a/apps/web/modules/ee/feedback-directory/lib/feedback-directory.ts b/apps/web/modules/ee/feedback-directory/lib/feedback-directory.ts index 5070d9b624..8ab4f5fc43 100644 --- a/apps/web/modules/ee/feedback-directory/lib/feedback-directory.ts +++ b/apps/web/modules/ee/feedback-directory/lib/feedback-directory.ts @@ -383,6 +383,16 @@ const getArchiveUpdate = async ( } if (isArchived === false) { + const currentDetails = await getFeedbackDirectoryDetails(directoryId); + if (!currentDetails) { + throw new ResourceNotFoundError("FeedbackDirectory", directoryId); + } + + await assertWorkspacesNotAssignedElsewhere( + directoryId, + currentDetails.workspaces.map((workspace) => workspace.workspaceId) + ); + return { isArchived: false }; } diff --git a/apps/web/modules/ee/unify-feedback/sources/components/create-connector-modal.tsx b/apps/web/modules/ee/unify-feedback/sources/components/create-connector-modal.tsx index 6ca2757252..913ddc9424 100644 --- a/apps/web/modules/ee/unify-feedback/sources/components/create-connector-modal.tsx +++ b/apps/web/modules/ee/unify-feedback/sources/components/create-connector-modal.tsx @@ -14,7 +14,7 @@ import { importHistoricalResponsesAction, } from "@/lib/connector/actions"; import { getFormattedErrorMessage } from "@/lib/utils/helper"; -import { Alert } from "@/modules/ui/components/alert"; +import { Alert, AlertDescription, AlertTitle } from "@/modules/ui/components/alert"; import { Button } from "@/modules/ui/components/button"; import { Dialog, @@ -66,6 +66,9 @@ import { ConnectorTypeSelector } from "./connector-type-selector"; import { CsvConnectorUI } from "./csv-connector-ui"; import { FormbricksQuestionList } from "./formbricks-question-list"; +const API_INGESTION_DOCS_URL = "https://formbricks.com/docs/unify-feedback/api/rest-api"; +const FEEDBACK_RECORD_MCP_DOCS_URL = "https://formbricks.com/docs/unify-feedback/api/mcp"; + interface CreateConnectorModalProps { open: boolean; onOpenChange: (open: boolean) => void; @@ -107,7 +110,7 @@ const getDialogDescription = ( const getNextStepButtonLabel = (type: TConnectorOptionId | null, t: (key: string) => string): string => { if (type === "formbricks_survey") return t("workspace.unify.select_questions"); if (type === "csv") return t("workspace.unify.configure_import"); - if (type === "api_ingestion") return t("common.learn_more"); + if (type === "api_ingestion") return t("workspace.unify.view_rest_api_docs"); if (type === "feedback_record_mcp") return t("common.learn_more"); return t("workspace.unify.create_mapping"); }; @@ -260,12 +263,12 @@ export const CreateConnectorModal = ({ if (currentStep !== "selectType" || !selectedType) return; if (selectedType === "api_ingestion") { - window.open("https://formbricks.com/docs/unify-feedback/api/rest-api", "_blank", "noopener,noreferrer"); + window.open(API_INGESTION_DOCS_URL, "_blank", "noopener,noreferrer"); return; } if (selectedType === "feedback_record_mcp") { - window.open("https://formbricks.com/docs/unify-feedback/api/mcp", "_blank", "noopener,noreferrer"); + window.open(FEEDBACK_RECORD_MCP_DOCS_URL, "_blank", "noopener,noreferrer"); return; } @@ -479,6 +482,16 @@ export const CreateConnectorModal = ({ workspaceId={workspaceId} /> )} + {currentStep === "selectType" && selectedType === "api_ingestion" && ( + +
+ {t("workspace.unify.api_ingestion_setup_title")} + +

{t("workspace.unify.api_ingestion_setup_description")}

+
+
+
+ )} {currentStep === "mapping" && selectedType === "formbricks_survey" && ( diff --git a/packages/database/src/scripts/generate-data-migration.ts b/packages/database/src/scripts/generate-data-migration.ts index ee2ba5d27a..10d4d81b8d 100644 --- a/packages/database/src/scripts/generate-data-migration.ts +++ b/packages/database/src/scripts/generate-data-migration.ts @@ -1,8 +1,8 @@ -import { createId } from "@paralleldrive/cuid2"; import fs from "node:fs/promises"; import path from "node:path"; import readline from "node:readline"; import { fileURLToPath } from "node:url"; +import { createId } from "@paralleldrive/cuid2"; import { logger } from "@formbricks/logger"; const __filename = fileURLToPath(import.meta.url); diff --git a/packages/database/src/scripts/migration-runner.ts b/packages/database/src/scripts/migration-runner.ts index 655f17e87b..780d658ba6 100644 --- a/packages/database/src/scripts/migration-runner.ts +++ b/packages/database/src/scripts/migration-runner.ts @@ -1,9 +1,9 @@ -import { type Prisma, PrismaClient } from "@prisma/client"; import { exec } from "node:child_process"; import fs from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { promisify } from "node:util"; +import { type Prisma, PrismaClient } from "@prisma/client"; import { logger } from "@formbricks/logger"; const __filename = fileURLToPath(import.meta.url); diff --git a/packages/survey-ui/src/components/general/button.tsx b/packages/survey-ui/src/components/general/button.tsx index cf6cb33981..98d71b3768 100644 --- a/packages/survey-ui/src/components/general/button.tsx +++ b/packages/survey-ui/src/components/general/button.tsx @@ -5,10 +5,10 @@ import { cn } from "@/lib/utils"; export type ButtonVariant = "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | "custom"; export type ButtonSize = "default" | "custom" | "sm" | "lg" | "icon"; -type ButtonVariantProps = { +interface ButtonVariantProps { variant?: ButtonVariant | null; size?: ButtonSize | null; -}; +} type ButtonVariantClassProps = | (ButtonVariantProps & { class?: string; className?: never }) | (ButtonVariantProps & { class?: never; className?: string })