Просмотр исходного кода

[web] Cleanup `plans-2026-phase-1` - phase 1: frontend (#34619)

* Remove `plans-2026-phase-1` from frontend in subscriptions module

* Remove `plans-2026-phase-1` from general frontend

* Remove empty `AiErrorAssistantPaywall`

* Simplify `UpgradeNotification`

* Update translations

* Fix tests

* Remove `OverleafAssistPaywall`

* Remove unused locales

GitOrigin-RevId: 4cf04bbde134a3f7b778a0695d388f31d9765343
Antoine Clausse 1 месяц назад
Родитель
Сommit
0d004926e6
28 измененных файлов с 20 добавлено и 170 удалено
  1. 0 1
      services/web/config/settings.defaults.js
  2. 0 24
      services/web/frontend/extracted-translations.json
  3. 1 7
      services/web/frontend/js/features/ide-react/components/toolbar/upgrade-button.tsx
  4. 1 11
      services/web/frontend/js/features/pdf-preview/components/error-logs.tsx
  5. 1 11
      services/web/frontend/js/features/share-project-modal/components/collaborators-limit-upgrade.tsx
  6. 3 21
      services/web/frontend/js/features/subscription/components/dashboard/free-plan.tsx
  7. 0 31
      services/web/frontend/js/shared/components/ai-paywall-notification.tsx
  8. 1 3
      services/web/frontend/js/shared/components/upgrade-benefits.tsx
  9. 0 1
      services/web/locales/cs.json
  10. 0 2
      services/web/locales/da.json
  11. 0 6
      services/web/locales/de.json
  12. 0 19
      services/web/locales/en.json
  13. 0 1
      services/web/locales/es.json
  14. 0 1
      services/web/locales/fi.json
  15. 0 1
      services/web/locales/fr.json
  16. 0 1
      services/web/locales/it.json
  17. 0 1
      services/web/locales/ja.json
  18. 0 1
      services/web/locales/ko.json
  19. 0 1
      services/web/locales/nl.json
  20. 0 1
      services/web/locales/no.json
  21. 0 1
      services/web/locales/pt.json
  22. 0 1
      services/web/locales/ru.json
  23. 0 1
      services/web/locales/sv.json
  24. 0 1
      services/web/locales/tr.json
  25. 0 3
      services/web/locales/zh-CN.json
  26. 2 2
      services/web/test/frontend/features/share-project-modal/components/share-project-modal.test.tsx
  27. 1 1
      services/web/test/frontend/features/subscription/components/dashboard/free-plan.test.tsx
  28. 10 15
      services/web/test/frontend/features/workbench/chat.spec.tsx

+ 0 - 1
services/web/config/settings.defaults.js

@@ -1099,7 +1099,6 @@ module.exports = {
     settingsModalEditorTabSections: [],
     settingsModalEditorTabSections: [],
     settingsModalSpellcheckSections: [],
     settingsModalSpellcheckSections: [],
     editorFloatingMenuActions: [],
     editorFloatingMenuActions: [],
-    errorLogsComponents: [],
     referenceIndices: [],
     referenceIndices: [],
     railEntries: [],
     railEntries: [],
     railPopovers: [],
     railPopovers: [],

+ 0 - 24
services/web/frontend/extracted-translations.json

@@ -1,8 +1,6 @@
 {
 {
-  "0_free_suggestions": "",
   "1_2_width": "",
   "1_2_width": "",
   "1_4_width": "",
   "1_4_width": "",
-  "1_free_suggestion": "",
   "24x_more_compile_time": "",
   "24x_more_compile_time": "",
   "3_4_width": "",
   "3_4_width": "",
   "About": "",
   "About": "",
@@ -72,7 +70,6 @@
   "add_add_on_to_your_plan": "",
   "add_add_on_to_your_plan": "",
   "add_additional_certificate": "",
   "add_additional_certificate": "",
   "add_affiliation": "",
   "add_affiliation": "",
-  "add_ai_assist": "",
   "add_ai_assist_annual_and_get_unlimited_access": "",
   "add_ai_assist_annual_and_get_unlimited_access": "",
   "add_ai_assist_monthly_and_get_unlimited_access": "",
   "add_ai_assist_monthly_and_get_unlimited_access": "",
   "add_ai_assist_to_your_plan": "",
   "add_ai_assist_to_your_plan": "",
@@ -101,9 +98,6 @@
   "add_to_dictionary": "",
   "add_to_dictionary": "",
   "add_to_tag": "",
   "add_to_tag": "",
   "add_txt_record_to_dns_with_token": "",
   "add_txt_record_to_dns_with_token": "",
-  "add_unlimited_ai_to_overleaf": "",
-  "add_unlimited_ai_to_your_overleaf_plan": "",
-  "add_unlimited_ai_to_your_plan": "",
   "add_your_comment_here": "",
   "add_your_comment_here": "",
   "added_by_on": "",
   "added_by_on": "",
   "adding": "",
   "adding": "",
@@ -122,7 +116,6 @@
   "agree_with_the_terms": "",
   "agree_with_the_terms": "",
   "ai_assist_in_overleaf_is_included_via_writefull_groups": "",
   "ai_assist_in_overleaf_is_included_via_writefull_groups": "",
   "ai_assist_in_overleaf_is_included_via_writefull_individual": "",
   "ai_assist_in_overleaf_is_included_via_writefull_individual": "",
-  "ai_assist_subscriber_can_now_write_smarter": "",
   "ai_assist_unavailable": "",
   "ai_assist_unavailable": "",
   "ai_assistance": "",
   "ai_assistance": "",
   "ai_assistant": "",
   "ai_assistant": "",
@@ -157,7 +150,6 @@
   "an_error_occured_while_restoring_project": "",
   "an_error_occured_while_restoring_project": "",
   "an_error_occurred_when_verifying_the_coupon_code": "",
   "an_error_occurred_when_verifying_the_coupon_code": "",
   "and_much_more": "",
   "and_much_more": "",
-  "annual_discount": "",
   "anonymous": "",
   "anonymous": "",
   "anyone": "",
   "anyone": "",
   "anyone_in_x": "",
   "anyone_in_x": "",
@@ -409,7 +401,6 @@
   "create_new_subscription": "",
   "create_new_subscription": "",
   "create_new_tag": "",
   "create_new_tag": "",
   "create_project_in_github": "",
   "create_project_in_github": "",
-  "create_summaries": "",
   "created": "",
   "created": "",
   "created_at": "",
   "created_at": "",
   "creating": "",
   "creating": "",
@@ -551,7 +542,6 @@
   "dropbox_duplicate_project_names_suggestion": "",
   "dropbox_duplicate_project_names_suggestion": "",
   "dropbox_for_link_share_projs": "",
   "dropbox_for_link_share_projs": "",
   "dropbox_integration_lowercase": "",
   "dropbox_integration_lowercase": "",
-  "dropbox_sync": "",
   "dropbox_sync_both": "",
   "dropbox_sync_both": "",
   "dropbox_sync_description": "",
   "dropbox_sync_description": "",
   "dropbox_sync_error": "",
   "dropbox_sync_error": "",
@@ -704,7 +694,6 @@
   "files_selected": "",
   "files_selected": "",
   "filter_projects": "",
   "filter_projects": "",
   "find": "",
   "find": "",
-  "find_and_check_citations": "",
   "find_out_how_to_get_the_most_out_of_your_new_subscription": "",
   "find_out_how_to_get_the_most_out_of_your_new_subscription": "",
   "find_out_more": "",
   "find_out_more": "",
   "find_out_more_about_institution_login": "",
   "find_out_more_about_institution_login": "",
@@ -714,7 +703,6 @@
   "first_name": "",
   "first_name": "",
   "fit_to_height": "",
   "fit_to_height": "",
   "fit_to_width": "",
   "fit_to_width": "",
-  "fix_errors": "",
   "fixed_width": "",
   "fixed_width": "",
   "fixed_width_wrap_text": "",
   "fixed_width_wrap_text": "",
   "focus_mode": "",
   "focus_mode": "",
@@ -756,7 +744,6 @@
   "future_payments": "",
   "future_payments": "",
   "generate_from_text": "",
   "generate_from_text": "",
   "generate_from_text_or_image": "",
   "generate_from_text_or_image": "",
-  "generate_latex_from_prompts_and_images": "",
   "generate_token": "",
   "generate_token": "",
   "generating": "",
   "generating": "",
   "generic_export_feedback_message": "",
   "generic_export_feedback_message": "",
@@ -764,14 +751,11 @@
   "generic_linked_file_compile_error": "",
   "generic_linked_file_compile_error": "",
   "generic_something_went_wrong": "",
   "generic_something_went_wrong": "",
   "get_access_to_enterprise_features": "",
   "get_access_to_enterprise_features": "",
-  "get_ai_assist": "",
   "get_collaborative_benefits": "",
   "get_collaborative_benefits": "",
   "get_discounted_plan": "",
   "get_discounted_plan": "",
-  "get_early_access_with_ai_assist_add_on": "",
   "get_exclusive_access_to_labs": "",
   "get_exclusive_access_to_labs": "",
   "get_full_project_history": "",
   "get_full_project_history": "",
   "get_in_touch": "",
   "get_in_touch": "",
-  "get_language_suggestions": "",
   "get_more_compile_time": "",
   "get_more_compile_time": "",
   "get_most_subscription_by_checking_ai_writefull": "",
   "get_most_subscription_by_checking_ai_writefull": "",
   "get_most_subscription_by_checking_overleaf": "",
   "get_most_subscription_by_checking_overleaf": "",
@@ -816,7 +800,6 @@
   "github_public_description": "",
   "github_public_description": "",
   "github_repository_diverged": "",
   "github_repository_diverged": "",
   "github_symlink_error": "",
   "github_symlink_error": "",
-  "github_sync": "",
   "github_sync_description": "",
   "github_sync_description": "",
   "github_sync_error": "",
   "github_sync_error": "",
   "github_sync_repository_not_found_description": "",
   "github_sync_repository_not_found_description": "",
@@ -1358,7 +1341,6 @@
   "ok_continue_to_project": "",
   "ok_continue_to_project": "",
   "ok_join_project": "",
   "ok_join_project": "",
   "on": "",
   "on": "",
-  "on_free_plan_upgrade_to_access_features": "",
   "one_step_away_from_professional_features": "",
   "one_step_away_from_professional_features": "",
   "only_add_people_who_dont_yet_have_access": "",
   "only_add_people_who_dont_yet_have_access": "",
   "only_group_admin_or_managers_can_delete_your_account_1": "",
   "only_group_admin_or_managers_can_delete_your_account_1": "",
@@ -1464,7 +1446,6 @@
   "pending_subscription_message": "",
   "pending_subscription_message": "",
   "per_license": "",
   "per_license": "",
   "per_month": "",
   "per_month": "",
-  "per_month_x_annually": "",
   "per_year": "",
   "per_year": "",
   "percent_is_the_percentage_of_the_line_width": "",
   "percent_is_the_percentage_of_the_line_width": "",
   "permanently_disables_the_preview": "",
   "permanently_disables_the_preview": "",
@@ -1525,7 +1506,6 @@
   "primarily_work_study_question_university_school": "",
   "primarily_work_study_question_university_school": "",
   "primary": "",
   "primary": "",
   "primary_certificate": "",
   "primary_certificate": "",
-  "priority_support": "",
   "privacy_and_terms": "",
   "privacy_and_terms": "",
   "private": "",
   "private": "",
   "pro": "",
   "pro": "",
@@ -1598,7 +1578,6 @@
   "ready_to_join_x": "",
   "ready_to_join_x": "",
   "ready_to_join_x_in_group_y": "",
   "ready_to_join_x_in_group_y": "",
   "ready_to_set_up": "",
   "ready_to_set_up": "",
-  "realtime_track_changes": "",
   "reauthorize_github_account": "",
   "reauthorize_github_account": "",
   "recaptcha_conditions": "",
   "recaptcha_conditions": "",
   "recent_commits_in_github": "",
   "recent_commits_in_github": "",
@@ -2269,7 +2248,6 @@
   "unlimited_collabs": "",
   "unlimited_collabs": "",
   "unlimited_collabs_per_project_plus": "",
   "unlimited_collabs_per_project_plus": "",
   "unlimited_document_history": "",
   "unlimited_document_history": "",
-  "unlimited_projects": "",
   "unlink": "",
   "unlink": "",
   "unlink_all_users": "",
   "unlink_all_users": "",
   "unlink_all_users_explanation": "",
   "unlink_all_users_explanation": "",
@@ -2317,7 +2295,6 @@
   "upgrade_now": "",
   "upgrade_now": "",
   "upgrade_plan": "",
   "upgrade_plan": "",
   "upgrade_summary": "",
   "upgrade_summary": "",
-  "upgrade_to_add_more_collaborators_and_access_collaboration_features": "",
   "upgrade_to_add_more_collaborators_and_more": "",
   "upgrade_to_add_more_collaborators_and_more": "",
   "upgrade_to_get_feature": "",
   "upgrade_to_get_feature": "",
   "upgrade_to_get_started": "",
   "upgrade_to_get_started": "",
@@ -2452,7 +2429,6 @@
   "work_offline_pull_to_overleaf": "",
   "work_offline_pull_to_overleaf": "",
   "work_with_non_overleaf_users": "",
   "work_with_non_overleaf_users": "",
   "work_with_other_github_users": "",
   "work_with_other_github_users": "",
-  "write_faster_smarter_with_research_ready_ai": "",
   "x_changes_in": "",
   "x_changes_in": "",
   "x_changes_in_plural": "",
   "x_changes_in_plural": "",
   "x_files_saved_to_your_project": "",
   "x_files_saved_to_your_project": "",

+ 1 - 7
services/web/frontend/js/features/ide-react/components/toolbar/upgrade-button.tsx

@@ -1,7 +1,6 @@
 import { useTranslation } from 'react-i18next'
 import { useTranslation } from 'react-i18next'
 import * as eventTracking from '../../../../infrastructure/event-tracking'
 import * as eventTracking from '../../../../infrastructure/event-tracking'
 import OLButton from '@/shared/components/ol/ol-button'
 import OLButton from '@/shared/components/ol/ol-button'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 
 export default function UpgradeButton({
 export default function UpgradeButton({
   className = '',
   className = '',
@@ -13,7 +12,6 @@ export default function UpgradeButton({
   source?: string
   source?: string
 }) {
 }) {
   const { t } = useTranslation()
   const { t } = useTranslation()
-  const plans2026 = useFeatureFlag('plans-2026-phase-1')
 
 
   function handleClick() {
   function handleClick() {
     eventTracking.send('subscription-funnel', source, 'upgrade')
     eventTracking.send('subscription-funnel', source, 'upgrade')
@@ -25,11 +23,7 @@ export default function UpgradeButton({
       <OLButton
       <OLButton
         variant="premium"
         variant="premium"
         size="sm"
         size="sm"
-        href={
-          plans2026
-            ? `/user/subscription/choose-your-plan?itm_referrer=${referrer}&paywall-type=${source}`
-            : `/user/subscription/plans?itm_referrer=${referrer}`
-        }
+        href={`/user/subscription/choose-your-plan?itm_referrer=${referrer}&paywall-type=${source}`}
         target="_blank"
         target="_blank"
         rel="noreferrer"
         rel="noreferrer"
         onClick={handleClick}
         onClick={handleClick}

+ 1 - 11
services/web/frontend/js/features/pdf-preview/components/error-logs.tsx

@@ -1,5 +1,5 @@
 import { useTranslation } from 'react-i18next'
 import { useTranslation } from 'react-i18next'
-import { ElementType, memo, useCallback, useMemo, useState } from 'react'
+import { memo, useCallback, useMemo, useState } from 'react'
 import { usePdfPreviewContext } from '@/features/pdf-preview/components/pdf-preview-provider'
 import { usePdfPreviewContext } from '@/features/pdf-preview/components/pdf-preview-provider'
 import StopOnFirstErrorPrompt from '@/features/pdf-preview/components/stop-on-first-error-prompt'
 import StopOnFirstErrorPrompt from '@/features/pdf-preview/components/stop-on-first-error-prompt'
 import PdfPreviewError from '@/features/pdf-preview/components/pdf-preview-error'
 import PdfPreviewError from '@/features/pdf-preview/components/pdf-preview-error'
@@ -17,13 +17,6 @@ import PdfClearCacheButton from '@/features/pdf-preview/components/pdf-clear-cac
 import PdfDownloadFilesButton from '@/features/pdf-preview/components/pdf-download-files-button'
 import PdfDownloadFilesButton from '@/features/pdf-preview/components/pdf-download-files-button'
 import RollingBuildSelectedReminder from './rolling-build-selected-reminder'
 import RollingBuildSelectedReminder from './rolling-build-selected-reminder'
 import ErrorAssistantAiPaywallNotification from './error-assistant-ai-paywall-notification'
 import ErrorAssistantAiPaywallNotification from './error-assistant-ai-paywall-notification'
-import importOverleafModules from '../../../../macros/import-overleaf-module.macro'
-
-// todo: quota clean-up remove unneeded old paywall component
-const logsComponents: Array<{
-  import: { default: ElementType }
-  path: string
-}> = importOverleafModules('errorLogsComponents')
 
 
 type ErrorLogTab = {
 type ErrorLogTab = {
   key: string
   key: string
@@ -81,9 +74,6 @@ function ErrorLogs({
           <TabHeader key={tab.key} tab={tab} active={activeTab === tab.key} />
           <TabHeader key={tab.key} tab={tab} active={activeTab === tab.key} />
         ))}
         ))}
       </Nav>
       </Nav>
-      {logsComponents.map(({ import: { default: Component }, path }) => (
-        <Component key={path} />
-      ))}
       <ErrorAssistantAiPaywallNotification />
       <ErrorAssistantAiPaywallNotification />
       <TabContent className="error-logs new-error-logs">
       <TabContent className="error-logs new-error-logs">
         <div className="logs-pane-content">
         <div className="logs-pane-content">

+ 1 - 11
services/web/frontend/js/features/share-project-modal/components/collaborators-limit-upgrade.tsx

@@ -5,12 +5,10 @@ import { useUserContext } from '@/shared/context/user-context'
 import StartFreeTrialButton from '@/shared/components/start-free-trial-button'
 import StartFreeTrialButton from '@/shared/components/start-free-trial-button'
 import OLButton from '@/shared/components/ol/ol-button'
 import OLButton from '@/shared/components/ol/ol-button'
 import addMoreEditorsImage from '../images/add-more-editors.svg'
 import addMoreEditorsImage from '../images/add-more-editors.svg'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 
 export default function CollaboratorsLimitUpgrade() {
 export default function CollaboratorsLimitUpgrade() {
   const { t } = useTranslation()
   const { t } = useTranslation()
   const user = useUserContext()
   const user = useUserContext()
-  const plans2026 = useFeatureFlag('plans-2026-phase-1')
 
 
   return (
   return (
     <div className="invite-warning">
     <div className="invite-warning">
@@ -18,15 +16,7 @@ export default function CollaboratorsLimitUpgrade() {
         type="info"
         type="info"
         customIcon={<img src={addMoreEditorsImage} alt="" aria-hidden="true" />}
         customIcon={<img src={addMoreEditorsImage} alt="" aria-hidden="true" />}
         title={t('add_more_collaborators')}
         title={t('add_more_collaborators')}
-        content={
-          <p>
-            {plans2026
-              ? t('upgrade_to_add_more_collaborators_and_more')
-              : t(
-                  'upgrade_to_add_more_collaborators_and_access_collaboration_features'
-                )}
-          </p>
-        }
+        content={<p>{t('upgrade_to_add_more_collaborators_and_more')}</p>}
         isActionBelowContent
         isActionBelowContent
         action={
         action={
           user.allowedFreeTrial ? (
           user.allowedFreeTrial ? (

+ 3 - 21
services/web/frontend/js/features/subscription/components/dashboard/free-plan.tsx

@@ -1,39 +1,21 @@
-import { useTranslation, Trans } from 'react-i18next'
+import { useTranslation } from 'react-i18next'
 import WritefullManagedBundleAddOn from '@/features/subscription/components/dashboard/states/active/change-plan/modals/writefull-bundle-management-modal'
 import WritefullManagedBundleAddOn from '@/features/subscription/components/dashboard/states/active/change-plan/modals/writefull-bundle-management-modal'
 import getMeta from '@/utils/meta'
 import getMeta from '@/utils/meta'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 
 function FreePlan() {
 function FreePlan() {
   const { t } = useTranslation()
   const { t } = useTranslation()
   const hasAiAssistViaWritefull = getMeta('ol-hasAiAssistViaWritefull')
   const hasAiAssistViaWritefull = getMeta('ol-hasAiAssistViaWritefull')
-  const plans2026 = useFeatureFlag('plans-2026-phase-1')
   return (
   return (
     <>
     <>
-      {plans2026 ? (
-        t('you_are_using_our_free_plan')
-      ) : (
-        <Trans
-          i18nKey="on_free_plan_upgrade_to_access_features"
-          components={[
-            // eslint-disable-next-line react/jsx-key, jsx-a11y/anchor-has-content
-            <a
-              href="/learn/how-to/Overleaf_premium_features"
-              target="_blank"
-            />,
-          ]}
-        />
-      )}
-      :
+      {t('you_are_using_our_free_plan')}:
       <ul>
       <ul>
         <li>{t('invite_more_collabs')}</li>
         <li>{t('invite_more_collabs')}</li>
-        {plans2026 && <li>{t('higher_ai_allowance')}</li>}
-        {!plans2026 && <li>{t('realtime_track_changes')}</li>}
+        <li>{t('higher_ai_allowance')}</li>
         <li>{t('full_doc_history')}</li>
         <li>{t('full_doc_history')}</li>
         <li>{t('reference_search')}</li>
         <li>{t('reference_search')}</li>
         <li>{t('reference_sync')}</li>
         <li>{t('reference_sync')}</li>
         <li>{t('dropbox_integration_lowercase')}</li>
         <li>{t('dropbox_integration_lowercase')}</li>
         <li>{t('github_integration_lowercase')}</li>
         <li>{t('github_integration_lowercase')}</li>
-        {!plans2026 && <li>{t('priority_support')}</li>}
       </ul>
       </ul>
       <a className="btn btn-primary me-1" href="/user/subscription/plans">
       <a className="btn btn-primary me-1" href="/user/subscription/plans">
         {t('upgrade_now')}
         {t('upgrade_now')}

+ 0 - 31
services/web/frontend/js/shared/components/ai-paywall-notification.tsx

@@ -6,7 +6,6 @@ import { useUserFeaturesContext } from '@/shared/context/user-features-context'
 import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics'
 import { useEditorAnalytics } from '@/shared/hooks/use-editor-analytics'
 import { useTranslation } from 'react-i18next'
 import { useTranslation } from 'react-i18next'
 import { formatSecondsToHoursAndMinutes } from '@/shared/utils/time'
 import { formatSecondsToHoursAndMinutes } from '@/shared/utils/time'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 
 import getMeta from '@/utils/meta'
 import getMeta from '@/utils/meta'
 const hasUnlimitedAi = getMeta('ol-hasUnlimitedAi')
 const hasUnlimitedAi = getMeta('ol-hasUnlimitedAi')
@@ -33,9 +32,7 @@ function AiPaywallNotification({
     premiumSuggestionResetDate,
     premiumSuggestionResetDate,
   } = useEditorContext()
   } = useEditorContext()
 
 
-  const { t } = useTranslation()
   const features = useUserFeaturesContext()
   const features = useUserFeaturesContext()
-  const inQuotaRollout = useFeatureFlag('plans-2026-phase-1')
   const user = getMeta('ol-user')
   const user = getMeta('ol-user')
 
 
   const isCommons = user.hasInstitutionLicence
   const isCommons = user.hasInstitutionLicence
@@ -77,34 +74,6 @@ function AiPaywallNotification({
     return null
     return null
   }
   }
 
 
-  // if not in rollout, use old paywalls for free users
-  if (!inQuotaRollout && !hasAddOn) {
-    return null
-  }
-
-  if (!inQuotaRollout) {
-    // if not in rollout, we can still use our fair usage messages
-    const chattingMessage = t(
-      'youve_reached_the_fair_usage_limit_on_your_plan_you_can_start_chatting_again_in_time',
-      {
-        time: formatSecondsToHoursAndMinutes(t, secondsTillReset),
-      }
-    )
-    const assistMessage = t('youve_reached_the_fair_usage')
-    return (
-      <Notification
-        type="info"
-        title={t('usage_limit_reached')}
-        content={
-          featureLocation === 'workbench' ? chattingMessage : assistMessage
-        }
-        isDismissible={false}
-        customIcon={null}
-        className="ai-paywall-notification"
-      />
-    )
-  }
-
   if (hasAddOn) {
   if (hasAddOn) {
     return (
     return (
       <FairUseLimit
       <FairUseLimit

+ 1 - 3
services/web/frontend/js/shared/components/upgrade-benefits.tsx

@@ -2,7 +2,6 @@ import MaterialIcon from '@/shared/components/material-icon'
 import { useTranslation } from 'react-i18next'
 import { useTranslation } from 'react-i18next'
 import { memo } from 'react'
 import { memo } from 'react'
 import classNames from 'classnames'
 import classNames from 'classnames'
-import { useFeatureFlag } from '@/shared/context/split-test-context'
 
 
 function Check() {
 function Check() {
   return <MaterialIcon type="check" />
   return <MaterialIcon type="check" />
@@ -10,14 +9,13 @@ function Check() {
 
 
 function UpgradeBenefits({ className }: { className?: string }) {
 function UpgradeBenefits({ className }: { className?: string }) {
   const { t } = useTranslation()
   const { t } = useTranslation()
-  const plans2026 = useFeatureFlag('plans-2026-phase-1')
 
 
   return (
   return (
     <ul className={classNames('list-unstyled upgrade-benefits', className)}>
     <ul className={classNames('list-unstyled upgrade-benefits', className)}>
       <li>
       <li>
         <Check />
         <Check />
         &nbsp;
         &nbsp;
-        {plans2026 ? t('higher_ai_allowance') : t('unlimited_projects')}
+        {t('higher_ai_allowance')}
       </li>
       </li>
       <li>
       <li>
         <Check />
         <Check />

+ 0 - 1
services/web/locales/cs.json

@@ -112,7 +112,6 @@
   "github_no_master_branch_error": "Tento repozitář nemůže být importován, protože nemá master branch. Prosím zajistěte, aby projekt měl master branch.",
   "github_no_master_branch_error": "Tento repozitář nemůže být importován, protože nemá master branch. Prosím zajistěte, aby projekt měl master branch.",
   "github_public_description": "Tento repozitář může vidět kdokoliv. Vy určíte kdo do něj může commitovat,",
   "github_public_description": "Tento repozitář může vidět kdokoliv. Vy určíte kdo do něj může commitovat,",
   "github_successfully_linked_description": "Děkujeme, úspěšně jsem připojili váš GitHub účet k __appName__u. Nyní můžete exportovat své projekty v __appName__u do GitHubu, nebo importovat projekty z GitHub repozitáře.",
   "github_successfully_linked_description": "Děkujeme, úspěšně jsem připojili váš GitHub účet k __appName__u. Nyní můžete exportovat své projekty v __appName__u do GitHubu, nebo importovat projekty z GitHub repozitáře.",
-  "github_sync": "Synchronizace s GitHubem",
   "github_sync_description": "Můžete spojit vaše projekty v __appName__u s GitHub repozitářem. Můžete vytvářet nové commity z __appName__u a mergovat s commity vytvořenými offline, nebo na GitHubu.",
   "github_sync_description": "Můžete spojit vaše projekty v __appName__u s GitHub repozitářem. Můžete vytvářet nové commity z __appName__u a mergovat s commity vytvořenými offline, nebo na GitHubu.",
   "github_sync_error": "Omlouváme se, ale při komunikaci s naší GitHub službou nastala chyba. Zkuste to za moment znovu.",
   "github_sync_error": "Omlouváme se, ale při komunikaci s naší GitHub službou nastala chyba. Zkuste to za moment znovu.",
   "github_validation_check": "Zkontrolujte prosím, jestli máte správné jméno repozitáře a jestli máte práva k jeho vytvoření.",
   "github_validation_check": "Zkontrolujte prosím, jestli máte správné jméno repozitáře a jestli máte práva k jeho vytvoření.",

+ 0 - 2
services/web/locales/da.json

@@ -684,7 +684,6 @@
   "github_repository_diverged": "Default branch i det forbundne repository er blevet force-push’et. Det kan desynkronisere Overleaf og GitHub at pull’e ændringer efter et force push. Det vil muligvis være nødvendigt at push’e ændringer efter pullet for blive synkroniseret igen.",
   "github_repository_diverged": "Default branch i det forbundne repository er blevet force-push’et. Det kan desynkronisere Overleaf og GitHub at pull’e ændringer efter et force push. Det vil muligvis være nødvendigt at push’e ændringer efter pullet for blive synkroniseret igen.",
   "github_successfully_linked_description": "Vi har linket din GitHub konto til __appName__. Du kan nu eksportere dine __appName__ projekter til GitHub, eller importere projekter fra dine GitHub repositories.",
   "github_successfully_linked_description": "Vi har linket din GitHub konto til __appName__. Du kan nu eksportere dine __appName__ projekter til GitHub, eller importere projekter fra dine GitHub repositories.",
   "github_symlink_error": "Dit GitHub repository indeholder symbolske lænkefiler, som ikke på nuværende tidpunkt er understøttet af Overleaf. Du må prøve igen, efter du har fjernet de filer.",
   "github_symlink_error": "Dit GitHub repository indeholder symbolske lænkefiler, som ikke på nuværende tidpunkt er understøttet af Overleaf. Du må prøve igen, efter du har fjernet de filer.",
-  "github_sync": "GitHub synkronisering",
   "github_sync_description": "Med GitHub synkronisering kan du forbinde dine __appName__-projekter til et GitHub repository, oprette nye commits fra __appName__, og merge commits fra GitHub.",
   "github_sync_description": "Med GitHub synkronisering kan du forbinde dine __appName__-projekter til et GitHub repository, oprette nye commits fra __appName__, og merge commits fra GitHub.",
   "github_sync_error": "Beklager, der skete en fejl mens vi checkede vores GitHub service. Prøv igen om lidt.",
   "github_sync_error": "Beklager, der skete en fejl mens vi checkede vores GitHub service. Prøv igen om lidt.",
   "github_sync_repository_not_found_description": "Det forbundne repository er enten blevet fjernet, eller du har ikke længere adgang til det. Du kan forbinde til et nyt repository ved at klone projektet, og vælge punktet ’GitHub’ i menuen. Du kan også fjerne forbindelsen mellem det her projekt og repository’et.",
   "github_sync_repository_not_found_description": "Det forbundne repository er enten blevet fjernet, eller du har ikke længere adgang til det. Du kan forbinde til et nyt repository ved at klone projektet, og vælge punktet ’GitHub’ i menuen. Du kan også fjerne forbindelsen mellem det her projekt og repository’et.",
@@ -1185,7 +1184,6 @@
   "ok_continue_to_project": "OK, fortsæt til projekt",
   "ok_continue_to_project": "OK, fortsæt til projekt",
   "ok_join_project": "OK, deltag i projekt",
   "ok_join_project": "OK, deltag i projekt",
   "on": "Til",
   "on": "Til",
-  "on_free_plan_upgrade_to_access_features": "Du er på det gratis __appName__ abonnement. Opgrader for at tilgå disse <0>Premium-funktioner</0>",
   "one_collaborator_per_project": "1 samarbejdspartner per projekt",
   "one_collaborator_per_project": "1 samarbejdspartner per projekt",
   "one_free_collab": "Kun én gratis samarbejdspartner",
   "one_free_collab": "Kun én gratis samarbejdspartner",
   "one_per_project": "1 per projekt",
   "one_per_project": "1 per projekt",

+ 0 - 6
services/web/locales/de.json

@@ -1,8 +1,6 @@
 {
 {
-  "0_free_suggestions": "0 kostenlose Vorschläge",
   "1_2_width": "½ Breite",
   "1_2_width": "½ Breite",
   "1_4_width": "¼ Breite",
   "1_4_width": "¼ Breite",
-  "1_free_suggestion": "1 kostenloser Vorschlag",
   "24x_basic": "24x Basis",
   "24x_basic": "24x Basis",
   "24x_more_compile_time": "24x mehr Kompilierzeit auf unseren schnellsten Servern",
   "24x_more_compile_time": "24x mehr Kompilierzeit auf unseren schnellsten Servern",
   "3_4_width": "¾ Breite",
   "3_4_width": "¾ Breite",
@@ -77,7 +75,6 @@
   "add_add_on_to_your_plan": "Füge __addOnName__ zu deinem Abonnement hinzu",
   "add_add_on_to_your_plan": "Füge __addOnName__ zu deinem Abonnement hinzu",
   "add_additional_certificate": "Füge ein weiteres Zertifikat hinzu",
   "add_additional_certificate": "Füge ein weiteres Zertifikat hinzu",
   "add_affiliation": "Zugehörigkeit hinzufügen",
   "add_affiliation": "Zugehörigkeit hinzufügen",
-  "add_ai_assist": "KI-Assistenz hinzufügen",
   "add_ai_assist_annual_and_get_unlimited_access": "Füge die <sparkle/> AI Assist Annual hinzu und erhalte unbegrenzten* Zugriff auf die KI-Funktionen von Overleaf und Writefull.",
   "add_ai_assist_annual_and_get_unlimited_access": "Füge die <sparkle/> AI Assist Annual hinzu und erhalte unbegrenzten* Zugriff auf die KI-Funktionen von Overleaf und Writefull.",
   "add_ai_assist_monthly_and_get_unlimited_access": "Füge die <sparkle/> AI Assist Monthly hinzu und erhalte unbegrenzten* Zugriff auf die KI-Funktionen von Overleaf und Writefull.",
   "add_ai_assist_monthly_and_get_unlimited_access": "Füge die <sparkle/> AI Assist Monthly hinzu und erhalte unbegrenzten* Zugriff auf die KI-Funktionen von Overleaf und Writefull.",
   "add_ai_assist_to_your_plan": "Füge die <sparkle/> AI Assist zu deinem Abonnement hinzu und erhalte unbegrenzten* Zugriff auf die KI-Funktionen von Overleaf und Writefull.",
   "add_ai_assist_to_your_plan": "Füge die <sparkle/> AI Assist zu deinem Abonnement hinzu und erhalte unbegrenzten* Zugriff auf die KI-Funktionen von Overleaf und Writefull.",
@@ -106,8 +103,6 @@
   "add_role_and_department": "Rolle und Abteilung hinzufügen",
   "add_role_and_department": "Rolle und Abteilung hinzufügen",
   "add_to_dictionary": "Zum Wörterbuch hinzufügen",
   "add_to_dictionary": "Zum Wörterbuch hinzufügen",
   "add_to_tag": "Zu Stichwort hinzufügen",
   "add_to_tag": "Zu Stichwort hinzufügen",
-  "add_unlimited_ai_to_overleaf": "Unbegrenzte KI* zu Overleaf hinzufügen",
-  "add_unlimited_ai_to_your_overleaf_plan": "Unbegrenzte KI* zu deinem Overleaf-__planName__-Abonnement hinzufügen",
   "add_your_comment_here": "Füge hier einen Kommentar hinzu",
   "add_your_comment_here": "Füge hier einen Kommentar hinzu",
   "added": "hinzugefügt",
   "added": "hinzugefügt",
   "added_by_on": "Hinzugefügt von __name__ am __date__",
   "added_by_on": "Hinzugefügt von __name__ am __date__",
@@ -648,7 +643,6 @@
   "github_repository_diverged": "Der Standard-Branch des verknüpften Repositorys wurde forciert gepusht. Das Pullen von GitHub-Änderungen nach einem forciertem Push kann dazu führen, dass Overleaf und GitHub nicht mehr synchron sind. Möglicherweise musst du Änderungen nach dem Pullen erneut Pushen um wieder synchron zu sein",
   "github_repository_diverged": "Der Standard-Branch des verknüpften Repositorys wurde forciert gepusht. Das Pullen von GitHub-Änderungen nach einem forciertem Push kann dazu führen, dass Overleaf und GitHub nicht mehr synchron sind. Möglicherweise musst du Änderungen nach dem Pullen erneut Pushen um wieder synchron zu sein",
   "github_successfully_linked_description": "Danke, wir haben dein GitHub-Nutzerkonto erfolgreich mit __appName__ verknüpft. Du kannst die __appName__-Projekte jetzt in GitHub exportieren oder Projekte aus deinen GitHub-Repositories importieren.",
   "github_successfully_linked_description": "Danke, wir haben dein GitHub-Nutzerkonto erfolgreich mit __appName__ verknüpft. Du kannst die __appName__-Projekte jetzt in GitHub exportieren oder Projekte aus deinen GitHub-Repositories importieren.",
   "github_symlink_error": "Dein GitHub-Repository enthält Dateien mit symbolischen Links, was derzeit von Overleaf nicht unterstützt wird. Entferne diese und versuche es erneut.",
   "github_symlink_error": "Dein GitHub-Repository enthält Dateien mit symbolischen Links, was derzeit von Overleaf nicht unterstützt wird. Entferne diese und versuche es erneut.",
-  "github_sync": "GitHub Synchronisierung",
   "github_sync_description": "Mit GitHub-Synchronisierung kannst du deine __appName__-Projekte mit GitHub-Repositories verlinken. Erstelle neue Commits aus __appName__ und führe sie mit Commits in GitHub zusammen.",
   "github_sync_description": "Mit GitHub-Synchronisierung kannst du deine __appName__-Projekte mit GitHub-Repositories verlinken. Erstelle neue Commits aus __appName__ und führe sie mit Commits in GitHub zusammen.",
   "github_sync_error": "Entschuldigung, es gab ein Problem mit unserem GitHub-Dienst. Bitte versuche es später erneut.",
   "github_sync_error": "Entschuldigung, es gab ein Problem mit unserem GitHub-Dienst. Bitte versuche es später erneut.",
   "github_sync_repository_not_found_description": "Das verknüpfte Repository wurde entweder entfernt oder du hast keinen Zugriff mehr darauf. Du kannst die Synchronisierung mit einem neuen Repository einrichten, indem du das Projekt klonst und den Menüpunkt „GitHub“ verwendest. Du kannst das Repository auch von diesem Projekt trennen.",
   "github_sync_repository_not_found_description": "Das verknüpfte Repository wurde entweder entfernt oder du hast keinen Zugriff mehr darauf. Du kannst die Synchronisierung mit einem neuen Repository einrichten, indem du das Projekt klonst und den Menüpunkt „GitHub“ verwendest. Du kannst das Repository auch von diesem Projekt trennen.",

+ 0 - 19
services/web/locales/en.json

@@ -1,8 +1,6 @@
 {
 {
-  "0_free_suggestions": "0 free suggestions",
   "1_2_width": "½ width",
   "1_2_width": "½ width",
   "1_4_width": "¼ width",
   "1_4_width": "¼ width",
-  "1_free_suggestion": "1 free suggestion",
   "1_user": "1 user",
   "1_user": "1 user",
   "24x_basic": "24x Basic",
   "24x_basic": "24x Basic",
   "24x_more_compile_time": "24x more compile time on our fastest servers",
   "24x_more_compile_time": "24x more compile time on our fastest servers",
@@ -85,7 +83,6 @@
   "add_add_on_to_your_plan": "Add __addOnName__ to your plan",
   "add_add_on_to_your_plan": "Add __addOnName__ to your plan",
   "add_additional_certificate": "Add another certificate",
   "add_additional_certificate": "Add another certificate",
   "add_affiliation": "Add affiliation",
   "add_affiliation": "Add affiliation",
-  "add_ai_assist": "Add AI Assist",
   "add_ai_assist_annual_and_get_unlimited_access": "Add <sparkle/> AI Assist Annual and get unlimited* access to Overleaf and Writefull AI features.",
   "add_ai_assist_annual_and_get_unlimited_access": "Add <sparkle/> AI Assist Annual and get unlimited* access to Overleaf and Writefull AI features.",
   "add_ai_assist_monthly_and_get_unlimited_access": "Add <sparkle/> AI Assist Monthly and get unlimited* access to Overleaf and Writefull AI features.",
   "add_ai_assist_monthly_and_get_unlimited_access": "Add <sparkle/> AI Assist Monthly and get unlimited* access to Overleaf and Writefull AI features.",
   "add_ai_assist_to_your_plan": "Add <sparkle/> AI Assist to your plan and get unlimited* access to Overleaf and Writefull AI features.",
   "add_ai_assist_to_your_plan": "Add <sparkle/> AI Assist to your plan and get unlimited* access to Overleaf and Writefull AI features.",
@@ -118,9 +115,6 @@
   "add_to_dictionary": "Add to dictionary",
   "add_to_dictionary": "Add to dictionary",
   "add_to_tag": "Add to tag",
   "add_to_tag": "Add to tag",
   "add_txt_record_to_dns_with_token": "To complete the process of domain verification you need to add a TXT record to your DNS with the following token:",
   "add_txt_record_to_dns_with_token": "To complete the process of domain verification you need to add a TXT record to your DNS with the following token:",
-  "add_unlimited_ai_to_overleaf": "Add unlimited AI* to Overleaf",
-  "add_unlimited_ai_to_your_overleaf_plan": "Add unlimited AI* to your Overleaf __planName__ plan",
-  "add_unlimited_ai_to_your_plan": "Add unlimited AI* to your __planName__ plan",
   "add_your_comment_here": "Add your comment here",
   "add_your_comment_here": "Add your comment here",
   "added": "added",
   "added": "added",
   "added_by_on": "Added by __name__ on __date__",
   "added_by_on": "Added by __name__ on __date__",
@@ -155,7 +149,6 @@
   "ai_assist_description": "AI Assist combines AI tools from Overleaf and Writefull to help you write faster, smarter and with confidence.",
   "ai_assist_description": "AI Assist combines AI tools from Overleaf and Writefull to help you write faster, smarter and with confidence.",
   "ai_assist_in_overleaf_is_included_via_writefull_groups": "AI Assist in Overleaf is included as part of your group or organization’s Writefull subscription. To make changes you’ll need to speak to your subscription admin",
   "ai_assist_in_overleaf_is_included_via_writefull_groups": "AI Assist in Overleaf is included as part of your group or organization’s Writefull subscription. To make changes you’ll need to speak to your subscription admin",
   "ai_assist_in_overleaf_is_included_via_writefull_individual": "AI Assist in Overleaf is included as part of your Writefull subscription. You can cancel or manage your access to AI Assist in your Writefull subscription settings.",
   "ai_assist_in_overleaf_is_included_via_writefull_individual": "AI Assist in Overleaf is included as part of your Writefull subscription. You can cancel or manage your access to AI Assist in your Writefull subscription settings.",
-  "ai_assist_subscriber_can_now_write_smarter": "AI Assist subscribers can now write smarter, find citations, and generate LaTeX from prompts and images.",
   "ai_assist_unavailable": "AI features are now included in every paid plan. See the <0>pricing page</0> for what each plan includes.",
   "ai_assist_unavailable": "AI features are now included in every paid plan. See the <0>pricing page</0> for what each plan includes.",
   "ai_assistance": "AI assistance",
   "ai_assistance": "AI assistance",
   "ai_assistant": "AI Assistant",
   "ai_assistant": "AI Assistant",
@@ -545,7 +538,6 @@
   "create_new_tag": "Create new tag",
   "create_new_tag": "Create new tag",
   "create_password": "Create password",
   "create_password": "Create password",
   "create_project_in_github": "Create a GitHub repository",
   "create_project_in_github": "Create a GitHub repository",
-  "create_summaries": "Create summaries",
   "create_your_account": "Create your account",
   "create_your_account": "Create your account",
   "created": "Created",
   "created": "Created",
   "created_at": "Created at",
   "created_at": "Created at",
@@ -923,7 +915,6 @@
   "filter_projects": "Filter projects",
   "filter_projects": "Filter projects",
   "filters": "Filters",
   "filters": "Filters",
   "find": "Find",
   "find": "Find",
-  "find_and_check_citations": "Find and check citations",
   "find_out_how_to_get_the_most_out_of_your_new_subscription": "Find out how to get the most out of your new subscription by checking out <0>Overleaf’s AI features</0>.",
   "find_out_how_to_get_the_most_out_of_your_new_subscription": "Find out how to get the most out of your new subscription by checking out <0>Overleaf’s AI features</0>.",
   "find_out_more": "Find out More",
   "find_out_more": "Find out More",
   "find_out_more_about_institution_login": "Find out more about institutional login",
   "find_out_more_about_institution_login": "Find out more about institutional login",
@@ -934,7 +925,6 @@
   "first_name": "First name",
   "first_name": "First name",
   "fit_to_height": "Fit to height",
   "fit_to_height": "Fit to height",
   "fit_to_width": "Fit to width",
   "fit_to_width": "Fit to width",
-  "fix_errors": "Fix errors",
   "fixed_width": "Fixed width",
   "fixed_width": "Fixed width",
   "fixed_width_wrap_text": "Fixed width, wrap text",
   "fixed_width_wrap_text": "Fixed width, wrap text",
   "flexible_plans_for_everyone": "Flexible plans for everyone—from individual students and researchers, to large businesses and universities.",
   "flexible_plans_for_everyone": "Flexible plans for everyone—from individual students and researchers, to large businesses and universities.",
@@ -997,7 +987,6 @@
   "general": "General",
   "general": "General",
   "generate_from_text": "From text",
   "generate_from_text": "From text",
   "generate_from_text_or_image": "From text or image",
   "generate_from_text_or_image": "From text or image",
-  "generate_latex_from_prompts_and_images": "Generate LaTeX from prompts and images",
   "generate_token": "Generate token",
   "generate_token": "Generate token",
   "generating": "Generating",
   "generating": "Generating",
   "generic_export_feedback_message": "This is a new feature. <0>Let us know what you think</0>",
   "generic_export_feedback_message": "This is a new feature. <0>Let us know what you think</0>",
@@ -1005,16 +994,13 @@
   "generic_linked_file_compile_error": "This project’s output files are not available because it failed to compile. Please open the project to see the compilation error details.",
   "generic_linked_file_compile_error": "This project’s output files are not available because it failed to compile. Please open the project to see the compilation error details.",
   "generic_something_went_wrong": "Sorry, something went wrong",
   "generic_something_went_wrong": "Sorry, something went wrong",
   "get_access_to_enterprise_features": "Get access to enterprise features and benefits provided by your organization.",
   "get_access_to_enterprise_features": "Get access to enterprise features and benefits provided by your organization.",
-  "get_ai_assist": "Get AI Assist",
   "get_collaborative_benefits": "Get the collaborative benefits from __appName__, even if you prefer to work offline",
   "get_collaborative_benefits": "Get the collaborative benefits from __appName__, even if you prefer to work offline",
   "get_discounted_plan": "Get discounted plan",
   "get_discounted_plan": "Get discounted plan",
-  "get_early_access_with_ai_assist_add_on": "Get early access with the AI Assist add-on",
   "get_exclusive_access_to_labs": "Get exclusive access to early-stage experiments when you join Overleaf Labs. All we ask in return is your honest feedback to help us develop and improve.",
   "get_exclusive_access_to_labs": "Get exclusive access to early-stage experiments when you join Overleaf Labs. All we ask in return is your honest feedback to help us develop and improve.",
   "get_full_project_history": "Get full project history",
   "get_full_project_history": "Get full project history",
   "get_in_touch": "Get in touch",
   "get_in_touch": "Get in touch",
   "get_in_touch_having_problems": "<a href=\"__link__\">Get in touch with support</a> if you’re having problems",
   "get_in_touch_having_problems": "<a href=\"__link__\">Get in touch with support</a> if you’re having problems",
   "get_involved": "Get involved",
   "get_involved": "Get involved",
-  "get_language_suggestions": "Get language suggestions",
   "get_more_compile_time": "Get more compile time",
   "get_more_compile_time": "Get more compile time",
   "get_most_subscription_by_checking_ai_writefull": "Get the most out of your subscription by checking out <0>Overleaf’s AI features</0> and <1>Writefull’s features</1>.",
   "get_most_subscription_by_checking_ai_writefull": "Get the most out of your subscription by checking out <0>Overleaf’s AI features</0> and <1>Writefull’s features</1>.",
   "get_most_subscription_by_checking_overleaf": "Get the most out of your subscription by checking out <0>Overleaf’s features</0>.",
   "get_most_subscription_by_checking_overleaf": "Get the most out of your subscription by checking out <0>Overleaf’s features</0>.",
@@ -1067,7 +1053,6 @@
   "github_repository_diverged": "The default branch of the linked repository has been force-pushed. Pulling GitHub changes after a force push can cause Overleaf and GitHub to get out of sync. You might need to push changes after pulling to get back in sync.",
   "github_repository_diverged": "The default branch of the linked repository has been force-pushed. Pulling GitHub changes after a force push can cause Overleaf and GitHub to get out of sync. You might need to push changes after pulling to get back in sync.",
   "github_successfully_linked_description": "Thanks, we’ve successfully linked your GitHub account to __appName__. You can now export your __appName__ projects to GitHub, or import projects from your GitHub repositories.",
   "github_successfully_linked_description": "Thanks, we’ve successfully linked your GitHub account to __appName__. You can now export your __appName__ projects to GitHub, or import projects from your GitHub repositories.",
   "github_symlink_error": "Your GitHub repository contains symbolic link files, which are not currently supported by Overleaf. Please remove these and try again.",
   "github_symlink_error": "Your GitHub repository contains symbolic link files, which are not currently supported by Overleaf. Please remove these and try again.",
-  "github_sync": "GitHub Sync",
   "github_sync_description": "With GitHub Sync you can link your __appName__ projects to GitHub repositories, create new commits from __appName__, and merge commits from GitHub.",
   "github_sync_description": "With GitHub Sync you can link your __appName__ projects to GitHub repositories, create new commits from __appName__, and merge commits from GitHub.",
   "github_sync_error": "Sorry, there was a problem checking our GitHub service. Please try again in a few moments.",
   "github_sync_error": "Sorry, there was a problem checking our GitHub service. Please try again in a few moments.",
   "github_sync_repository_not_found_description": "The linked repository has either been removed, or you no longer have access to it. You can set up sync with a new repository by cloning the project and using the ‘GitHub’ menu item. You can also unlink the repository from this project.",
   "github_sync_repository_not_found_description": "The linked repository has either been removed, or you no longer have access to it. You can set up sync with a new repository by cloning the project and using the ‘GitHub’ menu item. You can also unlink the repository from this project.",
@@ -1770,7 +1755,6 @@
   "ok_continue_to_project": "OK, continue to project",
   "ok_continue_to_project": "OK, continue to project",
   "ok_join_project": "OK, join project",
   "ok_join_project": "OK, join project",
   "on": "On",
   "on": "On",
-  "on_free_plan_upgrade_to_access_features": "You are on the __appName__ Free plan. Upgrade to access these <0>Premium features</0>",
   "on_premises_explanation": "Host Overleaf in your own secure environment, with enhanced administrative control over projects and user access.",
   "on_premises_explanation": "Host Overleaf in your own secure environment, with enhanced administrative control over projects and user access.",
   "on_premises_option_optional": "On-premises option (optional)",
   "on_premises_option_optional": "On-premises option (optional)",
   "on_premises_server_pro_option": "On-Premises (Server Pro) option",
   "on_premises_server_pro_option": "On-Premises (Server Pro) option",
@@ -1923,7 +1907,6 @@
   "per_license": "per license",
   "per_license": "per license",
   "per_month": "per month",
   "per_month": "per month",
   "per_month_billed_annually": "per month, billed annually",
   "per_month_billed_annually": "per month, billed annually",
-  "per_month_x_annually": "per month, __price__ annually",
   "per_user_year": "per user / year",
   "per_user_year": "per user / year",
   "per_year": "per year",
   "per_year": "per year",
   "percent_is_the_percentage_of_the_line_width": "% is the percentage of the line width",
   "percent_is_the_percentage_of_the_line_width": "% is the percentage of the line width",
@@ -2955,7 +2938,6 @@
   "upgrade_now": "Upgrade now",
   "upgrade_now": "Upgrade now",
   "upgrade_plan": "Upgrade plan",
   "upgrade_plan": "Upgrade plan",
   "upgrade_summary": "Upgrade summary",
   "upgrade_summary": "Upgrade summary",
-  "upgrade_to_add_more_collaborators_and_access_collaboration_features": "Upgrade to add more collaborators and access collaboration features like track changes and full project history.",
   "upgrade_to_add_more_collaborators_and_more": "Upgrade to add more collaborators and access higher AI allowance, track changes, and full project history.",
   "upgrade_to_add_more_collaborators_and_more": "Upgrade to add more collaborators and access higher AI allowance, track changes, and full project history.",
   "upgrade_to_get_feature": "Upgrade to get __feature__, plus:",
   "upgrade_to_get_feature": "Upgrade to get __feature__, plus:",
   "upgrade_to_get_more_from_overleaf": "Upgrade to get more from Overleaf",
   "upgrade_to_get_more_from_overleaf": "Upgrade to get more from Overleaf",
@@ -3114,7 +3096,6 @@
   "work_or_university_sso": "Work/university single sign-on",
   "work_or_university_sso": "Work/university single sign-on",
   "work_with_non_overleaf_users": "Work with non-Overleaf users",
   "work_with_non_overleaf_users": "Work with non-Overleaf users",
   "work_with_other_github_users": "Work with other GitHub users",
   "work_with_other_github_users": "Work with other GitHub users",
-  "write_faster_smarter_with_research_ready_ai": "Write faster, smarter and with confidence with research-ready AI",
   "writefull": "Writefull",
   "writefull": "Writefull",
   "x_changes_in": "__count__ change in",
   "x_changes_in": "__count__ change in",
   "x_changes_in_plural": "__count__ changes in",
   "x_changes_in_plural": "__count__ changes in",

+ 0 - 1
services/web/locales/es.json

@@ -320,7 +320,6 @@
   "github_is_premium": "La sincronización con GitHub es una característica premium",
   "github_is_premium": "La sincronización con GitHub es una característica premium",
   "github_public_description": "Cualquier persona puede ver este repositorio. Tú eliges quién puede contribuir.",
   "github_public_description": "Cualquier persona puede ver este repositorio. Tú eliges quién puede contribuir.",
   "github_successfully_linked_description": "Gracias, vinculamos exitosamente tu cuenta de GitHub con __appName__. Ahora puedes exportar tus proyectos de __appName__ a GitHub o importar proyectos desde tus repositorios en GitHub.",
   "github_successfully_linked_description": "Gracias, vinculamos exitosamente tu cuenta de GitHub con __appName__. Ahora puedes exportar tus proyectos de __appName__ a GitHub o importar proyectos desde tus repositorios en GitHub.",
-  "github_sync": "Sincronización con GitHub",
   "github_sync_description": "Con la sincronización con GitHub puedes enlazar tus proyectos de __appName__ con repositorios GitHub. Crea nuevos commits desde __appName__ y únelos con commits hechos offline o en GitHub.",
   "github_sync_description": "Con la sincronización con GitHub puedes enlazar tus proyectos de __appName__ con repositorios GitHub. Crea nuevos commits desde __appName__ y únelos con commits hechos offline o en GitHub.",
   "github_sync_error": "Disculpa, hubo un error en la conexión con nuestro servicio de GitHub. Intenta de nuevo en unos minutos más, por favor.",
   "github_sync_error": "Disculpa, hubo un error en la conexión con nuestro servicio de GitHub. Intenta de nuevo en unos minutos más, por favor.",
   "github_validation_check": "Por favor revisa que el nombre del repositorio es válido y que tienes permisos para crear el repositorio.",
   "github_validation_check": "Por favor revisa que el nombre del repositorio es válido y que tienes permisos para crear el repositorio.",

+ 0 - 1
services/web/locales/fi.json

@@ -115,7 +115,6 @@
   "github_is_premium": "GitHub-synkronointi on premium-ominaisuus",
   "github_is_premium": "GitHub-synkronointi on premium-ominaisuus",
   "github_public_description": "Kuka tahansa voi nähdä tämän repositoryn. Voit valita kuka voi tehdä muutoksia.",
   "github_public_description": "Kuka tahansa voi nähdä tämän repositoryn. Voit valita kuka voi tehdä muutoksia.",
   "github_successfully_linked_description": "Kiitos, olemme linkittäneet GitHub-tilisi sovellukseen __appName__ onnistuneesti. Voit nyt viedä __appName__-projektejasi GitHubiin tai tuoda projekteja omista GitHub-repositoryistasi.",
   "github_successfully_linked_description": "Kiitos, olemme linkittäneet GitHub-tilisi sovellukseen __appName__ onnistuneesti. Voit nyt viedä __appName__-projektejasi GitHubiin tai tuoda projekteja omista GitHub-repositoryistasi.",
-  "github_sync": "GitHub Synkronointi",
   "github_sync_description": "Voit linkittää __appName__-projektisi GitHub-repositoryihin GitHub Syncin avulla. Tee uusia muutoksia sovelluksesta __appName__ ja yhdistä GitHubissa tai offline-tilassa tehtyihin muutoksiin.",
   "github_sync_description": "Voit linkittää __appName__-projektisi GitHub-repositoryihin GitHub Syncin avulla. Tee uusia muutoksia sovelluksesta __appName__ ja yhdistä GitHubissa tai offline-tilassa tehtyihin muutoksiin.",
   "github_sync_error": "Tapahtui virhe puhuessa GitHub-palvelullemme. Yritä uudelleen pienen hetken päästä.",
   "github_sync_error": "Tapahtui virhe puhuessa GitHub-palvelullemme. Yritä uudelleen pienen hetken päästä.",
   "github_validation_check": "Tarkista, että repositoryn nimi on kelvollinen ja että sinulla on oikeudet luoda repository.",
   "github_validation_check": "Tarkista, että repositoryn nimi on kelvollinen ja että sinulla on oikeudet luoda repository.",

+ 0 - 1
services/web/locales/fr.json

@@ -504,7 +504,6 @@
   "github_repository_diverged": "La branche master du dépôt lié a été poussée de force. La récupération des modifications faites sur GitHub après un poussage forcé peut causer la désynchronisation d’Overleaf et GitHub. Vous pourriez avoir besoin de pousser les modifications après leur récupération pour restaurer la synchronisation.",
   "github_repository_diverged": "La branche master du dépôt lié a été poussée de force. La récupération des modifications faites sur GitHub après un poussage forcé peut causer la désynchronisation d’Overleaf et GitHub. Vous pourriez avoir besoin de pousser les modifications après leur récupération pour restaurer la synchronisation.",
   "github_successfully_linked_description": "Merci, nous avons lié votre compte GitHub avec __appName__. Vous pouvez maintenant exporter vos projets __appName__ dans GitHub ou importer des projets depuis vos dépôts GitHub.",
   "github_successfully_linked_description": "Merci, nous avons lié votre compte GitHub avec __appName__. Vous pouvez maintenant exporter vos projets __appName__ dans GitHub ou importer des projets depuis vos dépôts GitHub.",
   "github_symlink_error": "Votre dépôt GitHub contient des liens symboliques qui ne sont pas encore supportés par Overleaf. Veuillez les retirer et réessayer.",
   "github_symlink_error": "Votre dépôt GitHub contient des liens symboliques qui ne sont pas encore supportés par Overleaf. Veuillez les retirer et réessayer.",
-  "github_sync": "Synchronisation GitHub",
   "github_sync_description": "Avec la synchronisation GitHub, vous pouvez lier vos projets __appName__ à des dépôts GitHub. Créez de nouveaux commits depuis __appName__, et fusionnez avec les commits réalisés hors ligne ou dans GitHub.",
   "github_sync_description": "Avec la synchronisation GitHub, vous pouvez lier vos projets __appName__ à des dépôts GitHub. Créez de nouveaux commits depuis __appName__, et fusionnez avec les commits réalisés hors ligne ou dans GitHub.",
   "github_sync_error": "Désolé, une erreur s’est produite lors de la communication avec le service GitHub. Veuillez essayer à nouveau dans quelques instants.",
   "github_sync_error": "Désolé, une erreur s’est produite lors de la communication avec le service GitHub. Veuillez essayer à nouveau dans quelques instants.",
   "github_sync_repository_not_found_description": "Le dépôt lié a été supprimé ou bien vous avez perdu accès à celui-ci. Vous pouvez configurer la synchronisation avec un nouveau dépôt en clonant le projet puis en accédant à l’option « GitHub » du menu. Vous pouvez également supprimer le lien entre ce projet et le dépôt.",
   "github_sync_repository_not_found_description": "Le dépôt lié a été supprimé ou bien vous avez perdu accès à celui-ci. Vous pouvez configurer la synchronisation avec un nouveau dépôt en clonant le projet puis en accédant à l’option « GitHub » du menu. Vous pouvez également supprimer le lien entre ce projet et le dépôt.",

+ 0 - 1
services/web/locales/it.json

@@ -130,7 +130,6 @@
   "github_is_premium": "La sincronizzazione GitHub è una funzionalità premium",
   "github_is_premium": "La sincronizzazione GitHub è una funzionalità premium",
   "github_public_description": "Chiunque può visualizzare il repository. Puoi scegliere chi può eseguire commit.",
   "github_public_description": "Chiunque può visualizzare il repository. Puoi scegliere chi può eseguire commit.",
   "github_successfully_linked_description": "Grazie, abbiamo collegato con successo il tuo account GitHub a __appName__ . Adesso puoi esportare i progetti __appName__ in GitHub, o importarli dai tuoi repository GitHub.",
   "github_successfully_linked_description": "Grazie, abbiamo collegato con successo il tuo account GitHub a __appName__ . Adesso puoi esportare i progetti __appName__ in GitHub, o importarli dai tuoi repository GitHub.",
-  "github_sync": "Sincronizzazione GitHub",
   "github_sync_description": "Con GitHub Sync puoi collegare i tuoi progetti __appName__ a repository GitHub. Crea nuovi commit da __appName__ e unisci con commit fatti offline o su GitHub.",
   "github_sync_description": "Con GitHub Sync puoi collegare i tuoi progetti __appName__ a repository GitHub. Crea nuovi commit da __appName__ e unisci con commit fatti offline o su GitHub.",
   "github_sync_error": "Spiacenti, c’è stato un errore con la comunicazione con GitHub. Si prega di riprovare fra poco.",
   "github_sync_error": "Spiacenti, c’è stato un errore con la comunicazione con GitHub. Si prega di riprovare fra poco.",
   "github_validation_check": "Per favore, controlla che il nome del repository sia valido, e che tu abbia i permessi per crearlo.",
   "github_validation_check": "Per favore, controlla che il nome del repository sia valido, e che tu abbia i permessi per crearlo.",

+ 0 - 1
services/web/locales/ja.json

@@ -162,7 +162,6 @@
   "github_is_premium": "GitHub統合はプレミアム機能です",
   "github_is_premium": "GitHub統合はプレミアム機能です",
   "github_public_description": "このリポジトリは全員が閲覧できます。コミットできる人を選択します。",
   "github_public_description": "このリポジトリは全員が閲覧できます。コミットできる人を選択します。",
   "github_successfully_linked_description": "ありがとうございます。GitHubアカウントと __appName__ のリンクが完了しました。これからは __appName__ プロジェクトをGitHubにエクスポート、あるいはGitHubリポジトリからプロジェクトのインポートをすることができます。",
   "github_successfully_linked_description": "ありがとうございます。GitHubアカウントと __appName__ のリンクが完了しました。これからは __appName__ プロジェクトをGitHubにエクスポート、あるいはGitHubリポジトリからプロジェクトのインポートをすることができます。",
-  "github_sync": "GitHub同期",
   "github_sync_description": "GitHub Syncがあれば、__appName__ プロジェクトとGitHubリポジトリを接続することができます。__appName__ から新しいコミットを作成して、オフラインあるいはGitHubで作成したコミットと統合できます。",
   "github_sync_description": "GitHub Syncがあれば、__appName__ プロジェクトとGitHubリポジトリを接続することができます。__appName__ から新しいコミットを作成して、オフラインあるいはGitHubで作成したコミットと統合できます。",
   "github_sync_error": "申し訳ありません。GitHubサービスとの接続に問題が発生しました。しばらく時間を置いて再度お試しください。",
   "github_sync_error": "申し訳ありません。GitHubサービスとの接続に問題が発生しました。しばらく時間を置いて再度お試しください。",
   "github_validation_check": "リポジトリ名が有効か、リポジトリを作成する権限があるか確認してください。",
   "github_validation_check": "リポジトリ名が有効か、リポジトリを作成する権限があるか確認してください。",

+ 0 - 1
services/web/locales/ko.json

@@ -188,7 +188,6 @@
   "github_is_premium": "GitHub 동기화는 프리미엄 기능입니다",
   "github_is_premium": "GitHub 동기화는 프리미엄 기능입니다",
   "github_public_description": "모두가 이 저장소를 볼 수 있습니다. 커밋할 수 있는 분을 선택하실 수 있습니다.",
   "github_public_description": "모두가 이 저장소를 볼 수 있습니다. 커밋할 수 있는 분을 선택하실 수 있습니다.",
   "github_successfully_linked_description": "감사합니다, __appName__로 GitHub 계정을 성공적으로 연결하였습니다. __appName__ 프로젝트를 GitHub으로 전송하시거나 GitHub 저장소의 프로젝트를 불러올 수 있습니다.",
   "github_successfully_linked_description": "감사합니다, __appName__로 GitHub 계정을 성공적으로 연결하였습니다. __appName__ 프로젝트를 GitHub으로 전송하시거나 GitHub 저장소의 프로젝트를 불러올 수 있습니다.",
-  "github_sync": "GitHub 동기화",
   "github_sync_description": "GitHub 동기화로, __appName__ 프로젝트를 GitHub 저장소로 연결하실 수 있습니다. __appName__의 새로운 커밋을 만들고, 오프라인이나 GitHub에서 만들어진 커밋과 합치세요.",
   "github_sync_description": "GitHub 동기화로, __appName__ 프로젝트를 GitHub 저장소로 연결하실 수 있습니다. __appName__의 새로운 커밋을 만들고, 오프라인이나 GitHub에서 만들어진 커밋과 합치세요.",
   "github_sync_error": "죄송합니다, GitHub 서비스에 대한 에러가 있었습니다. 잠시 후 다시 시도해주시기 바랍니다.",
   "github_sync_error": "죄송합니다, GitHub 서비스에 대한 에러가 있었습니다. 잠시 후 다시 시도해주시기 바랍니다.",
   "github_validation_check": "저장소 이름이 유효한지 확인하시기 바랍니다, 그리고 저장소를 만들기위해 허가를 가지셔야 합니다.",
   "github_validation_check": "저장소 이름이 유효한지 확인하시기 바랍니다, 그리고 저장소를 만들기위해 허가를 가지셔야 합니다.",

+ 0 - 1
services/web/locales/nl.json

@@ -191,7 +191,6 @@
   "github_is_premium": "GitHubsnychronisatie is een premium functie",
   "github_is_premium": "GitHubsnychronisatie is een premium functie",
   "github_public_description": "Iedereen kan deze repository zien. Jij kiest wie eraan kan bijdragen.",
   "github_public_description": "Iedereen kan deze repository zien. Jij kiest wie eraan kan bijdragen.",
   "github_successfully_linked_description": "Bedankt, we hebben je GitHub-account kunnen koppelen aan __appName__. Je kunt nu je __appName__-projecten exporteren naar GitHub, of je projecten vanuit je GitHub repositories importeren.",
   "github_successfully_linked_description": "Bedankt, we hebben je GitHub-account kunnen koppelen aan __appName__. Je kunt nu je __appName__-projecten exporteren naar GitHub, of je projecten vanuit je GitHub repositories importeren.",
-  "github_sync": "GitHub-synchonisatie",
   "github_sync_description": "Met GitHub Sync kun je je __appName__-projecten koppelen aan GitHub repositories. Maak nieuwe toevoegingen vanuit __appName__ en voeg deze samen met toevoegingen die offline of in GitHub gemaakt zijn.",
   "github_sync_description": "Met GitHub Sync kun je je __appName__-projecten koppelen aan GitHub repositories. Maak nieuwe toevoegingen vanuit __appName__ en voeg deze samen met toevoegingen die offline of in GitHub gemaakt zijn.",
   "github_sync_error": "Sorry, er trad een fout op tijdens het communiceren met onze GitHub-dienst. Probeer het opnieuw over een ogenblik.",
   "github_sync_error": "Sorry, er trad een fout op tijdens het communiceren met onze GitHub-dienst. Probeer het opnieuw over een ogenblik.",
   "github_validation_check": "Controleer of de naam van de repository geldig is en of je toestemming heb om de repository te maken.",
   "github_validation_check": "Controleer of de naam van de repository geldig is en of je toestemming heb om de repository te maken.",

+ 0 - 1
services/web/locales/no.json

@@ -134,7 +134,6 @@
   "github_is_premium": "Synkronisering med GitHub er en premium funksjonalitet",
   "github_is_premium": "Synkronisering med GitHub er en premium funksjonalitet",
   "github_public_description": "Hvem som helst kan se dette repositoriet. Du velger hvem som kan gjøre commits.",
   "github_public_description": "Hvem som helst kan se dette repositoriet. Du velger hvem som kan gjøre commits.",
   "github_successfully_linked_description": "Takk, kobling av GitHub-kontoen din til __appName__ var vellykket. Du kan nå eksportere __appName__-prosjektene dine til GitHub, eller importere prosjekter fra GitHub-repositoriene dine.",
   "github_successfully_linked_description": "Takk, kobling av GitHub-kontoen din til __appName__ var vellykket. Du kan nå eksportere __appName__-prosjektene dine til GitHub, eller importere prosjekter fra GitHub-repositoriene dine.",
-  "github_sync": "GitHub Synk.",
   "github_sync_description": "Med GitHub-Sync kan du koble dine prosjekter i __appName__ til GitHub-repositories. Lag nye commits fra __appName__, og merge med commits gjort offline eller i GitHub.",
   "github_sync_description": "Med GitHub-Sync kan du koble dine prosjekter i __appName__ til GitHub-repositories. Lag nye commits fra __appName__, og merge med commits gjort offline eller i GitHub.",
   "github_sync_error": "Beklager, det oppstod en feil da vi forsøkte å snakke med vår GitHub-service. Prøv igjen om ett øyeblikk",
   "github_sync_error": "Beklager, det oppstod en feil da vi forsøkte å snakke med vår GitHub-service. Prøv igjen om ett øyeblikk",
   "github_validation_check": "Vennligst sjekk at navnet til repositoriet er gyldig, og at du har tilgang til å lage repositoriet.",
   "github_validation_check": "Vennligst sjekk at navnet til repositoriet er gyldig, og at du har tilgang til å lage repositoriet.",

+ 0 - 1
services/web/locales/pt.json

@@ -226,7 +226,6 @@
   "github_is_premium": "Sincronizar com GitHub é um recurso premium",
   "github_is_premium": "Sincronizar com GitHub é um recurso premium",
   "github_public_description": "Qualquer um pode ver esse repositório.",
   "github_public_description": "Qualquer um pode ver esse repositório.",
   "github_successfully_linked_description": "Obrigado, nós vinculamos com sucesso sua conta do GitHub com o __appName__. Agora você pode exportar seus projetos do __appName__ para o GitHub e importar seus projetos de repositórios do GitHub.",
   "github_successfully_linked_description": "Obrigado, nós vinculamos com sucesso sua conta do GitHub com o __appName__. Agora você pode exportar seus projetos do __appName__ para o GitHub e importar seus projetos de repositórios do GitHub.",
-  "github_sync": "Sincronizar com GitHub",
   "github_sync_description": "Com a Sincronização GitHub você pode vincular seus projetos __appName__ com os repositórios do GitHub. Crie novos commits no __appName__ e mescle com commits feitos fora ou no GitHub.",
   "github_sync_description": "Com a Sincronização GitHub você pode vincular seus projetos __appName__ com os repositórios do GitHub. Crie novos commits no __appName__ e mescle com commits feitos fora ou no GitHub.",
   "github_sync_error": "Desculpe, houve um erro ao se comunicar com nosso serviço do GitHub. Por favor, tente novamente mais tarde.",
   "github_sync_error": "Desculpe, houve um erro ao se comunicar com nosso serviço do GitHub. Por favor, tente novamente mais tarde.",
   "github_validation_check": "Por favor, verifique se o nome do projeto é válido e que você tem permissão para criar o repositório.",
   "github_validation_check": "Por favor, verifique se o nome do projeto é válido e que você tem permissão para criar o repositório.",

+ 0 - 1
services/web/locales/ru.json

@@ -170,7 +170,6 @@
   "github_is_premium": "Синхронизация с GitHub доступна только в премиум аккаунте",
   "github_is_premium": "Синхронизация с GitHub доступна только в премиум аккаунте",
   "github_public_description": "Этот репозиторий может просмотреть каждый. Вы выбираете, кто может править.",
   "github_public_description": "Этот репозиторий может просмотреть каждый. Вы выбираете, кто может править.",
   "github_successfully_linked_description": "Спасибо, мы успешно связали ваш аккаунт на GitHub с __appName__. Теперь вы можете экспортировать проекты с __appName__ в GitHub или импортировать в обратном направлении.",
   "github_successfully_linked_description": "Спасибо, мы успешно связали ваш аккаунт на GitHub с __appName__. Теперь вы можете экспортировать проекты с __appName__ в GitHub или импортировать в обратном направлении.",
-  "github_sync": "Синхронизация с GitHub",
   "github_sync_description": "Вы можете связать ваши проекты __appName__ с репозиториями на GitHub. Создавайте коммиты в __appName__ и объединяйте их с коммитами, сделанными оффлайн или на GitHub.",
   "github_sync_description": "Вы можете связать ваши проекты __appName__ с репозиториями на GitHub. Создавайте коммиты в __appName__ и объединяйте их с коммитами, сделанными оффлайн или на GitHub.",
   "github_sync_error": "Извините, произошла ошибка в общении с сервисом GitHub. Пожалуйста, попробуйте ещё раз позднее.",
   "github_sync_error": "Извините, произошла ошибка в общении с сервисом GitHub. Пожалуйста, попробуйте ещё раз позднее.",
   "github_validation_check": "Пожалуйста, проверьте правильность имени хранилища и права доступа на создание хранилища",
   "github_validation_check": "Пожалуйста, проверьте правильность имени хранилища и права доступа на создание хранилища",

+ 0 - 1
services/web/locales/sv.json

@@ -310,7 +310,6 @@
   "github_public_description": "Alla kan se detta repo. Du bestämmer vem som kan commita.",
   "github_public_description": "Alla kan se detta repo. Du bestämmer vem som kan commita.",
   "github_successfully_linked_description": "Tack, vi har länkat ditt GitHub konto till __appName__. Du kan du exportera dina __appName__ projekt till GitHub, eller importera projekt från dina GitHub repon.",
   "github_successfully_linked_description": "Tack, vi har länkat ditt GitHub konto till __appName__. Du kan du exportera dina __appName__ projekt till GitHub, eller importera projekt från dina GitHub repon.",
   "github_symlink_error": "Ditt GitHub-arkiv innehåller symboliska länkfiler som för närvarande inte stöds av Overleaf. Vänligen ta bort dessa och försök igen.",
   "github_symlink_error": "Ditt GitHub-arkiv innehåller symboliska länkfiler som för närvarande inte stöds av Overleaf. Vänligen ta bort dessa och försök igen.",
-  "github_sync": "GitHub Synk",
   "github_sync_description": "Med GitHub synk kan du koppla dina __appName__ projekt till GitHub repon. Skapa nya commits från __appName__ och slå samman commits som har gjorts i offlineläge eller i GitHub.",
   "github_sync_description": "Med GitHub synk kan du koppla dina __appName__ projekt till GitHub repon. Skapa nya commits från __appName__ och slå samman commits som har gjorts i offlineläge eller i GitHub.",
   "github_sync_error": "Ett fel uppstod vid kommunikationen med GitHub. Vänligen försök igen om en stund.",
   "github_sync_error": "Ett fel uppstod vid kommunikationen med GitHub. Vänligen försök igen om en stund.",
   "github_timeout_error": "Synkroniseringen av ditt Overleaf-projekt med GitHub har orsakat time-out. Det kan bero på att projektets totala storlek eller antalet filer/ändringar som ska synkroniseras är för stort.",
   "github_timeout_error": "Synkroniseringen av ditt Overleaf-projekt med GitHub har orsakat time-out. Det kan bero på att projektets totala storlek eller antalet filer/ändringar som ska synkroniseras är för stort.",

+ 0 - 1
services/web/locales/tr.json

@@ -131,7 +131,6 @@
   "github_is_premium": "GitHub senkronizasyonu premium bir özelliktir",
   "github_is_premium": "GitHub senkronizasyonu premium bir özelliktir",
   "github_public_description": "Herkes bu depoyu görüntüleyebilir. Kimlerin işlem yapabileceğini siz seçersiniz.",
   "github_public_description": "Herkes bu depoyu görüntüleyebilir. Kimlerin işlem yapabileceğini siz seçersiniz.",
   "github_successfully_linked_description": "Teşekkürler, GitHub hesabınız ile __appName__ arasındaki bağlantı, başarıyla oluşturuldu. Artık __appName__ projelerinizi GitHub üzerine yükleyebilir ya da GitHub depolarınızı __appName__’e yükleyebilirsiniz.",
   "github_successfully_linked_description": "Teşekkürler, GitHub hesabınız ile __appName__ arasındaki bağlantı, başarıyla oluşturuldu. Artık __appName__ projelerinizi GitHub üzerine yükleyebilir ya da GitHub depolarınızı __appName__’e yükleyebilirsiniz.",
-  "github_sync": "GitHub Senkronizasyonu",
   "github_sync_description": "GitHub senkronizasyonu sayesinde __appName__ projeleriniz ile GitHub depolarınız arasında bağlantı kurabilirsiniz. Bu sayede __appName__ üzerinden çevrimdışı olarak işlem yapabilir ya da bu işlemleri GitHub üzerine işleyebilirsiniz.",
   "github_sync_description": "GitHub senkronizasyonu sayesinde __appName__ projeleriniz ile GitHub depolarınız arasında bağlantı kurabilirsiniz. Bu sayede __appName__ üzerinden çevrimdışı olarak işlem yapabilir ya da bu işlemleri GitHub üzerine işleyebilirsiniz.",
   "github_sync_error": "Üzgünüz, GitHub servisine bağlanırken bir sorunla karşılaştık. Lütfen, birkaç dakika sonra tekrar deneyin.",
   "github_sync_error": "Üzgünüz, GitHub servisine bağlanırken bir sorunla karşılaştık. Lütfen, birkaç dakika sonra tekrar deneyin.",
   "github_validation_check": "Lütfen, depo adının doğru yazıldığından ve yeni bir depo oluşturma yetkinizin olduğundan emin olunuz.",
   "github_validation_check": "Lütfen, depo adının doğru yazıldığından ve yeni bir depo oluşturma yetkinizin olduğundan emin olunuz.",

+ 0 - 3
services/web/locales/zh-CN.json

@@ -794,7 +794,6 @@
   "github_repository_diverged": "已强制推送到链接存储库的主分支。在强制推送之后拉取 GitHub 更改可能会导致 Overleaf 和 GitHub 不同步。您可能需要在拉取后推送更改以恢复同步。",
   "github_repository_diverged": "已强制推送到链接存储库的主分支。在强制推送之后拉取 GitHub 更改可能会导致 Overleaf 和 GitHub 不同步。您可能需要在拉取后推送更改以恢复同步。",
   "github_successfully_linked_description": "谢谢,您已成功建立了您的GitHub账户与 __appName__ 的关联。您现在可以导出您的 __appName__ 项目到GitHub,或者从您的GitHub存储困导入项目。",
   "github_successfully_linked_description": "谢谢,您已成功建立了您的GitHub账户与 __appName__ 的关联。您现在可以导出您的 __appName__ 项目到GitHub,或者从您的GitHub存储困导入项目。",
   "github_symlink_error": "您的GitHub存储库包含符号链接文件,Overleaf 暂时不支持这些文件。请删除这些文件并重试。",
   "github_symlink_error": "您的GitHub存储库包含符号链接文件,Overleaf 暂时不支持这些文件。请删除这些文件并重试。",
-  "github_sync": "GitHub 同步",
   "github_sync_description": "通过与 GitHub 同步,你可以将您的__appName__项目关联到GitHub的存储库,从 __appName__ 创建新的提交,并与线下或者GitHub中的提交合并。",
   "github_sync_description": "通过与 GitHub 同步,你可以将您的__appName__项目关联到GitHub的存储库,从 __appName__ 创建新的提交,并与线下或者GitHub中的提交合并。",
   "github_sync_error": "抱歉,与我们的 GitHub 服务连接出错。请稍后重试。",
   "github_sync_error": "抱歉,与我们的 GitHub 服务连接出错。请稍后重试。",
   "github_sync_repository_not_found_description": "链接的存储库已被删除,或者您不再有权访问它。通过克隆项目并使用“GitHub”菜单项,可以设置与新存储库的同步。您还可以取消存储库与此项目的链接。",
   "github_sync_repository_not_found_description": "链接的存储库已被删除,或者您不再有权访问它。通过克隆项目并使用“GitHub”菜单项,可以设置与新存储库的同步。您还可以取消存储库与此项目的链接。",
@@ -1354,7 +1353,6 @@
   "ok_continue_to_project": "好的,继续到项目",
   "ok_continue_to_project": "好的,继续到项目",
   "ok_join_project": "好的,加入项目",
   "ok_join_project": "好的,加入项目",
   "on": "开",
   "on": "开",
-  "on_free_plan_upgrade_to_access_features": "您使用的是 __appName__ 免费计划。 升级即可使用这些<0>高级功能</0>",
   "one_collaborator_per_project": "每个项目 1 名协作者",
   "one_collaborator_per_project": "每个项目 1 名协作者",
   "one_free_collab": "1个免费的合作者",
   "one_free_collab": "1个免费的合作者",
   "one_per_project": "每个项目 1 个",
   "one_per_project": "每个项目 1 个",
@@ -2284,7 +2282,6 @@
   "upgrade_now": "现在升级",
   "upgrade_now": "现在升级",
   "upgrade_plan": "升级计划",
   "upgrade_plan": "升级计划",
   "upgrade_summary": "升级摘要",
   "upgrade_summary": "升级摘要",
-  "upgrade_to_add_more_collaborators_and_access_collaboration_features": "升级以添加更多合作者并访问协作功能,如跟踪更改和完整的项目历史记录。",
   "upgrade_to_get_feature": "升级以获得__feature__,以及:",
   "upgrade_to_get_feature": "升级以获得__feature__,以及:",
   "upgrade_to_review": "升级以获取评论",
   "upgrade_to_review": "升级以获取评论",
   "upgrade_your_subscription": "升级您的订阅",
   "upgrade_your_subscription": "升级您的订阅",

+ 2 - 2
services/web/test/frontend/features/share-project-modal/components/share-project-modal.test.tsx

@@ -713,7 +713,7 @@ describe('<ShareProjectModal/>', function () {
     expect(viewerOption?.classList.contains('disabled')).to.be.false
     expect(viewerOption?.classList.contains('disabled')).to.be.false
 
 
     screen.getByText(
     screen.getByText(
-      /Upgrade to add more collaborators and access collaboration features like track changes and full project history/
+      /Upgrade to add more collaborators and access higher AI allowance, track changes, and full project history/
     )
     )
   })
   })
 
 
@@ -751,7 +751,7 @@ describe('<ShareProjectModal/>', function () {
     expect(viewerOption?.classList.contains('disabled')).to.be.false
     expect(viewerOption?.classList.contains('disabled')).to.be.false
 
 
     screen.getByText(
     screen.getByText(
-      /Upgrade to add more collaborators and access collaboration features like track changes and full project history/
+      /Upgrade to add more collaborators and access higher AI allowance, track changes, and full project history/
     )
     )
   })
   })
 
 

+ 1 - 1
services/web/test/frontend/features/subscription/components/dashboard/free-plan.test.tsx

@@ -11,7 +11,7 @@ describe('<FreePlan />', function () {
     )
     )
 
 
     screen.getByText(
     screen.getByText(
-      'You are on the Overleaf Free plan. Upgrade to access these',
+      'You’re using our free plan. Upgrade to get the best Overleaf experience',
       {
       {
         exact: false,
         exact: false,
       }
       }

+ 10 - 15
services/web/test/frontend/features/workbench/chat.spec.tsx

@@ -57,7 +57,7 @@ describe('Workbench', { scrollBehavior: false }, function () {
 
 
       cy.contains('Supporting your research').should('not.exist')
       cy.contains('Supporting your research').should('not.exist')
 
 
-      cy.contains('Get early access').should('not.exist')
+      cy.contains('Upgrade to get started').should('not.exist')
 
 
       cy.contains('AI can make mistakes').should('exist')
       cy.contains('AI can make mistakes').should('exist')
     })
     })
@@ -82,7 +82,7 @@ describe('Workbench', { scrollBehavior: false }, function () {
 
 
       cy.findByRole('button', { name: /accept and continue/i }).should('exist')
       cy.findByRole('button', { name: /accept and continue/i }).should('exist')
 
 
-      cy.contains('Get early access').should('not.exist')
+      cy.contains('Upgrade to get started').should('not.exist')
 
 
       cy.get('.conversation-footer').should('have.attr', 'inert', 'true')
       cy.get('.conversation-footer').should('have.attr', 'inert', 'true')
     })
     })
@@ -117,26 +117,21 @@ describe('Workbench', { scrollBehavior: false }, function () {
       )
       )
     })
     })
     it('should show upgrade notification', function () {
     it('should show upgrade notification', function () {
-      cy.get('.workbench-upgrade-notification').should('exist')
-      cy.contains('Get early access').should('be.visible')
+      cy.get('.ai-upgrade-paywall-btn').should('exist')
+      cy.contains('Upgrade to get started').should('be.visible')
 
 
-      cy.findByRole('button', { name: /get ai assist/i }).should('exist')
+      cy.findByRole('link', { name: /upgrade/i }).should('exist')
 
 
       cy.get('.workbench-consent-prompt').should('not.exist')
       cy.get('.workbench-consent-prompt').should('not.exist')
 
 
       cy.get('.conversation-footer').should('have.attr', 'inert', 'true')
       cy.get('.conversation-footer').should('have.attr', 'inert', 'true')
     })
     })
 
 
-    it('should dispatch paywall event when clicking upgrade button', function () {
-      const paywallSpy = cy.spy().as('paywallSpy')
-      cy.window().then(win => {
-        win.addEventListener('aiAssist:showPaywall', paywallSpy)
-      })
-
-      cy.findByRole('button', { name: /get ai assist/i }).click()
-
-      // Should dispatch the paywall event
-      cy.get('@paywallSpy').should('have.been.calledOnce')
+    it('should link to the plans interstitial from the upgrade button', function () {
+      cy.findByRole('link', { name: /upgrade/i })
+        .should('have.attr', 'href')
+        .and('include', '/user/subscription/choose-your-plan')
+        .and('include', 'paywall-type=workbench')
     })
     })
   })
   })
 })
 })