mirror of
https://github.com/langgenius/dify.git
synced 2026-09-05 00:31:19 +08:00
feat: add marketplace home catalog filters
This commit is contained in:
parent
7872c168b4
commit
744e5bb39b
@ -1,4 +1,4 @@
|
||||
import type { ReactNode } from 'react'
|
||||
import type { ComponentProps, ReactNode } from 'react'
|
||||
import { render, screen, waitFor } from '@testing-library/react'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { Provider as JotaiProvider } from 'jotai'
|
||||
@ -13,7 +13,7 @@ vi.mock('#i18n', async () => {
|
||||
}
|
||||
})
|
||||
|
||||
const renderSwitch = (searchParams = '') => {
|
||||
const renderSwitch = (searchParams = '', props?: ComponentProps<typeof PluginTypeSwitch>) => {
|
||||
const { wrapper: NuqsWrapper, onUrlUpdate } = createNuqsTestWrapper({ searchParams })
|
||||
const Wrapper = ({ children }: { children: ReactNode }) => (
|
||||
<JotaiProvider>
|
||||
@ -21,7 +21,7 @@ const renderSwitch = (searchParams = '') => {
|
||||
</JotaiProvider>
|
||||
)
|
||||
|
||||
return { ...render(<PluginTypeSwitch />, { wrapper: Wrapper }), onUrlUpdate }
|
||||
return { ...render(<PluginTypeSwitch {...props} />, { wrapper: Wrapper }), onUrlUpdate }
|
||||
}
|
||||
|
||||
describe('PluginTypeSwitch', () => {
|
||||
@ -56,4 +56,21 @@ describe('PluginTypeSwitch', () => {
|
||||
expect(onUrlUpdate.mock.calls.at(-1)?.[0].searchParams.get('category')).toBe('model')
|
||||
expect(modelsButton).toHaveAttribute('aria-pressed', 'true')
|
||||
})
|
||||
|
||||
it('exposes the selected category and updates the URL in the home variant', async () => {
|
||||
const user = userEvent.setup()
|
||||
const { onUrlUpdate } = renderSwitch('?category=all', { variant: 'home' })
|
||||
|
||||
expect(screen.getByRole('button', { name: 'category.all' })).toHaveAttribute(
|
||||
'aria-pressed',
|
||||
'true',
|
||||
)
|
||||
expect(screen.getByRole('button', { name: 'categorySingle.datasource' })).toBeInTheDocument()
|
||||
expect(screen.getByRole('button', { name: 'categorySingle.agent' })).toBeInTheDocument()
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'category.models' }))
|
||||
|
||||
await waitFor(() => expect(onUrlUpdate).toHaveBeenCalled())
|
||||
expect(onUrlUpdate.mock.calls.at(-1)?.[0].searchParams.get('category')).toBe('model')
|
||||
})
|
||||
})
|
||||
|
||||
12
web/app/components/plugins/marketplace/home/README.md
Normal file
12
web/app/components/plugins/marketplace/home/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
# Marketplace Home
|
||||
|
||||
The redesigned Marketplace homepage composes the header, hero, search, trending, catalog navigation, and existing plugin list.
|
||||
|
||||
## Internal Modules
|
||||
|
||||
- `marketplace/list/list-wrapper`
|
||||
- `marketplace/plugin-type-switch`
|
||||
|
||||
## External Modules
|
||||
|
||||
None.
|
||||
@ -0,0 +1,47 @@
|
||||
import { render, screen } from '@testing-library/react'
|
||||
import { describe, expect, it, vi } from 'vitest'
|
||||
import HomeCatalogNavigation from '../home-catalog-navigation'
|
||||
|
||||
vi.mock('#i18n', async () => {
|
||||
const { withSelectorKey } = await import('@/test/i18n-mock')
|
||||
return {
|
||||
useTranslation: () => ({
|
||||
t: withSelectorKey((key: string, options?: { ns?: string }) =>
|
||||
options?.ns ? `${options.ns}.${key}` : key,
|
||||
),
|
||||
}),
|
||||
}
|
||||
})
|
||||
|
||||
vi.mock('../../plugin-type-switch', () => ({
|
||||
default: ({ variant }: { variant?: string }) => (
|
||||
<div data-testid="plugin-type-switch" data-variant={variant} />
|
||||
),
|
||||
}))
|
||||
|
||||
vi.mock('@/utils/var', () => ({
|
||||
getMarketplaceUrl: (path: string) => `https://marketplace.dify.ai${path}?source=console`,
|
||||
}))
|
||||
|
||||
describe('HomeCatalogNavigation', () => {
|
||||
it('keeps template navigation inside the Marketplace platform', () => {
|
||||
render(<HomeCatalogNavigation isMarketplacePlatform />)
|
||||
|
||||
expect(screen.getByText('plugin.marketplace.home.plugins')).toHaveAttribute(
|
||||
'aria-current',
|
||||
'page',
|
||||
)
|
||||
expect(
|
||||
screen.getByRole('link', { name: /plugin\.marketplace\.home\.templates/ }),
|
||||
).toHaveAttribute('href', '/templates')
|
||||
expect(screen.getByTestId('plugin-type-switch')).toHaveAttribute('data-variant', 'home')
|
||||
})
|
||||
|
||||
it('links Dify users to the hosted Marketplace templates page', () => {
|
||||
render(<HomeCatalogNavigation isMarketplacePlatform={false} />)
|
||||
|
||||
expect(
|
||||
screen.getByRole('link', { name: /plugin\.marketplace\.home\.templates/ }),
|
||||
).toHaveAttribute('href', 'https://marketplace.dify.ai/templates?source=console')
|
||||
})
|
||||
})
|
||||
@ -0,0 +1,54 @@
|
||||
'use client'
|
||||
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
import { useTranslation } from '#i18n'
|
||||
import Link from '@/next/link'
|
||||
import { getMarketplaceUrl } from '@/utils/var'
|
||||
import PluginTypeSwitch from '../plugin-type-switch'
|
||||
|
||||
type HomeCatalogNavigationProps = {
|
||||
isMarketplacePlatform: boolean
|
||||
}
|
||||
|
||||
function HomeCatalogNavigation({ isMarketplacePlatform }: HomeCatalogNavigationProps) {
|
||||
const { t } = useTranslation()
|
||||
const templatesHref = isMarketplacePlatform ? '/templates' : getMarketplaceUrl('/templates')
|
||||
|
||||
return (
|
||||
<section
|
||||
aria-label={t(($) => $['mainNav.marketplace'], { ns: 'common' })}
|
||||
className="w-full shrink-0 bg-background-default px-8 pt-6 pb-4"
|
||||
>
|
||||
<div
|
||||
className={cn(
|
||||
'mx-auto w-full',
|
||||
isMarketplacePlatform ? 'max-w-[1200px]' : 'max-w-[1188px]',
|
||||
)}
|
||||
>
|
||||
<nav
|
||||
aria-label={t(($) => $['mainNav.marketplace'], { ns: 'common' })}
|
||||
className="-ml-2 flex h-8 items-center gap-1"
|
||||
>
|
||||
<span
|
||||
aria-current="page"
|
||||
className="relative flex h-8 items-start px-[9px] pt-2 body-sm-medium text-text-accent after:absolute after:bottom-0 after:left-1/2 after:h-0.5 after:w-[21px] after:-translate-x-1/2 after:rounded-full after:bg-text-accent"
|
||||
>
|
||||
{t(($) => $['marketplace.home.plugins'], { ns: 'plugin' })}
|
||||
</span>
|
||||
<Link
|
||||
href={templatesHref}
|
||||
className="flex h-8 items-center gap-2 rounded-[10px] p-2 body-sm-regular text-text-primary outline-hidden hover:bg-state-base-hover focus-visible:ring-2 focus-visible:ring-state-accent-solid"
|
||||
>
|
||||
<span>{t(($) => $['marketplace.home.templates'], { ns: 'plugin' })}</span>
|
||||
<span className="flex items-center rounded-full bg-saas-dify-blue-accessible px-[5px] py-0.5 system-2xs-regular text-text-primary-on-surface uppercase">
|
||||
{t(($) => $['marketplace.home.new'], { ns: 'plugin' })}
|
||||
</span>
|
||||
</Link>
|
||||
</nav>
|
||||
<PluginTypeSwitch className="mt-4" variant="home" />
|
||||
</div>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
|
||||
export default HomeCatalogNavigation
|
||||
@ -1,6 +1,7 @@
|
||||
import type { BannerRecommend } from './banners'
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
import ListWrapper from '../list/list-wrapper'
|
||||
import HomeCatalogNavigation from './home-catalog-navigation'
|
||||
import HomeHeader from './home-header'
|
||||
import HomeHero from './home-hero'
|
||||
import HomeSearch from './home-search'
|
||||
@ -37,10 +38,8 @@ const MarketplaceHome = ({
|
||||
aria-hidden="true"
|
||||
className={cn('shrink-0', isMarketplacePlatform ? 'h-6' : 'h-12')}
|
||||
/>
|
||||
<HomeTrending
|
||||
banners={banners}
|
||||
isMarketplacePlatform={isMarketplacePlatform}
|
||||
/>
|
||||
<HomeTrending banners={banners} isMarketplacePlatform={isMarketplacePlatform} />
|
||||
<HomeCatalogNavigation isMarketplacePlatform={isMarketplacePlatform} />
|
||||
<div className="contents [&>div]:bg-background-default!">
|
||||
<ListWrapper
|
||||
showInstallButton={showInstallButton}
|
||||
|
||||
@ -19,13 +19,14 @@ import { PLUGIN_CATEGORY_WITH_COLLECTIONS, PLUGIN_TYPE_SEARCH_MAP } from './cons
|
||||
|
||||
type PluginTypeSwitchProps = {
|
||||
className?: string
|
||||
variant?: 'default' | 'hero'
|
||||
variant?: 'default' | 'hero' | 'home'
|
||||
}
|
||||
const PluginTypeSwitch = ({ className, variant = 'default' }: PluginTypeSwitchProps) => {
|
||||
const { t } = useTranslation()
|
||||
const [activePluginType, handleActivePluginTypeChange] = useActivePluginType()
|
||||
const setSearchMode = useSetAtom(searchModeAtom)
|
||||
const isHero = variant === 'hero'
|
||||
const isHome = variant === 'home'
|
||||
const iconClassName = 'mr-1.5 size-4'
|
||||
|
||||
const options: Array<{
|
||||
@ -38,7 +39,7 @@ const PluginTypeSwitch = ({ className, variant = 'default' }: PluginTypeSwitchPr
|
||||
text: isHero
|
||||
? t(($) => $['marketplace.allPlugins'], { ns: 'plugin' })
|
||||
: t(($) => $['category.all'], { ns: 'plugin' }),
|
||||
icon: isHero ? <PluginIcon className={iconClassName} /> : null,
|
||||
icon: isHero || isHome ? <PluginIcon className={iconClassName} /> : null,
|
||||
},
|
||||
{
|
||||
value: PLUGIN_TYPE_SEARCH_MAP.model,
|
||||
@ -52,12 +53,14 @@ const PluginTypeSwitch = ({ className, variant = 'default' }: PluginTypeSwitchPr
|
||||
},
|
||||
{
|
||||
value: PLUGIN_TYPE_SEARCH_MAP.datasource,
|
||||
text: t(($) => $['category.datasources'], { ns: 'plugin' }),
|
||||
text: t(($) => $[isHome ? 'categorySingle.datasource' : 'category.datasources'], {
|
||||
ns: 'plugin',
|
||||
}),
|
||||
icon: <RiDatabase2Line className={iconClassName} />,
|
||||
},
|
||||
{
|
||||
value: PLUGIN_TYPE_SEARCH_MAP.agent,
|
||||
text: t(($) => $['category.agents'], { ns: 'plugin' }),
|
||||
text: t(($) => $[isHome ? 'categorySingle.agent' : 'category.agents'], { ns: 'plugin' }),
|
||||
icon: <RiSpeakAiLine className={iconClassName} />,
|
||||
},
|
||||
{
|
||||
@ -82,9 +85,13 @@ const PluginTypeSwitch = ({ className, variant = 'default' }: PluginTypeSwitchPr
|
||||
className={cn(
|
||||
isHero
|
||||
? 'flex shrink-0 items-center gap-1 overflow-x-auto'
|
||||
: 'flex shrink-0 items-center justify-center space-x-2 bg-background-body py-3',
|
||||
: isHome
|
||||
? 'flex shrink-0 items-center gap-1 overflow-x-auto'
|
||||
: 'flex shrink-0 items-center justify-center space-x-2 bg-background-body py-3',
|
||||
className,
|
||||
)}
|
||||
role="group"
|
||||
aria-label={t(($) => $['marketplace.allPlugins'], { ns: 'plugin' })}
|
||||
>
|
||||
{options.map((option, index) => {
|
||||
const isActive = activePluginType === option.value
|
||||
@ -96,7 +103,11 @@ const PluginTypeSwitch = ({ className, variant = 'default' }: PluginTypeSwitchPr
|
||||
aria-pressed={isActive}
|
||||
className={cn(
|
||||
'flex h-8 cursor-pointer appearance-none items-center rounded-lg border border-transparent px-2.5 system-md-medium whitespace-nowrap outline-hidden focus-visible:ring-2 focus-visible:ring-state-accent-solid',
|
||||
isHero ? 'text-text-primary-on-surface' : 'text-text-tertiary',
|
||||
isHero
|
||||
? 'text-text-primary-on-surface'
|
||||
: isHome
|
||||
? 'min-w-12 justify-center text-text-tertiary'
|
||||
: 'text-text-tertiary',
|
||||
!isActive &&
|
||||
(isHero
|
||||
? 'hover:bg-white/20'
|
||||
@ -104,7 +115,9 @@ const PluginTypeSwitch = ({ className, variant = 'default' }: PluginTypeSwitchPr
|
||||
isActive &&
|
||||
(isHero
|
||||
? 'border-white/95 bg-components-main-nav-nav-button-bg-active text-saas-dify-blue-inverted shadow-md backdrop-blur-[5px]'
|
||||
: 'border-components-main-nav-nav-button-border bg-components-main-nav-nav-button-bg-active! text-components-main-nav-nav-button-text-active! shadow-xs'),
|
||||
: isHome
|
||||
? 'bg-background-interaction-from-bg-2 text-saas-dify-blue-inverted'
|
||||
: 'border-components-main-nav-nav-button-border bg-components-main-nav-nav-button-bg-active! text-components-main-nav-nav-button-text-active! shadow-xs'),
|
||||
)}
|
||||
onClick={() => {
|
||||
handleActivePluginTypeChange(option.value)
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "تمكين تطوير الذكاء الاصطناعي الخاص بك",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "جديد",
|
||||
"marketplace.home.plugins": "المكونات الإضافية",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "قوالب",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Unterstützen Sie Ihre KI-Entwicklung",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Neu",
|
||||
"marketplace.home.plugins": "Plugins",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Vorlagen",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Empower your AI development",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "New",
|
||||
"marketplace.home.plugins": "Plugins",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Templates",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Potencie su desarrollo de IA",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Nuevo",
|
||||
"marketplace.home.plugins": "Plugins",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Plantillas",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "توسعه هوش مصنوعی خود را توانمند کنید",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "جدید",
|
||||
"marketplace.home.plugins": "افزونهها",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "الگوها",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Renforcez le développement de votre IA",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Nouveau",
|
||||
"marketplace.home.plugins": "Plugins",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Modèles",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "अपने एआई विकास को सशक्त बनाएं",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "नया",
|
||||
"marketplace.home.plugins": "एकीकरण",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "टेम्पलेट",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Berdayakan pengembangan AI Anda",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Baru",
|
||||
"marketplace.home.plugins": "Plugin",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Templat",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Potenzia lo sviluppo dell'intelligenza artificiale",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Nuovo",
|
||||
"marketplace.home.plugins": "Plugin",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Modelli",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "AI 開発をサポートする",
|
||||
"marketplace.home.heroSubtitle": "Dify Marketplace で、より安全で信頼性の高いプラグインを見つけましょう。",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "新着",
|
||||
"marketplace.home.plugins": "プラグイン",
|
||||
"marketplace.home.searchPlaceholder": "プラグインまたはテンプレートを検索",
|
||||
"marketplace.home.templates": "テンプレート",
|
||||
"marketplace.home.trendingByCreator": "{{creator}} 作成",
|
||||
"marketplace.home.trendingDescription": "実際の利用状況に基づく人気プラグインを2週間ごとに更新。ワークスペースでの実行数によるランキングで、有料掲載や編集部による選定はありません。",
|
||||
"marketplace.home.trendingEyebrow": "トレンド",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "AI 개발 역량 강화",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "신규",
|
||||
"marketplace.home.plugins": "플러그인",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "템플릿",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Empower your AI development",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Nieuw",
|
||||
"marketplace.home.plugins": "Plugins",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Sjablonen",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Zwiększ możliwości rozwoju sztucznej inteligencji",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Nowość",
|
||||
"marketplace.home.plugins": "Integracje",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Szablony",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Capacite seu desenvolvimento de IA",
|
||||
"marketplace.home.heroSubtitle": "Crie com plugins mais seguros e confiáveis do Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Novo",
|
||||
"marketplace.home.plugins": "Plugins",
|
||||
"marketplace.home.searchPlaceholder": "Buscar plugins ou modelos",
|
||||
"marketplace.home.templates": "Modelos",
|
||||
"marketplace.home.trendingByCreator": "por {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Destaques por uso real, atualizados a cada duas semanas. Classificados pelas execuções reais nos espaços de trabalho — sem promoção paga ou seleção editorial.",
|
||||
"marketplace.home.trendingEyebrow": "Em alta agora",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Îmbunătățește-ți dezvoltarea AI",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Nou",
|
||||
"marketplace.home.plugins": "Plugin-uri",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Șabloane",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Расширьте возможности разработки ИИ",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Новое",
|
||||
"marketplace.home.plugins": "Интеграции",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Шаблоны",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Okrepite svoj razvoj AI",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Novo",
|
||||
"marketplace.home.plugins": "Integracije",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Predloge",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "เพิ่มศักยภาพในการพัฒนา AI ของคุณ",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "ใหม่",
|
||||
"marketplace.home.plugins": "ปลั๊กอิน",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "เทมเพลต",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Yapay zeka geliştirmenizi güçlendirin",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Yeni",
|
||||
"marketplace.home.plugins": "Eklentiler",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Şablonlar",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Розширюйте можливості розробки штучного інтелекту",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Нове",
|
||||
"marketplace.home.plugins": "Інтеграції",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Шаблони",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "Hỗ trợ phát triển AI của bạn",
|
||||
"marketplace.home.heroSubtitle": "Build with safer, more reliable plugins from the Dify Marketplace.",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "Mới",
|
||||
"marketplace.home.plugins": "Plugin",
|
||||
"marketplace.home.searchPlaceholder": "Search plugins or templates",
|
||||
"marketplace.home.templates": "Mẫu",
|
||||
"marketplace.home.trendingByCreator": "by {{creator}}",
|
||||
"marketplace.home.trendingDescription": "Top picks by real usage, refreshed every two weeks. Ranked by actual runs across workspaces — no paid placement, no editorial picks.",
|
||||
"marketplace.home.trendingEyebrow": "Trending Now",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "助力您的 AI 开发",
|
||||
"marketplace.home.heroSubtitle": "在 Dify Marketplace 探索更安全、更可靠的插件。",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "新",
|
||||
"marketplace.home.plugins": "插件",
|
||||
"marketplace.home.searchPlaceholder": "搜索插件或模板",
|
||||
"marketplace.home.templates": "模板",
|
||||
"marketplace.home.trendingByCreator": "由 {{creator}} 发布",
|
||||
"marketplace.home.trendingDescription": "基于真实使用情况选出的热门插件,每两周更新一次。榜单按各工作区的实际运行次数排序,不含付费推广或编辑推荐。",
|
||||
"marketplace.home.trendingEyebrow": "当前热门",
|
||||
|
||||
@ -228,7 +228,10 @@
|
||||
"marketplace.empower": "為您的 AI 開發提供支援",
|
||||
"marketplace.home.heroSubtitle": "在 Dify Marketplace 探索更安全、更可靠的外掛程式。",
|
||||
"marketplace.home.heroTitle": "Discover. Extend. Build",
|
||||
"marketplace.home.new": "新",
|
||||
"marketplace.home.plugins": "外掛",
|
||||
"marketplace.home.searchPlaceholder": "搜尋外掛程式或範本",
|
||||
"marketplace.home.templates": "範本",
|
||||
"marketplace.home.trendingByCreator": "由 {{creator}} 發布",
|
||||
"marketplace.home.trendingDescription": "根據真實使用情況選出的熱門外掛程式,每兩週更新一次。榜單按各工作區的實際執行次數排序,不含付費推廣或編輯推薦。",
|
||||
"marketplace.home.trendingEyebrow": "目前熱門",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user