chore: commit pending local changes (2026-09-17 github sync)
This commit is contained in:
parent
c9319a9266
commit
94d3b11921
@ -57,3 +57,61 @@ API Key: API Key
|
||||
我的工单: My Tickets
|
||||
工单管理: Ticket Management
|
||||
提交新工单: New Ticket
|
||||
产线平台: Pipeline Platform
|
||||
能力: Capabilities
|
||||
流程: Workflow
|
||||
登录 / 注册: Sign In / Up
|
||||
AI 原生 · 产线操作系统: AI-Native · Pipeline Operating System
|
||||
把业务装进产线: Put Business on Pipelines
|
||||
让 Agent 自主运转: Let Agents Run It
|
||||
产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。: The Pipeline Platform is an agent-driven enterprise pipeline operating system: launch opportunity, bidding and development lines in one click, let LLM agents advance tasks autonomously, keep humans as quality gates — every output is a product and every run is billed.
|
||||
查看平台能力: Explore Capabilities
|
||||
功能模块: Modules
|
||||
自主运转: Autonomous
|
||||
语言国际化: Languages
|
||||
商机挖掘: Opportunity Mining
|
||||
投标生产: Bid Production
|
||||
软件开发: Software Development
|
||||
模型网关: Model Gateway
|
||||
产品商品化: Productization
|
||||
计费记账: Billing & Accounting
|
||||
供销协同: Supply Chain
|
||||
人机协同门禁: Human-in-the-Loop Gates
|
||||
平台能力: Platform Capabilities
|
||||
不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。: Not chatbots — intelligent pipelines that work autonomously, stay auditable and bill directly.
|
||||
Agent 驱动产线引擎: Agent-Driven Pipeline Engine
|
||||
会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。: Start by chat: one sentence kicks off a flow; agents decompose tasks, call LLMs and produce deliverables. Three-layer LLM fault tolerance keeps pipelines running through single-model failures.
|
||||
多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。: Unified access to multi-vendor LLMs: balance gating, sticky session rotation, automatic failover routing and per-call billing — API keys never leave the process.
|
||||
资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。: Full chain from resource to product, pricing, discount, subscription and billing; display price is the real price multiplied by the customer discount. Running a pipeline consumes and books in real time.
|
||||
平台待办中枢: Platform Todo Hub
|
||||
全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。: The global async notification hub: gates, confirmations and uploads bubble up as human todos — each item is issued once and auto-replenished when handled.
|
||||
PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。: PM review, QC inspection and human confirmation at every layer — machine speed with human judgment, fully traceable in audit logs.
|
||||
安全与多租户: Security & Multi-Tenancy
|
||||
RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。: Fine-grained RBAC path permissions, organization isolation, short-lived internal tokens, login audit and lockout.
|
||||
国际化与双主题: i18n & Dual Themes
|
||||
中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。: Live switching across Chinese, English, Japanese and Korean; light/dark themes in one click; same experience on desktop and mobile H5.
|
||||
每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。: Every pipeline is a complete business loop: from intelligence input to shippable output, advanced by agents and gated by humans.
|
||||
招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。: Tender intelligence collection → opportunity assessment → research reports → human confirmation: turn market signals into followable opportunities.
|
||||
运行中: Live
|
||||
标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。: Intelligent bid document drafting: point-by-point scoring responses, technical/commercial volumes, material gap lists and multi-round QC gates.
|
||||
SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。: SDLC task chain: requirements → design → development → testing → deployment, with PM review gates and deliverable management.
|
||||
面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。: Ops automation for FOMS: alert handling, inspection reports and change orchestration.
|
||||
规划中: Planned
|
||||
内容生产与投放自动化:素材生成、渠道分发、效果回收。: Content production and campaign automation: asset generation, channel distribution and performance feedback.
|
||||
五步跑通一条产线: Five Steps to Run a Pipeline
|
||||
订阅产线: Subscribe
|
||||
在产品商城选购产线订阅,账号权益即时生效。: Buy a pipeline subscription in the product store; entitlements take effect instantly.
|
||||
发起会话: Start a Session
|
||||
进入产线工作台,用一句话下达任务。: Enter the pipeline workspace and issue a task in one sentence.
|
||||
Agent 自主执行: Agents Execute
|
||||
任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。: Task decomposition, model calls and deliverables advance automatically — jump in to steer at any time.
|
||||
人类门禁: Human Gates
|
||||
关键节点冒泡为平台待办,人看过正文再放行。: Key checkpoints bubble up as platform todos; humans review the content before release.
|
||||
交付与记账: Deliver & Bill
|
||||
产出归档、按量出账,消费明细随时可查。: Outputs are archived and billed by usage; consumption details available anytime.
|
||||
准备好把业务装上产线了吗?: Ready to put your business on pipelines?
|
||||
注册账号,订阅第一条产线,让 Agent 今天就开始干活。: Register, subscribe to your first pipeline, and let agents start working today.
|
||||
立即注册: Register Now
|
||||
© 2026 开元云(北京)科技有限公司: © 2026 Open Computing (Beijing) Technology Co., Ltd.
|
||||
登录: Sign In
|
||||
产线矩阵: Pipeline Matrix
|
||||
|
||||
@ -36,3 +36,61 @@ API Key: API Key
|
||||
我的工单: マイチケット
|
||||
工单管理: チケット管理
|
||||
提交新工单: 新規チケット
|
||||
产线平台: パイプラインプラットフォーム
|
||||
能力: 機能
|
||||
流程: フロー
|
||||
登录 / 注册: ログイン / 新規登録
|
||||
AI 原生 · 产线操作系统: AIネイティブ・パイプラインOS
|
||||
把业务装进产线: 業務をパイプラインへ
|
||||
让 Agent 自主运转: エージェントに自律稼働させる
|
||||
产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。: パイプラインプラットフォームはエージェント駆動の企業向けインテリジェント・パイプラインOSです。商談・入札・開発をワンクリックで開始し、LLMエージェントがタスクを自律的に推進、人間ゲートが品質を管理。成果物はそのまま製品となり、実行と同時に課金・記帳されます。
|
||||
查看平台能力: プラットフォーム機能を見る
|
||||
功能模块: 機能モジュール
|
||||
自主运转: 自律稼働
|
||||
语言国际化: 言語対応
|
||||
商机挖掘: 商談発掘
|
||||
投标生产: 入札作成
|
||||
软件开发: ソフトウェア開発
|
||||
模型网关: モデルゲートウェイ
|
||||
产品商品化: 製品商品化
|
||||
计费记账: 課金・記帳
|
||||
供销协同: 供給販売連携
|
||||
人机协同门禁: 人間協調ゲート
|
||||
平台能力: プラットフォーム機能
|
||||
不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。: チャットボットではなく、自律的に動き、監査可能で、直接課金できるインテリジェント・パイプラインです。
|
||||
Agent 驱动产线引擎: エージェント駆動パイプラインエンジン
|
||||
会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。: 会話で開始:一言でフローを起動し、エージェントがタスクを自動分解、LLMを呼び出し、成果物を生成。LLM三重フォールトトレランスで単一モデル障害でもパイプラインは止まりません。
|
||||
多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。: マルチベンダーLLMの統一接続:残高ゲート、セッション粘着ローテーション、障害時自動ルーティング、呼び出し単位課金。APIキーはプロセス外に出ません。
|
||||
资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。: リソース→製品→価格→割引→注文→課金の全チェーン。表示価格は「実価格×顧客割引」で計算し、パイプライン実行と同時に消費・記帳されます。
|
||||
平台待办中枢: プラットフォームToDoハブ
|
||||
全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。: グローバル非同期通知ハブ:ゲート、確認、アップロードなどのイベントが人間のToDoとして統一バブル化。同一事項は一度だけ発行され、処理後は自動補充されます。
|
||||
PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。: PMレビュー、QC検査、人間確認の多層チェック——機械の速度と人間の判断、監査ログで全過程を追跡可能。
|
||||
安全与多租户: セキュリティとマルチテナント
|
||||
RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。: RBAC細粒度パス権限、組織分離、短命トークン内部プロキシ、ログイン監査と失敗ロックアウト。
|
||||
国际化与双主题: 国際化とデュアルテーマ
|
||||
中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。: 中 / 英 / 日 / 韓の4言語をリアルタイム切替、明暗テーマをワンクリックで切替、デスクトップとモバイルH5で同一体験。
|
||||
每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。: 各パイプラインは完全な業務ループ:情報入力から納品可能な成果物まで、エージェントが推進し人間ゲートが管理します。
|
||||
招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。: 入札情報収集 → 商談評価 → 調査レポート → 人間確認。市場シグナルを追跡可能な商談に変えます。
|
||||
运行中: 稼働中
|
||||
标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。: 入札書類のインテリジェント作成:評価基準への逐項回答、技術/商務分冊生成、資料不足リスト、複数ラウンドのQCゲート。
|
||||
SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。: SDLCタスクチェーン:要件 → 設計 → 開発 → テスト → デプロイ、PMレビューゲート+成果物管理。
|
||||
面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。: FOMS向け運用自動化:アラート処理、点検レポート、変更オーケストレーション。
|
||||
规划中: 計画中
|
||||
内容生产与投放自动化:素材生成、渠道分发、效果回收。: コンテンツ制作と配信の自動化:素材生成、チャネル配信、効果回収。
|
||||
五步跑通一条产线: 5ステップでパイプラインを回す
|
||||
订阅产线: パイプライン購読
|
||||
在产品商城选购产线订阅,账号权益即时生效。: 製品ストアでパイプライン購読を購入、アカウント権益は即時有効。
|
||||
发起会话: セッション開始
|
||||
进入产线工作台,用一句话下达任务。: パイプラインワークスペースに入り、一言でタスクを指示。
|
||||
Agent 自主执行: エージェント自律実行
|
||||
任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。: タスク分解、モデル呼び出し、成果物生成まで全自動で進行。いつでも割り込んで修正できます。
|
||||
人类门禁: 人間ゲート
|
||||
关键节点冒泡为平台待办,人看过正文再放行。: 重要ノードがプラットフォームToDoとしてバブル化、人間が本文を確認して放行。
|
||||
交付与记账: 納品と記帳
|
||||
产出归档、按量出账,消费明细随时可查。: 成果物はアーカイブされ使用量に応じて課金、消費明細はいつでも照会可能。
|
||||
准备好把业务装上产线了吗?: 業務をパイプラインに乗せる準備はできましたか?
|
||||
注册账号,订阅第一条产线,让 Agent 今天就开始干活。: アカウントを登録し、最初のパイプラインを購読して、今日からエージェントに働かせましょう。
|
||||
立即注册: 今すぐ登録
|
||||
© 2026 开元云(北京)科技有限公司: © 2026 開元雲(北京)科技有限公司
|
||||
登录: ログイン
|
||||
产线矩阵: パイプラインマトリクス
|
||||
|
||||
@ -36,3 +36,61 @@ API Key: API Key
|
||||
我的工单: 내 티켓
|
||||
工单管理: 티켓 관리
|
||||
提交新工单: 새 티켓
|
||||
产线平台: 파이프라인 플랫폼
|
||||
能力: 기능
|
||||
流程: 워크플로
|
||||
登录 / 注册: 로그인 / 가입
|
||||
AI 原生 · 产线操作系统: AI 네이티브 · 파이프라인 운영체제
|
||||
把业务装进产线: 업무를 파이프라인에 싣다
|
||||
让 Agent 自主运转: 에이전트가 자율 가동
|
||||
产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。: 파이프라인 플랫폼은 에이전트 기반 기업형 지능 파이프라인 운영체제입니다. 영업기회·입찰·개발을 원클릭으로 시작하고, LLM 에이전트가 작업을 자율 추진하며, 인간 게이트가 품질을 관리합니다. 산출물은 곧 제품이고, 실행 즉시 과금·기장됩니다.
|
||||
查看平台能力: 플랫폼 기능 보기
|
||||
功能模块: 기능 모듈
|
||||
自主运转: 자율 가동
|
||||
语言国际化: 다국어 지원
|
||||
商机挖掘: 영업기회 발굴
|
||||
投标生产: 입찰서 생산
|
||||
软件开发: 소프트웨어 개발
|
||||
模型网关: 모델 게이트웨이
|
||||
产品商品化: 제품 상품화
|
||||
计费记账: 과금·기장
|
||||
供销协同: 공급·판매 연동
|
||||
人机协同门禁: 인간 협업 게이트
|
||||
平台能力: 플랫폼 기능
|
||||
不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。: 챗봇이 아니라, 자율적으로 일하고, 감사 가능하며, 직접 과금되는 지능형 파이프라인입니다.
|
||||
Agent 驱动产线引擎: 에이전트 기반 파이프라인 엔진
|
||||
会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。: 대화로 시작: 한 문장으로 플로를 가동하면 에이전트가 작업을 자동 분해하고 LLM을 호출해 산출물을 생성합니다. LLM 3중 장애 허용으로 단일 모델 장애에도 파이프라인은 멈추지 않습니다.
|
||||
多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。: 멀티 벤더 LLM 통합 접속: 잔액 게이트, 세션 고정 라운드로빈, 장애 자동 라우팅, 호출 단위 과금. API 키는 프로세스 밖으로 나가지 않습니다.
|
||||
资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。: 리소스→제품→가격→할인→구독→과금 전체 체인. 표시 가격은 「실가격×고객 할인」으로 계산되며, 파이프라인 실행 즉시 소비·기장됩니다.
|
||||
平台待办中枢: 플랫폼 할 일 허브
|
||||
全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。: 전역 비동기 알림 허브: 게이트·확인·업로드 등 이벤트가 인간 할 일로 통합 버블됩니다. 동일 사항은 한 번만 발행되고 처리 후 자동 보충됩니다.
|
||||
PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。: PM 검토, QC 검사, 인간 확인의 다층 체크——기계의 속도와 인간의 판단, 감사 로그로 전 과정 추적 가능.
|
||||
安全与多租户: 보안 및 멀티테넌시
|
||||
RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。: RBAC 세분 경로 권한, 조직 격리, 단기 토큰 내부 프록시, 로그인 감사 및 실패 잠금.
|
||||
国际化与双主题: 국제화 및 듀얼 테마
|
||||
中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。: 중 / 영 / 일 / 한 4개 언어 실시간 전환, 밝기/어둠 테마 원클릭 전환, 데스크톱과 모바일 H5 동일 경험.
|
||||
每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。: 각 파이프라인은 완전한 업무 루프: 정보 입력부터 납품 가능한 산출물까지, 에이전트가 추진하고 인간 게이트가 관리합니다.
|
||||
招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。: 입찰 정보 수집 → 영업기회 평가 → 조사 보고서 → 인간 확인. 시장 신호를 후속 조치 가능한 영업기회로 변환합니다.
|
||||
运行中: 가동 중
|
||||
标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。: 입찰서 지능 작성: 평가 기준 항목별 응답, 기술/상업 분책 생성, 자료 누락 목록, 다중 QC 게이트.
|
||||
SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。: SDLC 작업 체인: 요구 → 설계 → 개발 → 테스트 → 배포, PM 검토 게이트 + 산출물 관리.
|
||||
面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。: FOMS 대상 운영 자동화: 알람 처리, 점검 보고서, 변경 오케스트레이션.
|
||||
规划中: 계획 중
|
||||
内容生产与投放自动化:素材生成、渠道分发、效果回收。: 콘텐츠 제작·배포 자동화: 소재 생성, 채널 배포, 효과 회수.
|
||||
五步跑通一条产线: 5단계로 파이프라인 가동
|
||||
订阅产线: 파이프라인 구독
|
||||
在产品商城选购产线订阅,账号权益即时生效。: 제품 스토어에서 파이프라인 구독 구매, 계정 권익 즉시 발효.
|
||||
发起会话: 세션 시작
|
||||
进入产线工作台,用一句话下达任务。: 파이프라인 워크스페이스에 들어가 한 문장으로 작업을 지시하세요.
|
||||
Agent 自主执行: 에이전트 자율 실행
|
||||
任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。: 작업 분해, 모델 호출, 산출물 생성까지 전 과정 자동 추진. 언제든 끼어들어 방향을 수정할 수 있습니다.
|
||||
人类门禁: 인간 게이트
|
||||
关键节点冒泡为平台待办,人看过正文再放行。: 핵심 노드가 플랫폼 할 일로 버블되며, 사람이 본문을 확인 후 통과시킵니다.
|
||||
交付与记账: 납품과 기장
|
||||
产出归档、按量出账,消费明细随时可查。: 산출물 아카이브, 사용량 기반 과금, 소비 명세 상시 조회 가능.
|
||||
准备好把业务装上产线了吗?: 업무를 파이프라인에 실을 준비가 되셨나요?
|
||||
注册账号,订阅第一条产线,让 Agent 今天就开始干活。: 계정을 가입하고 첫 파이프라인을 구독해, 오늘부터 에이전트에게 일을 시키세요.
|
||||
立即注册: 지금 가입
|
||||
© 2026 开元云(北京)科技有限公司: © 2026 Kaiyuan Cloud (Beijing) Technology Co., Ltd.
|
||||
登录: 로그인
|
||||
产线矩阵: 파이프라인 매트릭스
|
||||
|
||||
@ -57,3 +57,61 @@ API Key: API Key
|
||||
我的工单: 我的工单
|
||||
工单管理: 工单管理
|
||||
提交新工单: 提交新工单
|
||||
产线平台: 产线平台
|
||||
能力: 能力
|
||||
流程: 流程
|
||||
登录 / 注册: 登录 / 注册
|
||||
AI 原生 · 产线操作系统: AI 原生 · 产线操作系统
|
||||
把业务装进产线: 把业务装进产线
|
||||
让 Agent 自主运转: 让 Agent 自主运转
|
||||
产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。: 产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。
|
||||
查看平台能力: 查看平台能力
|
||||
功能模块: 功能模块
|
||||
自主运转: 自主运转
|
||||
语言国际化: 语言国际化
|
||||
商机挖掘: 商机挖掘
|
||||
投标生产: 投标生产
|
||||
软件开发: 软件开发
|
||||
模型网关: 模型网关
|
||||
产品商品化: 产品商品化
|
||||
计费记账: 计费记账
|
||||
供销协同: 供销协同
|
||||
人机协同门禁: 人机协同门禁
|
||||
平台能力: 平台能力
|
||||
不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。: 不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。
|
||||
Agent 驱动产线引擎: Agent 驱动产线引擎
|
||||
会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。: 会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。
|
||||
多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。: 多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。
|
||||
资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。: 资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。
|
||||
平台待办中枢: 平台待办中枢
|
||||
全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。: 全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。
|
||||
PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。: PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。
|
||||
安全与多租户: 安全与多租户
|
||||
RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。: RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。
|
||||
国际化与双主题: 国际化与双主题
|
||||
中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。: 中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。
|
||||
每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。: 每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。
|
||||
招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。: 招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。
|
||||
运行中: 运行中
|
||||
标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。: 标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。
|
||||
SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。: SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。
|
||||
面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。: 面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。
|
||||
规划中: 规划中
|
||||
内容生产与投放自动化:素材生成、渠道分发、效果回收。: 内容生产与投放自动化:素材生成、渠道分发、效果回收。
|
||||
五步跑通一条产线: 五步跑通一条产线
|
||||
订阅产线: 订阅产线
|
||||
在产品商城选购产线订阅,账号权益即时生效。: 在产品商城选购产线订阅,账号权益即时生效。
|
||||
发起会话: 发起会话
|
||||
进入产线工作台,用一句话下达任务。: 进入产线工作台,用一句话下达任务。
|
||||
Agent 自主执行: Agent 自主执行
|
||||
任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。: 任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。
|
||||
人类门禁: 人类门禁
|
||||
关键节点冒泡为平台待办,人看过正文再放行。: 关键节点冒泡为平台待办,人看过正文再放行。
|
||||
交付与记账: 交付与记账
|
||||
产出归档、按量出账,消费明细随时可查。: 产出归档、按量出账,消费明细随时可查。
|
||||
准备好把业务装上产线了吗?: 准备好把业务装上产线了吗?
|
||||
注册账号,订阅第一条产线,让 Agent 今天就开始干活。: 注册账号,订阅第一条产线,让 Agent 今天就开始干活。
|
||||
立即注册: 立即注册
|
||||
© 2026 开元云(北京)科技有限公司: © 2026 开元云(北京)科技有限公司
|
||||
登录: 登录
|
||||
产线矩阵: 产线矩阵
|
||||
|
||||
263
scripts/add_home_i18n.py
Normal file
263
scripts/add_home_i18n.py
Normal file
@ -0,0 +1,263 @@
|
||||
#!/usr/bin/env python3
|
||||
"""把主页词条追加进 i18n/{zh,en,jp,ko}/msg.txt(幂等:已存在的 key 跳过)。"""
|
||||
import io, os
|
||||
|
||||
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
T = {
|
||||
'zh': {
|
||||
"产线平台": "产线平台",
|
||||
"能力": "能力",
|
||||
"流程": "流程",
|
||||
"登录 / 注册": "登录 / 注册",
|
||||
"AI 原生 · 产线操作系统": "AI 原生 · 产线操作系统",
|
||||
"把业务装进产线": "把业务装进产线",
|
||||
"让 Agent 自主运转": "让 Agent 自主运转",
|
||||
"产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。": "产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。",
|
||||
"查看平台能力": "查看平台能力",
|
||||
"功能模块": "功能模块",
|
||||
"自主运转": "自主运转",
|
||||
"语言国际化": "语言国际化",
|
||||
"商机挖掘": "商机挖掘",
|
||||
"投标生产": "投标生产",
|
||||
"软件开发": "软件开发",
|
||||
"模型网关": "模型网关",
|
||||
"产品商品化": "产品商品化",
|
||||
"计费记账": "计费记账",
|
||||
"供销协同": "供销协同",
|
||||
"人机协同门禁": "人机协同门禁",
|
||||
"平台能力": "平台能力",
|
||||
"不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。": "不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。",
|
||||
"Agent 驱动产线引擎": "Agent 驱动产线引擎",
|
||||
"会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。": "会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。",
|
||||
"多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。": "多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。",
|
||||
"资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。": "资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。",
|
||||
"平台待办中枢": "平台待办中枢",
|
||||
"全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。": "全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。",
|
||||
"PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。": "PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。",
|
||||
"安全与多租户": "安全与多租户",
|
||||
"RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。": "RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。",
|
||||
"国际化与双主题": "国际化与双主题",
|
||||
"中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。": "中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。",
|
||||
"每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。": "每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。",
|
||||
"招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。": "招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。",
|
||||
"运行中": "运行中",
|
||||
"标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。": "标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。",
|
||||
"SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。": "SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。",
|
||||
"面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。": "面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。",
|
||||
"规划中": "规划中",
|
||||
"内容生产与投放自动化:素材生成、渠道分发、效果回收。": "内容生产与投放自动化:素材生成、渠道分发、效果回收。",
|
||||
"五步跑通一条产线": "五步跑通一条产线",
|
||||
"订阅产线": "订阅产线",
|
||||
"在产品商城选购产线订阅,账号权益即时生效。": "在产品商城选购产线订阅,账号权益即时生效。",
|
||||
"发起会话": "发起会话",
|
||||
"进入产线工作台,用一句话下达任务。": "进入产线工作台,用一句话下达任务。",
|
||||
"Agent 自主执行": "Agent 自主执行",
|
||||
"任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。": "任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。",
|
||||
"人类门禁": "人类门禁",
|
||||
"关键节点冒泡为平台待办,人看过正文再放行。": "关键节点冒泡为平台待办,人看过正文再放行。",
|
||||
"交付与记账": "交付与记账",
|
||||
"产出归档、按量出账,消费明细随时可查。": "产出归档、按量出账,消费明细随时可查。",
|
||||
"准备好把业务装上产线了吗?": "准备好把业务装上产线了吗?",
|
||||
"注册账号,订阅第一条产线,让 Agent 今天就开始干活。": "注册账号,订阅第一条产线,让 Agent 今天就开始干活。",
|
||||
"立即注册": "立即注册",
|
||||
"© 2026 开元云(北京)科技有限公司": "© 2026 开元云(北京)科技有限公司",
|
||||
"登录": "登录",
|
||||
},
|
||||
'en': {
|
||||
"产线平台": "Pipeline Platform",
|
||||
"能力": "Capabilities",
|
||||
"流程": "Workflow",
|
||||
"登录 / 注册": "Sign In / Up",
|
||||
"AI 原生 · 产线操作系统": "AI-Native · Pipeline Operating System",
|
||||
"把业务装进产线": "Put Business on Pipelines",
|
||||
"让 Agent 自主运转": "Let Agents Run It",
|
||||
"产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。": "The Pipeline Platform is an agent-driven enterprise pipeline operating system: launch opportunity, bidding and development lines in one click, let LLM agents advance tasks autonomously, keep humans as quality gates — every output is a product and every run is billed.",
|
||||
"查看平台能力": "Explore Capabilities",
|
||||
"功能模块": "Modules",
|
||||
"自主运转": "Autonomous",
|
||||
"语言国际化": "Languages",
|
||||
"商机挖掘": "Opportunity Mining",
|
||||
"投标生产": "Bid Production",
|
||||
"软件开发": "Software Development",
|
||||
"模型网关": "Model Gateway",
|
||||
"产品商品化": "Productization",
|
||||
"计费记账": "Billing & Accounting",
|
||||
"供销协同": "Supply Chain",
|
||||
"人机协同门禁": "Human-in-the-Loop Gates",
|
||||
"平台能力": "Platform Capabilities",
|
||||
"不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。": "Not chatbots — intelligent pipelines that work autonomously, stay auditable and bill directly.",
|
||||
"Agent 驱动产线引擎": "Agent-Driven Pipeline Engine",
|
||||
"会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。": "Start by chat: one sentence kicks off a flow; agents decompose tasks, call LLMs and produce deliverables. Three-layer LLM fault tolerance keeps pipelines running through single-model failures.",
|
||||
"多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。": "Unified access to multi-vendor LLMs: balance gating, sticky session rotation, automatic failover routing and per-call billing — API keys never leave the process.",
|
||||
"资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。": "Full chain from resource to product, pricing, discount, subscription and billing; display price = real price × customer discount. Running a pipeline consumes and books in real time.",
|
||||
"平台待办中枢": "Platform Todo Hub",
|
||||
"全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。": "The global async notification hub: gates, confirmations and uploads bubble up as human todos — each item is issued once and auto-replenished when handled.",
|
||||
"PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。": "PM review, QC inspection and human confirmation at every layer — machine speed with human judgment, fully traceable in audit logs.",
|
||||
"安全与多租户": "Security & Multi-Tenancy",
|
||||
"RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。": "Fine-grained RBAC path permissions, organization isolation, short-lived internal tokens, login audit and lockout.",
|
||||
"国际化与双主题": "i18n & Dual Themes",
|
||||
"中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。": "Live switching across Chinese, English, Japanese and Korean; light/dark themes in one click; same experience on desktop and mobile H5.",
|
||||
"每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。": "Every pipeline is a complete business loop: from intelligence input to shippable output, advanced by agents and gated by humans.",
|
||||
"招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。": "Tender intelligence collection → opportunity assessment → research reports → human confirmation: turn market signals into followable opportunities.",
|
||||
"运行中": "Live",
|
||||
"标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。": "Intelligent bid document drafting: point-by-point scoring responses, technical/commercial volumes, material gap lists and multi-round QC gates.",
|
||||
"SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。": "SDLC task chain: requirements → design → development → testing → deployment, with PM review gates and deliverable management.",
|
||||
"面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。": "Ops automation for FOMS: alert handling, inspection reports and change orchestration.",
|
||||
"规划中": "Planned",
|
||||
"内容生产与投放自动化:素材生成、渠道分发、效果回收。": "Content production and campaign automation: asset generation, channel distribution and performance feedback.",
|
||||
"五步跑通一条产线": "Five Steps to Run a Pipeline",
|
||||
"订阅产线": "Subscribe",
|
||||
"在产品商城选购产线订阅,账号权益即时生效。": "Buy a pipeline subscription in the product store; entitlements take effect instantly.",
|
||||
"发起会话": "Start a Session",
|
||||
"进入产线工作台,用一句话下达任务。": "Enter the pipeline workspace and issue a task in one sentence.",
|
||||
"Agent 自主执行": "Agents Execute",
|
||||
"任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。": "Task decomposition, model calls and deliverables advance automatically — jump in to steer at any time.",
|
||||
"人类门禁": "Human Gates",
|
||||
"关键节点冒泡为平台待办,人看过正文再放行。": "Key checkpoints bubble up as platform todos; humans review the content before release.",
|
||||
"交付与记账": "Deliver & Bill",
|
||||
"产出归档、按量出账,消费明细随时可查。": "Outputs are archived and billed by usage; consumption details available anytime.",
|
||||
"准备好把业务装上产线了吗?": "Ready to put your business on pipelines?",
|
||||
"注册账号,订阅第一条产线,让 Agent 今天就开始干活。": "Register, subscribe to your first pipeline, and let agents start working today.",
|
||||
"立即注册": "Register Now",
|
||||
"© 2026 开元云(北京)科技有限公司": "© 2026 Open Computing (Beijing) Technology Co., Ltd.",
|
||||
"登录": "Sign In",
|
||||
},
|
||||
'jp': {
|
||||
"产线平台": "パイプラインプラットフォーム",
|
||||
"能力": "機能",
|
||||
"流程": "フロー",
|
||||
"登录 / 注册": "ログイン / 新規登録",
|
||||
"AI 原生 · 产线操作系统": "AIネイティブ・パイプラインOS",
|
||||
"把业务装进产线": "業務をパイプラインへ",
|
||||
"让 Agent 自主运转": "エージェントに自律稼働させる",
|
||||
"产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。": "パイプラインプラットフォームはエージェント駆動の企業向けインテリジェント・パイプラインOSです。商談・入札・開発をワンクリックで開始し、LLMエージェントがタスクを自律的に推進、人間ゲートが品質を管理。成果物はそのまま製品となり、実行と同時に課金・記帳されます。",
|
||||
"查看平台能力": "プラットフォーム機能を見る",
|
||||
"功能模块": "機能モジュール",
|
||||
"自主运转": "自律稼働",
|
||||
"语言国际化": "言語対応",
|
||||
"商机挖掘": "商談発掘",
|
||||
"投标生产": "入札作成",
|
||||
"软件开发": "ソフトウェア開発",
|
||||
"模型网关": "モデルゲートウェイ",
|
||||
"产品商品化": "製品商品化",
|
||||
"计费记账": "課金・記帳",
|
||||
"供销协同": "供給販売連携",
|
||||
"人机协同门禁": "人間協調ゲート",
|
||||
"平台能力": "プラットフォーム機能",
|
||||
"不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。": "チャットボットではなく、自律的に動き、監査可能で、直接課金できるインテリジェント・パイプラインです。",
|
||||
"Agent 驱动产线引擎": "エージェント駆動パイプラインエンジン",
|
||||
"会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。": "会話で開始:一言でフローを起動し、エージェントがタスクを自動分解、LLMを呼び出し、成果物を生成。LLM三重フォールトトレランスで単一モデル障害でもパイプラインは止まりません。",
|
||||
"多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。": "マルチベンダーLLMの統一接続:残高ゲート、セッション粘着ローテーション、障害時自動ルーティング、呼び出し単位課金。APIキーはプロセス外に出ません。",
|
||||
"资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。": "リソース→製品→価格→割引→注文→課金の全チェーン。表示価格は「実価格×顧客割引」で計算し、パイプライン実行と同時に消費・記帳されます。",
|
||||
"平台待办中枢": "プラットフォームToDoハブ",
|
||||
"全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。": "グローバル非同期通知ハブ:ゲート、確認、アップロードなどのイベントが人間のToDoとして統一バブル化。同一事項は一度だけ発行され、処理後は自動補充されます。",
|
||||
"PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。": "PMレビュー、QC検査、人間確認の多層チェック——機械の速度と人間の判断、監査ログで全過程を追跡可能。",
|
||||
"安全与多租户": "セキュリティとマルチテナント",
|
||||
"RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。": "RBAC細粒度パス権限、組織分離、短命トークン内部プロキシ、ログイン監査と失敗ロックアウト。",
|
||||
"国际化与双主题": "国際化とデュアルテーマ",
|
||||
"中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。": "中 / 英 / 日 / 韓の4言語をリアルタイム切替、明暗テーマをワンクリックで切替、デスクトップとモバイルH5で同一体験。",
|
||||
"每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。": "各パイプラインは完全な業務ループ:情報入力から納品可能な成果物まで、エージェントが推進し人間ゲートが管理します。",
|
||||
"招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。": "入札情報収集 → 商談評価 → 調査レポート → 人間確認。市場シグナルを追跡可能な商談に変えます。",
|
||||
"运行中": "稼働中",
|
||||
"标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。": "入札書類のインテリジェント作成:評価基準への逐項回答、技術/商務分冊生成、資料不足リスト、複数ラウンドのQCゲート。",
|
||||
"SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。": "SDLCタスクチェーン:要件 → 設計 → 開発 → テスト → デプロイ、PMレビューゲート+成果物管理。",
|
||||
"面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。": "FOMS向け運用自動化:アラート処理、点検レポート、変更オーケストレーション。",
|
||||
"规划中": "計画中",
|
||||
"内容生产与投放自动化:素材生成、渠道分发、效果回收。": "コンテンツ制作と配信の自動化:素材生成、チャネル配信、効果回収。",
|
||||
"五步跑通一条产线": "5ステップでパイプラインを回す",
|
||||
"订阅产线": "パイプライン購読",
|
||||
"在产品商城选购产线订阅,账号权益即时生效。": "製品ストアでパイプライン購読を購入、アカウント権益は即時有効。",
|
||||
"发起会话": "セッション開始",
|
||||
"进入产线工作台,用一句话下达任务。": "パイプラインワークスペースに入り、一言でタスクを指示。",
|
||||
"Agent 自主执行": "エージェント自律実行",
|
||||
"任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。": "タスク分解、モデル呼び出し、成果物生成まで全自動で進行。いつでも割り込んで修正できます。",
|
||||
"人类门禁": "人間ゲート",
|
||||
"关键节点冒泡为平台待办,人看过正文再放行。": "重要ノードがプラットフォームToDoとしてバブル化、人間が本文を確認して放行。",
|
||||
"交付与记账": "納品と記帳",
|
||||
"产出归档、按量出账,消费明细随时可查。": "成果物はアーカイブされ使用量に応じて課金、消費明細はいつでも照会可能。",
|
||||
"准备好把业务装上产线了吗?": "業務をパイプラインに乗せる準備はできましたか?",
|
||||
"注册账号,订阅第一条产线,让 Agent 今天就开始干活。": "アカウントを登録し、最初のパイプラインを購読して、今日からエージェントに働かせましょう。",
|
||||
"立即注册": "今すぐ登録",
|
||||
"© 2026 开元云(北京)科技有限公司": "© 2026 開元雲(北京)科技有限公司",
|
||||
"登录": "ログイン",
|
||||
},
|
||||
'ko': {
|
||||
"产线平台": "파이프라인 플랫폼",
|
||||
"能力": "기능",
|
||||
"流程": "워크플로",
|
||||
"登录 / 注册": "로그인 / 가입",
|
||||
"AI 原生 · 产线操作系统": "AI 네이티브 · 파이프라인 운영체제",
|
||||
"把业务装进产线": "업무를 파이프라인에 싣다",
|
||||
"让 Agent 自主运转": "에이전트가 자율 가동",
|
||||
"产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。": "파이프라인 플랫폼은 에이전트 기반 기업형 지능 파이프라인 운영체제입니다. 영업기회·입찰·개발을 원클릭으로 시작하고, LLM 에이전트가 작업을 자율 추진하며, 인간 게이트가 품질을 관리합니다. 산출물은 곧 제품이고, 실행 즉시 과금·기장됩니다.",
|
||||
"查看平台能力": "플랫폼 기능 보기",
|
||||
"功能模块": "기능 모듈",
|
||||
"自主运转": "자율 가동",
|
||||
"语言国际化": "다국어 지원",
|
||||
"商机挖掘": "영업기회 발굴",
|
||||
"投标生产": "입찰서 생산",
|
||||
"软件开发": "소프트웨어 개발",
|
||||
"模型网关": "모델 게이트웨이",
|
||||
"产品商品化": "제품 상품화",
|
||||
"计费记账": "과금·기장",
|
||||
"供销协同": "공급·판매 연동",
|
||||
"人机协同门禁": "인간 협업 게이트",
|
||||
"平台能力": "플랫폼 기능",
|
||||
"不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。": "챗봇이 아니라, 자율적으로 일하고, 감사 가능하며, 직접 과금되는 지능형 파이프라인입니다.",
|
||||
"Agent 驱动产线引擎": "에이전트 기반 파이프라인 엔진",
|
||||
"会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。": "대화로 시작: 한 문장으로 플로를 가동하면 에이전트가 작업을 자동 분해하고 LLM을 호출해 산출물을 생성합니다. LLM 3중 장애 허용으로 단일 모델 장애에도 파이프라인은 멈추지 않습니다.",
|
||||
"多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。": "멀티 벤더 LLM 통합 접속: 잔액 게이트, 세션 고정 라운드로빈, 장애 자동 라우팅, 호출 단위 과금. API 키는 프로세스 밖으로 나가지 않습니다.",
|
||||
"资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。": "리소스→제품→가격→할인→구독→과금 전체 체인. 표시 가격은 「실가격×고객 할인」으로 계산되며, 파이프라인 실행 즉시 소비·기장됩니다.",
|
||||
"平台待办中枢": "플랫폼 할 일 허브",
|
||||
"全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。": "전역 비동기 알림 허브: 게이트·확인·업로드 등 이벤트가 인간 할 일로 통합 버블됩니다. 동일 사항은 한 번만 발행되고 처리 후 자동 보충됩니다.",
|
||||
"PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。": "PM 검토, QC 검사, 인간 확인의 다층 체크——기계의 속도와 인간의 판단, 감사 로그로 전 과정 추적 가능.",
|
||||
"安全与多租户": "보안 및 멀티테넌시",
|
||||
"RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。": "RBAC 세분 경로 권한, 조직 격리, 단기 토큰 내부 프록시, 로그인 감사 및 실패 잠금.",
|
||||
"国际化与双主题": "국제화 및 듀얼 테마",
|
||||
"中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。": "중 / 영 / 일 / 한 4개 언어 실시간 전환, 밝기/어둠 테마 원클릭 전환, 데스크톱과 모바일 H5 동일 경험.",
|
||||
"每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。": "각 파이프라인은 완전한 업무 루프: 정보 입력부터 납품 가능한 산출물까지, 에이전트가 추진하고 인간 게이트가 관리합니다.",
|
||||
"招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。": "입찰 정보 수집 → 영업기회 평가 → 조사 보고서 → 인간 확인. 시장 신호를 후속 조치 가능한 영업기회로 변환합니다.",
|
||||
"运行中": "가동 중",
|
||||
"标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。": "입찰서 지능 작성: 평가 기준 항목별 응답, 기술/상업 분책 생성, 자료 누락 목록, 다중 QC 게이트.",
|
||||
"SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。": "SDLC 작업 체인: 요구 → 설계 → 개발 → 테스트 → 배포, PM 검토 게이트 + 산출물 관리.",
|
||||
"面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。": "FOMS 대상 운영 자동화: 알람 처리, 점검 보고서, 변경 오케스트레이션.",
|
||||
"规划中": "계획 중",
|
||||
"内容生产与投放自动化:素材生成、渠道分发、效果回收。": "콘텐츠 제작·배포 자동화: 소재 생성, 채널 배포, 효과 회수.",
|
||||
"五步跑通一条产线": "5단계로 파이프라인 가동",
|
||||
"订阅产线": "파이프라인 구독",
|
||||
"在产品商城选购产线订阅,账号权益即时生效。": "제품 스토어에서 파이프라인 구독 구매, 계정 권익 즉시 발효.",
|
||||
"发起会话": "세션 시작",
|
||||
"进入产线工作台,用一句话下达任务。": "파이프라인 워크스페이스에 들어가 한 문장으로 작업을 지시하세요.",
|
||||
"Agent 自主执行": "에이전트 자율 실행",
|
||||
"任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。": "작업 분해, 모델 호출, 산출물 생성까지 전 과정 자동 추진. 언제든 끼어들어 방향을 수정할 수 있습니다.",
|
||||
"人类门禁": "인간 게이트",
|
||||
"关键节点冒泡为平台待办,人看过正文再放行。": "핵심 노드가 플랫폼 할 일로 버블되며, 사람이 본문을 확인 후 통과시킵니다.",
|
||||
"交付与记账": "납품과 기장",
|
||||
"产出归档、按量出账,消费明细随时可查。": "산출물 아카이브, 사용량 기반 과금, 소비 명세 상시 조회 가능.",
|
||||
"准备好把业务装上产线了吗?": "업무를 파이프라인에 실을 준비가 되셨나요?",
|
||||
"注册账号,订阅第一条产线,让 Agent 今天就开始干活。": "계정을 가입하고 첫 파이프라인을 구독해, 오늘부터 에이전트에게 일을 시키세요.",
|
||||
"立即注册": "지금 가입",
|
||||
"© 2026 开元云(北京)科技有限公司": "© 2026 Kaiyuan Cloud (Beijing) Technology Co., Ltd.",
|
||||
"登录": "로그인",
|
||||
},
|
||||
}
|
||||
|
||||
for lang, items in T.items():
|
||||
p = os.path.join(ROOT, 'i18n', lang, 'msg.txt')
|
||||
existing = set()
|
||||
with io.open(p, encoding='utf-8') as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if not line or line.startswith('#'):
|
||||
continue
|
||||
k = line.split('=', 1)[0] if '=' in line else line.split(':', 1)[0]
|
||||
existing.add(k.strip())
|
||||
added = 0
|
||||
with io.open(p, 'a', encoding='utf-8') as f:
|
||||
for k, v in items.items():
|
||||
if k in existing:
|
||||
continue
|
||||
f.write(f'{k}: {v}\n')
|
||||
added += 1
|
||||
print(f'{lang}: +{added} keys (skip {len(items)-added})')
|
||||
416
scripts/check_i18n.py
Normal file
416
scripts/check_i18n.py
Normal file
@ -0,0 +1,416 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
check_i18n.py — 产线平台前端国际化(i18n)检查器
|
||||
|
||||
框架事实(bricks,决定各违规分类):
|
||||
- TextBase(Text/Title*):只有 otext + i18n:true 才走翻译;裸 "text" 不翻译 → W1
|
||||
- Menu item label / Button label / Form field label / Tabular title /
|
||||
PopupWindow title / UiCode data.text / placeholder / Message.message:
|
||||
组件自动 i18n._(),不需要改文件,只需要词条进字典 → 缺词条记 W2
|
||||
- 字典链:模块 i18n/<lang>/msg.txt|i18n.json → scripts/merge_i18n.py →
|
||||
wwwroot/i18n/<lang>/i18n.json → /i18n_getmsgs 端点 → 前端 I18n.msgs
|
||||
- msg.txt 以 '#' 开头的词条被 appPublic.i18n 解析器当注释丢弃 → W6
|
||||
- git-ignored 的 wwwroot/<列表名>/ 是 xls2ui 生成物,禁止直接修改(pre-commit 铁律)
|
||||
→ 生成物只收集 key,不报 W1(要改改 json/ 源 + 重新生成)
|
||||
|
||||
违规分类:
|
||||
W1 text/otext 硬编码中文且无 i18n 标记(git 跟踪的手写文件才报)
|
||||
W2 自动翻译组件的中文 key 不在合并字典(en/jp/ko)
|
||||
W3 手写 JS / dspy 内嵌 script 里硬编码中文提示(应 bricks.app.i18n._)
|
||||
W4 模块有 UI 但缺 i18n 目录或缺语种
|
||||
W5 merge_i18n.py 自动发现覆盖检查(动态调用 discover_modules() 验证)
|
||||
W6 msg.txt '#' 开头词条(静默丢弃)
|
||||
W7 动态拼接中文(% / + / f-string)作为可见文本 → 需 otext+i18n 传参重构(仅报告)
|
||||
|
||||
用法:
|
||||
python3 scripts/check_i18n.py [--repos-dir ~/work/repos] [--json out.json] [-v]
|
||||
退出码: 0=无违规, 1=有违规
|
||||
"""
|
||||
import os, re, sys, json, subprocess, argparse
|
||||
from collections import OrderedDict
|
||||
|
||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
APP_DIR = os.path.dirname(SCRIPT_DIR)
|
||||
LANGS = ['zh', 'en', 'jp', 'ko']
|
||||
CJK = re.compile(r'[\u4e00-\u9fff]')
|
||||
|
||||
SKIP_PATH = [
|
||||
re.compile(r'/i18n/'), re.compile(r'/docs?/'), re.compile(r'\.md$'),
|
||||
re.compile(r'node_modules'), re.compile(r'/\.git/'), re.compile(r'/py3/'),
|
||||
re.compile(r'/dist/'), re.compile(r'\.bak/'), re.compile(r'\.bak$'),
|
||||
re.compile(r'/wwwroot/bricks/'), # 框架软链
|
||||
]
|
||||
AUTO_I18N_CTX = ('Menu', 'Button', 'Form', 'InlineForm', 'Tabular', 'PopupWindow',
|
||||
'Title', 'Title1', 'Title2', 'Title3', 'Title4', 'Error')
|
||||
|
||||
|
||||
def skip(path):
|
||||
return any(p.search(path) for p in SKIP_PATH)
|
||||
|
||||
|
||||
def git_repo_root(path):
|
||||
d = path if os.path.isdir(path) else os.path.dirname(path)
|
||||
try:
|
||||
return subprocess.run(['git', '-C', d, 'rev-parse', '--show-toplevel'],
|
||||
capture_output=True, text=True, timeout=10).stdout.strip()
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
_ignored_cache = {}
|
||||
def git_ignored(path, repo):
|
||||
key = (repo, path)
|
||||
if key in _ignored_cache:
|
||||
return _ignored_cache[key]
|
||||
try:
|
||||
r = subprocess.run(['git', '-C', repo, 'check-ignore', '-q', path],
|
||||
capture_output=True, timeout=10)
|
||||
v = (r.returncode == 0)
|
||||
except Exception:
|
||||
v = False
|
||||
_ignored_cache[key] = v
|
||||
return v
|
||||
|
||||
|
||||
def load_modules(repos_dir):
|
||||
mods = []
|
||||
build_sh = os.path.join(APP_DIR, 'build.sh')
|
||||
if os.path.exists(build_sh):
|
||||
content = open(build_sh, encoding='utf-8').read()
|
||||
for m in re.finditer(r'^for mod in ([^;]+); do\s*$', content, re.M):
|
||||
for name in m.group(1).split():
|
||||
if name not in mods:
|
||||
mods.append(name)
|
||||
for name in ['pipeline_core', 'pipeline_ops']:
|
||||
if name not in mods:
|
||||
mods.insert(0, name)
|
||||
result = OrderedDict()
|
||||
result['app'] = APP_DIR
|
||||
for name in mods:
|
||||
for cand in (os.path.join(repos_dir, name), os.path.join(APP_DIR, 'pkgs', name),
|
||||
os.path.join(APP_DIR, name)):
|
||||
if os.path.isdir(cand):
|
||||
result[name] = cand
|
||||
break
|
||||
else:
|
||||
result[name] = None
|
||||
return result
|
||||
|
||||
|
||||
def iter_files(root, exts):
|
||||
for dirpath, dirnames, filenames in os.walk(root):
|
||||
dirnames[:] = [d for d in dirnames
|
||||
if d not in ('.git', 'py3', 'node_modules', 'dist', '__pycache__', 'i18n')]
|
||||
for fn in filenames:
|
||||
if fn.endswith(exts):
|
||||
p = os.path.join(dirpath, fn)
|
||||
if not skip(p):
|
||||
yield p
|
||||
|
||||
|
||||
def merged_dict(lang):
|
||||
fp = os.path.join(APP_DIR, 'wwwroot', 'i18n', lang, 'i18n.json')
|
||||
if os.path.exists(fp):
|
||||
try:
|
||||
return json.load(open(fp, encoding='utf-8'))
|
||||
except Exception:
|
||||
return {}
|
||||
return {}
|
||||
|
||||
|
||||
def in_code_data_array(raw, pos):
|
||||
"""判断位置是否处于 code 选项 data 数组的 {"value":..,"text":..} 上下文。"""
|
||||
s = max(0, pos - 300)
|
||||
ctx = raw[s:pos]
|
||||
return '"value"' in ctx and ctx.rfind('"data"') >= 0 or \
|
||||
re.search(r'\{\s*"value"\s*:[^}]*$', ctx) is not None
|
||||
|
||||
|
||||
def scan_ui(path, keys, viol, tracked):
|
||||
raw = open(path, encoding='utf-8', errors='replace').read()
|
||||
repo = git_repo_root(path)
|
||||
ign = repo and git_ignored(path, repo)
|
||||
for m in re.finditer(r'"(label|title|text|otext|placeholder|message|description)"\s*:\s*"([^"]*)"', raw):
|
||||
field, val = m.group(1), m.group(2)
|
||||
if not CJK.search(val) or val.startswith('{{'):
|
||||
continue
|
||||
s = max(0, m.start() - 400); e = min(len(raw), m.end() + 400)
|
||||
ctx = raw[s:e]
|
||||
has_i18n = re.search(r'"i18n"\s*:\s*true', ctx) is not None
|
||||
has_otext = '"otext"' in ctx
|
||||
if field == 'otext':
|
||||
if has_i18n:
|
||||
keys.add(val)
|
||||
else:
|
||||
viol.append((path, m.start(), 'W1', 'otext 无 i18n:true', val, ign))
|
||||
elif field == 'text':
|
||||
if has_i18n or has_otext:
|
||||
keys.add(val)
|
||||
elif in_code_data_array(raw, m.start()):
|
||||
keys.add(val) # UiCode/Tabular 渲染 code 值自动 i18n._ (input.js:1232)
|
||||
else:
|
||||
# Text 裸 text 不翻译
|
||||
if ign:
|
||||
keys.add(val) # 生成物:改 json 源+重新生成,这里只收 key
|
||||
else:
|
||||
viol.append((path, m.start(), 'W1', 'text 硬编码中文(应 otext+i18n:true)', val, ign))
|
||||
else:
|
||||
keys.add(val) # label/title/placeholder/message/description 组件自动翻译
|
||||
# 内嵌 script 里的中文提示
|
||||
for m in re.finditer(r'(show_message|show_error|bricks\.Message|bricks\.Error)\s*\(\s*\{[^}]{0,200}?(title|message)\s*:\s*[\'"]([^\'"]*)[\'"]', raw):
|
||||
val = m.group(3)
|
||||
if CJK.search(val):
|
||||
keys.add(val) # Message.message 自动 i18n(message.js:25),title 走 PopupWindow 自动 i18n
|
||||
# 动态拼接
|
||||
for m in re.finditer(r'"text"\s*:\s*("[^"]*"\s*[%+][^,}]*)', raw):
|
||||
seg = m.group(1)
|
||||
if CJK.search(seg) and '{{' not in seg:
|
||||
viol.append((path, m.start(), 'W7', '动态拼接中文文本(需 otext+参数重构)', seg[:60], ign))
|
||||
|
||||
|
||||
DSPY_UI_KEYS = re.compile(r"['\"](label|title|otext|placeholder|message|description)['\"]\s*:\s*(['\"])([^'\"]*)\2")
|
||||
DSPY_TEXT = re.compile(r"['\"]text['\"]\s*:\s*(?:(['\"])([^'\"]*)\1|(\(?\s*['\"][^'\"]*['\"]\s*[%+][^)\n]*\)?))")
|
||||
|
||||
def scan_dspy(path, keys, viol):
|
||||
raw = open(path, encoding='utf-8', errors='replace').read()
|
||||
if 'widgettype' not in raw and 'mdtext' not in raw:
|
||||
return
|
||||
repo = git_repo_root(path)
|
||||
ign = repo and git_ignored(path, repo)
|
||||
for m in DSPY_UI_KEYS.finditer(raw):
|
||||
field, val = m.group(1), m.group(3)
|
||||
if not CJK.search(val) or val.startswith('{{'):
|
||||
continue
|
||||
s = max(0, m.start() - 500); e = min(len(raw), m.end() + 500)
|
||||
ctx = raw[s:e]
|
||||
has_i18n = re.search(r"['\"]i18n['\"]\s*:\s*True", ctx) is not None
|
||||
if field == 'otext':
|
||||
if has_i18n:
|
||||
keys.add(val)
|
||||
else:
|
||||
viol.append((path, m.start(), 'W1', 'dspy otext 无 i18n:True', val, ign))
|
||||
else:
|
||||
keys.add(val)
|
||||
for m in DSPY_TEXT.finditer(raw):
|
||||
if m.group(2) is not None:
|
||||
val = m.group(2)
|
||||
if not CJK.search(val):
|
||||
continue
|
||||
s = max(0, m.start() - 500); e = min(len(raw), m.end() + 500)
|
||||
ctx = raw[s:e]
|
||||
if re.search(r"['\"]i18n['\"]\s*:\s*True", ctx) or "'otext'" in ctx or '"otext"' in ctx \
|
||||
or in_code_data_array(raw, m.start()):
|
||||
keys.add(val)
|
||||
elif ign:
|
||||
keys.add(val)
|
||||
else:
|
||||
viol.append((path, m.start(), 'W1', 'dspy text 硬编码中文(应 otext+i18n:True)', val, ign))
|
||||
else:
|
||||
seg = m.group(3) or ''
|
||||
if CJK.search(seg):
|
||||
viol.append((path, m.start(), 'W7', 'dspy 动态拼接中文文本', seg[:60], ign))
|
||||
for m in re.finditer(r"(?:show_message|show_error)\s*\(\s*\{[^}]{0,200}?(?:title|message)['\"]?\s*[:=]\s*['\"]([^'\"]*)['\"]", raw):
|
||||
val = m.group(1)
|
||||
if CJK.search(val):
|
||||
keys.add(val)
|
||||
|
||||
|
||||
def strip_js_comments(raw):
|
||||
"""粗剥离 // 与 /* */ 注释(不处理字符串内含 // 的极端情形,够用)。"""
|
||||
out = []
|
||||
i, n = 0, len(raw)
|
||||
in_s = None
|
||||
while i < n:
|
||||
c = raw[i]
|
||||
if in_s:
|
||||
out.append(c)
|
||||
if c == '\\' and i + 1 < n:
|
||||
out.append(raw[i+1]); i += 2; continue
|
||||
if c == in_s:
|
||||
in_s = None
|
||||
i += 1; continue
|
||||
if c in ('"', "'", '`'):
|
||||
in_s = c; out.append(c); i += 1; continue
|
||||
if c == '/' and i + 1 < n and raw[i+1] == '/':
|
||||
while i < n and raw[i] != '\n':
|
||||
i += 1
|
||||
continue
|
||||
if c == '/' and i + 1 < n and raw[i+1] == '*':
|
||||
i += 2
|
||||
while i + 1 < n and not (raw[i] == '*' and raw[i+1] == '/'):
|
||||
i += 1
|
||||
i += 2
|
||||
continue
|
||||
out.append(c); i += 1
|
||||
return ''.join(out)
|
||||
|
||||
|
||||
def scan_js(path, keys, viol):
|
||||
raw = open(path, encoding='utf-8', errors='replace').read()
|
||||
code = strip_js_comments(raw)
|
||||
repo = git_repo_root(path)
|
||||
ign = repo and git_ignored(path, repo)
|
||||
# i18n-aware 文件:定义了 _t()/i18n._ 辅助函数,对象字面量里的中文是「词条 key」
|
||||
# 而非硬编码显示文本(如 showcase.js MEDIA_LABEL_KEYS,经 mediaLabel→_t 翻译)
|
||||
has_i18n_helper = bool(re.search(r'function\s+_t\s*\(|(?:var|const|let)\s+_t\s*=|i18n\._', code))
|
||||
# 所有含中文的字符串字面量:不在 i18n._() 内、不在 Message/show_message 上下文 → W3
|
||||
for m in re.finditer(r"(['\"])([^'\"\n]*[\u4e00-\u9fff][^'\"\n]*)\1", code):
|
||||
val = m.group(2)
|
||||
pre = code[max(0, m.start() - 80):m.start()]
|
||||
if 'i18n._' in pre[-30:] or re.search(r'(?:^|[^.\w])_t\(\s*$', pre):
|
||||
keys.add(val)
|
||||
continue
|
||||
ctx = code[max(0, m.start() - 200):m.end()]
|
||||
if re.search(r'(show_message|show_error|bricks\.Message|bricks\.Error)\s*\(\s*\{[^}]*$', ctx):
|
||||
keys.add(val) # Message title/message 自动翻译
|
||||
continue
|
||||
if re.search(r'(title|message|label)\s*:\s*$', pre):
|
||||
keys.add(val) # 组件 option 自动翻译
|
||||
continue
|
||||
if has_i18n_helper and re.search(r'[\w\'\"]+\s*:\s*$', pre):
|
||||
keys.add(val) # i18n-aware 文件的对象字面量中文值 = 词条 key
|
||||
continue
|
||||
viol.append((path, m.start(), 'W3', 'js 硬编码中文(应 bricks.app.i18n._ 或组件词条)', val, ign))
|
||||
|
||||
|
||||
def check_infra(modules, merge_py):
|
||||
issues = []
|
||||
# W5 动态验证:直接调用 merge_i18n.discover_modules(),模块的 i18n 目录
|
||||
# 能被自动发现即通过(2026-09-14:merge 已重写为自动发现,旧版按源码文本
|
||||
# 扫描 MODULES 清单会把所有模块误报为漏)
|
||||
discovered = set()
|
||||
try:
|
||||
import importlib.util
|
||||
spec = importlib.util.spec_from_file_location('merge_i18n_mod', merge_py)
|
||||
if spec is not None and spec.loader is not None:
|
||||
mmod = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(mmod)
|
||||
discovered = {n for n, _ in mmod.discover_modules()}
|
||||
else:
|
||||
print(f'!! merge_i18n.py 无法加载: {merge_py}', file=sys.stderr)
|
||||
except Exception as e:
|
||||
print(f'!! 无法调用 merge_i18n.discover_modules(): {e}', file=sys.stderr)
|
||||
for name, path in modules.items():
|
||||
if path is None or not os.path.isdir(path):
|
||||
continue
|
||||
ui_files = list(iter_files(path, ('.ui',)))
|
||||
has_ui = bool(ui_files)
|
||||
if not has_ui:
|
||||
n = 0
|
||||
for f in iter_files(path, ('.dspy',)):
|
||||
raw = open(f, encoding='utf-8', errors='replace').read(4000)
|
||||
if 'widgettype' in raw:
|
||||
has_ui = True
|
||||
break
|
||||
n += 1
|
||||
if n > 300:
|
||||
break
|
||||
i18n_dir = os.path.join(path, 'i18n')
|
||||
if has_ui:
|
||||
if not os.path.isdir(i18n_dir):
|
||||
issues.append((name, 'W4', '有 UI 文件但无 i18n/ 目录'))
|
||||
else:
|
||||
missing = [l for l in LANGS
|
||||
if not os.path.exists(os.path.join(i18n_dir, l, 'msg.txt'))
|
||||
and not os.path.exists(os.path.join(i18n_dir, l, 'i18n.json'))]
|
||||
if missing:
|
||||
issues.append((name, 'W4', 'i18n 缺语种: ' + ','.join(missing)))
|
||||
if name != 'app' and name not in discovered:
|
||||
issues.append((name, 'W5', 'i18n/ 未被 merge_i18n.discover_modules() 发现'))
|
||||
for lang in LANGS:
|
||||
fp = os.path.join(path, 'i18n', lang, 'msg.txt')
|
||||
if os.path.exists(fp):
|
||||
for i, line in enumerate(open(fp, encoding='utf-8', errors='replace'), 1):
|
||||
ls = line.strip()
|
||||
if ls and ls.startswith('#') and (':' in ls or '=' in ls):
|
||||
issues.append((name, 'W6', f'i18n/{lang}/msg.txt:{i} #词条被丢弃: {ls[:50]}'))
|
||||
return issues
|
||||
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument('--repos-dir', default=os.path.expanduser('~/work/repos'))
|
||||
ap.add_argument('--json', default=None)
|
||||
ap.add_argument('-v', '--verbose', action='store_true')
|
||||
args = ap.parse_args()
|
||||
|
||||
modules = load_modules(args.repos_dir)
|
||||
dicts = {l: merged_dict(l) for l in LANGS}
|
||||
all_keys = {}
|
||||
violations = []
|
||||
per_mod = OrderedDict()
|
||||
|
||||
for name, path in modules.items():
|
||||
if path is None or not os.path.isdir(path):
|
||||
per_mod[name] = {'status': 'missing'}
|
||||
continue
|
||||
keys, viols = set(), []
|
||||
roots = [path]
|
||||
for f in iter_files(path, ('.ui',)):
|
||||
scan_ui(f, keys, viols, None)
|
||||
for f in iter_files(path, ('.dspy',)):
|
||||
scan_dspy(f, keys, viols)
|
||||
wr = os.path.join(path, 'wwwroot')
|
||||
if os.path.isdir(wr):
|
||||
for f in iter_files(wr, ('.js',)):
|
||||
scan_js(f, keys, viols)
|
||||
for k in keys:
|
||||
all_keys.setdefault(k, set()).add(name)
|
||||
violations.extend(viols)
|
||||
per_mod[name] = {'keys': len(keys), 'violations': len(viols)}
|
||||
|
||||
missing_dict = {}
|
||||
for key, mods in sorted(all_keys.items()):
|
||||
for lang in ('en', 'jp', 'ko'):
|
||||
if key not in dicts[lang]:
|
||||
missing_dict.setdefault(lang, []).append({'key': key, 'modules': sorted(mods)})
|
||||
|
||||
infra = check_infra(modules, os.path.join(APP_DIR, 'scripts', 'merge_i18n.py'))
|
||||
|
||||
cnt = {}
|
||||
for v in violations:
|
||||
cnt[v[2]] = cnt.get(v[2], 0) + 1
|
||||
w4 = [i for i in infra if i[1] == 'W4']
|
||||
w5 = [i for i in infra if i[1] == 'W5']
|
||||
w6 = [i for i in infra if i[1] == 'W6']
|
||||
|
||||
print('=' * 62)
|
||||
print('产线平台 i18n 检查报告')
|
||||
print('=' * 62)
|
||||
print(f"模块数: {len([1 for p in modules.values() if p])}")
|
||||
print(f"抽取可见中文 key(去重): {len(all_keys)}")
|
||||
print(f"W1 硬编码未标i18n: {cnt.get('W1',0)} W3 js硬编码: {cnt.get('W3',0)} W7 动态拼接: {cnt.get('W7',0)}")
|
||||
print(f"W2 字典缺失: en={len(missing_dict.get('en',[]))} jp={len(missing_dict.get('jp',[]))} ko={len(missing_dict.get('ko',[]))}")
|
||||
print(f"W4 缺i18n目录/语种: {len(w4)} W5 merge漏模块: {len(w5)} W6 #词条: {len(w6)}")
|
||||
if w5:
|
||||
print(f" W5 漏: {[i[0] for i in w5]}")
|
||||
if w4:
|
||||
print(f" W4: {[(i[0], i[2][:30]) for i in w4]}")
|
||||
print('-' * 62)
|
||||
for name, st in per_mod.items():
|
||||
if 'keys' in st:
|
||||
flag = ' <-- !' if st['violations'] else ''
|
||||
print(f" {name:24s} keys={st['keys']:4d} viol={st['violations']:3d}{flag}")
|
||||
if args.verbose:
|
||||
print('-' * 62)
|
||||
for v in violations:
|
||||
tag = ' [git-ignored]' if v[5] else ''
|
||||
print(f" [{v[2]}] {v[0]}@{v[1]}{tag}: {v[3]} | {v[4][:60]}")
|
||||
if args.json:
|
||||
json.dump({
|
||||
'summary': {'keys': len(all_keys), 'viol': cnt,
|
||||
'W2': {l: len(missing_dict.get(l, [])) for l in ('en','jp','ko')},
|
||||
'W4': len(w4), 'W5': len(w5), 'W6': len(w6)},
|
||||
'violations': [{'file': v[0], 'pos': v[1], 'code': v[2], 'why': v[3],
|
||||
'text': v[4], 'git_ignored': bool(v[5])} for v in violations],
|
||||
'missing_dict': missing_dict,
|
||||
'keys': {k: sorted(v) for k, v in sorted(all_keys.items())},
|
||||
'infra': [{'module': i[0], 'code': i[1], 'detail': i[2]} for i in infra],
|
||||
}, open(args.json, 'w', encoding='utf-8'), ensure_ascii=False, indent=1)
|
||||
print(f'JSON 报告: {args.json}')
|
||||
total = sum(cnt.values()) + sum(len(v) for v in missing_dict.values()) + len(infra)
|
||||
return 1 if total else 0
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
64
scripts/fix_i18n_w1.py
Normal file
64
scripts/fix_i18n_w1.py
Normal file
@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
fix_i18n_w1.py — 批量修复 W1:给硬编码中文 text 加 otext+i18n 标记
|
||||
基于 check_i18n.py --json 报告的 violations(W1 且 git_ignored=False),
|
||||
按 pos 从后往前精准插入,保持文件其余部分逐字节不变。
|
||||
|
||||
.ui: "text": "中文" → "otext": "中文", "text": "中文", "i18n": true
|
||||
.dspy: 'text': '中文' → 'otext': '中文', 'text': '中文', 'i18n': True (引号风格跟随原文)
|
||||
otext 无 i18n 的: "otext": "中文" → "otext": "中文", "i18n": true
|
||||
|
||||
用法: python3 scripts/fix_i18n_w1.py /tmp/i18n.json [--dry-run]
|
||||
"""
|
||||
import json, re, sys
|
||||
from collections import defaultdict
|
||||
|
||||
def main():
|
||||
report = json.load(open(sys.argv[1], encoding='utf-8'))
|
||||
dry = '--dry-run' in sys.argv
|
||||
viols = [v for v in report['violations'] if v['code'] == 'W1' and not v['git_ignored']]
|
||||
by_file = defaultdict(list)
|
||||
for v in viols:
|
||||
by_file[v['file']].append(v)
|
||||
|
||||
total_fixed = 0
|
||||
errors = []
|
||||
for fp, vs in sorted(by_file.items()):
|
||||
raw = open(fp, encoding='utf-8').read()
|
||||
is_ui = fp.endswith('.ui')
|
||||
q_t = 'true' if is_ui else 'True'
|
||||
# 从后往前改,pos 不漂移
|
||||
for v in sorted(vs, key=lambda x: -x['pos']):
|
||||
pos = v['pos']
|
||||
# 在 pos 处重新匹配完整 key-value 片段
|
||||
if v['why'].startswith('dspy otext') or v['why'].startswith('otext'):
|
||||
m = re.compile(r'(["\'])otext\1\s*:\s*(["\'])(.*?)\2').match(raw, pos)
|
||||
if not m:
|
||||
errors.append((fp, pos, 'otext 片段定位失败'))
|
||||
continue
|
||||
if '"i18n"' in raw[m.end():m.end()+40] or "'i18n'" in raw[m.end():m.end()+40]:
|
||||
continue # 已有 i18n 标记(可能重复报告)
|
||||
ins = f', {m.group(1)}i18n{m.group(1)}: {q_t}'
|
||||
raw = raw[:m.end()] + ins + raw[m.end():]
|
||||
total_fixed += 1
|
||||
else:
|
||||
m = re.compile(r'(["\'])text\1\s*:\s*(["\'])(.*?)\2').match(raw, pos)
|
||||
if not m:
|
||||
errors.append((fp, pos, 'text 片段定位失败'))
|
||||
continue
|
||||
q, val = m.group(1), m.group(3)
|
||||
ins = f', {q}otext{q}: {q}{val}{q}, {q}i18n{q}: {q_t}'
|
||||
# 在 "text": "val" 前插 otext,在其后插 i18n:
|
||||
# 结果形如 "otext": "val", "text": "val", "i18n": true
|
||||
new_seg = f'{q}otext{q}: {q}{val}{q}, {q}text{q}: {q}{val}{q}, {q}i18n{q}: {q_t}'
|
||||
raw = raw[:m.start()] + new_seg + raw[m.end():]
|
||||
total_fixed += 1
|
||||
if not dry:
|
||||
open(fp, 'w', encoding='utf-8').write(raw)
|
||||
|
||||
print(f'{"DRY-RUN " if dry else ""}fixed={total_fixed} files={len(by_file)} errors={len(errors)}')
|
||||
for e in errors[:20]:
|
||||
print(' ERR', e)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
74
scripts/fix_i18n_w1_dspy.py
Normal file
74
scripts/fix_i18n_w1_dspy.py
Normal file
@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
fix_i18n_w1_dspy.py — dspy 安全修复 W1(保守策略)
|
||||
只处理纯字面量 "text": "中文"(match 后第一个非空白字符是 , 或 }),
|
||||
跳过所有拼接(+)、多行隐式连接(后跟换行+字符串)、变量插值——那些记入 manual 清单。
|
||||
|
||||
替换: "text": "X" → "otext": "X", "text": "X", "i18n": True
|
||||
引号风格跟随原文(' 或 ")。
|
||||
用法: python3 scripts/fix_i18n_w1_dspy.py /tmp/i18n.json [--dry-run]
|
||||
"""
|
||||
import json, re, sys
|
||||
from collections import defaultdict
|
||||
|
||||
TEXT_RE = re.compile(r'''(['"])text\1\s*:\s*(['"])((?:[^'"\\]|\\.)*)\2''')
|
||||
|
||||
def safe_literal(raw, m):
|
||||
"""match 后第一个非空白字符必须是 , 或 }(排除拼接与多行隐式连接)"""
|
||||
j = m.end()
|
||||
while j < len(raw) and raw[j] in ' \t':
|
||||
j += 1
|
||||
return j < len(raw) and raw[j] in ',}'
|
||||
|
||||
def main():
|
||||
report = json.load(open(sys.argv[1], encoding='utf-8'))
|
||||
dry = '--dry-run' in sys.argv
|
||||
viols = [v for v in report['violations']
|
||||
if v['code'] == 'W1' and not v['git_ignored'] and v['file'].endswith('.dspy')]
|
||||
by_file = defaultdict(list)
|
||||
for v in viols:
|
||||
by_file[v['file']].append(v)
|
||||
|
||||
fixed = manual = 0
|
||||
manual_list = []
|
||||
for fp, vs in sorted(by_file.items()):
|
||||
raw = open(fp, encoding='utf-8').read()
|
||||
# 从后往前
|
||||
changed = False
|
||||
for v in sorted(vs, key=lambda x: -x['pos']):
|
||||
pos = v['pos']
|
||||
m = TEXT_RE.match(raw, pos)
|
||||
if not m:
|
||||
# otext 无 i18n 的情形
|
||||
mo = re.compile(r'''(['"])otext\1\s*:\s*(['"])((?:[^'"\\]|\\.)*)\2''').match(raw, pos)
|
||||
if mo and not re.search(r"['\"]i18n['\"]\s*:\s*True", raw[mo.end():mo.end()+60]):
|
||||
if safe_literal(raw, mo):
|
||||
ins = f', {mo.group(1)}i18n{mo.group(1)}: True'
|
||||
if not dry:
|
||||
raw = raw[:mo.end()] + ins + raw[mo.end():]
|
||||
fixed += 1; changed = True
|
||||
else:
|
||||
manual += 1; manual_list.append((fp, pos, 'otext动态', v['text'][:50]))
|
||||
else:
|
||||
manual += 1; manual_list.append((fp, pos, '无法定位', v['text'][:50]))
|
||||
continue
|
||||
val = m.group(3)
|
||||
if not safe_literal(raw, m):
|
||||
manual += 1
|
||||
manual_list.append((fp, pos, '拼接/多行串', val[:50]))
|
||||
continue
|
||||
q1, q2 = m.group(1), m.group(2)
|
||||
seg = raw[m.start():m.end()]
|
||||
new_seg = f'{q1}otext{q1}: {q2}{val}{q2}, {q1}text{q1}: {q2}{val}{q2}, {q1}i18n{q1}: True'
|
||||
if not dry:
|
||||
raw = raw[:m.start()] + new_seg + raw[m.end():]
|
||||
fixed += 1; changed = True
|
||||
if changed and not dry:
|
||||
open(fp, 'w', encoding='utf-8').write(raw)
|
||||
|
||||
print(f'{"DRY-RUN " if dry else ""}fixed={fixed} manual={manual} files={len(by_file)}')
|
||||
for mm in manual_list[:40]:
|
||||
print(' MANUAL', mm[0].split('/repos/')[-1], f'@{mm[1]}', mm[2], '|', mm[3])
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
190
scripts/fix_i18n_w1_dyn.py
Normal file
190
scripts/fix_i18n_w1_dyn.py
Normal file
@ -0,0 +1,190 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
fix_i18n_w1_dyn.py — dspy 动态串 i18n 重构(AST 安全)
|
||||
把 `"text": EXPR`(EXPR 含拼接/格式化)重构为:
|
||||
"otext": TEMPLATE, "text": TEMPLATE, "i18n": True, "i18n_params": {p0:..,p1:..}
|
||||
TEMPLATE 用 ${p0}/${p1} 占位;i18n_params 提供 JSON 可序列化的值。
|
||||
依赖框架 widget.js 的 i18n_params 支持(TextBase.set_attrs → i18n._(otext, params))。
|
||||
|
||||
只处理 ast 能解析的 Add 链 / Mod 格式化 / 纯常量(多行隐式拼接);
|
||||
解析失败的记 manual,绝不破坏文件。
|
||||
用法: python3 scripts/fix_i18n_w1_dyn.py /tmp/i18n.json [--dry-run]
|
||||
"""
|
||||
import json, re, sys, ast
|
||||
from collections import defaultdict
|
||||
|
||||
PRINTF_SPEC = re.compile(r'%(?:\(\w+\))?[-+ #0]*\d*(?:\.\d+)?[hlL]?[diouxXeEfFgGcrsa%]')
|
||||
|
||||
|
||||
def find_value_expr(raw, after_colon):
|
||||
"""从 after_colon("text": 之后)深度扫描出值表达式 [start,end)。"""
|
||||
i = after_colon
|
||||
n = len(raw)
|
||||
while i < n and raw[i] in ' \t\r\n':
|
||||
i += 1
|
||||
start = i
|
||||
depth = 0
|
||||
in_s = None
|
||||
while i < n:
|
||||
c = raw[i]
|
||||
if in_s:
|
||||
if c == '\\':
|
||||
i += 2; continue
|
||||
if c == in_s:
|
||||
in_s = None
|
||||
i += 1; continue
|
||||
if c in '"\'':
|
||||
in_s = c; i += 1; continue
|
||||
if c in '([{':
|
||||
depth += 1; i += 1; continue
|
||||
if c in ')]}':
|
||||
if depth == 0:
|
||||
return start, i # 闭合外层结构 = 值结束
|
||||
depth -= 1; i += 1; continue
|
||||
if c == ',' and depth == 0:
|
||||
return start, i
|
||||
i += 1
|
||||
return start, n
|
||||
|
||||
|
||||
def src_of(node, expr_src):
|
||||
try:
|
||||
return ast.get_source_segment(expr_src, node)
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def build_template_and_params(expr_src):
|
||||
"""返回 (template_str, params_dict_src, ok, reason)。params_dict_src 是 Python 源码片段。"""
|
||||
expr_src = expr_src.strip()
|
||||
try:
|
||||
node = ast.parse(expr_src, mode='eval').body
|
||||
except Exception as e:
|
||||
return None, None, False, f'ast解析失败:{e}'
|
||||
|
||||
# 纯常量字符串(含多行隐式拼接)→ 无参数
|
||||
if isinstance(node, ast.Constant) and isinstance(node.value, str):
|
||||
return node.value, None, True, 'const'
|
||||
|
||||
params = []
|
||||
# Mod 格式化: "FMT" % args
|
||||
if isinstance(node, ast.BinOp) and isinstance(node.op, ast.Mod) \
|
||||
and isinstance(node.left, ast.Constant) and isinstance(node.left.value, str):
|
||||
fmt = node.left.value
|
||||
right = node.right
|
||||
if isinstance(right, ast.Tuple):
|
||||
arg_srcs = [src_of(e, expr_src) for e in right.elts]
|
||||
else:
|
||||
arg_srcs = [src_of(right, expr_src)]
|
||||
if any(a is None for a in arg_srcs):
|
||||
return None, None, False, 'mod参数源提取失败'
|
||||
# 走 fmt,把 spec 换 ${pN}
|
||||
out = []
|
||||
ai = 0
|
||||
last = 0
|
||||
for m in PRINTF_SPEC.finditer(fmt):
|
||||
out.append(fmt[last:m.start()])
|
||||
spec = m.group(0)
|
||||
if spec == '%%':
|
||||
out.append('%')
|
||||
else:
|
||||
pname = f'p{ai}'
|
||||
out.append('${' + pname + '}')
|
||||
if ai >= len(arg_srcs):
|
||||
return None, None, False, 'mod参数数不足'
|
||||
# 每个参数用自身 spec 重新格式化,保证显示一致 + JSON 可序列化
|
||||
params.append((pname, f'str({spec!r} % ({arg_srcs[ai]},))'
|
||||
if spec[-1] in 'diouxXeEfFgG' else
|
||||
f'str({arg_srcs[ai]})'))
|
||||
ai += 1
|
||||
last = m.end()
|
||||
out.append(fmt[last:])
|
||||
template = ''.join(out)
|
||||
if ai != len(arg_srcs):
|
||||
return None, None, False, f'mod参数数不匹配 spec={ai} args={len(arg_srcs)}'
|
||||
pd = '{' + ', '.join(f'"{k}": {v}' for k, v in params) + '}' if params else None
|
||||
return template, pd, True, 'mod'
|
||||
|
||||
# Add 拼接链
|
||||
parts = []
|
||||
def flatten(n):
|
||||
if isinstance(n, ast.BinOp) and isinstance(n.op, ast.Add):
|
||||
flatten(n.left); flatten(n.right)
|
||||
else:
|
||||
parts.append(n)
|
||||
flatten(node)
|
||||
template_pieces = []
|
||||
pi = 0
|
||||
has_dyn = False
|
||||
for p in parts:
|
||||
if isinstance(p, ast.Constant) and isinstance(p.value, str):
|
||||
template_pieces.append(p.value)
|
||||
else:
|
||||
s = src_of(p, expr_src)
|
||||
if s is None:
|
||||
return None, None, False, 'add操作数源提取失败'
|
||||
pname = f'p{pi}'; pi += 1
|
||||
template_pieces.append('${' + pname + '}')
|
||||
params.append((pname, f'str({s})'))
|
||||
has_dyn = True
|
||||
if not has_dyn:
|
||||
# 全是字符串常量拼接 → 合并
|
||||
return ''.join(template_pieces), None, True, 'const-concat'
|
||||
template = ''.join(template_pieces)
|
||||
pd = '{' + ', '.join(f'"{k}": {v}' for k, v in params) + '}' if params else None
|
||||
return template, pd, True, 'add'
|
||||
|
||||
|
||||
def main():
|
||||
report = json.load(open(sys.argv[1], encoding='utf-8'))
|
||||
dry = '--dry-run' in sys.argv
|
||||
viols = [v for v in report['violations']
|
||||
if v['code'] == 'W1' and not v['git_ignored'] and v['file'].endswith('.dspy')]
|
||||
by_file = defaultdict(list)
|
||||
for v in viols:
|
||||
by_file[v['file']].append(v)
|
||||
|
||||
fixed = manual = 0
|
||||
manual_list = []
|
||||
keys_added = []
|
||||
for fp, vs in sorted(by_file.items()):
|
||||
raw = open(fp, encoding='utf-8').read()
|
||||
changed = False
|
||||
for v in sorted(vs, key=lambda x: -x['pos']):
|
||||
pos = v['pos']
|
||||
mk = re.compile(r'''(['"])(text|otext)\1\s*:''').match(raw, pos)
|
||||
if not mk:
|
||||
manual += 1; manual_list.append((fp, pos, 'key定位失败', v['text'][:40])); continue
|
||||
keyname = mk.group(2); q = mk.group(1)
|
||||
vstart, vend = find_value_expr(raw, mk.end())
|
||||
expr_src = raw[vstart:vend]
|
||||
tmpl, pd, ok, why = build_template_and_params(expr_src)
|
||||
if not ok:
|
||||
manual += 1; manual_list.append((fp, pos, why, expr_src[:50])); continue
|
||||
# 转义模板里的双引号/反斜杠进 JSON 字符串
|
||||
tmpl_json = tmpl.replace('\\', '\\\\').replace('"', '\\"')
|
||||
if keyname == 'otext' and pd is None and '不可退费' in tmpl:
|
||||
# 仅缺 i18n:True
|
||||
ins = f', {q}i18n{q}: True'
|
||||
seg_new = raw[pos:vend] + ins
|
||||
else:
|
||||
params_part = f', {q}i18n_params{q}: {pd}' if pd else ''
|
||||
seg_new = (f'{q}otext{q}: "{tmpl_json}", {q}text{q}: "{tmpl_json}", '
|
||||
f'{q}i18n{q}: True{params_part}')
|
||||
if not dry:
|
||||
raw = raw[:pos] + seg_new + raw[vend:]
|
||||
keys_added.append(tmpl)
|
||||
fixed += 1; changed = True
|
||||
if changed and not dry:
|
||||
open(fp, 'w', encoding='utf-8').write(raw)
|
||||
|
||||
print(f'{"DRY-RUN " if dry else ""}fixed={fixed} manual={manual} files={len(by_file)}')
|
||||
for mm in manual_list:
|
||||
print(' MANUAL', mm[0].split('/repos/')[-1], f'@{mm[1]}', mm[2], '|', mm[3])
|
||||
if dry:
|
||||
print('--- 模板预览(将进字典的key) ---')
|
||||
for k in keys_added:
|
||||
print(' ', k[:70])
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
306
scripts/gen_home_index.py
Normal file
306
scripts/gen_home_index.py
Normal file
@ -0,0 +1,306 @@
|
||||
#!/usr/bin/env python3
|
||||
"""生成产线平台新 index.ui:登录→工作台(原 index.ui 内容),未登录→后现代主页(bricks 声明式)。
|
||||
用法: python3 scripts/gen_home_index.py (在 pipeline-app 仓库根目录跑)"""
|
||||
import json, os, io
|
||||
|
||||
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
IDX = os.path.join(ROOT, 'wwwroot', 'index.ui')
|
||||
|
||||
with io.open(IDX, encoding='utf-8') as f:
|
||||
old = f.read()
|
||||
|
||||
# 幂等:已生成过则先还原工作区分支(用 git show HEAD 由调用方保证,这里检测标记)
|
||||
assert '{% if get_user() %}' not in old, 'index.ui 已经是双分支版本,勿重复生成(用 git checkout 还原后重跑)'
|
||||
|
||||
def T(s, css=None, **kw):
|
||||
"""TextBase 三件套:otext+text+i18n(W1 规范)"""
|
||||
o = {'otext': s, 'text': s, 'i18n': True, 'halign': 'left'}
|
||||
if css:
|
||||
o['css'] = css
|
||||
o.update(kw)
|
||||
return {'widgettype': 'Text', 'options': o}
|
||||
|
||||
def TN(s, css=None, **kw):
|
||||
"""不翻译的 Text(数字/英文装饰字)"""
|
||||
o = {'text': s, 'halign': 'left'}
|
||||
if css:
|
||||
o['css'] = css
|
||||
o.update(kw)
|
||||
return {'widgettype': 'Text', 'options': o}
|
||||
|
||||
def login_bind():
|
||||
return {'wid': 'self', 'event': 'click', 'actiontype': 'urlwidget', 'target': 'self',
|
||||
'options': {'url': "{{entire_url('/rbac/user/login.ui')}}"}}
|
||||
|
||||
def scroll_script(anchor_id):
|
||||
return ("var e=document.getElementById(%s);if(e){e.scrollIntoView({behavior:'smooth',block:'start'});}"
|
||||
% json.dumps(anchor_id))
|
||||
|
||||
def btn(label, css, bind=None, script=None, small_id=None):
|
||||
w = {'widgettype': 'Button', 'options': {'label': label, 'css': css}}
|
||||
if small_id:
|
||||
w['id'] = small_id
|
||||
b = bind if bind is not None else {
|
||||
'wid': 'self', 'event': 'click', 'actiontype': 'script', 'target': 'self', 'script': script}
|
||||
w['binds'] = [b]
|
||||
return w
|
||||
|
||||
THEME_SCRIPT = ("var h=document.documentElement;var t=h.getAttribute('data-theme')||'light';"
|
||||
"var n=t=='light'?'dark':'light';h.setAttribute('data-theme',n);"
|
||||
"try{localStorage.setItem('pipeline_ui_theme',n);}catch(e){}"
|
||||
"if(window.applyPipelineTheme){window.applyPipelineTheme(n);}")
|
||||
|
||||
# ---------- header ----------
|
||||
header = {
|
||||
'widgettype': 'HBox',
|
||||
'options': {'css': 'pl-header', 'width': '100%', 'padding': '0 clamp(20px,6vw,90px)',
|
||||
'alignItems': 'center', 'gap': '14px', 'cheight': 3.2},
|
||||
'subwidgets': [
|
||||
{'widgettype': 'VBox', 'options': {'gap': '2px', 'alignItems': 'flex-start'},
|
||||
'subwidgets': [T('产线平台', 'pl-logo'), TN('PIPELINE PLATFORM', 'pl-logo-sub')]},
|
||||
{'widgettype': 'Filler'},
|
||||
T('能力', 'pl-nav', mobile_hidden=True, binds=[
|
||||
{'wid': 'self', 'event': 'click', 'actiontype': 'script', 'target': 'self',
|
||||
'script': scroll_script('sec_caps')}]),
|
||||
T('产线', 'pl-nav', mobile_hidden=True, binds=[
|
||||
{'wid': 'self', 'event': 'click', 'actiontype': 'script', 'target': 'self',
|
||||
'script': scroll_script('sec_pipes')}]),
|
||||
T('流程', 'pl-nav', mobile_hidden=True, binds=[
|
||||
{'wid': 'self', 'event': 'click', 'actiontype': 'script', 'target': 'self',
|
||||
'script': scroll_script('sec_flow')}]),
|
||||
btn('🌙', 'pl-btn-ghost theme-icon-btn', script=THEME_SCRIPT, small_id='theme_toggle_btn'),
|
||||
{'widgettype': 'urlwidget', 'options': {'url': "{{entire_url('i18n/language.ui')}}"}},
|
||||
btn('登录 / 注册', 'pl-btn pl-btn-sm', bind=login_bind()),
|
||||
],
|
||||
}
|
||||
|
||||
# ---------- hero ----------
|
||||
hero = {
|
||||
'widgettype': 'VBox',
|
||||
'options': {'css': 'pl-hero', 'width': '100%'},
|
||||
'subwidgets': [
|
||||
{'widgettype': 'VBox', 'options': {'css': 'pl-hero-deco'},
|
||||
'subwidgets': [
|
||||
{'widgettype': 'VBox', 'options': {'css': 'pl-grid'}},
|
||||
{'widgettype': 'VBox', 'options': {'css': 'pl-orb pl-orb-1'}},
|
||||
{'widgettype': 'VBox', 'options': {'css': 'pl-orb pl-orb-2'}},
|
||||
{'widgettype': 'VBox', 'options': {'css': 'pl-orb pl-orb-3'}},
|
||||
{'widgettype': 'VBox', 'options': {'css': 'pl-noise'}},
|
||||
]},
|
||||
{'widgettype': 'VBox',
|
||||
'options': {'css': 'pl-hero-content', 'width': '100%', 'gap': '22px', 'alignItems': 'flex-start'},
|
||||
'subwidgets': [
|
||||
T('AI 原生 · 产线操作系统', 'pl-badge pl-rise pl-d1'),
|
||||
T('把业务装进产线', 'pl-h1 pl-stroke pl-rise pl-d2'),
|
||||
T('让 Agent 自主运转', 'pl-h1 pl-grad pl-rise pl-d2'),
|
||||
T('产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,'
|
||||
'大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。',
|
||||
'pl-sub pl-rise pl-d3', wrap=True),
|
||||
{'widgettype': 'HBox',
|
||||
'options': {'gap': '14px', 'flexWrap': 'wrap', 'alignItems': 'center'},
|
||||
'subwidgets': [
|
||||
btn('登录 / 注册', 'pl-btn pl-rise pl-d4', bind=login_bind()),
|
||||
btn('查看平台能力', 'pl-btn-ghost pl-rise pl-d4', script=scroll_script('sec_caps')),
|
||||
]},
|
||||
{'widgettype': 'HBox',
|
||||
'options': {'css': 'pl-rise pl-d5', 'gap': '40px', 'flexWrap': 'wrap',
|
||||
'padding': '18px 0 0 0', 'alignItems': 'flex-start'},
|
||||
'subwidgets': [
|
||||
{'widgettype': 'VBox', 'options': {'gap': '2px'},
|
||||
'subwidgets': [TN('5', 'pl-stat-n'), T('产线矩阵', 'pl-stat-t')]},
|
||||
{'widgettype': 'VBox', 'options': {'gap': '2px'},
|
||||
'subwidgets': [TN('30+', 'pl-stat-n'), T('功能模块', 'pl-stat-t')]},
|
||||
{'widgettype': 'VBox', 'options': {'gap': '2px'},
|
||||
'subwidgets': [TN('24×7', 'pl-stat-n'), T('自主运转', 'pl-stat-t')]},
|
||||
{'widgettype': 'VBox', 'options': {'gap': '2px'},
|
||||
'subwidgets': [TN('4', 'pl-stat-n'), T('语言国际化', 'pl-stat-t')]},
|
||||
]},
|
||||
]},
|
||||
],
|
||||
}
|
||||
|
||||
# ---------- marquee ----------
|
||||
mq_items = ['商机挖掘', '投标生产', '软件开发', '模型网关', '产品商品化',
|
||||
'计费记账', '供销协同', '知识库', '人机协同门禁']
|
||||
def mq_track():
|
||||
return {'widgettype': 'HBox', 'options': {'css': 'pl-mq-track'},
|
||||
'subwidgets': [T(x, 'pl-mq-item') for x in mq_items * 2]}
|
||||
marquee = {'widgettype': 'HBox', 'options': {'css': 'pl-marquee', 'width': '100%'},
|
||||
'subwidgets': [mq_track()]}
|
||||
|
||||
# ---------- capabilities (bento) ----------
|
||||
def card(icon, title, desc, tag, lg=False, flex='1 1 260px'):
|
||||
css = 'pl-card pl-card-lg' if lg else 'pl-card'
|
||||
subs = []
|
||||
if tag:
|
||||
subs.append(TN(tag, 'pl-card-tag'))
|
||||
subs.append(TN(icon, 'pl-card-icon'))
|
||||
subs.append(T(title, 'pl-card-t'))
|
||||
subs.append(T(desc, 'pl-card-d', wrap=True))
|
||||
return {'widgettype': 'VBox',
|
||||
'options': {'css': css, 'flex': flex, 'gap': '10px', 'alignItems': 'flex-start'},
|
||||
'subwidgets': subs}
|
||||
|
||||
caps = {
|
||||
'id': 'sec_caps',
|
||||
'widgettype': 'VBox',
|
||||
'options': {'css': 'pl-sec', 'width': '100%', 'gap': '18px', 'alignItems': 'flex-start'},
|
||||
'subwidgets': [
|
||||
TN('CAPABILITIES', 'pl-kicker'),
|
||||
T('平台能力', 'pl-h2'),
|
||||
T('不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。', 'pl-sec-sub', wrap=True),
|
||||
{'widgettype': 'HBox',
|
||||
'options': {'width': '100%', 'flexWrap': 'wrap', 'gap': '16px', 'padding': '18px 0 0 0',
|
||||
'alignItems': 'stretch'},
|
||||
'subwidgets': [
|
||||
card('🤖', 'Agent 驱动产线引擎',
|
||||
'会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;'
|
||||
'LLM 三层容错兜底,产线不因单点模型故障停摆。', 'CORE', lg=True, flex='2 2 540px'),
|
||||
card('🛰', '模型网关',
|
||||
'多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。', 'GATEWAY'),
|
||||
card('🛒', '产品商品化',
|
||||
'资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。', 'COMMERCE'),
|
||||
card('🔔', '平台待办中枢',
|
||||
'全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。', 'HUMAN LOOP'),
|
||||
card('🛡', '人机协同门禁',
|
||||
'PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。', 'GATE'),
|
||||
card('🔐', '安全与多租户',
|
||||
'RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。', 'SECURITY'),
|
||||
card('🌐', '国际化与双主题',
|
||||
'中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。', 'I18N'),
|
||||
]},
|
||||
],
|
||||
}
|
||||
|
||||
# ---------- pipelines ----------
|
||||
def pipe(no, name, desc, live):
|
||||
tag = T('运行中' if live else '规划中', 'pl-tag ' + ('pl-tag-live' if live else 'pl-tag-soon'))
|
||||
return {'widgettype': 'HBox',
|
||||
'options': {'css': 'pl-step', 'width': '100%', 'gap': '20px', 'alignItems': 'center',
|
||||
'flexWrap': 'wrap'},
|
||||
'subwidgets': [
|
||||
TN(no, 'pl-step-n'),
|
||||
{'widgettype': 'VBox',
|
||||
'options': {'css': 'filler', 'flex': '1 1 320px', 'gap': '4px', 'minWidth': '240px'},
|
||||
'subwidgets': [T(name, 'pl-step-t'), T(desc, 'pl-step-d', wrap=True)]},
|
||||
tag,
|
||||
]}
|
||||
|
||||
pipes = {
|
||||
'id': 'sec_pipes',
|
||||
'widgettype': 'VBox',
|
||||
'options': {'css': 'pl-sec', 'width': '100%', 'gap': '16px', 'alignItems': 'flex-start'},
|
||||
'subwidgets': [
|
||||
TN('PIPELINES', 'pl-kicker'),
|
||||
T('产线矩阵', 'pl-h2'),
|
||||
T('每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。', 'pl-sec-sub', wrap=True),
|
||||
{'widgettype': 'VBox',
|
||||
'options': {'width': '100%', 'gap': '12px', 'padding': '18px 0 0 0'},
|
||||
'subwidgets': [
|
||||
pipe('01', '商机产线', '招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。', True),
|
||||
pipe('02', '投标产线', '标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。', True),
|
||||
pipe('03', '开发产线', 'SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。', True),
|
||||
pipe('04', '运维产线', '面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。', False),
|
||||
pipe('05', '营销产线', '内容生产与投放自动化:素材生成、渠道分发、效果回收。', False),
|
||||
]},
|
||||
],
|
||||
}
|
||||
|
||||
# ---------- flow ----------
|
||||
def step(no, title, desc):
|
||||
return {'widgettype': 'VBox',
|
||||
'options': {'css': 'pl-card', 'flex': '1 1 190px', 'gap': '8px', 'alignItems': 'flex-start',
|
||||
'minHeight': '170px'},
|
||||
'subwidgets': [TN(no, 'pl-step-n'), T(title, 'pl-card-t'), T(desc, 'pl-card-d', wrap=True)]}
|
||||
|
||||
flow = {
|
||||
'id': 'sec_flow',
|
||||
'widgettype': 'VBox',
|
||||
'options': {'css': 'pl-sec', 'width': '100%', 'gap': '16px', 'alignItems': 'flex-start'},
|
||||
'subwidgets': [
|
||||
TN('HOW IT WORKS', 'pl-kicker'),
|
||||
T('五步跑通一条产线', 'pl-h2'),
|
||||
{'widgettype': 'HBox',
|
||||
'options': {'width': '100%', 'flexWrap': 'wrap', 'gap': '14px', 'padding': '18px 0 0 0',
|
||||
'alignItems': 'stretch'},
|
||||
'subwidgets': [
|
||||
step('01', '订阅产线', '在产品商城选购产线订阅,账号权益即时生效。'),
|
||||
step('02', '发起会话', '进入产线工作台,用一句话下达任务。'),
|
||||
step('03', 'Agent 自主执行', '任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。'),
|
||||
step('04', '人类门禁', '关键节点冒泡为平台待办,人看过正文再放行。'),
|
||||
step('05', '交付与记账', '产出归档、按量出账,消费明细随时可查。'),
|
||||
]},
|
||||
],
|
||||
}
|
||||
|
||||
# ---------- CTA + footer ----------
|
||||
cta = {
|
||||
'widgettype': 'VBox',
|
||||
'options': {'css': 'pl-cta', 'width': 'auto', 'gap': '16px', 'alignItems': 'center'},
|
||||
'subwidgets': [
|
||||
T('准备好把业务装上产线了吗?', 'pl-cta-t'),
|
||||
T('注册账号,订阅第一条产线,让 Agent 今天就开始干活。', 'pl-cta-d'),
|
||||
btn('立即注册', 'pl-btn', bind=login_bind()),
|
||||
],
|
||||
}
|
||||
footer = {
|
||||
'widgettype': 'HBox',
|
||||
'options': {'css': 'pl-footer', 'width': '100%', 'justifyContent': 'space-between',
|
||||
'alignItems': 'center', 'flexWrap': 'wrap', 'gap': '8px'},
|
||||
'subwidgets': [
|
||||
T('© 2026 开元云(北京)科技有限公司', 'pl-footer-t'),
|
||||
TN('PIPELINE PLATFORM · BUILT WITH BRICKS', 'pl-footer-t'),
|
||||
],
|
||||
}
|
||||
|
||||
landing = {
|
||||
'id': 'app',
|
||||
'widgettype': 'VBox',
|
||||
'options': {'css': 'pl-page', 'width': '100%', 'height': '100%', 'padding': '0',
|
||||
'overflow': 'hidden'},
|
||||
'subwidgets': [
|
||||
{'widgettype': 'VBox',
|
||||
'options': {'css': 'pl-scroll', 'width': '100%', 'flex': '1 1 auto', 'minHeight': '0',
|
||||
'overflowY': 'auto', 'alignItems': 'flex-start'},
|
||||
'subwidgets': [header, hero, marquee, caps, pipes, flow, cta, footer]},
|
||||
],
|
||||
# 注册成功(register.dspy dispatch user_logined)后整页刷新 → 服务端渲染工作台分支。
|
||||
# 密码登录(up_login.dspy manual)走自身的 dismissed→in-place 渲染 /index.ui,不经此事件,无双重刷新。
|
||||
'binds': [
|
||||
{'wid': 'app', 'event': 'user_logined', 'actiontype': 'script', 'target': 'self',
|
||||
'script': 'window.location.reload();'},
|
||||
],
|
||||
}
|
||||
|
||||
landing_txt = json.dumps(landing, ensure_ascii=False, indent=1)
|
||||
# 防 .ui 内嵌 <script> 提前闭合(本页面没有 Html 控件,保险检查)
|
||||
assert '<script' not in landing_txt
|
||||
|
||||
new = ('{% if get_user() %}\n' + old + '\n{% else %}\n' + landing_txt + '\n{% endif %}\n')
|
||||
with io.open(IDX, 'w', encoding='utf-8') as f:
|
||||
f.write(new)
|
||||
print('index.ui written, %d bytes' % len(new.encode('utf-8')))
|
||||
|
||||
# 收集需要 i18n 的 key(otext 全集 + Button label)
|
||||
keys = []
|
||||
def walk(w):
|
||||
if isinstance(w, dict):
|
||||
o = w.get('options', {})
|
||||
if isinstance(o, dict):
|
||||
if o.get('i18n') and o.get('otext'):
|
||||
keys.append(o['otext'])
|
||||
if w.get('widgettype') == 'Button' and o.get('label') and not o['label'].startswith('🌙'):
|
||||
keys.append(o['label'])
|
||||
for v in w.values():
|
||||
walk(v)
|
||||
elif isinstance(w, list):
|
||||
for v in w:
|
||||
walk(v)
|
||||
walk(landing)
|
||||
seen = set()
|
||||
uniq = [k for k in keys if not (k in seen or seen.add(k))]
|
||||
with io.open('/tmp/home_i18n_keys.txt', 'w', encoding='utf-8') as f:
|
||||
f.write('\n'.join(uniq))
|
||||
print('%d unique i18n keys -> /tmp/home_i18n_keys.txt' % len(uniq))
|
||||
for k in uniq:
|
||||
print(' -', k)
|
||||
@ -53,6 +53,9 @@ PERMS = [
|
||||
# 注意:禁止 /** any——会让匿名访问全部路径(含五条产线)。
|
||||
# 产线 shell(sdlc/core/ops index.ui)须 logined,产线对匿名不可见。
|
||||
("/index.ui", "app", "any"),
|
||||
("/home.css", "app", "any"), # 主页门户样式(匿名可见,2026-09-16)
|
||||
("/i18n/language.ui", "app", "any"), # 主页语言切换入口(匿名可见)
|
||||
("/i18n/menu.ui", "app", "any"), # 语言下拉菜单
|
||||
("/todo_badge.js", "app", "any"),
|
||||
("/theme_toggle.js", "app", "any"),
|
||||
# 手机端 H5 外壳(2026-09-07):「我的」整页(底部 TabBar 第4个 Tab)
|
||||
|
||||
@ -1,37 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Merge i18n translations from all pipeline modules into wwwroot/i18n.
|
||||
Scans each module's i18n directory and merges into the app's centralized i18n.
|
||||
|
||||
模块自动发现(不再手工维护清单——2026-09-12 i18n 治理:手工清单漏了 17 个模块,
|
||||
词条永远进不了字典):
|
||||
1. 主应用自身 i18n/
|
||||
2. pipeline_core / pipeline_ops(本地或 pkgs/)
|
||||
3. build.sh clone 清单里的全部业务模块(pkgs/<mod> 或同级仓库目录)
|
||||
4. pkgs/ 下任何带 i18n/ 目录的其它模块(兜底扫描)
|
||||
|
||||
每模块读 i18n/<lang>/msg.txt 与 i18n/<lang>/i18n.json,先到先得不覆盖。
|
||||
|
||||
Usage: python scripts/merge_i18n.py
|
||||
"""
|
||||
import os, json, sys
|
||||
import os, json, re, sys
|
||||
from collections import OrderedDict
|
||||
from pathlib import Path
|
||||
|
||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
ROOT_DIR = os.path.dirname(SCRIPT_DIR)
|
||||
WWWROOT = os.path.join(ROOT_DIR, 'wwwroot')
|
||||
I18N_OUT = os.path.join(WWWROOT, 'i18n')
|
||||
|
||||
# Modules to scan for i18n
|
||||
MODULES = [
|
||||
('app', os.path.join(ROOT_DIR, 'i18n')),
|
||||
('pipeline_core', os.path.join(ROOT_DIR, 'pipeline_core', 'i18n')),
|
||||
('pipeline_ops', os.path.join(ROOT_DIR, 'pipeline_ops', 'i18n')),
|
||||
('pipeline-sdlc', os.path.join(os.path.dirname(ROOT_DIR), 'pipeline-sdlc', 'i18n')),
|
||||
('showcase', os.path.join(os.path.dirname(ROOT_DIR), 'showcase', 'i18n')),
|
||||
('pipeline-bidding', os.path.join(ROOT_DIR, 'pkgs', 'pipeline-bidding', 'i18n')),
|
||||
('pipeline-opportunity', os.path.join(ROOT_DIR, 'pkgs', 'pipeline-opportunity', 'i18n')),
|
||||
('dingdingflow', os.path.join(ROOT_DIR, 'pkgs', 'dingdingflow', 'i18n')),
|
||||
('rbac', os.path.join(ROOT_DIR, 'pkgs', 'rbac', 'i18n')),
|
||||
('ticket', os.path.join(ROOT_DIR, 'pkgs', 'ticket', 'i18n')),
|
||||
('voucher', os.path.join(ROOT_DIR, 'pkgs', 'voucher', 'i18n')),
|
||||
]
|
||||
|
||||
LANGS = ['zh', 'en', 'ko', 'jp']
|
||||
|
||||
|
||||
def discover_modules():
|
||||
"""返回 [(name, i18n_dir), ...],顺序即合并优先级(主应用最先)。"""
|
||||
mods = []
|
||||
|
||||
def add(name, i18n_dir):
|
||||
if os.path.isdir(i18n_dir) and not any(n == name for n, _ in mods):
|
||||
mods.append((name, i18n_dir))
|
||||
|
||||
# 1. 主应用
|
||||
add('app', os.path.join(ROOT_DIR, 'i18n'))
|
||||
|
||||
# 2/3. build.sh clone 清单 + 本地业务模块
|
||||
names = ['pipeline_core', 'pipeline_ops']
|
||||
build_sh = os.path.join(ROOT_DIR, 'build.sh')
|
||||
if os.path.exists(build_sh):
|
||||
content = open(build_sh, encoding='utf-8').read()
|
||||
for m in re.finditer(r'^for mod in ([^;]+); do\s*$', content, re.M):
|
||||
for n in m.group(1).split():
|
||||
if n not in names:
|
||||
names.append(n)
|
||||
repos_parent = os.path.dirname(ROOT_DIR)
|
||||
for n in names:
|
||||
for base in (os.path.join(ROOT_DIR, 'pkgs'), ROOT_DIR, repos_parent,
|
||||
os.path.join(ROOT_DIR, n)):
|
||||
cand = os.path.join(base, n, 'i18n') if not base.endswith(n) else os.path.join(base, 'i18n')
|
||||
if os.path.isdir(cand):
|
||||
add(n, cand)
|
||||
break
|
||||
|
||||
# 4. 兜底:pkgs/ 下所有带 i18n/ 的目录
|
||||
pkgs = os.path.join(ROOT_DIR, 'pkgs')
|
||||
if os.path.isdir(pkgs):
|
||||
for n in sorted(os.listdir(pkgs)):
|
||||
add(n, os.path.join(pkgs, n, 'i18n'))
|
||||
return mods
|
||||
|
||||
|
||||
def parse_msg_txt(filepath):
|
||||
"""Parse msg.txt: 'key=value' or 'key: value' format."""
|
||||
result = OrderedDict()
|
||||
@ -52,8 +80,9 @@ def parse_msg_txt(filepath):
|
||||
|
||||
|
||||
def merge():
|
||||
modules = discover_modules()
|
||||
print(f'Discovered {len(modules)} i18n sources: {[n for n, _ in modules]}')
|
||||
os.makedirs(I18N_OUT, exist_ok=True)
|
||||
stats = {}
|
||||
|
||||
for lang in LANGS:
|
||||
merged = OrderedDict()
|
||||
@ -66,42 +95,33 @@ def merge():
|
||||
with open(i18n_file, 'r', encoding='utf-8') as f:
|
||||
merged = json.load(f, object_pairs_hook=OrderedDict)
|
||||
|
||||
# Scan each module
|
||||
for mod_name, mod_i18n_dir in MODULES:
|
||||
for mod_name, mod_i18n_dir in modules:
|
||||
lang_dir = os.path.join(mod_i18n_dir, lang)
|
||||
if not os.path.isdir(lang_dir):
|
||||
# Try app's internal i18n
|
||||
alt_dir = os.path.join(ROOT_DIR, 'pipeline_core', 'i18n', lang)
|
||||
if not os.path.isdir(alt_dir):
|
||||
continue
|
||||
lang_dir = alt_dir
|
||||
|
||||
# Load msg.txt
|
||||
msg_file = os.path.join(lang_dir, 'msg.txt')
|
||||
if os.path.exists(msg_file):
|
||||
msgs = parse_msg_txt(msg_file)
|
||||
for k, v in msgs.items():
|
||||
if k not in merged:
|
||||
merged[k] = v
|
||||
stats.setdefault(mod_name, 0)
|
||||
stats[mod_name] += 1
|
||||
|
||||
# Load i18n.json
|
||||
continue
|
||||
# msg.txt
|
||||
msgs = parse_msg_txt(os.path.join(lang_dir, 'msg.txt'))
|
||||
for k, v in msgs.items():
|
||||
if k not in merged:
|
||||
merged[k] = v
|
||||
# i18n.json
|
||||
mod_i18n = os.path.join(lang_dir, 'i18n.json')
|
||||
if os.path.exists(mod_i18n):
|
||||
with open(mod_i18n, 'r', encoding='utf-8') as f:
|
||||
extra = json.load(f, object_pairs_hook=OrderedDict)
|
||||
try:
|
||||
with open(mod_i18n, 'r', encoding='utf-8') as f:
|
||||
extra = json.load(f, object_pairs_hook=OrderedDict)
|
||||
except Exception as e:
|
||||
print(f' !! {mod_name}/{lang}/i18n.json parse error: {e}', file=sys.stderr)
|
||||
continue
|
||||
for k, v in extra.items():
|
||||
if k not in merged:
|
||||
merged[k] = v
|
||||
|
||||
# Write merged
|
||||
with open(i18n_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(merged, f, ensure_ascii=False, indent=2)
|
||||
print(f' {lang}: {len(merged)} keys')
|
||||
|
||||
# Write msg.txt for the app root
|
||||
print(f'\nMerged i18n for {len(MODULES)} modules -> {I18N_OUT}')
|
||||
print(f'\nMerged i18n for {len(modules)} modules -> {I18N_OUT}')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
34
scripts/verify_i18n_fix.py
Normal file
34
scripts/verify_i18n_fix.py
Normal file
@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python3
|
||||
"""verify_i18n_fix.py — W1 修复后的文件完整性验证
|
||||
.ui: 纯 JSON → json.loads;含 Jinja {{}} → 渲染 stub 后 json.loads;再不行 → 剥离 {{...}} 后 loads
|
||||
.dspy: python 语法 → 包一层 async def + 编译(tab 缩进),或直接 py_compile 源文件级检查
|
||||
"""
|
||||
import json, re, sys, subprocess
|
||||
|
||||
files = sorted(set(v['file'] for v in json.load(open(sys.argv[1]))['violations']
|
||||
if v['code'] == 'W1' and not v['git_ignored']))
|
||||
bad = []
|
||||
for fp in files:
|
||||
raw = open(fp, encoding='utf-8').read()
|
||||
if fp.endswith('.ui'):
|
||||
# 剥离 Jinja:引号内的 {{...}} 换成不带引号的占位符;裸 {{...}} 换成字符串
|
||||
stripped = re.sub(r'"([^"]*?)\{\{.*?\}\}([^"]*?)"', r'"\1__JINJA__\2"', raw, flags=re.S)
|
||||
stripped = re.sub(r'\{\{.*?\}\}', '"__JINJA__"', stripped, flags=re.S)
|
||||
stripped = re.sub(r'\{%.*?%\}', '', stripped, flags=re.S)
|
||||
try:
|
||||
json.loads(stripped)
|
||||
except Exception as e:
|
||||
bad.append((fp, f'JSON: {e}'))
|
||||
elif fp.endswith('.dspy'):
|
||||
# dspy 是 exec 片段,包 async def 验证语法
|
||||
wrapped = 'async def __dspy_check(request, **ns):\n' + \
|
||||
''.join('\t' + l + '\n' if l.strip() else l + '\n' for l in raw.split('\n'))
|
||||
try:
|
||||
compile(wrapped, fp, 'exec')
|
||||
except SyntaxError as e:
|
||||
bad.append((fp, f'SyntaxError: {e.lineno}: {e.msg}'))
|
||||
|
||||
print(f'checked={len(files)} bad={len(bad)}')
|
||||
for b in bad[:30]:
|
||||
print(' BAD', b[0].replace('/home/ymq/work/repos/', ''), '|', b[1][:100])
|
||||
sys.exit(1 if bad else 0)
|
||||
133
wwwroot/home.css
Normal file
133
wwwroot/home.css
Normal file
@ -0,0 +1,133 @@
|
||||
/* home.css — 产线平台主页(匿名门户,index.ui 未登录分支)后现代风格样式。
|
||||
明暗双主题:默认亮色(纸上先锋),html[data-theme="dark"] 暗色(霓虹暗夜)。
|
||||
全部选择器以 .pl- 前缀 / --pl- 变量限定,不影响工作台页面。
|
||||
注入方式:header.tmpl cssfiles() 自动收集(需注册 any 权限,见 scripts/load_path.py)。
|
||||
注意:bricks 行内样式优先级高,覆盖行内值的规则一律带 !important。 */
|
||||
|
||||
/* ===== 主题变量 ===== */
|
||||
html{
|
||||
--pl-bg:#f4f3ef; --pl-bg2:#eae9e3; --pl-ink:#0a0a0f; --pl-ink-soft:rgba(10,10,15,.62);
|
||||
--pl-ink-faint:rgba(10,10,15,.42); --pl-line:rgba(10,10,15,.12); --pl-line-soft:rgba(10,10,15,.07);
|
||||
--pl-glass:rgba(255,255,255,.62); --pl-glass-br:rgba(10,10,15,.10);
|
||||
--pl-cy:#0891b2; --pl-vi:#7c3aed; --pl-mg:#c026d3; --pl-ye:#ca8a04;
|
||||
--pl-cy-soft:rgba(8,145,178,.75); --pl-hi:#f4f5fb;
|
||||
--pl-header-bg:rgba(244,243,239,.72); --pl-orb-op:.20; --pl-noise-op:.05;
|
||||
--pl-marquee-bg:#0a0a0f; --pl-marquee-ink:#f4f3ef;
|
||||
--pl-btn-ink:#f8fafc; --pl-shadow:0 24px 60px -18px rgba(10,10,15,.25);
|
||||
}
|
||||
html[data-theme="dark"]{
|
||||
--pl-bg:#05060a; --pl-bg2:#0a0c14; --pl-ink:#e7e9f3; --pl-ink-soft:rgba(231,233,243,.62);
|
||||
--pl-ink-faint:rgba(231,233,243,.40); --pl-line:rgba(255,255,255,.14); --pl-line-soft:rgba(255,255,255,.07);
|
||||
--pl-glass:rgba(255,255,255,.035); --pl-glass-br:rgba(255,255,255,.09);
|
||||
--pl-cy:#22d3ee; --pl-vi:#a78bfa; --pl-mg:#d946ef; --pl-ye:#facc15;
|
||||
--pl-cy-soft:rgba(103,232,249,.85); --pl-hi:#f4f5fb;
|
||||
--pl-header-bg:rgba(5,6,10,.55); --pl-orb-op:.30; --pl-noise-op:.05;
|
||||
--pl-marquee-bg:rgba(255,255,255,.02); --pl-marquee-ink:rgba(231,233,243,.75);
|
||||
--pl-btn-ink:#05060a; --pl-shadow:0 24px 60px -18px rgba(34,211,238,.30);
|
||||
}
|
||||
|
||||
/* ===== 页面基调 ===== */
|
||||
.pl-page{background:var(--pl-bg)!important;color:var(--pl-ink)!important;font-family:"Inter","PingFang SC","Microsoft YaHei",system-ui,-apple-system,sans-serif!important}
|
||||
.pl-rel{position:relative}
|
||||
.pl-scroll::-webkit-scrollbar{width:8px}
|
||||
.pl-scroll::-webkit-scrollbar-track{background:transparent}
|
||||
.pl-scroll::-webkit-scrollbar-thumb{background:var(--pl-line);border-radius:8px}
|
||||
.pl-scroll::-webkit-scrollbar-thumb:hover{background:var(--pl-cy-soft)}
|
||||
/* flex 列容器子项默认 flex-shrink:1 会把内容压缩而不是溢出滚动(hero 被压扁的根因) */
|
||||
.pl-scroll > *{flex-shrink:0!important}
|
||||
|
||||
/* ===== 顶部 header(sticky 吸顶) ===== */
|
||||
.pl-header{position:sticky!important;top:0!important;background:var(--pl-header-bg)!important;backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border-bottom:1px solid var(--pl-line-soft)!important;z-index:50;flex-shrink:0}
|
||||
.pl-logo{font-size:20px!important;font-weight:900!important;letter-spacing:.02em;color:var(--pl-ink)!important;text-align:left!important;cursor:pointer}
|
||||
.pl-logo-sub{font-size:10px!important;letter-spacing:.42em;color:var(--pl-cy-soft)!important;text-transform:uppercase;text-align:left!important}
|
||||
.pl-nav{font-size:13px!important;color:var(--pl-ink-soft)!important;letter-spacing:.06em;cursor:pointer;transition:color .2s}
|
||||
.pl-nav:hover{color:var(--pl-cy)!important}
|
||||
|
||||
/* ===== 按钮 ===== */
|
||||
.pl-btn{background:linear-gradient(92deg,var(--pl-cy),var(--pl-vi) 55%,var(--pl-mg))!important;border:none!important;border-radius:999px!important;padding:11px 26px!important;color:var(--pl-btn-ink)!important;font-size:14px!important;font-weight:800!important;letter-spacing:.04em;cursor:pointer!important;transition:transform .2s,box-shadow .2s;box-shadow:0 0 24px -8px var(--pl-cy)}
|
||||
.pl-btn:hover{transform:translateY(-2px);box-shadow:0 0 34px -6px var(--pl-mg)}
|
||||
.pl-btn div{color:inherit!important;font-weight:inherit!important}
|
||||
.pl-btn-ghost{background:var(--pl-glass)!important;border:1px solid var(--pl-line)!important;border-radius:999px!important;padding:11px 26px!important;color:var(--pl-ink)!important;font-size:14px!important;font-weight:600!important;letter-spacing:.04em;cursor:pointer!important;backdrop-filter:blur(8px);transition:border-color .2s,transform .2s,box-shadow .2s}
|
||||
.pl-btn-ghost:hover{border-color:var(--pl-cy-soft)!important;transform:translateY(-2px);box-shadow:0 0 22px -8px var(--pl-cy)}
|
||||
.pl-btn-ghost div{color:inherit!important}
|
||||
.pl-btn-sm{padding:7px 18px!important;font-size:12.5px!important}
|
||||
|
||||
/* ===== Hero ===== */
|
||||
.pl-hero{position:relative!important;overflow:hidden!important;background:var(--pl-bg)!important;padding:clamp(56px,9vw,120px) clamp(20px,6vw,90px) clamp(48px,7vw,90px)!important}
|
||||
.pl-hero-deco{position:absolute!important;top:0!important;left:0!important;right:0!important;bottom:0!important;pointer-events:none!important;z-index:0}
|
||||
.pl-grid{position:absolute!important;top:0;bottom:0;left:0;right:0;background-image:linear-gradient(var(--pl-line-soft) 1px,transparent 1px),linear-gradient(90deg,var(--pl-line-soft) 1px,transparent 1px);background-size:56px 56px;-webkit-mask-image:radial-gradient(ellipse 90% 70% at 50% 35%,#000 35%,transparent 100%);mask-image:radial-gradient(ellipse 90% 70% at 50% 35%,#000 35%,transparent 100%)}
|
||||
.pl-noise{position:absolute!important;top:0;bottom:0;left:0;right:0;opacity:var(--pl-noise-op);mix-blend-mode:overlay;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
|
||||
.pl-orb{position:absolute!important;border-radius:50%;filter:blur(90px);pointer-events:none;opacity:var(--pl-orb-op)}
|
||||
.pl-orb-1{width:480px;height:480px;background:var(--pl-cy);top:-150px;left:-110px;animation:pl-drift1 19s ease-in-out infinite alternate}
|
||||
.pl-orb-2{width:430px;height:430px;background:var(--pl-mg);top:4%;right:-130px;animation:pl-drift2 24s ease-in-out infinite alternate}
|
||||
.pl-orb-3{width:320px;height:320px;background:var(--pl-ye);bottom:-130px;left:34%;opacity:calc(var(--pl-orb-op) * .45);animation:pl-drift1 28s ease-in-out infinite alternate-reverse}
|
||||
@keyframes pl-drift1{from{transform:translate(0,0) scale(1)}to{transform:translate(70px,50px) scale(1.14)}}
|
||||
@keyframes pl-drift2{from{transform:translate(0,0) scale(1.06)}to{transform:translate(-80px,60px) scale(.92)}}
|
||||
.pl-hero-content{position:relative;z-index:1}
|
||||
|
||||
.pl-badge{border:1px solid var(--pl-cy-soft)!important;border-radius:999px!important;padding:6px 16px!important;color:var(--pl-cy)!important;font-size:11.5px!important;letter-spacing:.26em!important;text-transform:uppercase;background:var(--pl-glass)!important}
|
||||
.pl-h1{font-size:clamp(2.6rem,7.4vw,5.4rem)!important;font-weight:900!important;line-height:1.06!important;letter-spacing:-.02em;text-align:left!important;color:var(--pl-ink)!important}
|
||||
.pl-stroke{color:transparent!important;-webkit-text-stroke:1.4px var(--pl-ink-faint)}
|
||||
.pl-grad{background:linear-gradient(92deg,var(--pl-cy),var(--pl-vi),var(--pl-mg),var(--pl-ye),var(--pl-cy));background-size:300% 100%;-webkit-background-clip:text;background-clip:text;color:transparent!important;animation:pl-hue 9s linear infinite}
|
||||
@keyframes pl-hue{to{background-position:300% 0}}
|
||||
.pl-sub{font-size:clamp(14px,1.6vw,17px)!important;color:var(--pl-ink-soft)!important;line-height:1.8!important;text-align:left!important;max-width:640px}
|
||||
.pl-stat-n{font-size:30px!important;font-weight:900!important;color:var(--pl-ink)!important;text-align:left!important;font-variant-numeric:tabular-nums}
|
||||
.pl-stat-t{font-size:12px!important;color:var(--pl-ink-faint)!important;letter-spacing:.12em;text-align:left!important}
|
||||
|
||||
/* 入场动画(stagger) */
|
||||
.pl-rise{animation:pl-rise .9s cubic-bezier(.2,.7,.2,1) both}
|
||||
.pl-d1{animation-delay:.05s}.pl-d2{animation-delay:.15s}.pl-d3{animation-delay:.28s}.pl-d4{animation-delay:.42s}.pl-d5{animation-delay:.56s}
|
||||
@keyframes pl-rise{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:translateY(0)}}
|
||||
|
||||
/* ===== 跑马灯带 ===== */
|
||||
.pl-marquee{overflow:hidden!important;white-space:nowrap!important;border-top:1px solid var(--pl-line-soft)!important;border-bottom:1px solid var(--pl-line-soft)!important;background:var(--pl-marquee-bg)!important;padding:14px 0!important}
|
||||
.pl-mq-track{display:flex!important;flex-wrap:nowrap!important;width:max-content!important;animation:pl-mq 36s linear infinite;will-change:transform}
|
||||
.pl-mq-track:hover{animation-play-state:paused}
|
||||
.pl-mq-item{font-size:14px!important;font-weight:700!important;letter-spacing:.14em;color:var(--pl-marquee-ink)!important;text-align:left!important;white-space:nowrap!important;padding:0 18px!important}
|
||||
.pl-mq-item::after{content:"✦";margin-left:36px;color:var(--pl-cy);opacity:.9}
|
||||
@keyframes pl-mq{from{transform:translateX(0)}to{transform:translateX(-50%)}}
|
||||
|
||||
/* ===== 区块 ===== */
|
||||
.pl-sec{position:relative!important;padding:84px clamp(20px,6vw,90px)!important;background:var(--pl-bg)!important}
|
||||
.pl-kicker{font-size:11.5px!important;letter-spacing:.34em!important;color:var(--pl-cy)!important;text-transform:uppercase;text-align:left!important;font-family:ui-monospace,"SF Mono",Consolas,monospace}
|
||||
.pl-h2{font-size:clamp(1.9rem,4.2vw,3rem)!important;font-weight:900!important;letter-spacing:-.01em;color:var(--pl-ink)!important;text-align:left!important;line-height:1.15!important}
|
||||
.pl-sec-sub{font-size:15px!important;color:var(--pl-ink-soft)!important;text-align:left!important;line-height:1.7!important;max-width:620px}
|
||||
|
||||
/* ===== Bento 玻璃卡片 ===== */
|
||||
.pl-card{position:relative!important;overflow:hidden!important;background:var(--pl-glass)!important;border:1px solid var(--pl-glass-br)!important;border-radius:22px!important;padding:26px!important;min-height:190px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);transition:transform .28s cubic-bezier(.2,.7,.2,1),border-color .28s,box-shadow .28s}
|
||||
.pl-card::before{content:"";position:absolute;top:0;left:0;right:0;height:120px;background:radial-gradient(420px 160px at 20% 0%,color-mix(in srgb,var(--pl-cy) 14%,transparent),transparent 70%);opacity:0;transition:opacity .3s;pointer-events:none}
|
||||
.pl-card:hover{transform:translateY(-6px);border-color:var(--pl-cy-soft)!important;box-shadow:var(--pl-shadow)}
|
||||
.pl-card:hover::before{opacity:1}
|
||||
.pl-card-icon{font-size:30px!important;text-align:left!important;filter:saturate(1.25)}
|
||||
.pl-card-t{font-size:17.5px!important;font-weight:800!important;color:var(--pl-ink)!important;text-align:left!important;letter-spacing:.01em}
|
||||
.pl-card-d{font-size:13px!important;color:var(--pl-ink-soft)!important;text-align:left!important;line-height:1.75!important}
|
||||
.pl-card-tag{align-self:flex-start;border:1px solid var(--pl-glass-br)!important;border-radius:999px!important;padding:3px 12px!important;font-size:10.5px!important;letter-spacing:.18em!important;color:var(--pl-mg)!important;text-transform:uppercase;font-family:ui-monospace,"SF Mono",Consolas,monospace}
|
||||
.pl-card-lg{background:linear-gradient(135deg,color-mix(in srgb,var(--pl-cy) 9%,var(--pl-glass)),color-mix(in srgb,var(--pl-mg) 8%,var(--pl-glass)) 55%,color-mix(in srgb,var(--pl-ye) 5%,var(--pl-glass)))!important;border:1px solid color-mix(in srgb,var(--pl-vi) 32%,transparent)!important}
|
||||
.pl-card-lg .pl-card-t{font-size:22px!important}
|
||||
|
||||
/* ===== 产线行 ===== */
|
||||
.pl-step{position:relative!important;background:var(--pl-glass)!important;border:1px solid var(--pl-glass-br)!important;border-radius:20px!important;padding:24px 26px!important;transition:border-color .25s,transform .25s;backdrop-filter:blur(10px)}
|
||||
.pl-step:hover{border-color:color-mix(in srgb,var(--pl-ye) 45%,transparent)!important;transform:translateY(-3px)}
|
||||
.pl-step-n{font-size:42px!important;font-weight:900!important;color:transparent!important;-webkit-text-stroke:1.2px var(--pl-ink-faint);text-align:left!important;line-height:1!important;font-variant-numeric:tabular-nums;font-family:ui-monospace,"SF Mono",Consolas,monospace}
|
||||
.pl-step-t{font-size:16.5px!important;font-weight:800!important;color:var(--pl-ink)!important;text-align:left!important}
|
||||
.pl-step-d{font-size:12.5px!important;color:var(--pl-ink-soft)!important;text-align:left!important;line-height:1.7!important}
|
||||
.pl-tag{align-self:center;border-radius:999px!important;padding:4px 14px!important;font-size:11px!important;letter-spacing:.14em!important;white-space:nowrap!important;text-align:center!important}
|
||||
.pl-tag-live{background:color-mix(in srgb,#22c55e 16%,transparent)!important;border:1px solid rgba(34,197,94,.45)!important;color:#16a34a!important}
|
||||
html[data-theme="dark"] .pl-tag-live{color:#4ade80!important}
|
||||
.pl-tag-soon{background:var(--pl-glass)!important;border:1px solid var(--pl-line)!important;color:var(--pl-ink-faint)!important}
|
||||
|
||||
/* ===== CTA / Footer ===== */
|
||||
.pl-cta{position:relative!important;overflow:hidden!important;margin:0 clamp(20px,6vw,90px) 84px!important;border-radius:28px!important;background:linear-gradient(120deg,color-mix(in srgb,var(--pl-cy) 13%,var(--pl-bg)),color-mix(in srgb,var(--pl-vi) 13%,var(--pl-bg)) 50%,color-mix(in srgb,var(--pl-mg) 13%,var(--pl-bg)))!important;border:1px solid color-mix(in srgb,var(--pl-vi) 30%,transparent)!important;padding:64px 40px!important}
|
||||
.pl-cta-t{font-size:clamp(1.8rem,4vw,2.8rem)!important;font-weight:900!important;color:var(--pl-ink)!important;letter-spacing:-.01em;text-align:center!important}
|
||||
.pl-cta-d{font-size:15px!important;color:var(--pl-ink-soft)!important;text-align:center!important}
|
||||
.pl-footer{border-top:1px solid var(--pl-line-soft)!important;padding:26px clamp(20px,6vw,90px)!important;background:var(--pl-bg2)!important}
|
||||
.pl-footer-t{font-size:12px!important;color:var(--pl-ink-faint)!important;letter-spacing:.08em;text-align:left!important}
|
||||
|
||||
/* ===== 响应式 ===== */
|
||||
@media (max-width:760px){
|
||||
.pl-sec{padding:56px 20px!important}
|
||||
.pl-cta{margin:0 16px 56px!important;padding:44px 22px!important}
|
||||
.pl-card{min-height:0;padding:20px!important}
|
||||
.pl-orb{filter:blur(70px)}
|
||||
.pl-step{padding:18px!important}
|
||||
}
|
||||
@ -273,5 +273,935 @@
|
||||
"显示所有已最小化的窗口": "Show all minimized windows",
|
||||
"## 完毕 ##": "## Done ##",
|
||||
"通用助手": "General Assistant",
|
||||
"API Key": "API Key"
|
||||
"API Key": "API Key",
|
||||
"助手": "Assistant",
|
||||
"待办": "To-do",
|
||||
"我的": "Me",
|
||||
"欢迎使用产线平台": "Welcome to the Pipeline Platform",
|
||||
"我的权益": "My Entitlements",
|
||||
"我的账户": "My Account",
|
||||
"产品商城": "Product Store",
|
||||
"深色模式": "Dark Mode",
|
||||
"浅色模式": "Light Mode",
|
||||
"暂无待办": "No to-dos",
|
||||
"暂无数据": "No data",
|
||||
"暂无已购产线 · 请到「我的 → 产品商城」购买": "No purchased pipelines · Buy in Me → Product Store",
|
||||
"尚未购买任何产线": "No pipelines purchased yet",
|
||||
"购买产线后即可在此对话;通用助手无需购买。": "Buy a pipeline to chat here; the general assistant needs no purchase.",
|
||||
"去产品商城购买": "Go to Product Store",
|
||||
"使用通用助手": "Use General Assistant",
|
||||
"工作空间为通用会话专属目录,不进入项目空间": "Workspace is the general session's own directory, not any project space",
|
||||
"暂无已购产线": "No purchased pipelines",
|
||||
"尚未购买该产线或订阅已到期,请到产品商城购买后再开始对话": "Pipeline not purchased or subscription expired. Buy it in the Product Store before chatting.",
|
||||
"我的工单": "My Tickets",
|
||||
"工单管理": "Ticket Management",
|
||||
"提交新工单": "New Ticket",
|
||||
"action必须是pause/resume/cancel": "action must be pause/resume/cancel",
|
||||
"产线ID": "Pipeline ID",
|
||||
"产线类型": "Pipeline Type",
|
||||
"任务ID": "Task ID",
|
||||
"任务标题": "Task Title",
|
||||
"取消": "Cancel",
|
||||
"恢复": "Resume",
|
||||
"提交新任务": "Submit New Task",
|
||||
"暂停": "Pause",
|
||||
"模式(可选)": "Mode (Optional)",
|
||||
"版本": "Version",
|
||||
"缺少task_id": "Missing task_id",
|
||||
"缺少task_id或step_name": "Missing task_id or step_name",
|
||||
"缺少产线ID": "Missing Pipeline ID",
|
||||
"缺少任务标题": "Missing Task Title",
|
||||
"输入文本(可选)": "Input Text (Optional)",
|
||||
"返回列表": "Back to List",
|
||||
"',": "',",
|
||||
"Add Error": "Add Error",
|
||||
"Add Success": "Add Success",
|
||||
"Authorization Error": "Authorization Error",
|
||||
"Delete Error": "Delete Error",
|
||||
"Delete Success": "Delete Success",
|
||||
"Error": "Error",
|
||||
"Invalid": "Invalid",
|
||||
"Please login": "Please login",
|
||||
"Record no exist or with wrong ownership": "Record no exist or with wrong ownership",
|
||||
"Success": "Success",
|
||||
"Update Error": "Update Error",
|
||||
"Update Success": "Update Success",
|
||||
"failed": "failed",
|
||||
"ok": "ok",
|
||||
"下属产品": "Subordinate Products",
|
||||
"产品创建成功": "Product Created Successfully",
|
||||
"产品删除成功": "Product Deleted Successfully",
|
||||
"产品名称": "Product Name",
|
||||
"产品更新成功": "Product Updated Successfully",
|
||||
"产品注册表": "Product Registry",
|
||||
"产品简介": "Product Introduction",
|
||||
"产品管理": "Product Management",
|
||||
"产品类别ID": "Product Category ID",
|
||||
"产品类别树": "Product Category Tree",
|
||||
"产品类型显示名": "Product Type Display Name",
|
||||
"产品类型标识": "Product Type Identifier",
|
||||
"产品编码": "Product Code",
|
||||
"产品详情": "Product Details",
|
||||
"价格": "Price",
|
||||
"价格类型": "Price Type",
|
||||
"创建失败\\x3A": "Creation Failed\\x3A",
|
||||
"删除失败\\x3A": "Deletion Failed\\x3A",
|
||||
"启用日期": "Enable Date",
|
||||
"图标": "Icon",
|
||||
"失效日期": "Expiration Date",
|
||||
"所属机构ID": "Organization ID",
|
||||
"扩展属性": "Extended Attributes",
|
||||
"排序序号": "Sort Order",
|
||||
"是否可挂产品": "Can Link Products",
|
||||
"是否启用": "Is Enabled",
|
||||
"更新失败\\x3A": "Update Failed\\x3A",
|
||||
"父类别ID": "Parent Category ID",
|
||||
"类别ID": "Category ID",
|
||||
"类别创建成功": "Category Created Successfully",
|
||||
"类别删除成功": "Category Deleted Successfully",
|
||||
"类别名称": "Category Name",
|
||||
"类别描述": "Category Description",
|
||||
"类别更新成功": "Category Updated Successfully",
|
||||
"该类别下有产品,无法删除": "Category Has Products, Cannot Delete",
|
||||
"该类别下有子类别,无法删除": "Category Has Subcategories, Cannot Delete",
|
||||
"货币": "Currency",
|
||||
"运营商产品类型配置": "Operator Product Type Config",
|
||||
"运营商用户ID": "Operator User ID",
|
||||
"配置内容": "Config Content",
|
||||
"配置创建成功": "Config Created Successfully",
|
||||
"配置删除成功": "Config Deleted Successfully",
|
||||
"配置名称": "Config Name",
|
||||
"配置更新成功": "Config Updated Successfully",
|
||||
"id": "id",
|
||||
"二维码路径": "QR Code Path",
|
||||
"产品id": "Product ID",
|
||||
"产品种类id": "Product Category ID",
|
||||
"促销失效日期": "Promotion Expiration Date",
|
||||
"商户id": "Merchant ID",
|
||||
"客户id": "Customer ID",
|
||||
"折扣": "Discount",
|
||||
"折扣\\x3A": "Discount:",
|
||||
"折扣二维码": "Discount QR Code",
|
||||
"折扣产品明细": "Discount Product Details",
|
||||
"折扣名称": "Discount Name",
|
||||
"折扣方案id": "Discount Plan ID",
|
||||
"折扣明细表": "Discount Detail Table",
|
||||
"折扣有效期": "Discount Validity Period",
|
||||
"折扣管理": "Discount Management",
|
||||
"折扣表": "Discount Table",
|
||||
"有效期": "Validity Period",
|
||||
"生成促销码": "Generate Promo Code",
|
||||
"Validation Failed": "Validation Failed",
|
||||
"ppid parameter required": "ppid parameter required",
|
||||
"上传定价数据": "Upload Pricing Data",
|
||||
"下载定价数据": "Download Pricing Data",
|
||||
"供应商": "Supplier",
|
||||
"供应商折扣": "Supplier Discount",
|
||||
"名称": "Name",
|
||||
"定价属于": "Pricing Belongs To",
|
||||
"定价数据": "Pricing Data",
|
||||
"定价文件": "Pricing File",
|
||||
"定价时序数据没找到": "Pricing time-series data not found",
|
||||
"定价模版": "Pricing Template",
|
||||
"定价测试": "Pricing Test",
|
||||
"定价细项": "Pricing Line Items",
|
||||
"定价项目": "Pricing Item",
|
||||
"定价项目id": "Pricing Item ID",
|
||||
"定价项目时序": "Pricing Item Time Series",
|
||||
"所属机构": "Organization",
|
||||
"折扣不能为空": "Discount cannot be empty",
|
||||
"折扣不能大于1": "Discount cannot be greater than 1",
|
||||
"折扣不能小于0": "Discount cannot be less than 0",
|
||||
"折扣必须是数字": "Discount must be a number",
|
||||
"测试": "Test",
|
||||
"规格明细": "Specification Details",
|
||||
"计费数据(json)": "Billing Data (JSON)",
|
||||
"项目名称": "Project Name",
|
||||
"验证定价": "Validate Pricing",
|
||||
"不可退费": "Non-refundable",
|
||||
"停用日期": "Deactivation Date",
|
||||
"充值历史": "Recharge History",
|
||||
"充值客户id": "Recharge Customer ID",
|
||||
"充值渠道": "Recharge Channel",
|
||||
"充值费率": "Recharge Fee Rate",
|
||||
"充值金额": "Recharge Amount",
|
||||
"原支付id": "Original Payment ID",
|
||||
"发起日期": "Initiation Date",
|
||||
"发起时间": "Initiation Time",
|
||||
"币种": "Currency",
|
||||
"支付发起时点": "Payment Initiation Time",
|
||||
"支付取消时点": "Payment Cancellation Time",
|
||||
"支付名称": "Payment Name",
|
||||
"支付完成时点": "Payment Completion Time",
|
||||
"支付客户ip": "Payment Customer IP",
|
||||
"支付操作用户id": "Payment Operator User ID",
|
||||
"支付日志": "Payment Log",
|
||||
"支付渠道": "Payment Channel",
|
||||
"支付渠道id": "Payment Channel ID",
|
||||
"支付渠道交易ID": "Payment Channel Transaction ID",
|
||||
"支付渠道名称": "Payment Channel Name",
|
||||
"支付状态": "Payment Status",
|
||||
"支付费率": "Payment Fee Rate",
|
||||
"支付费用": "Payment Fee",
|
||||
"支付金额": "Payment Amount",
|
||||
"本地充值已退费": "Local Recharge Refunded",
|
||||
"禁用日期": "Disabled Date",
|
||||
"费率": "Fee Rate",
|
||||
"转账码": "Transfer Code",
|
||||
"退费金额": "Refund Amount",
|
||||
"金额": "Amount",
|
||||
"需要选定一条记录": "Please select a record",
|
||||
"需输入充值金额": "Please enter the recharge amount",
|
||||
"余额": "Balance",
|
||||
"明细": "Details",
|
||||
"科目": "Account",
|
||||
"账户": "Account",
|
||||
"会计科目管理": "Chart of Accounts Management",
|
||||
"科目编码": "Account Code",
|
||||
"科目名称": "Account Name",
|
||||
"科目类型": "Account Type",
|
||||
"上级科目": "Parent Account",
|
||||
"科目级别": "Account Level",
|
||||
"辅助核算": "Auxiliary Accounting",
|
||||
"启用": "Enable",
|
||||
"停用": "Disable",
|
||||
"新增科目": "Add Account",
|
||||
"编辑科目": "Edit Account",
|
||||
"删除科目": "Delete Account",
|
||||
"搜索": "Search",
|
||||
"科目编码或名称": "Account Code or Name",
|
||||
"资产": "Assets",
|
||||
"负债": "Liabilities",
|
||||
"所有者权益": "Owner's Equity",
|
||||
"成本": "Cost",
|
||||
"损益": "Profit & Loss",
|
||||
"借方": "Debit",
|
||||
"贷方": "Credit",
|
||||
"方向": "Direction",
|
||||
"期初余额": "Opening Balance",
|
||||
"期末余额": "Closing Balance",
|
||||
"本期借方": "Current Period Debit",
|
||||
"本期贷方": "Current Period Credit",
|
||||
"累计借方": "Cumulative Debit",
|
||||
"累计贷方": "Cumulative Credit",
|
||||
"凭证日期": "Voucher Date",
|
||||
"凭证号": "Voucher No.",
|
||||
"合计": "Total",
|
||||
"制单人": "Prepared By",
|
||||
"审核人": "Reviewed By",
|
||||
"记账人": "Posted By",
|
||||
"未记账": "Unposted",
|
||||
"已记账": "Posted",
|
||||
"已审核": "Approved",
|
||||
"未审核": "Unapproved",
|
||||
"新增凭证": "Add Voucher",
|
||||
"编辑凭证": "Edit Voucher",
|
||||
"删除凭证": "Delete Voucher",
|
||||
"审核凭证": "Review Voucher",
|
||||
"记账": "Post",
|
||||
"反记账": "Unpost",
|
||||
"凭证类型": "Voucher Type",
|
||||
"收款凭证": "Receipt Voucher",
|
||||
"付款凭证": "Payment Voucher",
|
||||
"转账凭证": "Transfer Voucher",
|
||||
"记账凭证": "Journal Voucher",
|
||||
"附件数": "Attachments",
|
||||
"总账": "General Ledger",
|
||||
"明细账": "Subsidiary Ledger",
|
||||
"科目余额表": "Trial Balance of Accounts",
|
||||
"资产负债表": "Balance Sheet",
|
||||
"利润表": "Income Statement",
|
||||
"现金流量表": "Cash Flow Statement",
|
||||
"试算平衡": "Trial Balance",
|
||||
"会计期间": "Accounting Period",
|
||||
"年度": "Year",
|
||||
"月份": "Month",
|
||||
"期初": "Period Start",
|
||||
"期末": "Period End",
|
||||
"本年累计": "YTD",
|
||||
"本月合计": "Monthly Total",
|
||||
"过账": "Posting",
|
||||
"结账": "Closing",
|
||||
"反结账": "Unclosing",
|
||||
"凭证查询": "Voucher Query",
|
||||
"科目查询": "Account Query",
|
||||
"辅助核算项目": "Auxiliary Accounting Item",
|
||||
"客户": "Customer",
|
||||
"部门": "Department",
|
||||
"项目": "Project",
|
||||
"员工": "Employee",
|
||||
"核算类别": "Accounting Category",
|
||||
"新增": "Add",
|
||||
"保存": "Save",
|
||||
"确认": "Confirm",
|
||||
"删除": "Delete",
|
||||
"编辑": "Edit",
|
||||
"查看": "View",
|
||||
"导出": "Export",
|
||||
"打印": "Print",
|
||||
"刷新": "Refresh",
|
||||
"返回": "Back",
|
||||
"提交": "Submit",
|
||||
"重置": "Reset",
|
||||
"凭证": "Voucher",
|
||||
"总分类账": "General Ledger",
|
||||
"核算项目余额": "Accounting Item Balance",
|
||||
"科目汇总表": "Account Summary",
|
||||
"数量": "Quantity",
|
||||
"单价": "Unit Price",
|
||||
"外币": "Foreign Currency",
|
||||
"汇率": "Exchange Rate",
|
||||
"原币": "Original Currency",
|
||||
"本位币": "Local Currency",
|
||||
"辅助账": "Auxiliary Ledger",
|
||||
"日记账": "Journal",
|
||||
"多栏账": "Multi-column Ledger",
|
||||
"核算项目明细账": "Accounting Item Detail Ledger",
|
||||
"数量金额明细账": "Quantity-Amount Detail Ledger",
|
||||
"数量金额总账": "Quantity-Amount General Ledger",
|
||||
"固定资产": "Fixed Assets",
|
||||
"工资": "Salary",
|
||||
"往来": "Current Account",
|
||||
"自定义辅助核算": "Custom Auxiliary Accounting",
|
||||
"核算项目": "Accounting Item",
|
||||
"核算类别名称": "Accounting Category Name",
|
||||
"辅助核算编码": "Auxiliary Accounting Code",
|
||||
"辅助核算名称": "Auxiliary Accounting Name",
|
||||
"余额方向": "Balance Direction",
|
||||
"余额方向(借/贷)": "Balance Direction (Debit/Credit)",
|
||||
"借方发生额": "Debit Amount",
|
||||
"贷方发生额": "Credit Amount",
|
||||
"借方累计": "Cumulative Debit",
|
||||
"贷方累计": "Cumulative Credit",
|
||||
"年初余额": "Year Opening Balance",
|
||||
"年累计借方": "YTD Debit",
|
||||
"年累计贷方": "YTD Credit",
|
||||
"年累计余额": "YTD Balance",
|
||||
"本月借方发生额": "Monthly Debit Amount",
|
||||
"本月贷方发生额": "Monthly Credit Amount",
|
||||
"本年借方发生额": "Annual Debit Amount",
|
||||
"本年贷方发生额": "Annual Credit Amount",
|
||||
"年初借方余额": "Year Opening Debit Balance",
|
||||
"年初贷方余额": "Year Opening Credit Balance",
|
||||
"期初借方余额": "Opening Debit Balance",
|
||||
"期初贷方余额": "Opening Credit Balance",
|
||||
"期末借方余额": "Closing Debit Balance",
|
||||
"期末贷方余额": "Closing Credit Balance",
|
||||
"损益结转": "P&L Carry-forward",
|
||||
"结转损益": "Carry Forward P&L",
|
||||
"凭证字号": "Voucher Prefix No.",
|
||||
"凭证字": "Voucher Prefix",
|
||||
"记账日期": "Posting Date",
|
||||
"制单日期": "Preparation Date",
|
||||
"记账状态": "Posting Status",
|
||||
"审核状态": "Review Status",
|
||||
"作废": "Void",
|
||||
"冲销": "Reverse",
|
||||
"红冲": "Red Reverse",
|
||||
"反审核": "Unapprove",
|
||||
"已作废": "Voided",
|
||||
"已冲销": "Reversed",
|
||||
"操作": "Action",
|
||||
"日期": "Date",
|
||||
"类型": "Type",
|
||||
"编码": "Code",
|
||||
"编号": "Number",
|
||||
"金额(借方)": "Amount (Debit)",
|
||||
"金额(贷方)": "Amount (Credit)",
|
||||
"金额方向": "Amount Direction",
|
||||
"记账金额": "Posting Amount",
|
||||
"凭证编号": "Voucher Number",
|
||||
"API": "API",
|
||||
"APIKEY": "APIKEY",
|
||||
"API接口": "API Interface",
|
||||
"API标题": "API Title",
|
||||
"API输入输出": "API Input/Output",
|
||||
"API集": "API Collection",
|
||||
"API集名称": "API Collection Name",
|
||||
"api名称": "API Name",
|
||||
"api密码": "API Password",
|
||||
"api测试": "API Test",
|
||||
"api用户": "API User",
|
||||
"api集id": "API Collection ID",
|
||||
"headers模版": "Headers Template",
|
||||
"http方法": "HTTP Method",
|
||||
"path": "path",
|
||||
"上位应用名": "Parent Application Name",
|
||||
"上位系统ID": "Parent System ID",
|
||||
"上位系统密码": "Parent System Password",
|
||||
"上位系统密码表": "Parent System Password Table",
|
||||
"上游任务": "Upstream Task",
|
||||
"加密密钥": "Encryption Key",
|
||||
"动态headers函数": "Dynamic Headers Function",
|
||||
"参数模版": "Parameter Template",
|
||||
"响应模版": "Response Template",
|
||||
"响应转换函数名": "Response Transform Function Name",
|
||||
"回调url": "Callback URL",
|
||||
"外部系统": "External System",
|
||||
"属主id": "Owner ID",
|
||||
"属主机构id": "Owner Organization ID",
|
||||
"应用id": "Application ID",
|
||||
"开始时间": "Start Time",
|
||||
"我的appid": "My App ID",
|
||||
"执行方任务id": "Executor Task ID",
|
||||
"授权api名": "Authorized API Name",
|
||||
"接口描述": "Interface Description",
|
||||
"数据模版": "Data Template",
|
||||
"是否第一用户": "Is First User",
|
||||
"本地业务id": "Local Business ID",
|
||||
"流式匹配串": "Stream Match String",
|
||||
"流式输出": "Stream Output",
|
||||
"用户id": "User ID",
|
||||
"相应数据": "Response Data",
|
||||
"类型名": "Type Name",
|
||||
"类型说明": "Type Description",
|
||||
"系统url": "System URL",
|
||||
"结束时间": "End Time",
|
||||
"认证API名": "Auth API Name",
|
||||
"跳转到": "Jump to",
|
||||
"输入字段": "Input Field",
|
||||
"输入输出": "Input/Output",
|
||||
"输入输出id": "Input/Output ID",
|
||||
"需要鉴权": "Requires Auth",
|
||||
"审批记录": "Approval Records",
|
||||
"审批流程配置": "Approval Flow Config",
|
||||
"审批标题": "Approval Title",
|
||||
"审批意见": "Approval Comment",
|
||||
"业务类型": "Business Type",
|
||||
"钉钉审批模板编码": "DingTalk Process Code",
|
||||
"待审批": "Pending",
|
||||
"已通过": "Approved",
|
||||
"已驳回": "Rejected",
|
||||
"审批节点配置": "Approval Node Config",
|
||||
"审批节点链JSON": "Approver Chain JSON",
|
||||
"钉钉应用AgentId": "DingTalk Agent ID",
|
||||
"表单字段配置JSON": "Form Field Config JSON",
|
||||
"业务类型名称": "Business Type Name",
|
||||
"产线步骤审批": "Pipeline Step Approval",
|
||||
"产线部署审批": "Pipeline Deploy Approval",
|
||||
"商机研发审批": "Opportunity R&D Approval",
|
||||
"内容发布": "Content Publish",
|
||||
"发起人": "Initiated By",
|
||||
"审批人": "Resolved By",
|
||||
"钉钉审批实例ID": "DingTalk Instance ID",
|
||||
"完成时间": "Completed At",
|
||||
"已取消": "Cancelled",
|
||||
"是否启用(1/0)": "Active",
|
||||
"审批记录表": "Approval Records",
|
||||
"业务类型(content_publish等)": "Business Type",
|
||||
"业务数据ID": "Business Data ID",
|
||||
"申请人ID": "Applicant",
|
||||
"审批人ID": "Approver",
|
||||
"状态(pending/approved/rejected/cancelled)": "Approval Status",
|
||||
"账号规格": "Account Spec",
|
||||
"账号资源": "Account Resource",
|
||||
"权益配额": "Privilege Quota",
|
||||
"计费方式": "Charge Mode",
|
||||
"试用": "Trial",
|
||||
"月租": "Monthly",
|
||||
"年租": "Yearly",
|
||||
"存储规格": "Storage Spec",
|
||||
"存储资源": "Storage Resource",
|
||||
"容量采样": "Capacity Sample",
|
||||
"计量方式": "Meter Mode",
|
||||
"计费容量": "Billable Capacity",
|
||||
"峰值容量": "Peak Capacity",
|
||||
"上传文件": "Upload File",
|
||||
"其他人权限": "Others' Permissions",
|
||||
"同事权限": "Colleague Permissions",
|
||||
"哈希值": "Hash Value",
|
||||
"属主": "Owner",
|
||||
"所属机构id": "Organization ID",
|
||||
"文件": "File",
|
||||
"文件大小": "File Size",
|
||||
"文件类型": "File Type",
|
||||
"父权限id": "Parent Permission ID",
|
||||
"目录": "Directory",
|
||||
"目录id": "Directory ID",
|
||||
"目录信息id": "Directory Info ID",
|
||||
"相对路径": "Relative Path",
|
||||
"绝对路径": "Absolute Path",
|
||||
"Deleted successfully": "Deleted successfully",
|
||||
"ID": "ID",
|
||||
"Missing record id": "Missing record id",
|
||||
"delete_platform_supply_products not registered": "delete_platform_supply_products not registered",
|
||||
"delete_platform_supply_relations not registered": "delete_platform_supply_relations not registered",
|
||||
"delete_product_supplier_mapping not registered": "delete_product_supplier_mapping not registered",
|
||||
"delete_sales_ledger function not found": "delete_sales_ledger function not found",
|
||||
"delete_sub_resellers function not found": "delete_sub_resellers function not found",
|
||||
"delete_suppliers function not found": "delete_suppliers function not found",
|
||||
"source_product_id, supplier_org_id, relation_id are required": "source_product_id, supplier_org_id, relation_id are required",
|
||||
"supplier_org_id is required": "supplier_org_id is required",
|
||||
"update_platform_supply_products not registered": "update_platform_supply_products not registered",
|
||||
"update_platform_supply_relations not registered": "update_platform_supply_relations not registered",
|
||||
"update_product_supplier_mapping not registered": "update_product_supplier_mapping not registered",
|
||||
"update_sales_ledger function not found": "update_sales_ledger function not found",
|
||||
"update_sub_resellers function not found": "update_sub_resellers function not found",
|
||||
"update_suppliers function not found": "update_suppliers function not found",
|
||||
"二级分销商": "Sub-distributor",
|
||||
"二级分销商ID": "Sub-distributor ID",
|
||||
"二级分销商名称": "Sub-distributor Name",
|
||||
"二级分销商编号": "Sub-distributor Code",
|
||||
"二级分销商表": "Sub-distributor Table",
|
||||
"交付周期(天)": "Delivery Cycle (Days)",
|
||||
"交易日期": "Transaction Date",
|
||||
"交易流水号": "Transaction Serial No.",
|
||||
"交易笔数": "Transaction Count",
|
||||
"产品ID": "Product ID",
|
||||
"产品供应商映射创建成功": "Product-Supplier Mapping Created Successfully",
|
||||
"产品供应映射表": "Product Supply Mapping Table",
|
||||
"产品分类ID": "Product Category ID",
|
||||
"产品分销折扣": "Product Distribution Discount",
|
||||
"产品引入成功": "Product Introduction Successful",
|
||||
"产品折扣明细": "Product Discount Details",
|
||||
"付款方式": "Payment Method",
|
||||
"佣金率": "Commission Rate",
|
||||
"供应合同创建成功": "Supply Contract Created Successfully",
|
||||
"供应合同项目创建成功": "Supply Contract Item Created Successfully",
|
||||
"供应商ID": "Supplier ID",
|
||||
"供应商充值记录": "Supplier Recharge Record",
|
||||
"供应商创建成功": "Supplier Created Successfully",
|
||||
"供应商名称": "Supplier Name",
|
||||
"供应商名称不能为空": "Supplier Name Cannot Be Empty",
|
||||
"供应商类型": "Supplier Type",
|
||||
"供应商结算记录": "Supplier Settlement Record",
|
||||
"供应商编号": "Supplier Code",
|
||||
"供应商表": "Supplier Table",
|
||||
"供应方产品ID": "Supplier Product ID",
|
||||
"供应方机构ID": "Supplier Organization ID",
|
||||
"供应方机构ID(平台内)": "Supplier Organization ID (Platform Internal)",
|
||||
"供应链记账创建成功": "Supply Chain Ledger Entry Created Successfully",
|
||||
"供货价": "Supply Price",
|
||||
"供销产品明细": "Supply & Distribution Product Details",
|
||||
"供销关系ID": "Supply & Distribution Relation ID",
|
||||
"供销合同ID": "Supply & Distribution Contract ID",
|
||||
"供销合同产品折扣明细表": "Supply & Distribution Contract Product Discount Details Table",
|
||||
"供销合同产品明细ID": "Supply & Distribution Contract Product Detail ID",
|
||||
"供销合同表": "Supply & Distribution Contract Table",
|
||||
"供销记账表": "Supply & Distribution Ledger Table",
|
||||
"充值日期": "Recharge Date",
|
||||
"充值状态": "Recharge Status",
|
||||
"充值记录已更新": "Recharge Record Updated",
|
||||
"关系名称": "Relation Name",
|
||||
"关系编号": "Relation Code",
|
||||
"关联供销关系ID": "Associated Supply & Distribution Relation ID",
|
||||
"关联供销合同ID": "Associated Supply & Distribution Contract ID",
|
||||
"内部供应商必须选择所属机构": "Internal Supplier Must Select Affiliated Organization",
|
||||
"分销协议ID": "Distribution Agreement ID",
|
||||
"分销协议产品折扣明细表": "Distribution Agreement Product Discount Details Table",
|
||||
"分销协议产品明细ID": "Distribution Agreement Product Detail ID",
|
||||
"分销协议创建成功": "Distribution Agreement Created Successfully",
|
||||
"分销协议表": "Distribution Agreement Table",
|
||||
"分销协议项目创建成功": "Distribution Agreement Item Created Successfully",
|
||||
"分销商": "Distributor",
|
||||
"分销商创建成功": "Distributor Created Successfully",
|
||||
"分销商结算记录": "Distributor Settlement Record",
|
||||
"分销折扣": "Distribution Discount",
|
||||
"分销指导价": "Distribution Guide Price",
|
||||
"分销金额": "Distribution Amount",
|
||||
"分销金额(二级分销商应付)": "Distribution Amount (Sub-distributor Payable)",
|
||||
"利润金额": "Profit Amount",
|
||||
"到期日期": "Expiration Date",
|
||||
"协议名称": "Agreement Name",
|
||||
"协议编号": "Agreement Code",
|
||||
"合作类型": "Cooperation Type",
|
||||
"合同名称": "Contract Name",
|
||||
"合同编号": "Contract Code",
|
||||
"地址": "Address",
|
||||
"外部供应商ID": "External Supplier ID",
|
||||
"对方金额(应付)": "Counterparty Amount (Payable)",
|
||||
"对方金额(应收)": "Counterparty Amount (Receivable)",
|
||||
"差异": "Difference",
|
||||
"差异金额": "Difference Amount",
|
||||
"平台供应产品创建成功": "Platform Supply Product Created Successfully",
|
||||
"平台供应关系创建成功": "Platform Supply Relation Created Successfully",
|
||||
"平台供销产品明细表": "Platform Supply & Distribution Product Details Table",
|
||||
"平台内供销关系表": "Platform Internal Supply & Distribution Relation Table",
|
||||
"建议零售价": "Suggested Retail Price",
|
||||
"开始日期": "Start Date",
|
||||
"开户银行": "Bank of Account",
|
||||
"我方金额(应付)": "Our Amount (Payable)",
|
||||
"我方金额(应收)": "Our Amount (Receivable)",
|
||||
"所属主分销商机构ID": "Parent Distributor Organization ID",
|
||||
"所属分销商机构ID": "Distributor Organization ID",
|
||||
"折扣率": "Discount Rate",
|
||||
"支付方式": "Payment Method",
|
||||
"是否外部供应商": "Is External Supplier",
|
||||
"是否首选": "Is Preferred",
|
||||
"最小订货量": "Minimum Order Quantity",
|
||||
"最小订购量": "Minimum Order Quantity",
|
||||
"机构ID": "Organization ID",
|
||||
"来源类型": "Source Type",
|
||||
"来源记录ID": "Source Record ID",
|
||||
"核对": "Verification",
|
||||
"核对状态": "Verification Status",
|
||||
"生效日期": "Effective Date",
|
||||
"税号": "Tax ID",
|
||||
"签署日期": "Signing Date",
|
||||
"类别": "Category",
|
||||
"经销商创建成功": "Dealer Created Successfully",
|
||||
"结束日期": "End Date",
|
||||
"结算单价": "Settlement Unit Price",
|
||||
"结算单号": "Settlement No.",
|
||||
"结算周期": "Settlement Cycle",
|
||||
"结算已确认": "Settlement Confirmed",
|
||||
"结算方式": "Settlement Method",
|
||||
"结算日": "Settlement Day",
|
||||
"结算日期": "Settlement Date",
|
||||
"结算状态": "Settlement Status",
|
||||
"结算金额": "Settlement Amount",
|
||||
"缺少productid参数": "Missing productid Parameter",
|
||||
"缺少sub_distributor_id或productid参数": "Missing sub_distributor_id or productid Parameter",
|
||||
"缺少必要参数\\x3A productid, quantity, unit_price": "Missing Required Parameters\\x3A productid, quantity, unit_price",
|
||||
"联系电话": "Contact Phone",
|
||||
"联系邮箱": "Contact Email",
|
||||
"负责销售ID": "Sales Representative ID",
|
||||
"进货折扣": "Purchase Discount",
|
||||
"进货金额": "Purchase Amount",
|
||||
"进货金额(应付供应商)": "Purchase Amount (Payable to Supplier)",
|
||||
"采购方机构ID": "Purchaser Organization ID",
|
||||
"银行账号": "Bank Account No.",
|
||||
"销售单价": "Sales Unit Price",
|
||||
"销售台账创建成功": "Sales Ledger Created Successfully",
|
||||
"销售数量": "Sales Quantity",
|
||||
"销售日期": "Sales Date",
|
||||
"销售记账表": "Sales Ledger Table",
|
||||
"需求方机构ID": "Demander Organization ID",
|
||||
"默认佣金率": "Default Commission Rate",
|
||||
"默认分销折扣": "Default Distribution Discount",
|
||||
"默认折扣": "Default Discount",
|
||||
"默认折扣率": "Default Discount Rate",
|
||||
"投标驾驶舱": "Bidding Cockpit",
|
||||
"招标商务要素": "Tender Business Facts",
|
||||
"投标知识库": "Bid Knowledge Base",
|
||||
"评分项": "Scoring Items",
|
||||
"标书章节": "Bid Chapters",
|
||||
"合成标书": "Assembled Bid Document",
|
||||
"创建投标项目": "Create Bid Project",
|
||||
"参与人员": "Team Members",
|
||||
"上传招标文件": "Upload Tender Document",
|
||||
"招标文件解析": "Tender Document Parsing",
|
||||
"解析QC审核": "Parsing QC Review",
|
||||
"契合度得分": "Fit Score",
|
||||
"通过分": "Pass Score",
|
||||
"改进意见": "Improvement Suggestions",
|
||||
"资质要求": "Qualification Requirements",
|
||||
"投标文件要求": "Bid Document Requirements",
|
||||
"章节评审": "Chapter Review",
|
||||
"整书评分": "Whole-document Scoring",
|
||||
"得分规则": "Scoring Rules",
|
||||
"评审通过": "Review Passed",
|
||||
"退回重写": "Returned for Rewrite",
|
||||
"交付确认": "Delivery Confirmation",
|
||||
"投标开始时间": "Bid Start Time",
|
||||
"投标截止时间": "Bid Deadline",
|
||||
"项目周期": "Project Duration",
|
||||
"招标金额": "Budget Amount",
|
||||
"投标保证金": "Bid Bond",
|
||||
"内容摘要": "Summary",
|
||||
"研发报告": "R&D Report",
|
||||
"研发审批": "R&D Approval",
|
||||
"热点软件推荐": "Hot Software Ranking",
|
||||
"今日AI招标": "Today's AI Tenders",
|
||||
"报告状态": "Report Status",
|
||||
"人工确认通过": "Human-Confirmed",
|
||||
"已发起研发审批": "Approval Initiated",
|
||||
"审批通过": "Approved",
|
||||
"审批驳回": "Rejected",
|
||||
"提交确认": "Submit for Confirmation",
|
||||
"发起审批": "Initiate Approval",
|
||||
"软件/主题": "Software/Theme",
|
||||
"报告标题": "Report Title",
|
||||
"报告正文": "Report Content",
|
||||
"确认人": "Confirmed By",
|
||||
"审批说明": "Approval Note",
|
||||
"商机分析师": "Opportunity Analyst",
|
||||
"研发报告撰写工程师": "R&D Report Writer",
|
||||
"项目ID": "Project ID",
|
||||
"报告ID": "Report ID",
|
||||
"审批状态": "Approval Status",
|
||||
"结论时间": "Resolved At",
|
||||
"研发场景": "R&D Scenario",
|
||||
"输入": "Input",
|
||||
"输出": "Output",
|
||||
"成果": "Deliverables",
|
||||
"成果文件": "Output Files",
|
||||
"研发报告详情": "R&D Report Detail",
|
||||
"下载": "Download",
|
||||
"无权查看": "No Access",
|
||||
"暂无成果文件": "No output files yet",
|
||||
"代金券": "Voucher",
|
||||
"代金券管理": "Voucher Management",
|
||||
"模板管理": "Template Management",
|
||||
"券实例管理": "Voucher Instance Management",
|
||||
"使用流水": "Usage Records",
|
||||
"管理代金券模板和规则配置": "Manage voucher templates and rule configuration",
|
||||
"查看和发放代金券": "View and issue vouchers",
|
||||
"查看代金券使用记录": "View voucher usage records",
|
||||
"我的代金券": "My Vouchers",
|
||||
"发放代金券": "Issue Voucher",
|
||||
"确认作废": "Confirm Void",
|
||||
"作废代金券": "Void Voucher",
|
||||
"作废原因": "Void Reason",
|
||||
"必填,将追加到券备注(审计留痕)": "Required; will be appended to voucher remark (audit trail)",
|
||||
"按此模板发券": "Issue from this template",
|
||||
"代金券模板": "Voucher Template",
|
||||
"代金券实例": "Voucher Instance",
|
||||
"代金券规则": "Voucher Rule",
|
||||
"代金券使用流水": "Voucher Usage Log",
|
||||
"模板名称": "Template Name",
|
||||
"模板编码": "Template Code",
|
||||
"模板ID": "Template ID",
|
||||
"模板": "Template",
|
||||
"面值": "Face Value",
|
||||
"面值(元)": "Face Value (CNY)",
|
||||
"已抵扣(元)": "Deducted (CNY)",
|
||||
"总发行量(0不限)": "Total Issue Count (0=unlimited)",
|
||||
"已发放量": "Issued Count",
|
||||
"有效期天数": "Valid Days",
|
||||
"规则类型": "Rule Type",
|
||||
"规则配置JSON": "Rule Config JSON",
|
||||
"执行顺序": "Sort Order",
|
||||
"客户机构ID": "Customer Organization ID",
|
||||
"客户机构": "Customer Organization",
|
||||
"券码": "Voucher Code",
|
||||
"未使用": "Unused",
|
||||
"已使用": "Used",
|
||||
"已过期": "Expired",
|
||||
"实际抵扣金额": "Actual Deducted",
|
||||
"生效时间": "Valid From",
|
||||
"过期时间": "Valid To",
|
||||
"发放时间": "Issued At",
|
||||
"使用时间": "Used At",
|
||||
"使用订单ID": "Order ID",
|
||||
"订单ID": "Order ID",
|
||||
"发放来源": "Source",
|
||||
"手动发放": "Manual",
|
||||
"注册赠券": "Registration Gift",
|
||||
"促销活动": "Promotion",
|
||||
"发放人": "Issued By",
|
||||
"券实例ID": "Instance ID",
|
||||
"券实例": "Voucher Instance",
|
||||
"券面值": "Face Value",
|
||||
"抵扣金额": "Deducted Amount",
|
||||
"产品类型": "Product Type",
|
||||
"操作人": "Used By",
|
||||
"规则配置": "Rule Configuration",
|
||||
"最低消费": "Minimum Amount",
|
||||
"最高消费": "Maximum Amount",
|
||||
"限定产品类型": "Product Type Limit",
|
||||
"限定特定产品": "Product Limit",
|
||||
"排除特定产品": "Product Exclusion",
|
||||
"最大使用次数": "Max Usage Count",
|
||||
"用户等级": "User Level",
|
||||
"发券": "Issue",
|
||||
"客户机构ID必填": "Customer is required",
|
||||
"可选": "Optional",
|
||||
"查询": "Search",
|
||||
"json应用接口": "JSON Application Interface",
|
||||
"svg内容": "SVG Content",
|
||||
"代码管理": "Code Management",
|
||||
"值": "Value",
|
||||
"参数值": "Parameter Value",
|
||||
"参数名称": "Parameter Name",
|
||||
"参数管理": "Parameter Management",
|
||||
"参数表": "Parameter Table",
|
||||
"图标管理": "Icon Management",
|
||||
"多级标志": "Multi-level Flag",
|
||||
"应用编码表": "Application Code Table",
|
||||
"父id": "Parent ID",
|
||||
"编码名称": "Code Name",
|
||||
"编码键值表": "Code Key-Value Table",
|
||||
"键": "Key",
|
||||
"用户管理": "User Management",
|
||||
"用户名": "Username",
|
||||
"密码": "Password",
|
||||
"确认密码": "Confirm Password",
|
||||
"姓名": "Full Name",
|
||||
"手机号": "Phone Number",
|
||||
"角色": "Role",
|
||||
"新增用户": "Add User",
|
||||
"编辑用户": "Edit User",
|
||||
"删除用户": "Delete User",
|
||||
"角色名称": "Role Name",
|
||||
"角色编码": "Role Code",
|
||||
"角色描述": "Role Description",
|
||||
"权限": "Permission",
|
||||
"新增角色": "Add Role",
|
||||
"编辑角色": "Edit Role",
|
||||
"删除角色": "Delete Role",
|
||||
"分配权限": "Assign Permission",
|
||||
"机构管理": "Organization Management",
|
||||
"机构名称": "Organization Name",
|
||||
"机构编码": "Organization Code",
|
||||
"机构类型": "Organization Type",
|
||||
"上级机构": "Parent Organization",
|
||||
"新增机构": "Add Organization",
|
||||
"编辑机构": "Edit Organization",
|
||||
"删除机构": "Delete Organization",
|
||||
"菜单管理": "Menu Management",
|
||||
"菜单名称": "Menu Name",
|
||||
"菜单路径": "Menu Path",
|
||||
"菜单图标": "Menu Icon",
|
||||
"菜单排序": "Menu Sort Order",
|
||||
"上级菜单": "Parent Menu",
|
||||
"新增菜单": "Add Menu",
|
||||
"编辑菜单": "Edit Menu",
|
||||
"删除菜单": "Delete Menu",
|
||||
"权限名称": "Permission Name",
|
||||
"权限编码": "Permission Code",
|
||||
"权限类型": "Permission Type",
|
||||
"资源权限": "Resource Permission",
|
||||
"操作权限": "Operation Permission",
|
||||
"数据权限": "Data Permission",
|
||||
"登录日志": "Login Log",
|
||||
"登录时间": "Login Time",
|
||||
"登录IP": "Login IP",
|
||||
"登录状态": "Login Status",
|
||||
"成功": "Success",
|
||||
"失败": "Failed",
|
||||
"操作日志": "Operation Log",
|
||||
"操作类型": "Operation Type",
|
||||
"操作时间": "Operation Time",
|
||||
"操作结果": "Operation Result",
|
||||
"API密钥管理": "API Key Management",
|
||||
"密钥名称": "Key Name",
|
||||
"密钥值": "Key Value",
|
||||
"密钥状态": "Key Status",
|
||||
"新增密钥": "Add Key",
|
||||
"编辑密钥": "Edit Key",
|
||||
"删除密钥": "Delete Key",
|
||||
"在线用户": "Online Users",
|
||||
"会话ID": "Session ID",
|
||||
"最后活动时间": "Last Activity Time",
|
||||
"强制下线": "Force Logout",
|
||||
"安全设置": "Security Settings",
|
||||
"密码策略": "Password Policy",
|
||||
"密码长度": "Password Length",
|
||||
"密码复杂度": "Password Complexity",
|
||||
"密码有效期": "Password Expiry",
|
||||
"登录失败锁定": "Login Failure Lock",
|
||||
"最大失败次数": "Max Failed Attempts",
|
||||
"锁定时长": "Lock Duration",
|
||||
"双因素认证": "Two-Factor Authentication",
|
||||
"启用双因素": "Enable 2FA",
|
||||
"验证码": "Verification Code",
|
||||
"Token管理": "Token Management",
|
||||
"Token名称": "Token Name",
|
||||
"Token过期时间": "Token Expiry Time",
|
||||
"新增Token": "Add Token",
|
||||
"编辑Token": "Edit Token",
|
||||
"删除Token": "Delete Token",
|
||||
"刷新Token": "Refresh Token",
|
||||
"用户组": "User Group",
|
||||
"组名称": "Group Name",
|
||||
"组描述": "Group Description",
|
||||
"新增用户组": "Add User Group",
|
||||
"编辑用户组": "Edit User Group",
|
||||
"删除用户组": "Delete User Group",
|
||||
"成员管理": "Member Management",
|
||||
"添加成员": "Add Member",
|
||||
"移除成员": "Remove Member",
|
||||
"名称或编码": "Name or Code",
|
||||
"管理员": "Administrator",
|
||||
"普通用户": "Normal User",
|
||||
"只读用户": "Read-Only User",
|
||||
"访问控制": "Access Control",
|
||||
"最后登录": "Last Login",
|
||||
"清除登录次数": "Clear Login Fail Count",
|
||||
"新密码": "New Password",
|
||||
"确认清除该用户的连续登录失败次数?": "Clear the consecutive login failure count of this user?",
|
||||
"为选中用户设置新密码(至少8位)": "Set a new password (at least 8 characters) for the selected user",
|
||||
"API Key ID": "API Key ID",
|
||||
"akikey": "akikey",
|
||||
"apikey为空": "apikey is empty",
|
||||
"error happend": "error happened",
|
||||
"need login": "need login",
|
||||
"you need login to do this": "you need login to do this",
|
||||
"下位应用名": "Sub-application Name",
|
||||
"下位系统": "Sub-system",
|
||||
"下位系统apikey": "Sub-system API Key",
|
||||
"下位系统id": "Sub-system ID",
|
||||
"允许ip集": "Allowed IP Set",
|
||||
"允许的IP集": "Allowed IP Set",
|
||||
"创建API Key": "Create API Key",
|
||||
"创建日期": "Creation Date",
|
||||
"创建用户apikey": "Create User API Key",
|
||||
"删除API Key": "Delete API Key",
|
||||
"复制API Key": "Copy API Key",
|
||||
"应用ID": "Application ID",
|
||||
"应用名": "Application Name",
|
||||
"应用名称": "Application Name",
|
||||
"应用描述": "Application Description",
|
||||
"更新API Key": "Update API Key",
|
||||
"没有找到用户apikey": "User API Key not found",
|
||||
"重新生成API Key": "Regenerate API Key",
|
||||
"能力": "Capabilities",
|
||||
"流程": "Workflow",
|
||||
"登录 / 注册": "Sign In / Up",
|
||||
"AI 原生 · 产线操作系统": "AI-Native · Pipeline Operating System",
|
||||
"把业务装进产线": "Put Business on Pipelines",
|
||||
"让 Agent 自主运转": "Let Agents Run It",
|
||||
"产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。": "The Pipeline Platform is an agent-driven enterprise pipeline operating system: launch opportunity, bidding and development lines in one click, let LLM agents advance tasks autonomously, keep humans as quality gates — every output is a product and every run is billed.",
|
||||
"查看平台能力": "Explore Capabilities",
|
||||
"功能模块": "Modules",
|
||||
"自主运转": "Autonomous",
|
||||
"语言国际化": "Languages",
|
||||
"商机挖掘": "Opportunity Mining",
|
||||
"投标生产": "Bid Production",
|
||||
"软件开发": "Software Development",
|
||||
"模型网关": "Model Gateway",
|
||||
"产品商品化": "Productization",
|
||||
"计费记账": "Billing & Accounting",
|
||||
"供销协同": "Supply Chain",
|
||||
"人机协同门禁": "Human-in-the-Loop Gates",
|
||||
"平台能力": "Platform Capabilities",
|
||||
"不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。": "Not chatbots — intelligent pipelines that work autonomously, stay auditable and bill directly.",
|
||||
"Agent 驱动产线引擎": "Agent-Driven Pipeline Engine",
|
||||
"会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。": "Start by chat: one sentence kicks off a flow; agents decompose tasks, call LLMs and produce deliverables. Three-layer LLM fault tolerance keeps pipelines running through single-model failures.",
|
||||
"多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。": "Unified access to multi-vendor LLMs: balance gating, sticky session rotation, automatic failover routing and per-call billing — API keys never leave the process.",
|
||||
"资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。: Full chain from resource to product, pricing, discount, subscription and billing; display price": "real price × customer discount. Running a pipeline consumes and books in real time.",
|
||||
"平台待办中枢": "Platform Todo Hub",
|
||||
"全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。": "The global async notification hub: gates, confirmations and uploads bubble up as human todos — each item is issued once and auto-replenished when handled.",
|
||||
"PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。": "PM review, QC inspection and human confirmation at every layer — machine speed with human judgment, fully traceable in audit logs.",
|
||||
"安全与多租户": "Security & Multi-Tenancy",
|
||||
"RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。": "Fine-grained RBAC path permissions, organization isolation, short-lived internal tokens, login audit and lockout.",
|
||||
"国际化与双主题": "i18n & Dual Themes",
|
||||
"中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。": "Live switching across Chinese, English, Japanese and Korean; light/dark themes in one click; same experience on desktop and mobile H5.",
|
||||
"每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。": "Every pipeline is a complete business loop: from intelligence input to shippable output, advanced by agents and gated by humans.",
|
||||
"招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。": "Tender intelligence collection → opportunity assessment → research reports → human confirmation: turn market signals into followable opportunities.",
|
||||
"运行中": "Live",
|
||||
"标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。": "Intelligent bid document drafting: point-by-point scoring responses, technical/commercial volumes, material gap lists and multi-round QC gates.",
|
||||
"SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。": "SDLC task chain: requirements → design → development → testing → deployment, with PM review gates and deliverable management.",
|
||||
"面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。": "Ops automation for FOMS: alert handling, inspection reports and change orchestration.",
|
||||
"规划中": "Planned",
|
||||
"内容生产与投放自动化:素材生成、渠道分发、效果回收。": "Content production and campaign automation: asset generation, channel distribution and performance feedback.",
|
||||
"五步跑通一条产线": "Five Steps to Run a Pipeline",
|
||||
"订阅产线": "Subscribe",
|
||||
"在产品商城选购产线订阅,账号权益即时生效。": "Buy a pipeline subscription in the product store; entitlements take effect instantly.",
|
||||
"发起会话": "Start a Session",
|
||||
"进入产线工作台,用一句话下达任务。": "Enter the pipeline workspace and issue a task in one sentence.",
|
||||
"Agent 自主执行": "Agents Execute",
|
||||
"任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。": "Task decomposition, model calls and deliverables advance automatically — jump in to steer at any time.",
|
||||
"人类门禁": "Human Gates",
|
||||
"关键节点冒泡为平台待办,人看过正文再放行。": "Key checkpoints bubble up as platform todos; humans review the content before release.",
|
||||
"交付与记账": "Deliver & Bill",
|
||||
"产出归档、按量出账,消费明细随时可查。": "Outputs are archived and billed by usage; consumption details available anytime.",
|
||||
"准备好把业务装上产线了吗?": "Ready to put your business on pipelines?",
|
||||
"注册账号,订阅第一条产线,让 Agent 今天就开始干活。": "Register, subscribe to your first pipeline, and let agents start working today.",
|
||||
"立即注册": "Register Now",
|
||||
"© 2026 开元云(北京)科技有限公司": "© 2026 Open Computing (Beijing) Technology Co., Ltd.",
|
||||
"可行性研究": "Feasibility Study",
|
||||
"调研": "Research",
|
||||
"需求挖掘立项": "Demand-Mining Initiative",
|
||||
"市场需求": "Market Demand",
|
||||
"共性需求": "Common Requirements",
|
||||
"需求规格": "Requirement Spec",
|
||||
"架构与可行性": "Architecture & Feasibility",
|
||||
"FP与成本": "FP & Cost",
|
||||
"商业价值": "Business Value",
|
||||
"风险": "Risks",
|
||||
"结论建议": "Conclusion",
|
||||
"资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。": "Full chain from resource to product, pricing, discount, subscription and billing; display price is the real price multiplied by the customer discount. Running a pipeline consumes and books in real time.",
|
||||
"产线矩阵": "Pipeline Matrix"
|
||||
}
|
||||
@ -273,5 +273,824 @@
|
||||
"显示所有已最小化的窗口": "最小化されたすべてのウィンドウを表示",
|
||||
"## 完毕 ##": "## 完了 ##",
|
||||
"通用助手": "汎用アシスタント",
|
||||
"API Key": "API Key"
|
||||
"API Key": "API Key",
|
||||
"我的工单": "マイチケット",
|
||||
"工单管理": "チケット管理",
|
||||
"提交新工单": "新規チケット",
|
||||
"action必须是pause/resume/cancel": "actionはpause/resume/cancelでなければなりません",
|
||||
"产线ID": "パイプラインID",
|
||||
"产线类型": "パイプラインタイプ",
|
||||
"任务ID": "タスクID",
|
||||
"任务标题": "タスクタイトル",
|
||||
"取消": "キャンセル",
|
||||
"恢复": "再開",
|
||||
"提交新任务": "新規タスクを提出",
|
||||
"暂停": "一時停止",
|
||||
"模式(可选)": "モード(任意)",
|
||||
"版本": "バージョン",
|
||||
"缺少task_id": "task_idがありません",
|
||||
"缺少task_id或step_name": "task_idまたはstep_nameがありません",
|
||||
"缺少产线ID": "パイプラインIDがありません",
|
||||
"缺少任务标题": "タスクタイトルがありません",
|
||||
"输入文本(可选)": "テキスト入力(任意)",
|
||||
"返回列表": "リストに戻る",
|
||||
"',": "',",
|
||||
"Add Error": "追加エラー",
|
||||
"Add Success": "追加成功",
|
||||
"Authorization Error": "認証エラー",
|
||||
"Delete Error": "削除エラー",
|
||||
"Delete Success": "削除成功",
|
||||
"Error": "エラー",
|
||||
"Invalid": "無効",
|
||||
"Please login": "ログインしてください",
|
||||
"Record no exist or with wrong ownership": "レコードが存在しないか、所有権が正しくありません",
|
||||
"Success": "成功",
|
||||
"Update Error": "更新エラー",
|
||||
"Update Success": "更新成功",
|
||||
"failed": "失敗",
|
||||
"ok": "OK",
|
||||
"下属产品": "下位製品",
|
||||
"产品创建成功": "製品作成成功",
|
||||
"产品删除成功": "製品削除成功",
|
||||
"产品名称": "製品名",
|
||||
"产品更新成功": "製品更新成功",
|
||||
"产品注册表": "製品レジストリ",
|
||||
"产品简介": "製品紹介",
|
||||
"产品管理": "製品管理",
|
||||
"产品类别ID": "製品カテゴリID",
|
||||
"产品类别树": "製品カテゴリツリー",
|
||||
"产品类型显示名": "製品タイプ表示名",
|
||||
"产品类型标识": "製品タイプ識別子",
|
||||
"产品编码": "製品コード",
|
||||
"产品详情": "製品詳細",
|
||||
"价格": "価格",
|
||||
"价格类型": "価格タイプ",
|
||||
"创建失败\\x3A": "作成失敗\\x3A",
|
||||
"删除失败\\x3A": "削除失敗\\x3A",
|
||||
"启用日期": "有効化日",
|
||||
"图标": "アイコン",
|
||||
"失效日期": "失効日",
|
||||
"所属机构ID": "所属組織ID",
|
||||
"扩展属性": "拡張属性",
|
||||
"排序序号": "並び順",
|
||||
"是否可挂产品": "製品リンク可否",
|
||||
"是否启用": "有効化可否",
|
||||
"更新失败\\x3A": "更新失敗\\x3A",
|
||||
"父类别ID": "親カテゴリID",
|
||||
"类别ID": "カテゴリID",
|
||||
"类别创建成功": "カテゴリ作成成功",
|
||||
"类别删除成功": "カテゴリ削除成功",
|
||||
"类别名称": "カテゴリ名",
|
||||
"类别描述": "カテゴリ説明",
|
||||
"类别更新成功": "カテゴリ更新成功",
|
||||
"该类别下有产品,无法删除": "カテゴリに製品があるため削除できません",
|
||||
"该类别下有子类别,无法删除": "カテゴリにサブカテゴリがあるため削除できません",
|
||||
"货币": "通貨",
|
||||
"运营商产品类型配置": "事業者製品タイプ設定",
|
||||
"运营商用户ID": "事業者ユーザーID",
|
||||
"配置内容": "設定内容",
|
||||
"配置创建成功": "設定作成成功",
|
||||
"配置删除成功": "設定削除成功",
|
||||
"配置名称": "設定名",
|
||||
"配置更新成功": "設定更新成功",
|
||||
"id": "id",
|
||||
"二维码路径": "QRコードパス",
|
||||
"产品id": "製品ID",
|
||||
"产品种类id": "製品カテゴリID",
|
||||
"促销失效日期": "プロモーション有効期限",
|
||||
"商户id": "加盟店ID",
|
||||
"客户id": "顧客ID",
|
||||
"折扣": "割引",
|
||||
"折扣\\x3A": "割引:",
|
||||
"折扣二维码": "割引QRコード",
|
||||
"折扣产品明细": "割引製品詳細",
|
||||
"折扣名称": "割引名称",
|
||||
"折扣方案id": "割引プランID",
|
||||
"折扣明细表": "割引明細テーブル",
|
||||
"折扣有效期": "割引有効期間",
|
||||
"折扣管理": "割引管理",
|
||||
"折扣表": "割引テーブル",
|
||||
"有效期": "有効期間",
|
||||
"生成促销码": "プロモコード生成",
|
||||
"Validation Failed": "バリデーション失敗",
|
||||
"ppid parameter required": "ppidパラメーターが必要です",
|
||||
"上传定价数据": "価格データアップロード",
|
||||
"下载定价数据": "価格データダウンロード",
|
||||
"供应商": "サプライヤー",
|
||||
"供应商折扣": "サプライヤー割引",
|
||||
"名称": "名称",
|
||||
"定价属于": "価格所属",
|
||||
"定价数据": "価格データ",
|
||||
"定价文件": "価格ファイル",
|
||||
"定价时序数据没找到": "価格時系列データが見つかりません",
|
||||
"定价模版": "価格テンプレート",
|
||||
"定价测试": "価格テスト",
|
||||
"定价细项": "価格明細",
|
||||
"定价项目": "価格項目",
|
||||
"定价项目id": "価格項目ID",
|
||||
"定价项目时序": "価格項目時系列",
|
||||
"所属机构": "所属組織",
|
||||
"折扣不能为空": "割引は必須です",
|
||||
"折扣不能大于1": "割引は1より大きくできません",
|
||||
"折扣不能小于0": "割引は0より小さくできません",
|
||||
"折扣必须是数字": "割引は数値である必要があります",
|
||||
"测试": "テスト",
|
||||
"规格明细": "仕様明細",
|
||||
"计费数据(json)": "課金データ(JSON)",
|
||||
"项目名称": "プロジェクト名",
|
||||
"验证定价": "価格検証",
|
||||
"不可退费": "返金不可",
|
||||
"停用日期": "停止日",
|
||||
"充值历史": "チャージ履歴",
|
||||
"充值客户id": "チャージ顧客ID",
|
||||
"充值渠道": "チャージチャネル",
|
||||
"充值费率": "チャージ手数料率",
|
||||
"充值金额": "チャージ金額",
|
||||
"原支付id": "元支払いID",
|
||||
"发起日期": "開始日",
|
||||
"发起时间": "開始時刻",
|
||||
"币种": "通貨",
|
||||
"支付发起时点": "支払い開始時刻",
|
||||
"支付取消时点": "支払いキャンセル時刻",
|
||||
"支付名称": "支払い名",
|
||||
"支付完成时点": "支払い完了時刻",
|
||||
"支付客户ip": "支払い顧客IP",
|
||||
"支付操作用户id": "支払い操作ユーザーID",
|
||||
"支付日志": "支払いログ",
|
||||
"支付渠道": "支払いチャネル",
|
||||
"支付渠道id": "支払いチャネルID",
|
||||
"支付渠道交易ID": "支払いチャネル取引ID",
|
||||
"支付渠道名称": "支払いチャネル名",
|
||||
"支付状态": "支払いステータス",
|
||||
"支付费率": "支払い手数料率",
|
||||
"支付费用": "支払い手数料",
|
||||
"支付金额": "支払い金額",
|
||||
"本地充值已退费": "ローカルチャージ返金済み",
|
||||
"禁用日期": "無効化日",
|
||||
"费率": "手数料率",
|
||||
"转账码": "振込コード",
|
||||
"退费金额": "返金金額",
|
||||
"金额": "金額",
|
||||
"需要选定一条记录": "レコードを選択してください",
|
||||
"需输入充值金额": "チャージ金額を入力してください",
|
||||
"余额": "残高",
|
||||
"明细": "明細",
|
||||
"科目": "科目",
|
||||
"账户": "口座",
|
||||
"会计科目管理": "勘定科目管理",
|
||||
"科目编码": "科目コード",
|
||||
"科目名称": "科目名",
|
||||
"科目类型": "科目タイプ",
|
||||
"上级科目": "上位科目",
|
||||
"科目级别": "科目レベル",
|
||||
"辅助核算": "補助核算",
|
||||
"启用": "有効化",
|
||||
"停用": "無効化",
|
||||
"新增科目": "科目追加",
|
||||
"编辑科目": "科目編集",
|
||||
"删除科目": "科目削除",
|
||||
"搜索": "検索",
|
||||
"科目编码或名称": "科目コードまたは名称",
|
||||
"资产": "資産",
|
||||
"负债": "負債",
|
||||
"所有者权益": "純資産",
|
||||
"成本": "コスト",
|
||||
"损益": "損益",
|
||||
"借方": "借方",
|
||||
"贷方": "貸方",
|
||||
"方向": "方向",
|
||||
"期初余额": "期首残高",
|
||||
"期末余额": "期末残高",
|
||||
"本期借方": "当期借方",
|
||||
"本期贷方": "当期貸方",
|
||||
"累计借方": "累計借方",
|
||||
"累计贷方": "累計貸方",
|
||||
"凭证日期": "伝票日付",
|
||||
"凭证号": "伝票番号",
|
||||
"合计": "合計",
|
||||
"制单人": "作成者",
|
||||
"审核人": "承認者",
|
||||
"记账人": "記帳者",
|
||||
"未记账": "未記帳",
|
||||
"已记账": "記帳済み",
|
||||
"已审核": "承認済み",
|
||||
"未审核": "未承認",
|
||||
"新增凭证": "伝票追加",
|
||||
"编辑凭证": "伝票編集",
|
||||
"删除凭证": "伝票削除",
|
||||
"审核凭证": "伝票承認",
|
||||
"记账": "記帳",
|
||||
"反记账": "記帳取消",
|
||||
"凭证类型": "伝票タイプ",
|
||||
"收款凭证": "入金伝票",
|
||||
"付款凭证": "出金伝票",
|
||||
"转账凭证": "振替伝票",
|
||||
"记账凭证": "仕訳伝票",
|
||||
"附件数": "添付数",
|
||||
"总账": "総勘定元帳",
|
||||
"明细账": "補助元帳",
|
||||
"科目余额表": "科目残高一覧",
|
||||
"资产负债表": "貸借対照表",
|
||||
"利润表": "損益計算書",
|
||||
"现金流量表": "キャッシュフロー計算書",
|
||||
"试算平衡": "試算表",
|
||||
"会计期间": "会計期間",
|
||||
"年度": "年度",
|
||||
"月份": "月",
|
||||
"期初": "期首",
|
||||
"期末": "期末",
|
||||
"本年累计": "本年累計",
|
||||
"本月合计": "当月合計",
|
||||
"过账": "転記",
|
||||
"结账": "決算",
|
||||
"反结账": "決算取消",
|
||||
"凭证查询": "伝票照会",
|
||||
"科目查询": "科目照会",
|
||||
"辅助核算项目": "補助核算項目",
|
||||
"客户": "顧客",
|
||||
"部门": "部門",
|
||||
"项目": "プロジェクト",
|
||||
"员工": "従業員",
|
||||
"核算类别": "核算カテゴリ",
|
||||
"新增": "追加",
|
||||
"保存": "保存",
|
||||
"确认": "確認",
|
||||
"删除": "削除",
|
||||
"编辑": "編集",
|
||||
"查看": "表示",
|
||||
"导出": "エクスポート",
|
||||
"打印": "印刷",
|
||||
"刷新": "更新",
|
||||
"返回": "戻る",
|
||||
"提交": "送信",
|
||||
"重置": "リセット",
|
||||
"凭证": "伝票",
|
||||
"总分类账": "総分類帳",
|
||||
"核算项目余额": "核算項目残高",
|
||||
"科目汇总表": "科目集計表",
|
||||
"数量": "数量",
|
||||
"单价": "単価",
|
||||
"外币": "外貨",
|
||||
"汇率": "為替レート",
|
||||
"原币": "原通貨",
|
||||
"本位币": "自国通貨",
|
||||
"辅助账": "補助台帳",
|
||||
"日记账": "仕訳帳",
|
||||
"多栏账": "多欄帳",
|
||||
"核算项目明细账": "核算項目明細帳",
|
||||
"数量金额明细账": "数量金額明細帳",
|
||||
"数量金额总账": "数量金額総帳",
|
||||
"固定资产": "固定資産",
|
||||
"工资": "給与",
|
||||
"往来": "取引",
|
||||
"自定义辅助核算": "カスタム補助核算",
|
||||
"核算项目": "核算項目",
|
||||
"核算类别名称": "核算カテゴリ名",
|
||||
"辅助核算编码": "補助核算コード",
|
||||
"辅助核算名称": "補助核算名",
|
||||
"余额方向": "残高方向",
|
||||
"余额方向(借/贷)": "残高方向(借方/貸方)",
|
||||
"借方发生额": "借方発生額",
|
||||
"贷方发生额": "貸方発生額",
|
||||
"借方累计": "借方累計",
|
||||
"贷方累计": "貸方累計",
|
||||
"年初余额": "年初残高",
|
||||
"年累计借方": "年間累計借方",
|
||||
"年累计贷方": "年間累計貸方",
|
||||
"年累计余额": "年間累計残高",
|
||||
"本月借方发生额": "当月借方発生額",
|
||||
"本月贷方发生额": "当月貸方発生額",
|
||||
"本年借方发生额": "本年借方発生額",
|
||||
"本年贷方发生额": "本年貸方発生額",
|
||||
"年初借方余额": "年初借方残高",
|
||||
"年初贷方余额": "年初貸方残高",
|
||||
"期初借方余额": "期首借方残高",
|
||||
"期初贷方余额": "期首貸方残高",
|
||||
"期末借方余额": "期末借方残高",
|
||||
"期末贷方余额": "期末貸方残高",
|
||||
"损益结转": "損益振替",
|
||||
"结转损益": "損益を振り替える",
|
||||
"凭证字号": "伝票字番",
|
||||
"凭证字": "伝票字",
|
||||
"记账日期": "記帳日付",
|
||||
"制单日期": "作成日付",
|
||||
"记账状态": "記帳ステータス",
|
||||
"审核状态": "承認ステータス",
|
||||
"作废": "無効",
|
||||
"冲销": "取消",
|
||||
"红冲": "赤取消",
|
||||
"反审核": "承認取消",
|
||||
"已作废": "無効済み",
|
||||
"已冲销": "取消済み",
|
||||
"操作": "操作",
|
||||
"日期": "日付",
|
||||
"类型": "タイプ",
|
||||
"编码": "コード",
|
||||
"编号": "番号",
|
||||
"金额(借方)": "金額(借方)",
|
||||
"金额(贷方)": "金額(貸方)",
|
||||
"金额方向": "金額方向",
|
||||
"记账金额": "記帳金額",
|
||||
"凭证编号": "伝票番号",
|
||||
"API": "API",
|
||||
"APIKEY": "APIKEY",
|
||||
"API接口": "APIインターフェース",
|
||||
"API标题": "APIタイトル",
|
||||
"API输入输出": "API入出力",
|
||||
"API集": "APIコレクション",
|
||||
"API集名称": "APIコレクション名",
|
||||
"api名称": "API名称",
|
||||
"api密码": "APIパスワード",
|
||||
"api测试": "APIテスト",
|
||||
"api用户": "APIユーザー",
|
||||
"api集id": "APIコレクションID",
|
||||
"headers模版": "ヘッダーテンプレート",
|
||||
"http方法": "HTTPメソッド",
|
||||
"path": "path",
|
||||
"上位应用名": "上位アプリケーション名",
|
||||
"上位系统ID": "上位システムID",
|
||||
"上位系统密码": "上位システムパスワード",
|
||||
"上位系统密码表": "上位システムパスワード表",
|
||||
"上游任务": "上流タスク",
|
||||
"加密密钥": "暗号化キー",
|
||||
"动态headers函数": "動的ヘッダー関数",
|
||||
"参数模版": "パラメーターテンプレート",
|
||||
"响应模版": "レスポンステンプレート",
|
||||
"响应转换函数名": "レスポンス変換関数名",
|
||||
"回调url": "コールバックURL",
|
||||
"外部系统": "外部システム",
|
||||
"属主id": "所有者ID",
|
||||
"属主机构id": "所有者組織ID",
|
||||
"应用id": "アプリケーションID",
|
||||
"开始时间": "開始時間",
|
||||
"我的appid": "マイAppID",
|
||||
"执行方任务id": "実行タスクID",
|
||||
"授权api名": "認可API名",
|
||||
"接口描述": "インターフェース説明",
|
||||
"数据模版": "データテンプレート",
|
||||
"是否第一用户": "最初のユーザーか",
|
||||
"本地业务id": "ローカル業務ID",
|
||||
"流式匹配串": "ストリームマッチ文字列",
|
||||
"流式输出": "ストリーム出力",
|
||||
"用户id": "ユーザーID",
|
||||
"相应数据": "対応データ",
|
||||
"类型名": "型名",
|
||||
"类型说明": "型説明",
|
||||
"系统url": "システムURL",
|
||||
"结束时间": "終了時間",
|
||||
"认证API名": "認証API名",
|
||||
"跳转到": "ジャンプ先",
|
||||
"输入字段": "入力フィールド",
|
||||
"输入输出": "入出力",
|
||||
"输入输出id": "入出力ID",
|
||||
"需要鉴权": "認証が必要",
|
||||
"审批记录": "承認記録",
|
||||
"审批流程配置": "承認フロー設定",
|
||||
"审批标题": "承認タイトル",
|
||||
"审批意见": "承認コメント",
|
||||
"业务类型": "業務タイプ",
|
||||
"钉钉审批模板编码": "DingTalkプロセスコード",
|
||||
"待审批": "承認待ち",
|
||||
"已通过": "承認済み",
|
||||
"已驳回": "却下",
|
||||
"账号规格": "アカウント仕様",
|
||||
"账号资源": "アカウントリソース",
|
||||
"权益配额": "権益クォータ",
|
||||
"计费方式": "課金方式",
|
||||
"试用": "トライアル",
|
||||
"月租": "月額",
|
||||
"年租": "年額",
|
||||
"存储规格": "ストレージ仕様",
|
||||
"存储资源": "ストレージリソース",
|
||||
"容量采样": "容量サンプリング",
|
||||
"计量方式": "計量方式",
|
||||
"计费容量": "課金容量",
|
||||
"峰值容量": "ピーク容量",
|
||||
"上传文件": "ファイルをアップロード",
|
||||
"其他人权限": "他のユーザーの権限",
|
||||
"同事权限": "同僚の権限",
|
||||
"哈希值": "ハッシュ値",
|
||||
"属主": "オーナー",
|
||||
"所属机构id": "所属組織ID",
|
||||
"文件": "ファイル",
|
||||
"文件大小": "ファイルサイズ",
|
||||
"文件类型": "ファイルタイプ",
|
||||
"父权限id": "親権限ID",
|
||||
"目录": "ディレクトリ",
|
||||
"目录id": "ディレクトリID",
|
||||
"目录信息id": "ディレクトリ情報ID",
|
||||
"相对路径": "相対パス",
|
||||
"绝对路径": "絶対パス",
|
||||
"Deleted successfully": "削除に成功しました",
|
||||
"ID": "ID",
|
||||
"Missing record id": "レコードIDがありません",
|
||||
"delete_platform_supply_products not registered": "delete_platform_supply_products が登録されていません",
|
||||
"delete_platform_supply_relations not registered": "delete_platform_supply_relations が登録されていません",
|
||||
"delete_product_supplier_mapping not registered": "delete_product_supplier_mapping が登録されていません",
|
||||
"delete_sales_ledger function not found": "delete_sales_ledger 関数が見つかりません",
|
||||
"delete_sub_resellers function not found": "delete_sub_resellers 関数が見つかりません",
|
||||
"delete_suppliers function not found": "delete_suppliers 関数が見つかりません",
|
||||
"source_product_id, supplier_org_id, relation_id are required": "source_product_id、supplier_org_id、relation_id は必須です",
|
||||
"supplier_org_id is required": "supplier_org_id は必須です",
|
||||
"update_platform_supply_products not registered": "update_platform_supply_products が登録されていません",
|
||||
"update_platform_supply_relations not registered": "update_platform_supply_relations が登録されていません",
|
||||
"update_product_supplier_mapping not registered": "update_product_supplier_mapping が登録されていません",
|
||||
"update_sales_ledger function not found": "update_sales_ledger 関数が見つかりません",
|
||||
"update_sub_resellers function not found": "update_sub_resellers 関数が見つかりません",
|
||||
"update_suppliers function not found": "update_suppliers 関数が見つかりません",
|
||||
"二级分销商": "二次代理店",
|
||||
"二级分销商ID": "二次代理店ID",
|
||||
"二级分销商名称": "二次代理店名",
|
||||
"二级分销商编号": "二次代理店コード",
|
||||
"二级分销商表": "二次代理店テーブル",
|
||||
"交付周期(天)": "納期(日)",
|
||||
"交易日期": "取引日",
|
||||
"交易流水号": "取引番号",
|
||||
"交易笔数": "取引件数",
|
||||
"产品ID": "製品ID",
|
||||
"产品供应商映射创建成功": "製品サプライヤーマッピング作成成功",
|
||||
"产品供应映射表": "製品供給マッピングテーブル",
|
||||
"产品分类ID": "製品カテゴリID",
|
||||
"产品分销折扣": "製品流通割引",
|
||||
"产品引入成功": "製品導入成功",
|
||||
"产品折扣明细": "製品割引明細",
|
||||
"付款方式": "支払方法",
|
||||
"佣金率": "手数料率",
|
||||
"供应合同创建成功": "供給契約作成成功",
|
||||
"供应合同项目创建成功": "供給契約項目作成成功",
|
||||
"供应商ID": "サプライヤーID",
|
||||
"供应商充值记录": "サプライヤーチャージ記録",
|
||||
"供应商创建成功": "サプライヤー作成成功",
|
||||
"供应商名称": "サプライヤー名",
|
||||
"供应商名称不能为空": "サプライヤー名は空にできません",
|
||||
"供应商类型": "サプライヤータイプ",
|
||||
"供应商结算记录": "サプライヤー決済記録",
|
||||
"供应商编号": "サプライヤーコード",
|
||||
"供应商表": "サプライヤーテーブル",
|
||||
"供应方产品ID": "供給側製品ID",
|
||||
"供应方机构ID": "供給側組織ID",
|
||||
"供应方机构ID(平台内)": "供給側組織ID(プラットフォーム内)",
|
||||
"供应链记账创建成功": "サプライチェーン記帳作成成功",
|
||||
"供货价": "供給価格",
|
||||
"供销产品明细": "供給販売製品明細",
|
||||
"供销关系ID": "供給販売関係ID",
|
||||
"供销合同ID": "供給販売契約ID",
|
||||
"供销合同产品折扣明细表": "供給販売契約製品割引明細テーブル",
|
||||
"供销合同产品明细ID": "供給販売契約製品明細ID",
|
||||
"供销合同表": "供給販売契約テーブル",
|
||||
"供销记账表": "供給販売記帳テーブル",
|
||||
"充值日期": "チャージ日",
|
||||
"充值状态": "チャージステータス",
|
||||
"充值记录已更新": "チャージ記録が更新されました",
|
||||
"关系名称": "関係名称",
|
||||
"关系编号": "関係コード",
|
||||
"关联供销关系ID": "関連供給販売関係ID",
|
||||
"关联供销合同ID": "関連供給販売契約ID",
|
||||
"内部供应商必须选择所属机构": "内部サプライヤーは所属組織を選択する必要があります",
|
||||
"分销协议ID": "流通契約ID",
|
||||
"分销协议产品折扣明细表": "流通契約製品割引明細テーブル",
|
||||
"分销协议产品明细ID": "流通契約製品明細ID",
|
||||
"分销协议创建成功": "流通契約作成成功",
|
||||
"分销协议表": "流通契約テーブル",
|
||||
"分销协议项目创建成功": "流通契約項目作成成功",
|
||||
"分销商": "代理店",
|
||||
"分销商创建成功": "代理店作成成功",
|
||||
"分销商结算记录": "代理店決済記録",
|
||||
"分销折扣": "流通割引",
|
||||
"分销指导价": "流通推奨価格",
|
||||
"分销金额": "流通金額",
|
||||
"分销金额(二级分销商应付)": "流通金額(二次代理店支払額)",
|
||||
"利润金额": "利益金額",
|
||||
"到期日期": "有効期限",
|
||||
"协议名称": "契約名称",
|
||||
"协议编号": "契約コード",
|
||||
"合作类型": "協力タイプ",
|
||||
"合同名称": "契約名称",
|
||||
"合同编号": "契約コード",
|
||||
"地址": "住所",
|
||||
"外部供应商ID": "外部サプライヤーID",
|
||||
"对方金额(应付)": "相手方金額(支払額)",
|
||||
"对方金额(应收)": "相手方金額(受取額)",
|
||||
"差异": "差異",
|
||||
"差异金额": "差異金額",
|
||||
"平台供应产品创建成功": "プラットフォーム供給製品作成成功",
|
||||
"平台供应关系创建成功": "プラットフォーム供給関係作成成功",
|
||||
"平台供销产品明细表": "プラットフォーム供給販売製品明細テーブル",
|
||||
"平台内供销关系表": "プラットフォーム内供給販売関係テーブル",
|
||||
"建议零售价": "推奨小売価格",
|
||||
"开始日期": "開始日",
|
||||
"开户银行": "口座開設銀行",
|
||||
"我方金额(应付)": "自社金額(支払額)",
|
||||
"我方金额(应收)": "自社金額(受取額)",
|
||||
"所属主分销商机构ID": "所属主代理店組織ID",
|
||||
"所属分销商机构ID": "所属代理店組織ID",
|
||||
"折扣率": "割引率",
|
||||
"支付方式": "支払方法",
|
||||
"是否外部供应商": "外部サプライヤーかどうか",
|
||||
"是否首选": "優先かどうか",
|
||||
"最小订货量": "最低発注数量",
|
||||
"最小订购量": "最低注文数量",
|
||||
"机构ID": "組織ID",
|
||||
"来源类型": "ソースタイプ",
|
||||
"来源记录ID": "ソースレコードID",
|
||||
"核对": "照合",
|
||||
"核对状态": "照合ステータス",
|
||||
"生效日期": "発効日",
|
||||
"税号": "税番号",
|
||||
"签署日期": "署名日",
|
||||
"类别": "カテゴリ",
|
||||
"经销商创建成功": "販売店作成成功",
|
||||
"结束日期": "終了日",
|
||||
"结算单价": "決済単価",
|
||||
"结算单号": "決済番号",
|
||||
"结算周期": "決済サイクル",
|
||||
"结算已确认": "決済確認済み",
|
||||
"结算方式": "決済方法",
|
||||
"结算日": "決済日",
|
||||
"结算日期": "決済日付",
|
||||
"结算状态": "決済ステータス",
|
||||
"结算金额": "決済金額",
|
||||
"缺少productid参数": "productid パラメータがありません",
|
||||
"缺少sub_distributor_id或productid参数": "sub_distributor_id または productid パラメータがありません",
|
||||
"缺少必要参数\\x3A productid, quantity, unit_price": "必須パラメータがありません\\x3A productid, quantity, unit_price",
|
||||
"联系电话": "連絡先電話",
|
||||
"联系邮箱": "連絡先メール",
|
||||
"负责销售ID": "担当営業ID",
|
||||
"进货折扣": "仕入割引",
|
||||
"进货金额": "仕入金額",
|
||||
"进货金额(应付供应商)": "仕入金額(サプライヤー支払額)",
|
||||
"采购方机构ID": "購入側組織ID",
|
||||
"银行账号": "銀行口座番号",
|
||||
"销售单价": "販売単価",
|
||||
"销售台账创建成功": "販売台帳作成成功",
|
||||
"销售数量": "販売数量",
|
||||
"销售日期": "販売日",
|
||||
"销售记账表": "販売記帳テーブル",
|
||||
"需求方机构ID": "需要側組織ID",
|
||||
"默认佣金率": "デフォルト手数料率",
|
||||
"默认分销折扣": "デフォルト流通割引",
|
||||
"默认折扣": "デフォルト割引",
|
||||
"默认折扣率": "デフォルト割引率",
|
||||
"代金券": "クーポン",
|
||||
"代金券管理": "クーポン管理",
|
||||
"模板管理": "テンプレート管理",
|
||||
"券实例管理": "クーポンインスタンス管理",
|
||||
"使用流水": "使用履歴",
|
||||
"管理代金券模板和规则配置": "クーポンテンプレートとルール設定を管理",
|
||||
"查看和发放代金券": "クーポンの確認と発行",
|
||||
"查看代金券使用记录": "クーポン使用記録の確認",
|
||||
"我的代金券": "マイクーポン",
|
||||
"发放代金券": "クーポン発行",
|
||||
"确认作废": "無効化の確認",
|
||||
"作废代金券": "クーポン無効化",
|
||||
"作废原因": "無効化理由",
|
||||
"必填,将追加到券备注(审计留痕)": "必須入力。クーポン備考に追記されます(監査証跡)",
|
||||
"按此模板发券": "このテンプレートで発行",
|
||||
"代金券模板": "クーポンテンプレート",
|
||||
"代金券实例": "クーポンインスタンス",
|
||||
"代金券规则": "クーポンルール",
|
||||
"代金券使用流水": "クーポン使用履歴",
|
||||
"模板名称": "テンプレート名",
|
||||
"模板编码": "テンプレートコード",
|
||||
"模板ID": "テンプレートID",
|
||||
"模板": "テンプレート",
|
||||
"面值": "額面",
|
||||
"面值(元)": "額面(元)",
|
||||
"已抵扣(元)": "控除額(元)",
|
||||
"总发行量(0不限)": "総発行枚数(0=無制限)",
|
||||
"已发放量": "発行済み枚数",
|
||||
"有效期天数": "有効日数",
|
||||
"规则类型": "ルールタイプ",
|
||||
"规则配置JSON": "ルール設定JSON",
|
||||
"执行顺序": "実行順序",
|
||||
"客户机构ID": "顧客組織ID",
|
||||
"客户机构": "顧客組織",
|
||||
"券码": "クーポンコード",
|
||||
"未使用": "未使用",
|
||||
"已使用": "使用済み",
|
||||
"已过期": "期限切れ",
|
||||
"实际抵扣金额": "実控除額",
|
||||
"生效时间": "有効開始",
|
||||
"过期时间": "有効期限",
|
||||
"发放时间": "発行日時",
|
||||
"使用时间": "使用日時",
|
||||
"使用订单ID": "注文ID",
|
||||
"订单ID": "注文ID",
|
||||
"发放来源": "発行元",
|
||||
"手动发放": "手動発行",
|
||||
"注册赠券": "登録プレゼント",
|
||||
"促销活动": "プロモーション",
|
||||
"发放人": "発行者",
|
||||
"券实例ID": "インスタンスID",
|
||||
"券实例": "クーポンインスタンス",
|
||||
"券面值": "額面",
|
||||
"抵扣金额": "控除額",
|
||||
"产品类型": "製品タイプ",
|
||||
"操作人": "操作者",
|
||||
"规则配置": "ルール設定",
|
||||
"最低消费": "最低消費額",
|
||||
"最高消费": "最高消費額",
|
||||
"限定产品类型": "製品タイプ制限",
|
||||
"限定特定产品": "製品制限",
|
||||
"排除特定产品": "製品除外",
|
||||
"最大使用次数": "最大使用回数",
|
||||
"用户等级": "ユーザーレベル",
|
||||
"发券": "発行",
|
||||
"客户机构ID必填": "顧客組織は必須です",
|
||||
"可选": "任意",
|
||||
"查询": "検索",
|
||||
"json应用接口": "JSONアプリケーションインターフェース",
|
||||
"svg内容": "SVGコンテンツ",
|
||||
"代码管理": "コード管理",
|
||||
"值": "値",
|
||||
"参数值": "パラメータ値",
|
||||
"参数名称": "パラメータ名",
|
||||
"参数管理": "パラメータ管理",
|
||||
"参数表": "パラメータテーブル",
|
||||
"图标管理": "アイコン管理",
|
||||
"多级标志": "マルチレベルフラグ",
|
||||
"应用编码表": "アプリケーションコードテーブル",
|
||||
"父id": "親ID",
|
||||
"编码名称": "コード名",
|
||||
"编码键值表": "コードキーバリューテーブル",
|
||||
"键": "キー",
|
||||
"用户管理": "ユーザー管理",
|
||||
"用户名": "ユーザー名",
|
||||
"密码": "パスワード",
|
||||
"确认密码": "パスワード確認",
|
||||
"姓名": "氏名",
|
||||
"手机号": "電話番号",
|
||||
"角色": "ロール",
|
||||
"新增用户": "ユーザー追加",
|
||||
"编辑用户": "ユーザー編集",
|
||||
"删除用户": "ユーザー削除",
|
||||
"角色名称": "ロール名",
|
||||
"角色编码": "ロールコード",
|
||||
"角色描述": "ロール説明",
|
||||
"权限": "権限",
|
||||
"新增角色": "ロール追加",
|
||||
"编辑角色": "ロール編集",
|
||||
"删除角色": "ロール削除",
|
||||
"分配权限": "権限割り当て",
|
||||
"机构管理": "組織管理",
|
||||
"机构名称": "組織名",
|
||||
"机构编码": "組織コード",
|
||||
"机构类型": "組織タイプ",
|
||||
"上级机构": "上位組織",
|
||||
"新增机构": "組織追加",
|
||||
"编辑机构": "組織編集",
|
||||
"删除机构": "組織削除",
|
||||
"菜单管理": "メニュー管理",
|
||||
"菜单名称": "メニュー名",
|
||||
"菜单路径": "メニューパス",
|
||||
"菜单图标": "メニューアイコン",
|
||||
"菜单排序": "メニュー並び順",
|
||||
"上级菜单": "上位メニュー",
|
||||
"新增菜单": "メニュー追加",
|
||||
"编辑菜单": "メニュー編集",
|
||||
"删除菜单": "メニュー削除",
|
||||
"权限名称": "権限名",
|
||||
"权限编码": "権限コード",
|
||||
"权限类型": "権限タイプ",
|
||||
"资源权限": "リソース権限",
|
||||
"操作权限": "操作権限",
|
||||
"数据权限": "データ権限",
|
||||
"登录日志": "ログインログ",
|
||||
"登录时间": "ログイン時間",
|
||||
"登录IP": "ログインIP",
|
||||
"登录状态": "ログインステータス",
|
||||
"成功": "成功",
|
||||
"失败": "失敗",
|
||||
"操作日志": "操作ログ",
|
||||
"操作类型": "操作タイプ",
|
||||
"操作时间": "操作時間",
|
||||
"操作结果": "操作結果",
|
||||
"API密钥管理": "APIキー管理",
|
||||
"密钥名称": "キー名",
|
||||
"密钥值": "キー値",
|
||||
"密钥状态": "キーステータス",
|
||||
"新增密钥": "キー追加",
|
||||
"编辑密钥": "キー編集",
|
||||
"删除密钥": "キー削除",
|
||||
"在线用户": "オンラインユーザー",
|
||||
"会话ID": "セッションID",
|
||||
"最后活动时间": "最終アクティビティ時間",
|
||||
"强制下线": "強制ログアウト",
|
||||
"安全设置": "セキュリティ設定",
|
||||
"密码策略": "パスワードポリシー",
|
||||
"密码长度": "パスワード長さ",
|
||||
"密码复杂度": "パスワード複雑度",
|
||||
"密码有效期": "パスワード有効期限",
|
||||
"登录失败锁定": "ログイン失敗ロック",
|
||||
"最大失败次数": "最大失敗回数",
|
||||
"锁定时长": "ロック期間",
|
||||
"双因素认证": "二要素認証",
|
||||
"启用双因素": "二要素認証を有効化",
|
||||
"验证码": "認証コード",
|
||||
"Token管理": "トークン管理",
|
||||
"Token名称": "トークン名",
|
||||
"Token过期时间": "トークン有効期限",
|
||||
"新增Token": "トークン追加",
|
||||
"编辑Token": "トークン編集",
|
||||
"删除Token": "トークン削除",
|
||||
"刷新Token": "トークン更新",
|
||||
"用户组": "ユーザーグループ",
|
||||
"组名称": "グループ名",
|
||||
"组描述": "グループ説明",
|
||||
"新增用户组": "ユーザーグループ追加",
|
||||
"编辑用户组": "ユーザーグループ編集",
|
||||
"删除用户组": "ユーザーグループ削除",
|
||||
"成员管理": "メンバー管理",
|
||||
"添加成员": "メンバー追加",
|
||||
"移除成员": "メンバー削除",
|
||||
"名称或编码": "名前またはコード",
|
||||
"管理员": "管理者",
|
||||
"普通用户": "一般ユーザー",
|
||||
"只读用户": "読み取り専用ユーザー",
|
||||
"访问控制": "アクセス制御",
|
||||
"最后登录": "最終ログイン",
|
||||
"清除登录次数": "ログイン失敗回数をクリア",
|
||||
"新密码": "新しいパスワード",
|
||||
"确认清除该用户的连续登录失败次数?": "このユーザーの連続ログイン失敗回数をクリアしますか?",
|
||||
"为选中用户设置新密码(至少8位)": "選択したユーザーに新しいパスワード(8文字以上)を設定",
|
||||
"API Key ID": "API Key ID",
|
||||
"akikey": "akikey",
|
||||
"apikey为空": "apikeyが空です",
|
||||
"error happend": "エラーが発生しました",
|
||||
"need login": "ログインが必要です",
|
||||
"you need login to do this": "この操作にはログインが必要です",
|
||||
"下位应用名": "下位アプリケーション名",
|
||||
"下位系统": "下位システム",
|
||||
"下位系统apikey": "下位システムAPIキー",
|
||||
"下位系统id": "下位システムID",
|
||||
"允许ip集": "許可IPセット",
|
||||
"允许的IP集": "許可IPセット",
|
||||
"创建API Key": "API Keyを作成",
|
||||
"创建日期": "作成日",
|
||||
"创建用户apikey": "ユーザーAPIキーを作成",
|
||||
"删除API Key": "API Keyを削除",
|
||||
"复制API Key": "API Keyをコピー",
|
||||
"应用ID": "アプリケーションID",
|
||||
"应用名": "アプリケーション名",
|
||||
"应用名称": "アプリケーション名",
|
||||
"应用描述": "アプリケーション説明",
|
||||
"更新API Key": "API Keyを更新",
|
||||
"没有找到用户apikey": "ユーザーAPIキーが見つかりません",
|
||||
"重新生成API Key": "API Keyを再生成",
|
||||
"能力": "機能",
|
||||
"流程": "フロー",
|
||||
"登录 / 注册": "ログイン / 新規登録",
|
||||
"AI 原生 · 产线操作系统": "AIネイティブ・パイプラインOS",
|
||||
"把业务装进产线": "業務をパイプラインへ",
|
||||
"让 Agent 自主运转": "エージェントに自律稼働させる",
|
||||
"产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。": "パイプラインプラットフォームはエージェント駆動の企業向けインテリジェント・パイプラインOSです。商談・入札・開発をワンクリックで開始し、LLMエージェントがタスクを自律的に推進、人間ゲートが品質を管理。成果物はそのまま製品となり、実行と同時に課金・記帳されます。",
|
||||
"查看平台能力": "プラットフォーム機能を見る",
|
||||
"功能模块": "機能モジュール",
|
||||
"自主运转": "自律稼働",
|
||||
"语言国际化": "言語対応",
|
||||
"商机挖掘": "商談発掘",
|
||||
"投标生产": "入札作成",
|
||||
"软件开发": "ソフトウェア開発",
|
||||
"模型网关": "モデルゲートウェイ",
|
||||
"产品商品化": "製品商品化",
|
||||
"计费记账": "課金・記帳",
|
||||
"供销协同": "供給販売連携",
|
||||
"人机协同门禁": "人間協調ゲート",
|
||||
"平台能力": "プラットフォーム機能",
|
||||
"不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。": "チャットボットではなく、自律的に動き、監査可能で、直接課金できるインテリジェント・パイプラインです。",
|
||||
"Agent 驱动产线引擎": "エージェント駆動パイプラインエンジン",
|
||||
"会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。": "会話で開始:一言でフローを起動し、エージェントがタスクを自動分解、LLMを呼び出し、成果物を生成。LLM三重フォールトトレランスで単一モデル障害でもパイプラインは止まりません。",
|
||||
"多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。": "マルチベンダーLLMの統一接続:残高ゲート、セッション粘着ローテーション、障害時自動ルーティング、呼び出し単位課金。APIキーはプロセス外に出ません。",
|
||||
"资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。": "リソース→製品→価格→割引→注文→課金の全チェーン。表示価格は「実価格×顧客割引」で計算し、パイプライン実行と同時に消費・記帳されます。",
|
||||
"平台待办中枢": "プラットフォームToDoハブ",
|
||||
"全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。": "グローバル非同期通知ハブ:ゲート、確認、アップロードなどのイベントが人間のToDoとして統一バブル化。同一事項は一度だけ発行され、処理後は自動補充されます。",
|
||||
"PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。": "PMレビュー、QC検査、人間確認の多層チェック——機械の速度と人間の判断、監査ログで全過程を追跡可能。",
|
||||
"安全与多租户": "セキュリティとマルチテナント",
|
||||
"RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。": "RBAC細粒度パス権限、組織分離、短命トークン内部プロキシ、ログイン監査と失敗ロックアウト。",
|
||||
"国际化与双主题": "国際化とデュアルテーマ",
|
||||
"中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。": "中 / 英 / 日 / 韓の4言語をリアルタイム切替、明暗テーマをワンクリックで切替、デスクトップとモバイルH5で同一体験。",
|
||||
"每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。": "各パイプラインは完全な業務ループ:情報入力から納品可能な成果物まで、エージェントが推進し人間ゲートが管理します。",
|
||||
"招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。": "入札情報収集 → 商談評価 → 調査レポート → 人間確認。市場シグナルを追跡可能な商談に変えます。",
|
||||
"运行中": "稼働中",
|
||||
"标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。": "入札書類のインテリジェント作成:評価基準への逐項回答、技術/商務分冊生成、資料不足リスト、複数ラウンドのQCゲート。",
|
||||
"SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。": "SDLCタスクチェーン:要件 → 設計 → 開発 → テスト → デプロイ、PMレビューゲート+成果物管理。",
|
||||
"面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。": "FOMS向け運用自動化:アラート処理、点検レポート、変更オーケストレーション。",
|
||||
"规划中": "計画中",
|
||||
"内容生产与投放自动化:素材生成、渠道分发、效果回收。": "コンテンツ制作と配信の自動化:素材生成、チャネル配信、効果回収。",
|
||||
"五步跑通一条产线": "5ステップでパイプラインを回す",
|
||||
"订阅产线": "パイプライン購読",
|
||||
"在产品商城选购产线订阅,账号权益即时生效。": "製品ストアでパイプライン購読を購入、アカウント権益は即時有効。",
|
||||
"发起会话": "セッション開始",
|
||||
"进入产线工作台,用一句话下达任务。": "パイプラインワークスペースに入り、一言でタスクを指示。",
|
||||
"Agent 自主执行": "エージェント自律実行",
|
||||
"任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。": "タスク分解、モデル呼び出し、成果物生成まで全自動で進行。いつでも割り込んで修正できます。",
|
||||
"人类门禁": "人間ゲート",
|
||||
"关键节点冒泡为平台待办,人看过正文再放行。": "重要ノードがプラットフォームToDoとしてバブル化、人間が本文を確認して放行。",
|
||||
"交付与记账": "納品と記帳",
|
||||
"产出归档、按量出账,消费明细随时可查。": "成果物はアーカイブされ使用量に応じて課金、消費明細はいつでも照会可能。",
|
||||
"准备好把业务装上产线了吗?": "業務をパイプラインに乗せる準備はできましたか?",
|
||||
"注册账号,订阅第一条产线,让 Agent 今天就开始干活。": "アカウントを登録し、最初のパイプラインを購読して、今日からエージェントに働かせましょう。",
|
||||
"立即注册": "今すぐ登録",
|
||||
"© 2026 开元云(北京)科技有限公司": "© 2026 開元雲(北京)科技有限公司",
|
||||
"产线矩阵": "パイプラインマトリクス"
|
||||
}
|
||||
@ -273,5 +273,824 @@
|
||||
"显示所有已最小化的窗口": "최소화된 모든 창 표시",
|
||||
"## 完毕 ##": "## 완료 ##",
|
||||
"通用助手": "일반 어시스턴트",
|
||||
"API Key": "API Key"
|
||||
"API Key": "API Key",
|
||||
"我的工单": "내 티켓",
|
||||
"工单管理": "티켓 관리",
|
||||
"提交新工单": "새 티켓",
|
||||
"action必须是pause/resume/cancel": "action은 pause/resume/cancel이어야 합니다",
|
||||
"产线ID": "파이프라인 ID",
|
||||
"产线类型": "파이프라인 유형",
|
||||
"任务ID": "작업 ID",
|
||||
"任务标题": "작업 제목",
|
||||
"取消": "취소",
|
||||
"恢复": "재개",
|
||||
"提交新任务": "새 작업 제출",
|
||||
"暂停": "일시 중지",
|
||||
"模式(可选)": "모드 (선택)",
|
||||
"版本": "버전",
|
||||
"缺少task_id": "task_id 누락",
|
||||
"缺少task_id或step_name": "task_id 또는 step_name 누락",
|
||||
"缺少产线ID": "파이프라인 ID 누락",
|
||||
"缺少任务标题": "작업 제목 누락",
|
||||
"输入文本(可选)": "텍스트 입력 (선택)",
|
||||
"返回列表": "목록으로 돌아가기",
|
||||
"',": "',",
|
||||
"Add Error": "추가 오류",
|
||||
"Add Success": "추가 성공",
|
||||
"Authorization Error": "인증 오류",
|
||||
"Delete Error": "삭제 오류",
|
||||
"Delete Success": "삭제 성공",
|
||||
"Error": "오류",
|
||||
"Invalid": "유효하지 않음",
|
||||
"Please login": "로그인해 주세요",
|
||||
"Record no exist or with wrong ownership": "레코드가 존재하지 않거나 소유권이 잘못되었습니다",
|
||||
"Success": "성공",
|
||||
"Update Error": "업데이트 오류",
|
||||
"Update Success": "업데이트 성공",
|
||||
"failed": "실패",
|
||||
"ok": "확인",
|
||||
"下属产品": "하위 제품",
|
||||
"产品创建成功": "제품 생성 성공",
|
||||
"产品删除成功": "제품 삭제 성공",
|
||||
"产品名称": "제품 이름",
|
||||
"产品更新成功": "제품 업데이트 성공",
|
||||
"产品注册表": "제품 레지스트리",
|
||||
"产品简介": "제품 소개",
|
||||
"产品管理": "제품 관리",
|
||||
"产品类别ID": "제품 카테고리 ID",
|
||||
"产品类别树": "제품 카테고리 트리",
|
||||
"产品类型显示名": "제품 유형 표시 이름",
|
||||
"产品类型标识": "제품 유형 식별자",
|
||||
"产品编码": "제품 코드",
|
||||
"产品详情": "제품 상세",
|
||||
"价格": "가격",
|
||||
"价格类型": "가격 유형",
|
||||
"创建失败\\x3A": "생성 실패\\x3A",
|
||||
"删除失败\\x3A": "삭제 실패\\x3A",
|
||||
"启用日期": "활성화 날짜",
|
||||
"图标": "아이콘",
|
||||
"失效日期": "만료 날짜",
|
||||
"所属机构ID": "소속 조직 ID",
|
||||
"扩展属性": "확장 속성",
|
||||
"排序序号": "정렬 순서",
|
||||
"是否可挂产品": "제품 연결 가능 여부",
|
||||
"是否启用": "활성화 여부",
|
||||
"更新失败\\x3A": "업데이트 실패\\x3A",
|
||||
"父类别ID": "상위 카테고리 ID",
|
||||
"类别ID": "카테고리 ID",
|
||||
"类别创建成功": "카테고리 생성 성공",
|
||||
"类别删除成功": "카테고리 삭제 성공",
|
||||
"类别名称": "카테고리 이름",
|
||||
"类别描述": "카테고리 설명",
|
||||
"类别更新成功": "카테고리 업데이트 성공",
|
||||
"该类别下有产品,无法删除": "카테고리에 제품이 있어 삭제할 수 없습니다",
|
||||
"该类别下有子类别,无法删除": "카테고리에 하위 카테고리가 있어 삭제할 수 없습니다",
|
||||
"货币": "통화",
|
||||
"运营商产品类型配置": "운영자 제품 유형 구성",
|
||||
"运营商用户ID": "운영자 사용자 ID",
|
||||
"配置内容": "구성 내용",
|
||||
"配置创建成功": "구성 생성 성공",
|
||||
"配置删除成功": "구성 삭제 성공",
|
||||
"配置名称": "구성 이름",
|
||||
"配置更新成功": "구성 업데이트 성공",
|
||||
"id": "id",
|
||||
"二维码路径": "QR 코드 경로",
|
||||
"产品id": "제품 ID",
|
||||
"产品种类id": "제품 카테고리 ID",
|
||||
"促销失效日期": "프로모션 만료 날짜",
|
||||
"商户id": "가맹점 ID",
|
||||
"客户id": "고객 ID",
|
||||
"折扣": "할인",
|
||||
"折扣\\x3A": "할인:",
|
||||
"折扣二维码": "할인 QR 코드",
|
||||
"折扣产品明细": "할인 제품 상세",
|
||||
"折扣名称": "할인 이름",
|
||||
"折扣方案id": "할인 플랜 ID",
|
||||
"折扣明细表": "할인 상세 테이블",
|
||||
"折扣有效期": "할인 유효 기간",
|
||||
"折扣管理": "할인 관리",
|
||||
"折扣表": "할인 테이블",
|
||||
"有效期": "유효 기간",
|
||||
"生成促销码": "프로모 코드 생성",
|
||||
"Validation Failed": "유효성 검사 실패",
|
||||
"ppid parameter required": "ppid 파라미터가 필요합니다",
|
||||
"上传定价数据": "가격 데이터 업로드",
|
||||
"下载定价数据": "가격 데이터 다운로드",
|
||||
"供应商": "공급업체",
|
||||
"供应商折扣": "공급업체 할인",
|
||||
"名称": "이름",
|
||||
"定价属于": "가격 소속",
|
||||
"定价数据": "가격 데이터",
|
||||
"定价文件": "가격 파일",
|
||||
"定价时序数据没找到": "가격 시계열 데이터를 찾을 수 없습니다",
|
||||
"定价模版": "가격 템플릿",
|
||||
"定价测试": "가격 테스트",
|
||||
"定价细项": "가격 세부 항목",
|
||||
"定价项目": "가격 항목",
|
||||
"定价项目id": "가격 항목 ID",
|
||||
"定价项目时序": "가격 항목 시계열",
|
||||
"所属机构": "소속 조직",
|
||||
"折扣不能为空": "할인은 비워둘 수 없습니다",
|
||||
"折扣不能大于1": "할인은 1보다 클 수 없습니다",
|
||||
"折扣不能小于0": "할인은 0보다 작을 수 없습니다",
|
||||
"折扣必须是数字": "할인은 숫자여야 합니다",
|
||||
"测试": "테스트",
|
||||
"规格明细": "규격 상세",
|
||||
"计费数据(json)": "과금 데이터(JSON)",
|
||||
"项目名称": "프로젝트 이름",
|
||||
"验证定价": "가격 검증",
|
||||
"不可退费": "환불 불가",
|
||||
"停用日期": "비활성화 날짜",
|
||||
"充值历史": "충전 내역",
|
||||
"充值客户id": "충전 고객 ID",
|
||||
"充值渠道": "충전 채널",
|
||||
"充值费率": "충전 수수료율",
|
||||
"充值金额": "충전 금액",
|
||||
"原支付id": "원 결제 ID",
|
||||
"发起日期": "시작 날짜",
|
||||
"发起时间": "시작 시간",
|
||||
"币种": "통화",
|
||||
"支付发起时点": "결제 시작 시점",
|
||||
"支付取消时点": "결제 취소 시점",
|
||||
"支付名称": "결제 이름",
|
||||
"支付完成时点": "결제 완료 시점",
|
||||
"支付客户ip": "결제 고객 IP",
|
||||
"支付操作用户id": "결제 조작 사용자 ID",
|
||||
"支付日志": "결제 로그",
|
||||
"支付渠道": "결제 채널",
|
||||
"支付渠道id": "결제 채널 ID",
|
||||
"支付渠道交易ID": "결제 채널 거래 ID",
|
||||
"支付渠道名称": "결제 채널 이름",
|
||||
"支付状态": "결제 상태",
|
||||
"支付费率": "결제 수수료율",
|
||||
"支付费用": "결제 수수료",
|
||||
"支付金额": "결제 금액",
|
||||
"本地充值已退费": "로컬 충전 환불됨",
|
||||
"禁用日期": "비활성 날짜",
|
||||
"费率": "수수료율",
|
||||
"转账码": "이체 코드",
|
||||
"退费金额": "환불 금액",
|
||||
"金额": "금액",
|
||||
"需要选定一条记录": "레코드를 선택해 주세요",
|
||||
"需输入充值金额": "충전 금액을 입력해 주세요",
|
||||
"余额": "잔액",
|
||||
"明细": "내역",
|
||||
"科目": "계정",
|
||||
"账户": "계좌",
|
||||
"会计科目管理": "회계과목관리",
|
||||
"科目编码": "과목코드",
|
||||
"科目名称": "과목명",
|
||||
"科目类型": "과목유형",
|
||||
"上级科目": "상위과목",
|
||||
"科目级别": "과목레벨",
|
||||
"辅助核算": "보조핵산",
|
||||
"启用": "활성화",
|
||||
"停用": "비활성화",
|
||||
"新增科目": "과목추가",
|
||||
"编辑科目": "과목편집",
|
||||
"删除科目": "과목삭제",
|
||||
"搜索": "검색",
|
||||
"科目编码或名称": "과목코드 또는 명칭",
|
||||
"资产": "자산",
|
||||
"负债": "부채",
|
||||
"所有者权益": "자본",
|
||||
"成本": "비용",
|
||||
"损益": "손익",
|
||||
"借方": "차변",
|
||||
"贷方": "대변",
|
||||
"方向": "방향",
|
||||
"期初余额": "기초잔액",
|
||||
"期末余额": "기말잔액",
|
||||
"本期借方": "당기차변",
|
||||
"本期贷方": "당기대변",
|
||||
"累计借方": "누적차변",
|
||||
"累计贷方": "누적대변",
|
||||
"凭证日期": "전표일자",
|
||||
"凭证号": "전표번호",
|
||||
"合计": "합계",
|
||||
"制单人": "작성자",
|
||||
"审核人": "승인자",
|
||||
"记账人": "기장자",
|
||||
"未记账": "미기장",
|
||||
"已记账": "기장완료",
|
||||
"已审核": "승인완료",
|
||||
"未审核": "미승인",
|
||||
"新增凭证": "전표추가",
|
||||
"编辑凭证": "전표편집",
|
||||
"删除凭证": "전표삭제",
|
||||
"审核凭证": "전표승인",
|
||||
"记账": "기장",
|
||||
"反记账": "기장취소",
|
||||
"凭证类型": "전표유형",
|
||||
"收款凭证": "수금전표",
|
||||
"付款凭证": "지급전표",
|
||||
"转账凭证": "대체전표",
|
||||
"记账凭证": "분개전표",
|
||||
"附件数": "첨부수",
|
||||
"总账": "총계정원장",
|
||||
"明细账": "보조원장",
|
||||
"科目余额表": "과목잔액표",
|
||||
"资产负债表": "대차대조표",
|
||||
"利润表": "손익계산서",
|
||||
"现金流量表": "현금흐름표",
|
||||
"试算平衡": "합계잔액표",
|
||||
"会计期间": "회계기간",
|
||||
"年度": "연도",
|
||||
"月份": "월",
|
||||
"期初": "기초",
|
||||
"期末": "기말",
|
||||
"本年累计": "연간누적",
|
||||
"本月合计": "당월합계",
|
||||
"过账": "전기",
|
||||
"结账": "결산",
|
||||
"反结账": "결산취소",
|
||||
"凭证查询": "전표조회",
|
||||
"科目查询": "과목조회",
|
||||
"辅助核算项目": "보조핵산항목",
|
||||
"客户": "고객",
|
||||
"部门": "부서",
|
||||
"项目": "프로젝트",
|
||||
"员工": "직원",
|
||||
"核算类别": "핵산유형",
|
||||
"新增": "추가",
|
||||
"保存": "저장",
|
||||
"确认": "확인",
|
||||
"删除": "삭제",
|
||||
"编辑": "편집",
|
||||
"查看": "보기",
|
||||
"导出": "내보내기",
|
||||
"打印": "인쇄",
|
||||
"刷新": "새로고침",
|
||||
"返回": "뒤로",
|
||||
"提交": "제출",
|
||||
"重置": "초기화",
|
||||
"凭证": "전표",
|
||||
"总分类账": "총분류원장",
|
||||
"核算项目余额": "핵산항목잔액",
|
||||
"科目汇总表": "과목집계표",
|
||||
"数量": "수량",
|
||||
"单价": "단가",
|
||||
"外币": "외화",
|
||||
"汇率": "환율",
|
||||
"原币": "원화통화",
|
||||
"本位币": "기준통화",
|
||||
"辅助账": "보조원장",
|
||||
"日记账": "분개장",
|
||||
"多栏账": "다단원장",
|
||||
"核算项目明细账": "핵산항목명세장",
|
||||
"数量金额明细账": "수량금액명세장",
|
||||
"数量金额总账": "수량금액총장",
|
||||
"固定资产": "고정자산",
|
||||
"工资": "급여",
|
||||
"往来": "거래",
|
||||
"自定义辅助核算": "사용자정의보조핵산",
|
||||
"核算项目": "핵산항목",
|
||||
"核算类别名称": "핵산유형명",
|
||||
"辅助核算编码": "보조핵산코드",
|
||||
"辅助核算名称": "보조핵산명",
|
||||
"余额方向": "잔액방향",
|
||||
"余额方向(借/贷)": "잔액방향(차/대)",
|
||||
"借方发生额": "차변발생액",
|
||||
"贷方发生额": "대변발생액",
|
||||
"借方累计": "차변누적",
|
||||
"贷方累计": "대변누적",
|
||||
"年初余额": "연초잔액",
|
||||
"年累计借方": "연간누적차변",
|
||||
"年累计贷方": "연간누적대변",
|
||||
"年累计余额": "연간누적잔액",
|
||||
"本月借方发生额": "당월차변발생액",
|
||||
"本月贷方发生额": "당월대변발생액",
|
||||
"本年借方发生额": "연간차변발생액",
|
||||
"本年贷方发生额": "연간대변발생액",
|
||||
"年初借方余额": "연초차변잔액",
|
||||
"年初贷方余额": "연초대변잔액",
|
||||
"期初借方余额": "기초차변잔액",
|
||||
"期初贷方余额": "기초대변잔액",
|
||||
"期末借方余额": "기말차변잔액",
|
||||
"期末贷方余额": "기말대변잔액",
|
||||
"损益结转": "손익대체",
|
||||
"结转损益": "손익대체하기",
|
||||
"凭证字号": "전표자번",
|
||||
"凭证字": "전표자",
|
||||
"记账日期": "기장일자",
|
||||
"制单日期": "작성일자",
|
||||
"记账状态": "기장상태",
|
||||
"审核状态": "승인상태",
|
||||
"作废": "무효",
|
||||
"冲销": "상계",
|
||||
"红冲": "적자상계",
|
||||
"反审核": "승인취소",
|
||||
"已作废": "무효완료",
|
||||
"已冲销": "상계완료",
|
||||
"操作": "조작",
|
||||
"日期": "날짜",
|
||||
"类型": "유형",
|
||||
"编码": "코드",
|
||||
"编号": "번호",
|
||||
"金额(借方)": "금액(차변)",
|
||||
"金额(贷方)": "금액(대변)",
|
||||
"金额方向": "금액방향",
|
||||
"记账金额": "기장금액",
|
||||
"凭证编号": "전표번호",
|
||||
"API": "API",
|
||||
"APIKEY": "APIKEY",
|
||||
"API接口": "API 인터페이스",
|
||||
"API标题": "API 제목",
|
||||
"API输入输出": "API 입출력",
|
||||
"API集": "API 컬렉션",
|
||||
"API集名称": "API 컬렉션 이름",
|
||||
"api名称": "API 이름",
|
||||
"api密码": "API 비밀번호",
|
||||
"api测试": "API 테스트",
|
||||
"api用户": "API 사용자",
|
||||
"api集id": "API 컬렉션 ID",
|
||||
"headers模版": "헤더 템플릿",
|
||||
"http方法": "HTTP 메서드",
|
||||
"path": "path",
|
||||
"上位应用名": "상위 애플리케이션 이름",
|
||||
"上位系统ID": "상위 시스템 ID",
|
||||
"上位系统密码": "상위 시스템 비밀번호",
|
||||
"上位系统密码表": "상위 시스템 비밀번호 테이블",
|
||||
"上游任务": "업스트림 작업",
|
||||
"加密密钥": "암호화 키",
|
||||
"动态headers函数": "동적 헤더 함수",
|
||||
"参数模版": "파라미터 템플릿",
|
||||
"响应模版": "응답 템플릿",
|
||||
"响应转换函数名": "응답 변환 함수 이름",
|
||||
"回调url": "콜백 URL",
|
||||
"外部系统": "외부 시스템",
|
||||
"属主id": "소유자 ID",
|
||||
"属主机构id": "소유자 조직 ID",
|
||||
"应用id": "애플리케이션 ID",
|
||||
"开始时间": "시작 시간",
|
||||
"我的appid": "내 App ID",
|
||||
"执行方任务id": "실행자 작업 ID",
|
||||
"授权api名": "인증된 API 이름",
|
||||
"接口描述": "인터페이스 설명",
|
||||
"数据模版": "데이터 템플릿",
|
||||
"是否第一用户": "첫 번째 사용자 여부",
|
||||
"本地业务id": "로컬 비즈니스 ID",
|
||||
"流式匹配串": "스트림 매칭 문자열",
|
||||
"流式输出": "스트림 출력",
|
||||
"用户id": "사용자 ID",
|
||||
"相应数据": "응답 데이터",
|
||||
"类型名": "타입 이름",
|
||||
"类型说明": "타입 설명",
|
||||
"系统url": "시스템 URL",
|
||||
"结束时间": "종료 시간",
|
||||
"认证API名": "인증 API 이름",
|
||||
"跳转到": "이동",
|
||||
"输入字段": "입력 필드",
|
||||
"输入输出": "입출력",
|
||||
"输入输出id": "입출력 ID",
|
||||
"需要鉴权": "인증 필요",
|
||||
"审批记录": "결재 기록",
|
||||
"审批流程配置": "결재 흐름 설정",
|
||||
"审批标题": "결재 제목",
|
||||
"审批意见": "결재 의견",
|
||||
"业务类型": "업무 유형",
|
||||
"钉钉审批模板编码": "딩톡 프로세스 코드",
|
||||
"待审批": "대기 중",
|
||||
"已通过": "승인됨",
|
||||
"已驳回": "반려됨",
|
||||
"账号规格": "계정 사양",
|
||||
"账号资源": "계정 리소스",
|
||||
"权益配额": "권익 할당량",
|
||||
"计费方式": "과금 방식",
|
||||
"试用": "체험",
|
||||
"月租": "월정액",
|
||||
"年租": "연정액",
|
||||
"存储规格": "스토리지 사양",
|
||||
"存储资源": "스토리지 리소스",
|
||||
"容量采样": "용량 샘플링",
|
||||
"计量方式": "계량 방식",
|
||||
"计费容量": "과금 용량",
|
||||
"峰值容量": "피크 용량",
|
||||
"上传文件": "파일 업로드",
|
||||
"其他人权限": "다른 사용자 권한",
|
||||
"同事权限": "동료 권한",
|
||||
"哈希值": "해시 값",
|
||||
"属主": "소유자",
|
||||
"所属机构id": "소속 기관 ID",
|
||||
"文件": "파일",
|
||||
"文件大小": "파일 크기",
|
||||
"文件类型": "파일 유형",
|
||||
"父权限id": "상위 권한 ID",
|
||||
"目录": "디렉토리",
|
||||
"目录id": "디렉토리 ID",
|
||||
"目录信息id": "디렉토리 정보 ID",
|
||||
"相对路径": "상대 경로",
|
||||
"绝对路径": "절대 경로",
|
||||
"Deleted successfully": "삭제되었습니다",
|
||||
"ID": "ID",
|
||||
"Missing record id": "레코드 ID가 없습니다",
|
||||
"delete_platform_supply_products not registered": "delete_platform_supply_products가 등록되지 않았습니다",
|
||||
"delete_platform_supply_relations not registered": "delete_platform_supply_relations가 등록되지 않았습니다",
|
||||
"delete_product_supplier_mapping not registered": "delete_product_supplier_mapping가 등록되지 않았습니다",
|
||||
"delete_sales_ledger function not found": "delete_sales_ledger 함수를 찾을 수 없습니다",
|
||||
"delete_sub_resellers function not found": "delete_sub_resellers 함수를 찾을 수 없습니다",
|
||||
"delete_suppliers function not found": "delete_suppliers 함수를 찾을 수 없습니다",
|
||||
"source_product_id, supplier_org_id, relation_id are required": "source_product_id, supplier_org_id, relation_id는 필수입니다",
|
||||
"supplier_org_id is required": "supplier_org_id는 필수입니다",
|
||||
"update_platform_supply_products not registered": "update_platform_supply_products가 등록되지 않았습니다",
|
||||
"update_platform_supply_relations not registered": "update_platform_supply_relations가 등록되지 않았습니다",
|
||||
"update_product_supplier_mapping not registered": "update_product_supplier_mapping가 등록되지 않았습니다",
|
||||
"update_sales_ledger function not found": "update_sales_ledger 함수를 찾을 수 없습니다",
|
||||
"update_sub_resellers function not found": "update_sub_resellers 함수를 찾을 수 없습니다",
|
||||
"update_suppliers function not found": "update_suppliers 함수를 찾을 수 없습니다",
|
||||
"二级分销商": "2차 대리점",
|
||||
"二级分销商ID": "2차 대리점 ID",
|
||||
"二级分销商名称": "2차 대리점명",
|
||||
"二级分销商编号": "2차 대리점 코드",
|
||||
"二级分销商表": "2차 대리점 테이블",
|
||||
"交付周期(天)": "납품 주기(일)",
|
||||
"交易日期": "거래 날짜",
|
||||
"交易流水号": "거래 일련번호",
|
||||
"交易笔数": "거래 건수",
|
||||
"产品ID": "제품 ID",
|
||||
"产品供应商映射创建成功": "제품-공급업체 매핑 생성 성공",
|
||||
"产品供应映射表": "제품 공급 매핑 테이블",
|
||||
"产品分类ID": "제품 카테고리 ID",
|
||||
"产品分销折扣": "제품 유통 할인",
|
||||
"产品引入成功": "제품 도입 성공",
|
||||
"产品折扣明细": "제품 할인 상세",
|
||||
"付款方式": "결제 방법",
|
||||
"佣金率": "수수료율",
|
||||
"供应合同创建成功": "공급 계약 생성 성공",
|
||||
"供应合同项目创建成功": "공급 계약 항목 생성 성공",
|
||||
"供应商ID": "공급업체 ID",
|
||||
"供应商充值记录": "공급업체 충전 기록",
|
||||
"供应商创建成功": "공급업체 생성 성공",
|
||||
"供应商名称": "공급업체명",
|
||||
"供应商名称不能为空": "공급업체명은 비워둘 수 없습니다",
|
||||
"供应商类型": "공급업체 유형",
|
||||
"供应商结算记录": "공급업체 정산 기록",
|
||||
"供应商编号": "공급업체 코드",
|
||||
"供应商表": "공급업체 테이블",
|
||||
"供应方产品ID": "공급측 제품 ID",
|
||||
"供应方机构ID": "공급측 조직 ID",
|
||||
"供应方机构ID(平台内)": "공급측 조직 ID(플랫폼 내부)",
|
||||
"供应链记账创建成功": "공급망 장부 항목 생성 성공",
|
||||
"供货价": "공급 가격",
|
||||
"供销产品明细": "공급판매 제품 상세",
|
||||
"供销关系ID": "공급판매 관계 ID",
|
||||
"供销合同ID": "공급판매 계약 ID",
|
||||
"供销合同产品折扣明细表": "공급판매 계약 제품 할인 상세 테이블",
|
||||
"供销合同产品明细ID": "공급판매 계약 제품 상세 ID",
|
||||
"供销合同表": "공급판매 계약 테이블",
|
||||
"供销记账表": "공급판매 장부 테이블",
|
||||
"充值日期": "충전 날짜",
|
||||
"充值状态": "충전 상태",
|
||||
"充值记录已更新": "충전 기록이 업데이트되었습니다",
|
||||
"关系名称": "관계명",
|
||||
"关系编号": "관계 코드",
|
||||
"关联供销关系ID": "연관 공급판매 관계 ID",
|
||||
"关联供销合同ID": "연관 공급판매 계약 ID",
|
||||
"内部供应商必须选择所属机构": "내부 공급업체는 소속 조직을 선택해야 합니다",
|
||||
"分销协议ID": "유통 계약 ID",
|
||||
"分销协议产品折扣明细表": "유통 계약 제품 할인 상세 테이블",
|
||||
"分销协议产品明细ID": "유통 계약 제품 상세 ID",
|
||||
"分销协议创建成功": "유통 계약 생성 성공",
|
||||
"分销协议表": "유통 계약 테이블",
|
||||
"分销协议项目创建成功": "유통 계약 항목 생성 성공",
|
||||
"分销商": "대리점",
|
||||
"分销商创建成功": "대리점 생성 성공",
|
||||
"分销商结算记录": "대리점 정산 기록",
|
||||
"分销折扣": "유통 할인",
|
||||
"分销指导价": "유통 권장가",
|
||||
"分销金额": "유통 금액",
|
||||
"分销金额(二级分销商应付)": "유통 금액(2차 대리점 지불액)",
|
||||
"利润金额": "이익 금액",
|
||||
"到期日期": "만료일",
|
||||
"协议名称": "계약명",
|
||||
"协议编号": "계약 코드",
|
||||
"合作类型": "협력 유형",
|
||||
"合同名称": "계약명",
|
||||
"合同编号": "계약 코드",
|
||||
"地址": "주소",
|
||||
"外部供应商ID": "외부 공급업체 ID",
|
||||
"对方金额(应付)": "상대방 금액(지불액)",
|
||||
"对方金额(应收)": "상대방 금액(수취액)",
|
||||
"差异": "차이",
|
||||
"差异金额": "차이 금액",
|
||||
"平台供应产品创建成功": "플랫폼 공급 제품 생성 성공",
|
||||
"平台供应关系创建成功": "플랫폼 공급 관계 생성 성공",
|
||||
"平台供销产品明细表": "플랫폼 공급판매 제품 상세 테이블",
|
||||
"平台内供销关系表": "플랫폼 내부 공급판매 관계 테이블",
|
||||
"建议零售价": "권장 소매가",
|
||||
"开始日期": "시작일",
|
||||
"开户银行": "거래 은행",
|
||||
"我方金额(应付)": "당사 금액(지불액)",
|
||||
"我方金额(应收)": "당사 금액(수취액)",
|
||||
"所属主分销商机构ID": "소속 주 대리점 조직 ID",
|
||||
"所属分销商机构ID": "소속 대리점 조직 ID",
|
||||
"折扣率": "할인율",
|
||||
"支付方式": "결제 수단",
|
||||
"是否外部供应商": "외부 공급업체 여부",
|
||||
"是否首选": "우선 여부",
|
||||
"最小订货量": "최소 발주 수량",
|
||||
"最小订购量": "최소 주문 수량",
|
||||
"机构ID": "조직 ID",
|
||||
"来源类型": "소스 유형",
|
||||
"来源记录ID": "소스 레코드 ID",
|
||||
"核对": "대조",
|
||||
"核对状态": "대조 상태",
|
||||
"生效日期": "발효일",
|
||||
"税号": "사업자등록번호",
|
||||
"签署日期": "서명일",
|
||||
"类别": "카테고리",
|
||||
"经销商创建成功": "판매점 생성 성공",
|
||||
"结束日期": "종료일",
|
||||
"结算单价": "정산 단가",
|
||||
"结算单号": "정산 번호",
|
||||
"结算周期": "정산 주기",
|
||||
"结算已确认": "정산 확인됨",
|
||||
"结算方式": "정산 방법",
|
||||
"结算日": "정산일",
|
||||
"结算日期": "정산 날짜",
|
||||
"结算状态": "정산 상태",
|
||||
"结算金额": "정산 금액",
|
||||
"缺少productid参数": "productid 매개변수가 없습니다",
|
||||
"缺少sub_distributor_id或productid参数": "sub_distributor_id 또는 productid 매개변수가 없습니다",
|
||||
"缺少必要参数\\x3A productid, quantity, unit_price": "필수 매개변수가 없습니다\\x3A productid, quantity, unit_price",
|
||||
"联系电话": "연락처 전화번호",
|
||||
"联系邮箱": "연락처 이메일",
|
||||
"负责销售ID": "담당 영업 ID",
|
||||
"进货折扣": "매입 할인",
|
||||
"进货金额": "매입 금액",
|
||||
"进货金额(应付供应商)": "매입 금액(공급업체 지불액)",
|
||||
"采购方机构ID": "구매측 조직 ID",
|
||||
"银行账号": "은행 계좌번호",
|
||||
"销售单价": "판매 단가",
|
||||
"销售台账创建成功": "판매 장부 생성 성공",
|
||||
"销售数量": "판매 수량",
|
||||
"销售日期": "판매 날짜",
|
||||
"销售记账表": "판매 장부 테이블",
|
||||
"需求方机构ID": "수요측 조직 ID",
|
||||
"默认佣金率": "기본 수수료율",
|
||||
"默认分销折扣": "기본 유통 할인",
|
||||
"默认折扣": "기본 할인",
|
||||
"默认折扣率": "기본 할인율",
|
||||
"代金券": "상품권",
|
||||
"代金券管理": "상품권 관리",
|
||||
"模板管理": "템플릿 관리",
|
||||
"券实例管理": "상품권 인스턴스 관리",
|
||||
"使用流水": "사용 내역",
|
||||
"管理代金券模板和规则配置": "상품권 템플릿 및 규칙 구성 관리",
|
||||
"查看和发放代金券": "상품권 조회 및 발급",
|
||||
"查看代金券使用记录": "상품권 사용 기록 조회",
|
||||
"我的代金券": "내 상품권",
|
||||
"发放代金券": "상품권 발급",
|
||||
"确认作废": "무효화 확인",
|
||||
"作废代金券": "상품권 무효화",
|
||||
"作废原因": "무효화 사유",
|
||||
"必填,将追加到券备注(审计留痕)": "필수 입력, 상품권 비고에 추가됩니다(감사 추적)",
|
||||
"按此模板发券": "이 템플릿으로 발급",
|
||||
"代金券模板": "상품권 템플릿",
|
||||
"代金券实例": "상품권 인스턴스",
|
||||
"代金券规则": "상품권 규칙",
|
||||
"代金券使用流水": "상품권 사용 내역",
|
||||
"模板名称": "템플릿 이름",
|
||||
"模板编码": "템플릿 코드",
|
||||
"模板ID": "템플릿 ID",
|
||||
"模板": "템플릿",
|
||||
"面值": "액면가",
|
||||
"面值(元)": "액면가(위안)",
|
||||
"已抵扣(元)": "차감액(위안)",
|
||||
"总发行量(0不限)": "총 발행량(0=무제한)",
|
||||
"已发放量": "발행 수량",
|
||||
"有效期天数": "유효 일수",
|
||||
"规则类型": "규칙 유형",
|
||||
"规则配置JSON": "규칙 구성 JSON",
|
||||
"执行顺序": "실행 순서",
|
||||
"客户机构ID": "고객 기관 ID",
|
||||
"客户机构": "고객 기관",
|
||||
"券码": "상품권 코드",
|
||||
"未使用": "미사용",
|
||||
"已使用": "사용됨",
|
||||
"已过期": "만료됨",
|
||||
"实际抵扣金额": "실제 차감 금액",
|
||||
"生效时间": "발효 시간",
|
||||
"过期时间": "만료 시간",
|
||||
"发放时间": "발급 시간",
|
||||
"使用时间": "사용 시간",
|
||||
"使用订单ID": "주문 ID",
|
||||
"订单ID": "주문 ID",
|
||||
"发放来源": "발급 출처",
|
||||
"手动发放": "수동 발급",
|
||||
"注册赠券": "가입 증정",
|
||||
"促销活动": "판촉 활동",
|
||||
"发放人": "발급자",
|
||||
"券实例ID": "인스턴스 ID",
|
||||
"券实例": "상품권 인스턴스",
|
||||
"券面值": "액면가",
|
||||
"抵扣金额": "차감 금액",
|
||||
"产品类型": "제품 유형",
|
||||
"操作人": "운영자",
|
||||
"规则配置": "규칙 구성",
|
||||
"最低消费": "최소 소비",
|
||||
"最高消费": "최대 소비",
|
||||
"限定产品类型": "제품 유형 제한",
|
||||
"限定特定产品": "특정 제품 제한",
|
||||
"排除特定产品": "특정 제품 제외",
|
||||
"最大使用次数": "최대 사용 횟수",
|
||||
"用户等级": "사용자 등급",
|
||||
"发券": "발급",
|
||||
"客户机构ID必填": "고객 기관은 필수입니다",
|
||||
"可选": "선택",
|
||||
"查询": "조회",
|
||||
"json应用接口": "JSON 애플리케이션 인터페이스",
|
||||
"svg内容": "SVG 콘텐츠",
|
||||
"代码管理": "코드 관리",
|
||||
"值": "값",
|
||||
"参数值": "매개변수 값",
|
||||
"参数名称": "매개변수 이름",
|
||||
"参数管理": "매개변수 관리",
|
||||
"参数表": "매개변수 테이블",
|
||||
"图标管理": "아이콘 관리",
|
||||
"多级标志": "다단계 플래그",
|
||||
"应用编码表": "애플리케이션 코드 테이블",
|
||||
"父id": "상위 ID",
|
||||
"编码名称": "코드 이름",
|
||||
"编码键值表": "코드 키-값 테이블",
|
||||
"键": "키",
|
||||
"用户管理": "사용자 관리",
|
||||
"用户名": "사용자명",
|
||||
"密码": "비밀번호",
|
||||
"确认密码": "비밀번호 확인",
|
||||
"姓名": "이름",
|
||||
"手机号": "전화번호",
|
||||
"角色": "역할",
|
||||
"新增用户": "사용자 추가",
|
||||
"编辑用户": "사용자 편집",
|
||||
"删除用户": "사용자 삭제",
|
||||
"角色名称": "역할명",
|
||||
"角色编码": "역할 코드",
|
||||
"角色描述": "역할 설명",
|
||||
"权限": "권한",
|
||||
"新增角色": "역할 추가",
|
||||
"编辑角色": "역할 편집",
|
||||
"删除角色": "역할 삭제",
|
||||
"分配权限": "권한 할당",
|
||||
"机构管理": "기관 관리",
|
||||
"机构名称": "기관명",
|
||||
"机构编码": "기관 코드",
|
||||
"机构类型": "기관 유형",
|
||||
"上级机构": "상위 기관",
|
||||
"新增机构": "기관 추가",
|
||||
"编辑机构": "기관 편집",
|
||||
"删除机构": "기관 삭제",
|
||||
"菜单管理": "메뉴 관리",
|
||||
"菜单名称": "메뉴명",
|
||||
"菜单路径": "메뉴 경로",
|
||||
"菜单图标": "메뉴 아이콘",
|
||||
"菜单排序": "메뉴 정렬",
|
||||
"上级菜单": "상위 메뉴",
|
||||
"新增菜单": "메뉴 추가",
|
||||
"编辑菜单": "메뉴 편집",
|
||||
"删除菜单": "메뉴 삭제",
|
||||
"权限名称": "권한명",
|
||||
"权限编码": "권한 코드",
|
||||
"权限类型": "권한 유형",
|
||||
"资源权限": "리소스 권한",
|
||||
"操作权限": "작업 권한",
|
||||
"数据权限": "데이터 권한",
|
||||
"登录日志": "로그인 로그",
|
||||
"登录时间": "로그인 시간",
|
||||
"登录IP": "로그인 IP",
|
||||
"登录状态": "로그인 상태",
|
||||
"成功": "성공",
|
||||
"失败": "실패",
|
||||
"操作日志": "작업 로그",
|
||||
"操作类型": "작업 유형",
|
||||
"操作时间": "작업 시간",
|
||||
"操作结果": "작업 결과",
|
||||
"API密钥管理": "API 키 관리",
|
||||
"密钥名称": "키 이름",
|
||||
"密钥值": "키 값",
|
||||
"密钥状态": "키 상태",
|
||||
"新增密钥": "키 추가",
|
||||
"编辑密钥": "키 편집",
|
||||
"删除密钥": "키 삭제",
|
||||
"在线用户": "온라인 사용자",
|
||||
"会话ID": "세션 ID",
|
||||
"最后活动时间": "마지막 활동 시간",
|
||||
"强制下线": "강제 로그아웃",
|
||||
"安全设置": "보안 설정",
|
||||
"密码策略": "비밀번호 정책",
|
||||
"密码长度": "비밀번호 길이",
|
||||
"密码复杂度": "비밀번호 복잡도",
|
||||
"密码有效期": "비밀번호 유효기간",
|
||||
"登录失败锁定": "로그인 실패 잠금",
|
||||
"最大失败次数": "최대 실패 횟수",
|
||||
"锁定时长": "잠금 시간",
|
||||
"双因素认证": "이중 인증",
|
||||
"启用双因素": "이중 인증 활성화",
|
||||
"验证码": "인증 코드",
|
||||
"Token管理": "토큰 관리",
|
||||
"Token名称": "토큰 이름",
|
||||
"Token过期时间": "토큰 만료 시간",
|
||||
"新增Token": "토큰 추가",
|
||||
"编辑Token": "토큰 편집",
|
||||
"删除Token": "토큰 삭제",
|
||||
"刷新Token": "토큰 갱신",
|
||||
"用户组": "사용자 그룹",
|
||||
"组名称": "그룹 이름",
|
||||
"组描述": "그룹 설명",
|
||||
"新增用户组": "사용자 그룹 추가",
|
||||
"编辑用户组": "사용자 그룹 편집",
|
||||
"删除用户组": "사용자 그룹 삭제",
|
||||
"成员管理": "멤버 관리",
|
||||
"添加成员": "멤버 추가",
|
||||
"移除成员": "멤버 제거",
|
||||
"名称或编码": "이름 또는 코드",
|
||||
"管理员": "관리자",
|
||||
"普通用户": "일반 사용자",
|
||||
"只读用户": "읽기 전용 사용자",
|
||||
"访问控制": "접근 제어",
|
||||
"最后登录": "마지막 로그인",
|
||||
"清除登录次数": "로그인 실패 횟수 초기화",
|
||||
"新密码": "새 비밀번호",
|
||||
"确认清除该用户的连续登录失败次数?": "이 사용자의 연속 로그인 실패 횟수를 초기화하시겠습니까?",
|
||||
"为选中用户设置新密码(至少8位)": "선택한 사용자에게 새 비밀번호(8자 이상) 설정",
|
||||
"API Key ID": "API Key ID",
|
||||
"akikey": "akikey",
|
||||
"apikey为空": "apikey가 비어 있습니다",
|
||||
"error happend": "오류가 발생했습니다",
|
||||
"need login": "로그인이 필요합니다",
|
||||
"you need login to do this": "이 작업을 수행하려면 로그인이 필요합니다",
|
||||
"下位应用名": "하위 애플리케이션 이름",
|
||||
"下位系统": "하위 시스템",
|
||||
"下位系统apikey": "하위 시스템 API 키",
|
||||
"下位系统id": "하위 시스템 ID",
|
||||
"允许ip集": "허용 IP 세트",
|
||||
"允许的IP集": "허용 IP 세트",
|
||||
"创建API Key": "API Key 생성",
|
||||
"创建日期": "생성 날짜",
|
||||
"创建用户apikey": "사용자 API 키 생성",
|
||||
"删除API Key": "API Key 삭제",
|
||||
"复制API Key": "API Key 복사",
|
||||
"应用ID": "애플리케이션 ID",
|
||||
"应用名": "애플리케이션 이름",
|
||||
"应用名称": "애플리케이션 이름",
|
||||
"应用描述": "애플리케이션 설명",
|
||||
"更新API Key": "API Key 업데이트",
|
||||
"没有找到用户apikey": "사용자 API 키를 찾을 수 없습니다",
|
||||
"重新生成API Key": "API Key 재생성",
|
||||
"能力": "기능",
|
||||
"流程": "워크플로",
|
||||
"登录 / 注册": "로그인 / 가입",
|
||||
"AI 原生 · 产线操作系统": "AI 네이티브 · 파이프라인 운영체제",
|
||||
"把业务装进产线": "업무를 파이프라인에 싣다",
|
||||
"让 Agent 自主运转": "에이전트가 자율 가동",
|
||||
"产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。": "파이프라인 플랫폼은 에이전트 기반 기업형 지능 파이프라인 운영체제입니다. 영업기회·입찰·개발을 원클릭으로 시작하고, LLM 에이전트가 작업을 자율 추진하며, 인간 게이트가 품질을 관리합니다. 산출물은 곧 제품이고, 실행 즉시 과금·기장됩니다.",
|
||||
"查看平台能力": "플랫폼 기능 보기",
|
||||
"功能模块": "기능 모듈",
|
||||
"自主运转": "자율 가동",
|
||||
"语言国际化": "다국어 지원",
|
||||
"商机挖掘": "영업기회 발굴",
|
||||
"投标生产": "입찰서 생산",
|
||||
"软件开发": "소프트웨어 개발",
|
||||
"模型网关": "모델 게이트웨이",
|
||||
"产品商品化": "제품 상품화",
|
||||
"计费记账": "과금·기장",
|
||||
"供销协同": "공급·판매 연동",
|
||||
"人机协同门禁": "인간 협업 게이트",
|
||||
"平台能力": "플랫폼 기능",
|
||||
"不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。": "챗봇이 아니라, 자율적으로 일하고, 감사 가능하며, 직접 과금되는 지능형 파이프라인입니다.",
|
||||
"Agent 驱动产线引擎": "에이전트 기반 파이프라인 엔진",
|
||||
"会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。": "대화로 시작: 한 문장으로 플로를 가동하면 에이전트가 작업을 자동 분해하고 LLM을 호출해 산출물을 생성합니다. LLM 3중 장애 허용으로 단일 모델 장애에도 파이프라인은 멈추지 않습니다.",
|
||||
"多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。": "멀티 벤더 LLM 통합 접속: 잔액 게이트, 세션 고정 라운드로빈, 장애 자동 라우팅, 호출 단위 과금. API 키는 프로세스 밖으로 나가지 않습니다.",
|
||||
"资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。": "리소스→제품→가격→할인→구독→과금 전체 체인. 표시 가격은 「실가격×고객 할인」으로 계산되며, 파이프라인 실행 즉시 소비·기장됩니다.",
|
||||
"平台待办中枢": "플랫폼 할 일 허브",
|
||||
"全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。": "전역 비동기 알림 허브: 게이트·확인·업로드 등 이벤트가 인간 할 일로 통합 버블됩니다. 동일 사항은 한 번만 발행되고 처리 후 자동 보충됩니다.",
|
||||
"PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。": "PM 검토, QC 검사, 인간 확인의 다층 체크——기계의 속도와 인간의 판단, 감사 로그로 전 과정 추적 가능.",
|
||||
"安全与多租户": "보안 및 멀티테넌시",
|
||||
"RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。": "RBAC 세분 경로 권한, 조직 격리, 단기 토큰 내부 프록시, 로그인 감사 및 실패 잠금.",
|
||||
"国际化与双主题": "국제화 및 듀얼 테마",
|
||||
"中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。": "중 / 영 / 일 / 한 4개 언어 실시간 전환, 밝기/어둠 테마 원클릭 전환, 데스크톱과 모바일 H5 동일 경험.",
|
||||
"每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。": "각 파이프라인은 완전한 업무 루프: 정보 입력부터 납품 가능한 산출물까지, 에이전트가 추진하고 인간 게이트가 관리합니다.",
|
||||
"招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。": "입찰 정보 수집 → 영업기회 평가 → 조사 보고서 → 인간 확인. 시장 신호를 후속 조치 가능한 영업기회로 변환합니다.",
|
||||
"运行中": "가동 중",
|
||||
"标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。": "입찰서 지능 작성: 평가 기준 항목별 응답, 기술/상업 분책 생성, 자료 누락 목록, 다중 QC 게이트.",
|
||||
"SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。": "SDLC 작업 체인: 요구 → 설계 → 개발 → 테스트 → 배포, PM 검토 게이트 + 산출물 관리.",
|
||||
"面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。": "FOMS 대상 운영 자동화: 알람 처리, 점검 보고서, 변경 오케스트레이션.",
|
||||
"规划中": "계획 중",
|
||||
"内容生产与投放自动化:素材生成、渠道分发、效果回收。": "콘텐츠 제작·배포 자동화: 소재 생성, 채널 배포, 효과 회수.",
|
||||
"五步跑通一条产线": "5단계로 파이프라인 가동",
|
||||
"订阅产线": "파이프라인 구독",
|
||||
"在产品商城选购产线订阅,账号权益即时生效。": "제품 스토어에서 파이프라인 구독 구매, 계정 권익 즉시 발효.",
|
||||
"发起会话": "세션 시작",
|
||||
"进入产线工作台,用一句话下达任务。": "파이프라인 워크스페이스에 들어가 한 문장으로 작업을 지시하세요.",
|
||||
"Agent 自主执行": "에이전트 자율 실행",
|
||||
"任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。": "작업 분해, 모델 호출, 산출물 생성까지 전 과정 자동 추진. 언제든 끼어들어 방향을 수정할 수 있습니다.",
|
||||
"人类门禁": "인간 게이트",
|
||||
"关键节点冒泡为平台待办,人看过正文再放行。": "핵심 노드가 플랫폼 할 일로 버블되며, 사람이 본문을 확인 후 통과시킵니다.",
|
||||
"交付与记账": "납품과 기장",
|
||||
"产出归档、按量出账,消费明细随时可查。": "산출물 아카이브, 사용량 기반 과금, 소비 명세 상시 조회 가능.",
|
||||
"准备好把业务装上产线了吗?": "업무를 파이프라인에 실을 준비가 되셨나요?",
|
||||
"注册账号,订阅第一条产线,让 Agent 今天就开始干活。": "계정을 가입하고 첫 파이프라인을 구독해, 오늘부터 에이전트에게 일을 시키세요.",
|
||||
"立即注册": "지금 가입",
|
||||
"© 2026 开元云(北京)科技有限公司": "© 2026 Kaiyuan Cloud (Beijing) Technology Co., Ltd.",
|
||||
"产线矩阵": "파이프라인 매트릭스"
|
||||
}
|
||||
@ -95,5 +95,916 @@
|
||||
"显示所有已最小化的窗口": "显示所有已最小化的窗口",
|
||||
"## 完毕 ##": "## 完毕 ##",
|
||||
"通用助手": "通用助手",
|
||||
"API Key": "API Key"
|
||||
"API Key": "API Key",
|
||||
"助手": "助手",
|
||||
"待办": "待办",
|
||||
"我的": "我的",
|
||||
"欢迎使用产线平台": "欢迎使用产线平台",
|
||||
"我的权益": "我的权益",
|
||||
"我的账户": "我的账户",
|
||||
"充值": "充值",
|
||||
"产品商城": "产品商城",
|
||||
"深色模式": "深色模式",
|
||||
"浅色模式": "浅色模式",
|
||||
"退出登录": "退出登录",
|
||||
"暂无待办": "暂无待办",
|
||||
"暂无数据": "暂无数据",
|
||||
"暂无已购产线 · 请到「我的 → 产品商城」购买": "暂无已购产线 · 请到「我的 → 产品商城」购买",
|
||||
"尚未购买任何产线": "尚未购买任何产线",
|
||||
"购买产线后即可在此对话;通用助手无需购买。": "购买产线后即可在此对话;通用助手无需购买。",
|
||||
"去产品商城购买": "去产品商城购买",
|
||||
"使用通用助手": "使用通用助手",
|
||||
"工作空间为通用会话专属目录,不进入项目空间": "工作空间为通用会话专属目录,不进入项目空间",
|
||||
"暂无已购产线": "暂无已购产线",
|
||||
"尚未购买该产线或订阅已到期,请到产品商城购买后再开始对话": "尚未购买该产线或订阅已到期,请到产品商城购买后再开始对话",
|
||||
"我的工单": "我的工单",
|
||||
"工单管理": "工单管理",
|
||||
"提交新工单": "提交新工单",
|
||||
"action必须是pause/resume/cancel": "action必须是pause/resume/cancel",
|
||||
"产线ID": "产线ID",
|
||||
"产线类型": "产线类型",
|
||||
"任务ID": "任务ID",
|
||||
"任务标题": "任务标题",
|
||||
"取消": "取消",
|
||||
"恢复": "恢复",
|
||||
"提交新任务": "提交新任务",
|
||||
"暂停": "暂停",
|
||||
"标题": "标题",
|
||||
"模式(可选)": "模式(可选)",
|
||||
"版本": "版本",
|
||||
"状态": "状态",
|
||||
"缺少task_id": "缺少task_id",
|
||||
"缺少task_id或step_name": "缺少task_id或step_name",
|
||||
"缺少产线ID": "缺少产线ID",
|
||||
"缺少任务标题": "缺少任务标题",
|
||||
"输入文本(可选)": "输入文本(可选)",
|
||||
"返回列表": "返回列表",
|
||||
"',": "',",
|
||||
"Add Error": "Add Error",
|
||||
"Add Success": "Add Success",
|
||||
"Authorization Error": "Authorization Error",
|
||||
"Delete Error": "Delete Error",
|
||||
"Delete Success": "Delete Success",
|
||||
"Error": "Error",
|
||||
"Invalid": "Invalid",
|
||||
"Please login": "Please login",
|
||||
"Record no exist or with wrong ownership": "Record no exist or with wrong ownership",
|
||||
"Success": "Success",
|
||||
"Update Error": "Update Error",
|
||||
"Update Success": "Update Success",
|
||||
"failed": "failed",
|
||||
"ok": "ok",
|
||||
"下属产品": "下属产品",
|
||||
"产品创建成功": "产品创建成功",
|
||||
"产品删除成功": "产品删除成功",
|
||||
"产品名称": "产品名称",
|
||||
"产品更新成功": "产品更新成功",
|
||||
"产品注册表": "产品注册表",
|
||||
"产品简介": "产品简介",
|
||||
"产品管理": "产品管理",
|
||||
"产品类别ID": "产品类别ID",
|
||||
"产品类别树": "产品类别树",
|
||||
"产品类别管理": "产品类别管理",
|
||||
"产品类型显示名": "产品类型显示名",
|
||||
"产品类型标识": "产品类型标识",
|
||||
"产品编码": "产品编码",
|
||||
"产品详情": "产品详情",
|
||||
"价格": "价格",
|
||||
"价格类型": "价格类型",
|
||||
"创建人": "创建人",
|
||||
"创建失败\\x3A": "创建失败\\x3A",
|
||||
"删除失败\\x3A": "删除失败\\x3A",
|
||||
"启用日期": "启用日期",
|
||||
"图标": "图标",
|
||||
"失效日期": "失效日期",
|
||||
"所属机构ID": "所属机构ID",
|
||||
"扩展属性": "扩展属性",
|
||||
"排序序号": "排序序号",
|
||||
"是否可挂产品": "是否可挂产品",
|
||||
"是否启用": "是否启用",
|
||||
"更新失败\\x3A": "更新失败\\x3A",
|
||||
"父类别ID": "父类别ID",
|
||||
"类别ID": "类别ID",
|
||||
"类别创建成功": "类别创建成功",
|
||||
"类别删除成功": "类别删除成功",
|
||||
"类别名称": "类别名称",
|
||||
"类别描述": "类别描述",
|
||||
"类别更新成功": "类别更新成功",
|
||||
"该类别下有产品,无法删除": "该类别下有产品,无法删除",
|
||||
"该类别下有子类别,无法删除": "该类别下有子类别,无法删除",
|
||||
"货币": "货币",
|
||||
"运营商产品类型配置": "运营商产品类型配置",
|
||||
"运营商用户ID": "运营商用户ID",
|
||||
"运营商配置": "运营商配置",
|
||||
"配置内容": "配置内容",
|
||||
"配置创建成功": "配置创建成功",
|
||||
"配置删除成功": "配置删除成功",
|
||||
"配置名称": "配置名称",
|
||||
"配置更新成功": "配置更新成功",
|
||||
"id": "id",
|
||||
"二维码路径": "二维码路径",
|
||||
"产品id": "产品id",
|
||||
"产品种类id": "产品种类id",
|
||||
"促销失效日期": "促销失效日期",
|
||||
"商户id": "商户id",
|
||||
"客户id": "客户id",
|
||||
"折扣": "折扣",
|
||||
"折扣\\x3A": "折扣\\x3A",
|
||||
"折扣二维码": "折扣二维码",
|
||||
"折扣产品明细": "折扣产品明细",
|
||||
"折扣名称": "折扣名称",
|
||||
"折扣方案id": "折扣方案id",
|
||||
"折扣明细表": "折扣明细表",
|
||||
"折扣有效期": "折扣有效期",
|
||||
"折扣管理": "折扣管理",
|
||||
"折扣表": "折扣表",
|
||||
"有效期": "有效期",
|
||||
"生成促销码": "生成促销码",
|
||||
"Validation Failed": "Validation Failed",
|
||||
"ppid parameter required": "ppid parameter required",
|
||||
"上传定价数据": "上传定价数据",
|
||||
"下载定价数据": "下载定价数据",
|
||||
"供应商": "供应商",
|
||||
"供应商折扣": "供应商折扣",
|
||||
"名称": "名称",
|
||||
"定价属于": "定价属于",
|
||||
"定价数据": "定价数据",
|
||||
"定价文件": "定价文件",
|
||||
"定价时序数据没找到": "定价时序数据没找到",
|
||||
"定价模版": "定价模版",
|
||||
"定价测试": "定价测试",
|
||||
"定价细项": "定价细项",
|
||||
"定价项目": "定价项目",
|
||||
"定价项目id": "定价项目id",
|
||||
"定价项目时序": "定价项目时序",
|
||||
"所属机构": "所属机构",
|
||||
"折扣不能为空": "折扣不能为空",
|
||||
"折扣不能大于1": "折扣不能大于1",
|
||||
"折扣不能小于0": "折扣不能小于0",
|
||||
"折扣必须是数字": "折扣必须是数字",
|
||||
"描述": "描述",
|
||||
"测试": "测试",
|
||||
"规格明细": "规格明细",
|
||||
"计费数据(json)": "计费数据(json)",
|
||||
"项目名称": "项目名称",
|
||||
"验证定价": "验证定价",
|
||||
"不可退费": "不可退费",
|
||||
"停用日期": "停用日期",
|
||||
"充值历史": "充值历史",
|
||||
"充值客户id": "充值客户id",
|
||||
"充值渠道": "充值渠道",
|
||||
"充值费率": "充值费率",
|
||||
"充值金额": "充值金额",
|
||||
"原支付id": "原支付id",
|
||||
"发起日期": "发起日期",
|
||||
"发起时间": "发起时间",
|
||||
"币种": "币种",
|
||||
"支付发起时点": "支付发起时点",
|
||||
"支付取消时点": "支付取消时点",
|
||||
"支付名称": "支付名称",
|
||||
"支付完成时点": "支付完成时点",
|
||||
"支付客户ip": "支付客户ip",
|
||||
"支付操作用户id": "支付操作用户id",
|
||||
"支付日志": "支付日志",
|
||||
"支付渠道": "支付渠道",
|
||||
"支付渠道id": "支付渠道id",
|
||||
"支付渠道交易ID": "支付渠道交易ID",
|
||||
"支付渠道名称": "支付渠道名称",
|
||||
"支付状态": "支付状态",
|
||||
"支付费率": "支付费率",
|
||||
"支付费用": "支付费用",
|
||||
"支付金额": "支付金额",
|
||||
"本地充值已退费": "本地充值已退费",
|
||||
"禁用日期": "禁用日期",
|
||||
"费率": "费率",
|
||||
"转账码": "转账码",
|
||||
"退费金额": "退费金额",
|
||||
"金额": "金额",
|
||||
"需要选定一条记录": "需要选定一条记录",
|
||||
"需输入充值金额": "需输入充值金额",
|
||||
"system error": "system error",
|
||||
"业务操作": "业务操作",
|
||||
"主参与方类型": "主参与方类型",
|
||||
"主机构id": "主机构id",
|
||||
"交易": "交易",
|
||||
"从参与方类型": "从参与方类型",
|
||||
"从机构id": "从机构id",
|
||||
"从机构类型": "从机构类型",
|
||||
"余额": "余额",
|
||||
"余额方向": "余额方向",
|
||||
"保存": "保存",
|
||||
"信用额度": "信用额度",
|
||||
"信用额度更新成功": "信用额度更新成功",
|
||||
"信用额度管理": "信用额度管理",
|
||||
"信用额度表": "信用额度表",
|
||||
"信用额度设置成功": "信用额度设置成功",
|
||||
"借方余额": "借方余额",
|
||||
"全部客户查询": "全部客户查询",
|
||||
"删除失败": "删除失败",
|
||||
"删除成功": "删除成功",
|
||||
"原始交易": "原始交易",
|
||||
"参数错误": "参数错误",
|
||||
"可用额度": "可用额度",
|
||||
"备注": "备注",
|
||||
"客户用户名": "客户用户名",
|
||||
"客户编号": "客户编号",
|
||||
"客户额度管理": "客户额度管理",
|
||||
"已处理": "已处理",
|
||||
"已用额度": "已用额度",
|
||||
"开始日期": "开始日期",
|
||||
"待处理": "待处理",
|
||||
"总账表": "总账表",
|
||||
"我的帐务": "我的帐务",
|
||||
"我的额度": "我的额度",
|
||||
"报告错帐": "报告错帐",
|
||||
"授信额度": "授信额度",
|
||||
"授信额度必须大于0": "授信额度必须大于0",
|
||||
"授信额度设置成功": "授信额度设置成功",
|
||||
"摘要": "摘要",
|
||||
"新增客户授信": "新增客户授信",
|
||||
"新增授信": "新增授信",
|
||||
"方向": "方向",
|
||||
"日期": "日期",
|
||||
"时间": "时间",
|
||||
"明细": "明细",
|
||||
"明细顺序号": "明细顺序号",
|
||||
"更新失败": "更新失败",
|
||||
"最大明细顺序号": "最大明细顺序号",
|
||||
"机构": "机构",
|
||||
"机构ID": "机构ID",
|
||||
"机构类型": "机构类型",
|
||||
"机构账户表": "机构账户表",
|
||||
"生效日期": "生效日期",
|
||||
"用户名不能为空": "用户名不能为空",
|
||||
"科目": "科目",
|
||||
"科目id": "科目id",
|
||||
"科目号": "科目号",
|
||||
"科目名称": "科目名称",
|
||||
"科目类别": "科目类别",
|
||||
"科目表": "科目表",
|
||||
"系统错误": "系统错误",
|
||||
"结束日期": "结束日期",
|
||||
"缺少日期参数": "缺少日期参数",
|
||||
"订单编号": "订单编号",
|
||||
"记账方id": "记账方id",
|
||||
"记账方向": "记账方向",
|
||||
"记账方类型": "记账方类型",
|
||||
"记账日期": "记账日期",
|
||||
"记账时间戳": "记账时间戳",
|
||||
"记账配置表": "记账配置表",
|
||||
"记账金额": "记账金额",
|
||||
"设置失败": "设置失败",
|
||||
"说明": "说明",
|
||||
"调整": "调整",
|
||||
"调整授信额度": "调整授信额度",
|
||||
"账务日期": "账务日期",
|
||||
"账务机构": "账务机构",
|
||||
"账务机构id": "账务机构id",
|
||||
"账务流水id": "账务流水id",
|
||||
"账务流水表": "账务流水表",
|
||||
"账务说明": "账务说明",
|
||||
"账单": "账单",
|
||||
"账单ID": "账单ID",
|
||||
"账单id": "账单id",
|
||||
"账单日期": "账单日期",
|
||||
"账单时间戳": "账单时间戳",
|
||||
"账单明细": "账单明细",
|
||||
"账单查询": "账单查询",
|
||||
"账单状态": "账单状态",
|
||||
"账单金额": "账单金额",
|
||||
"账户ID": "账户ID",
|
||||
"账户ID不能为空": "账户ID不能为空",
|
||||
"账户id": "账户id",
|
||||
"账户余额": "账户余额",
|
||||
"账户余额表": "账户余额表",
|
||||
"账户日志": "账户日志",
|
||||
"账户明细": "账户明细",
|
||||
"账户明细表": "账户明细表",
|
||||
"账户设置": "账户设置",
|
||||
"账户配置表": "账户配置表",
|
||||
"账本机构": "账本机构",
|
||||
"贷方余额": "贷方余额",
|
||||
"资源id": "资源id",
|
||||
"金额模板": "金额模板",
|
||||
"错帐类型": "错帐类型",
|
||||
"API": "API",
|
||||
"APIKEY": "APIKEY",
|
||||
"API接口": "API接口",
|
||||
"API标题": "API标题",
|
||||
"API输入输出": "API输入输出",
|
||||
"API集": "API集",
|
||||
"API集名称": "API集名称",
|
||||
"api名称": "api名称",
|
||||
"api密码": "api密码",
|
||||
"api密钥": "api密钥",
|
||||
"api测试": "api测试",
|
||||
"api用户": "api用户",
|
||||
"api集id": "api集id",
|
||||
"headers模版": "headers模版",
|
||||
"http方法": "http方法",
|
||||
"path": "path",
|
||||
"上位应用名": "上位应用名",
|
||||
"上位系统": "上位系统",
|
||||
"上位系统ID": "上位系统ID",
|
||||
"上位系统密码": "上位系统密码",
|
||||
"上位系统密码表": "上位系统密码表",
|
||||
"上游任务": "上游任务",
|
||||
"加密密钥": "加密密钥",
|
||||
"动态headers函数": "动态headers函数",
|
||||
"参数模版": "参数模版",
|
||||
"响应模版": "响应模版",
|
||||
"响应转换函数名": "响应转换函数名",
|
||||
"回调url": "回调url",
|
||||
"外部系统": "外部系统",
|
||||
"属主id": "属主id",
|
||||
"属主机构id": "属主机构id",
|
||||
"应用id": "应用id",
|
||||
"开始时间": "开始时间",
|
||||
"我的appid": "我的appid",
|
||||
"执行方任务id": "执行方任务id",
|
||||
"授权api名": "授权api名",
|
||||
"接口描述": "接口描述",
|
||||
"数据模版": "数据模版",
|
||||
"是否第一用户": "是否第一用户",
|
||||
"本地业务id": "本地业务id",
|
||||
"流式匹配串": "流式匹配串",
|
||||
"流式输出": "流式输出",
|
||||
"用户id": "用户id",
|
||||
"相应数据": "相应数据",
|
||||
"类型名": "类型名",
|
||||
"类型说明": "类型说明",
|
||||
"系统url": "系统url",
|
||||
"结束时间": "结束时间",
|
||||
"认证API名": "认证API名",
|
||||
"跳转到": "跳转到",
|
||||
"输入字段": "输入字段",
|
||||
"输入输出": "输入输出",
|
||||
"输入输出id": "输入输出id",
|
||||
"需要鉴权": "需要鉴权",
|
||||
"审批记录": "审批记录",
|
||||
"审批流程配置": "审批流程配置",
|
||||
"审批标题": "审批标题",
|
||||
"审批意见": "审批意见",
|
||||
"业务类型": "业务类型",
|
||||
"钉钉审批模板编码": "钉钉审批模板编码",
|
||||
"待审批": "待审批",
|
||||
"已通过": "已通过",
|
||||
"已驳回": "已驳回",
|
||||
"审批节点配置": "审批节点配置",
|
||||
"审批节点链JSON": "审批节点链JSON",
|
||||
"钉钉应用AgentId": "钉钉应用AgentId",
|
||||
"表单字段配置JSON": "表单字段配置JSON",
|
||||
"业务类型名称": "业务类型名称",
|
||||
"启用": "启用",
|
||||
"停用": "停用",
|
||||
"组织ID": "组织ID",
|
||||
"产线步骤审批": "产线步骤审批",
|
||||
"产线部署审批": "产线部署审批",
|
||||
"商机研发审批": "商机研发审批",
|
||||
"内容发布": "内容发布",
|
||||
"发起人": "发起人",
|
||||
"审批人": "审批人",
|
||||
"钉钉审批实例ID": "钉钉审批实例ID",
|
||||
"完成时间": "完成时间",
|
||||
"已取消": "已取消",
|
||||
"是否启用(1/0)": "是否启用",
|
||||
"审批记录表": "审批记录表",
|
||||
"业务类型(content_publish等)": "业务类型",
|
||||
"业务数据ID": "业务数据ID",
|
||||
"申请人ID": "申请人",
|
||||
"审批人ID": "审批人",
|
||||
"状态(pending/approved/rejected/cancelled)": "审批状态",
|
||||
"账号规格": "账号规格",
|
||||
"账号资源": "账号资源",
|
||||
"权益配额": "权益配额",
|
||||
"计费方式": "计费方式",
|
||||
"试用": "试用",
|
||||
"月租": "月租",
|
||||
"年租": "年租",
|
||||
"存储规格": "存储规格",
|
||||
"存储资源": "存储资源",
|
||||
"容量采样": "容量采样",
|
||||
"计量方式": "计量方式",
|
||||
"计费容量": "计费容量",
|
||||
"峰值容量": "峰值容量",
|
||||
"上传文件": "上传文件",
|
||||
"其他人权限": "其他人权限",
|
||||
"同事权限": "同事权限",
|
||||
"哈希值": "哈希值",
|
||||
"属主": "属主",
|
||||
"所属机构id": "所属机构id",
|
||||
"文件": "文件",
|
||||
"文件大小": "文件大小",
|
||||
"文件类型": "文件类型",
|
||||
"父权限id": "父权限id",
|
||||
"目录": "目录",
|
||||
"目录id": "目录id",
|
||||
"目录信息id": "目录信息id",
|
||||
"相对路径": "相对路径",
|
||||
"绝对路径": "绝对路径",
|
||||
"Deleted successfully": "Deleted successfully",
|
||||
"ID": "ID",
|
||||
"Missing record id": "Missing record id",
|
||||
"delete_platform_supply_products not registered": "delete_platform_supply_products not registered",
|
||||
"delete_platform_supply_relations not registered": "delete_platform_supply_relations not registered",
|
||||
"delete_product_supplier_mapping not registered": "delete_product_supplier_mapping not registered",
|
||||
"delete_sales_ledger function not found": "delete_sales_ledger function not found",
|
||||
"delete_sub_resellers function not found": "delete_sub_resellers function not found",
|
||||
"delete_suppliers function not found": "delete_suppliers function not found",
|
||||
"source_product_id, supplier_org_id, relation_id are required": "source_product_id, supplier_org_id, relation_id are required",
|
||||
"supplier_org_id is required": "supplier_org_id is required",
|
||||
"update_platform_supply_products not registered": "update_platform_supply_products not registered",
|
||||
"update_platform_supply_relations not registered": "update_platform_supply_relations not registered",
|
||||
"update_product_supplier_mapping not registered": "update_product_supplier_mapping not registered",
|
||||
"update_sales_ledger function not found": "update_sales_ledger function not found",
|
||||
"update_sub_resellers function not found": "update_sub_resellers function not found",
|
||||
"update_suppliers function not found": "update_suppliers function not found",
|
||||
"二级分销商": "二级分销商",
|
||||
"二级分销商ID": "二级分销商ID",
|
||||
"二级分销商名称": "二级分销商名称",
|
||||
"二级分销商编号": "二级分销商编号",
|
||||
"二级分销商表": "二级分销商表",
|
||||
"交付周期(天)": "交付周期(天)",
|
||||
"交易日期": "交易日期",
|
||||
"交易流水号": "交易流水号",
|
||||
"交易笔数": "交易笔数",
|
||||
"产品": "产品",
|
||||
"产品ID": "产品ID",
|
||||
"产品供应商映射创建成功": "产品供应商映射创建成功",
|
||||
"产品供应映射表": "产品供应映射表",
|
||||
"产品分类ID": "产品分类ID",
|
||||
"产品分销折扣": "产品分销折扣",
|
||||
"产品引入成功": "产品引入成功",
|
||||
"产品折扣明细": "产品折扣明细",
|
||||
"付款方式": "付款方式",
|
||||
"佣金率": "佣金率",
|
||||
"供应合同创建成功": "供应合同创建成功",
|
||||
"供应合同项目创建成功": "供应合同项目创建成功",
|
||||
"供应商ID": "供应商ID",
|
||||
"供应商充值记录": "供应商充值记录",
|
||||
"供应商创建成功": "供应商创建成功",
|
||||
"供应商名称": "供应商名称",
|
||||
"供应商名称不能为空": "供应商名称不能为空",
|
||||
"供应商类型": "供应商类型",
|
||||
"供应商结算记录": "供应商结算记录",
|
||||
"供应商编号": "供应商编号",
|
||||
"供应商表": "供应商表",
|
||||
"供应方产品ID": "供应方产品ID",
|
||||
"供应方机构ID": "供应方机构ID",
|
||||
"供应方机构ID(平台内)": "供应方机构ID(平台内)",
|
||||
"供应链记账创建成功": "供应链记账创建成功",
|
||||
"供货价": "供货价",
|
||||
"供销产品明细": "供销产品明细",
|
||||
"供销关系ID": "供销关系ID",
|
||||
"供销合同ID": "供销合同ID",
|
||||
"供销合同产品折扣明细表": "供销合同产品折扣明细表",
|
||||
"供销合同产品明细ID": "供销合同产品明细ID",
|
||||
"供销合同表": "供销合同表",
|
||||
"供销记账表": "供销记账表",
|
||||
"充值日期": "充值日期",
|
||||
"充值状态": "充值状态",
|
||||
"充值记录已更新": "充值记录已更新",
|
||||
"关系名称": "关系名称",
|
||||
"关系编号": "关系编号",
|
||||
"关联供销关系ID": "关联供销关系ID",
|
||||
"关联供销合同ID": "关联供销合同ID",
|
||||
"内部供应商必须选择所属机构": "内部供应商必须选择所属机构",
|
||||
"分销协议": "分销协议",
|
||||
"分销协议ID": "分销协议ID",
|
||||
"分销协议产品折扣明细表": "分销协议产品折扣明细表",
|
||||
"分销协议产品明细ID": "分销协议产品明细ID",
|
||||
"分销协议创建成功": "分销协议创建成功",
|
||||
"分销协议表": "分销协议表",
|
||||
"分销协议项目创建成功": "分销协议项目创建成功",
|
||||
"分销商": "分销商",
|
||||
"分销商创建成功": "分销商创建成功",
|
||||
"分销商结算记录": "分销商结算记录",
|
||||
"分销折扣": "分销折扣",
|
||||
"分销指导价": "分销指导价",
|
||||
"分销金额": "分销金额",
|
||||
"分销金额(二级分销商应付)": "分销金额(二级分销商应付)",
|
||||
"利润金额": "利润金额",
|
||||
"到期日期": "到期日期",
|
||||
"协议名称": "协议名称",
|
||||
"协议编号": "协议编号",
|
||||
"单价": "单价",
|
||||
"合作类型": "合作类型",
|
||||
"合同名称": "合同名称",
|
||||
"合同编号": "合同编号",
|
||||
"地址": "地址",
|
||||
"外部供应商ID": "外部供应商ID",
|
||||
"对方金额(应付)": "对方金额(应付)",
|
||||
"对方金额(应收)": "对方金额(应收)",
|
||||
"差异": "差异",
|
||||
"差异金额": "差异金额",
|
||||
"平台供应产品创建成功": "平台供应产品创建成功",
|
||||
"平台供应关系创建成功": "平台供应关系创建成功",
|
||||
"平台供销产品明细表": "平台供销产品明细表",
|
||||
"平台内供销关系表": "平台内供销关系表",
|
||||
"建议零售价": "建议零售价",
|
||||
"开户银行": "开户银行",
|
||||
"我方金额(应付)": "我方金额(应付)",
|
||||
"我方金额(应收)": "我方金额(应收)",
|
||||
"所属主分销商机构ID": "所属主分销商机构ID",
|
||||
"所属分销商机构ID": "所属分销商机构ID",
|
||||
"折扣率": "折扣率",
|
||||
"支付方式": "支付方式",
|
||||
"数量": "数量",
|
||||
"是否外部供应商": "是否外部供应商",
|
||||
"是否首选": "是否首选",
|
||||
"最小订货量": "最小订货量",
|
||||
"最小订购量": "最小订购量",
|
||||
"来源类型": "来源类型",
|
||||
"来源记录ID": "来源记录ID",
|
||||
"核对": "核对",
|
||||
"核对状态": "核对状态",
|
||||
"税号": "税号",
|
||||
"签署日期": "签署日期",
|
||||
"类别": "类别",
|
||||
"经销商创建成功": "经销商创建成功",
|
||||
"结算单价": "结算单价",
|
||||
"结算单号": "结算单号",
|
||||
"结算周期": "结算周期",
|
||||
"结算已确认": "结算已确认",
|
||||
"结算方式": "结算方式",
|
||||
"结算日": "结算日",
|
||||
"结算日期": "结算日期",
|
||||
"结算状态": "结算状态",
|
||||
"结算金额": "结算金额",
|
||||
"缺少productid参数": "缺少productid参数",
|
||||
"缺少sub_distributor_id或productid参数": "缺少sub_distributor_id或productid参数",
|
||||
"缺少必要参数\\x3A productid, quantity, unit_price": "缺少必要参数\\x3A productid, quantity, unit_price",
|
||||
"联系人": "联系人",
|
||||
"联系电话": "联系电话",
|
||||
"联系邮箱": "联系邮箱",
|
||||
"负责销售ID": "负责销售ID",
|
||||
"进货折扣": "进货折扣",
|
||||
"进货金额": "进货金额",
|
||||
"进货金额(应付供应商)": "进货金额(应付供应商)",
|
||||
"采购方机构ID": "采购方机构ID",
|
||||
"银行账号": "银行账号",
|
||||
"销售单价": "销售单价",
|
||||
"销售台账创建成功": "销售台账创建成功",
|
||||
"销售数量": "销售数量",
|
||||
"销售日期": "销售日期",
|
||||
"销售记账表": "销售记账表",
|
||||
"需求方机构ID": "需求方机构ID",
|
||||
"默认佣金率": "默认佣金率",
|
||||
"默认分销折扣": "默认分销折扣",
|
||||
"默认折扣": "默认折扣",
|
||||
"默认折扣率": "默认折扣率",
|
||||
"投标驾驶舱": "投标驾驶舱",
|
||||
"招标商务要素": "招标商务要素",
|
||||
"投标知识库": "投标知识库",
|
||||
"评分项": "评分项",
|
||||
"标书章节": "标书章节",
|
||||
"合成标书": "合成标书",
|
||||
"创建投标项目": "创建投标项目",
|
||||
"参与人员": "参与人员",
|
||||
"上传招标文件": "上传招标文件",
|
||||
"招标文件解析": "招标文件解析",
|
||||
"解析QC审核": "解析QC审核",
|
||||
"契合度得分": "契合度得分",
|
||||
"通过分": "通过分",
|
||||
"改进意见": "改进意见",
|
||||
"资质要求": "资质要求",
|
||||
"投标文件要求": "投标文件要求",
|
||||
"章节评审": "章节评审",
|
||||
"整书评分": "整书评分",
|
||||
"得分规则": "得分规则",
|
||||
"评审通过": "评审通过",
|
||||
"退回重写": "退回重写",
|
||||
"交付确认": "交付确认",
|
||||
"投标开始时间": "投标开始时间",
|
||||
"投标截止时间": "投标截止时间",
|
||||
"项目周期": "项目周期",
|
||||
"招标金额": "招标金额",
|
||||
"投标保证金": "投标保证金",
|
||||
"内容摘要": "内容摘要",
|
||||
"研发报告": "研发报告",
|
||||
"研发审批": "研发审批",
|
||||
"热点软件推荐": "热点软件推荐",
|
||||
"今日AI招标": "今日AI招标",
|
||||
"报告状态": "报告状态",
|
||||
"草稿": "草稿",
|
||||
"人工确认通过": "人工确认通过",
|
||||
"已发起研发审批": "已发起研发审批",
|
||||
"审批通过": "审批通过",
|
||||
"审批驳回": "审批驳回",
|
||||
"提交确认": "提交确认",
|
||||
"发起审批": "发起审批",
|
||||
"软件/主题": "软件/主题",
|
||||
"报告标题": "报告标题",
|
||||
"报告正文": "报告正文",
|
||||
"确认人": "确认人",
|
||||
"审批说明": "审批说明",
|
||||
"商机分析师": "商机分析师",
|
||||
"研发报告撰写工程师": "研发报告撰写工程师",
|
||||
"项目ID": "项目ID",
|
||||
"报告ID": "报告ID",
|
||||
"审批状态": "审批状态",
|
||||
"结论时间": "结论时间",
|
||||
"研发场景": "研发场景",
|
||||
"输入": "输入",
|
||||
"输出": "输出",
|
||||
"成果": "成果",
|
||||
"成果文件": "成果文件",
|
||||
"研发报告详情": "研发报告详情",
|
||||
"下载": "下载",
|
||||
"无权查看": "无权查看",
|
||||
"暂无成果文件": "暂无成果文件",
|
||||
"代金券": "代金券",
|
||||
"代金券管理": "代金券管理",
|
||||
"模板管理": "模板管理",
|
||||
"券实例管理": "券实例管理",
|
||||
"使用流水": "使用流水",
|
||||
"管理代金券模板和规则配置": "管理代金券模板和规则配置",
|
||||
"查看和发放代金券": "查看和发放代金券",
|
||||
"查看代金券使用记录": "查看代金券使用记录",
|
||||
"我的代金券": "我的代金券",
|
||||
"发放代金券": "发放代金券",
|
||||
"作废": "作废",
|
||||
"确认作废": "确认作废",
|
||||
"作废代金券": "作废代金券",
|
||||
"已作废": "已作废",
|
||||
"作废原因": "作废原因",
|
||||
"必填,将追加到券备注(审计留痕)": "必填,将追加到券备注(审计留痕)",
|
||||
"按此模板发券": "按此模板发券",
|
||||
"代金券模板": "代金券模板",
|
||||
"代金券实例": "代金券实例",
|
||||
"代金券规则": "代金券规则",
|
||||
"代金券使用流水": "代金券使用流水",
|
||||
"模板名称": "模板名称",
|
||||
"模板编码": "模板编码",
|
||||
"模板ID": "模板ID",
|
||||
"模板": "模板",
|
||||
"面值": "面值",
|
||||
"面值(元)": "面值(元)",
|
||||
"已抵扣(元)": "已抵扣(元)",
|
||||
"总发行量(0不限)": "总发行量(0不限)",
|
||||
"已发放量": "已发放量",
|
||||
"有效期天数": "有效期天数",
|
||||
"规则类型": "规则类型",
|
||||
"规则配置JSON": "规则配置JSON",
|
||||
"执行顺序": "执行顺序",
|
||||
"客户机构ID": "客户机构ID",
|
||||
"客户机构": "客户机构",
|
||||
"券码": "券码",
|
||||
"未使用": "未使用",
|
||||
"已使用": "已使用",
|
||||
"已过期": "已过期",
|
||||
"实际抵扣金额": "实际抵扣金额",
|
||||
"生效时间": "生效时间",
|
||||
"过期时间": "过期时间",
|
||||
"发放时间": "发放时间",
|
||||
"使用时间": "使用时间",
|
||||
"使用订单ID": "使用订单ID",
|
||||
"订单ID": "订单ID",
|
||||
"发放来源": "发放来源",
|
||||
"手动发放": "手动发放",
|
||||
"注册赠券": "注册赠券",
|
||||
"促销活动": "促销活动",
|
||||
"发放人": "发放人",
|
||||
"券实例ID": "券实例ID",
|
||||
"券实例": "券实例",
|
||||
"券面值": "券面值",
|
||||
"抵扣金额": "抵扣金额",
|
||||
"产品类型": "产品类型",
|
||||
"操作人": "操作人",
|
||||
"规则配置": "规则配置",
|
||||
"最低消费": "最低消费",
|
||||
"最高消费": "最高消费",
|
||||
"限定产品类型": "限定产品类型",
|
||||
"限定特定产品": "限定特定产品",
|
||||
"排除特定产品": "排除特定产品",
|
||||
"最大使用次数": "最大使用次数",
|
||||
"用户等级": "用户等级",
|
||||
"发券": "发券",
|
||||
"客户机构ID必填": "客户机构ID必填",
|
||||
"可选": "可选",
|
||||
"查询": "查询",
|
||||
"json应用接口": "json应用接口",
|
||||
"svg内容": "svg内容",
|
||||
"代码管理": "代码管理",
|
||||
"值": "值",
|
||||
"参数值": "参数值",
|
||||
"参数名称": "参数名称",
|
||||
"参数管理": "参数管理",
|
||||
"参数表": "参数表",
|
||||
"图标管理": "图标管理",
|
||||
"多级标志": "多级标志",
|
||||
"应用编码表": "应用编码表",
|
||||
"父id": "父id",
|
||||
"编码名称": "编码名称",
|
||||
"编码键值表": "编码键值表",
|
||||
"键": "键",
|
||||
"Account Locked": "Account Locked",
|
||||
"Account locked due to too many failed login attempts. Please try again in 5 minutes.": "Account locked due to too many failed login attempts. Please try again in 5 minutes.",
|
||||
"Add reseller Error": "Add reseller Error",
|
||||
"Login": "Login",
|
||||
"Login Error": "Login Error",
|
||||
"Reset Password": "Reset Password",
|
||||
"apikey": "apikey",
|
||||
"dappid参数必填": "dappid参数必填",
|
||||
"id/orgid必填": "id/orgid必填",
|
||||
"logout success": "logout success",
|
||||
"no user selected": "no user selected",
|
||||
"user disabled": "user disabled",
|
||||
"user enabled": "user enabled",
|
||||
"user name or password error": "user name or password error",
|
||||
"user register": "user register",
|
||||
"user.id和user.orgid必填": "user.id和user.orgid必填",
|
||||
"users必填": "users必填",
|
||||
"you are not owner user": "you are not owner user",
|
||||
"角色": "角色",
|
||||
"两次输入的密码不一致": "两次输入的密码不一致",
|
||||
"个人信息已更新": "个人信息已更新",
|
||||
"主营业务描述": "主营业务描述",
|
||||
"保存成功": "保存成功",
|
||||
"允许IP集": "允许IP集",
|
||||
"刷新页面": "刷新页面",
|
||||
"发送验证码": "发送验证码",
|
||||
"发送验证码出错,请检查短信模板配置和百度API连接": "发送验证码出错,请检查短信模板配置和百度API连接",
|
||||
"同步应用id": "同步应用id",
|
||||
"增加管理员": "增加管理员",
|
||||
"完善个人信息": "完善个人信息",
|
||||
"完善信息": "完善信息",
|
||||
"审计日志": "审计日志",
|
||||
"密码": "密码",
|
||||
"密码登录": "密码登录",
|
||||
"应用名称": "应用名称",
|
||||
"我的角色": "我的角色",
|
||||
"所在地区id": "所在地区id",
|
||||
"所在城市id": "所在城市id",
|
||||
"所在省id": "所在省id",
|
||||
"手机": "手机",
|
||||
"手机号": "手机号",
|
||||
"手机号需短信验证后方可注册": "手机号需短信验证后方可注册",
|
||||
"手机登录": "手机登录",
|
||||
"手机短信验证码出错": "手机短信验证码出错",
|
||||
"扫描未授权文件": "扫描未授权文件",
|
||||
"扫码": "扫码",
|
||||
"是否审计": "是否审计",
|
||||
"显示名": "显示名",
|
||||
"最后登录": "最后登录",
|
||||
"最后登录失败时间": "最后登录失败时间",
|
||||
"未注册的手机号将自动创建账号": "未注册的手机号将自动创建账号",
|
||||
"机构id": "机构id",
|
||||
"机构别名": "机构别名",
|
||||
"机构名称": "机构名称",
|
||||
"机构拥有角色": "机构拥有角色",
|
||||
"机构简称": "机构简称",
|
||||
"机构编码": "机构编码",
|
||||
"权限": "权限",
|
||||
"权限id": "权限id",
|
||||
"查询路径权限角色": "查询路径权限角色",
|
||||
"欢迎登录": "欢迎登录",
|
||||
"没有收到手机号": "没有收到手机号",
|
||||
"注册失败": "注册失败",
|
||||
"注册成功": "注册成功",
|
||||
"注册日期": "注册日期",
|
||||
"注册账号": "注册账号",
|
||||
"父机构id": "父机构id",
|
||||
"用户": "用户",
|
||||
"用户名": "用户名",
|
||||
"用户名已被占用": "用户名已被占用",
|
||||
"用户应用": "用户应用",
|
||||
"用户状态": "用户状态",
|
||||
"用户管理": "用户管理",
|
||||
"用户角色": "用户角色",
|
||||
"用户部门表": "用户部门表",
|
||||
"登录成功": "登录成功",
|
||||
"短信码已生成": "短信码已生成",
|
||||
"短信验证码": "短信验证码",
|
||||
"短信验证码错误或已过期,请重新获取": "短信验证码错误或已过期,请重新获取",
|
||||
"确认密码": "确认密码",
|
||||
"签退": "签退",
|
||||
"类型": "类型",
|
||||
"系统错误,请稍后重试": "系统错误,请稍后重试",
|
||||
"组织结构代码": "组织结构代码",
|
||||
"网站域名": "网站域名",
|
||||
"联系人电话": "联系人电话",
|
||||
"营业执照": "营业执照",
|
||||
"角色id": "角色id",
|
||||
"角色名称": "角色名称",
|
||||
"角色权限表": "角色权限表",
|
||||
"该手机号已注册,请直接登录": "该手机号已注册,请直接登录",
|
||||
"请先发送并输入短信验证码": "请先发送并输入短信验证码",
|
||||
"请输入密码": "请输入密码",
|
||||
"请输入手机号": "请输入手机号",
|
||||
"请输入用户名": "请输入用户名",
|
||||
"调用参数": "调用参数",
|
||||
"调用日期": "调用日期",
|
||||
"调用时间戳": "调用时间戳",
|
||||
"账号": "账号",
|
||||
"路径": "路径",
|
||||
"身份证": "身份证",
|
||||
"远程IP": "远程IP",
|
||||
"连续失败次数": "连续失败次数",
|
||||
"邮件地址": "邮件地址",
|
||||
"邮箱": "邮箱",
|
||||
"部门id": "部门id",
|
||||
"重置密码": "重置密码",
|
||||
"错误": "错误",
|
||||
"需要短信验证key": "需要短信验证key",
|
||||
"需输入手机号": "需输入手机号",
|
||||
"需输入验证码": "需输入验证码",
|
||||
"验证失败": "验证失败",
|
||||
"验证码": "验证码",
|
||||
"清除登录次数": "清除登录次数",
|
||||
"新密码": "新密码",
|
||||
"确认清除该用户的连续登录失败次数?": "确认清除该用户的连续登录失败次数?",
|
||||
"为选中用户设置新密码(至少8位)": "为选中用户设置新密码(至少8位)",
|
||||
"API Key ID": "API Key ID",
|
||||
"API Key管理": "API Key管理",
|
||||
"akikey": "akikey",
|
||||
"apikey为空": "apikey为空",
|
||||
"error happend": "error happend",
|
||||
"need login": "need login",
|
||||
"you need login to do this": "you need login to do this",
|
||||
"下位应用名": "下位应用名",
|
||||
"下位系统": "下位系统",
|
||||
"下位系统apikey": "下位系统apikey",
|
||||
"下位系统id": "下位系统id",
|
||||
"允许ip集": "允许ip集",
|
||||
"允许的IP集": "允许的IP集",
|
||||
"创建API Key": "创建API Key",
|
||||
"创建日期": "创建日期",
|
||||
"创建用户apikey": "创建用户apikey",
|
||||
"删除API Key": "删除API Key",
|
||||
"复制API Key": "复制API Key",
|
||||
"应用ID": "应用ID",
|
||||
"应用名": "应用名",
|
||||
"应用描述": "应用描述",
|
||||
"更新API Key": "更新API Key",
|
||||
"没有找到用户apikey": "没有找到用户apikey",
|
||||
"重新生成API Key": "重新生成API Key",
|
||||
"能力": "能力",
|
||||
"流程": "流程",
|
||||
"登录 / 注册": "登录 / 注册",
|
||||
"AI 原生 · 产线操作系统": "AI 原生 · 产线操作系统",
|
||||
"把业务装进产线": "把业务装进产线",
|
||||
"让 Agent 自主运转": "让 Agent 自主运转",
|
||||
"产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。": "产线平台是 Agent 驱动的企业智能产线操作系统:商机、投标、开发一键开工,大模型智能体自主推进任务,人类门禁把关质量,产出即产品、跑完即记账。",
|
||||
"查看平台能力": "查看平台能力",
|
||||
"功能模块": "功能模块",
|
||||
"自主运转": "自主运转",
|
||||
"语言国际化": "语言国际化",
|
||||
"商机挖掘": "商机挖掘",
|
||||
"投标生产": "投标生产",
|
||||
"软件开发": "软件开发",
|
||||
"模型网关": "模型网关",
|
||||
"产品商品化": "产品商品化",
|
||||
"计费记账": "计费记账",
|
||||
"供销协同": "供销协同",
|
||||
"人机协同门禁": "人机协同门禁",
|
||||
"平台能力": "平台能力",
|
||||
"不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。": "不是聊天机器人,是一条条能自主干活、能被审计、能直接计费的智能产线。",
|
||||
"Agent 驱动产线引擎": "Agent 驱动产线引擎",
|
||||
"会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。": "会话式开工:一句话启动流程,Agent 自动拆解任务、调用大模型、产出交付件;LLM 三层容错兜底,产线不因单点模型故障停摆。",
|
||||
"多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。": "多供应商大模型统一接入:余额门禁、会话粘性轮询、故障自动路由、按调用出账,密钥不出进程。",
|
||||
"资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。": "资源→产品→定价→折扣→订购→计费全链路;显示价按「真实定价×客户折扣」计算,跑产线即消费、即记账。",
|
||||
"平台待办中枢": "平台待办中枢",
|
||||
"全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。": "全局异步通知中枢:门禁、确认、上传等产线事件统一冒泡为人类待办,同一事项只发一次、处理完自动补位。",
|
||||
"PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。": "PM 审核、QC 质检、人工确认层层把关——机器的速度,人的判断,审计日志全程可追溯。",
|
||||
"安全与多租户": "安全与多租户",
|
||||
"RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。": "RBAC 细粒度路径权限、机构隔离、短令牌内部代理、登录审计与失败锁定。",
|
||||
"国际化与双主题": "国际化与双主题",
|
||||
"中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。": "中 / 英 / 日 / 韩四语实时切换,明暗双主题一键换装,桌面与手机 H5 同构。",
|
||||
"每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。": "每条产线都是一个完整的业务闭环:从情报输入到可交付产出,全程 Agent 推进、人类门禁把关。",
|
||||
"招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。": "招标情报采集 → 商机研判 → 研发报告 → 人工确认,把市场信号变成可跟进的商机。",
|
||||
"运行中": "运行中",
|
||||
"标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。": "标书智能编制:逐项应答评分标准、技术/商务分册生成、材料缺口清单、多轮 QC 门禁。",
|
||||
"SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。": "SDLC 任务链:需求 → 设计 → 开发 → 测试 → 部署,PM 审核门控 + 交付件管理。",
|
||||
"面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。": "面向 FOMS 的运维自动化:告警处置、巡检报告、变更编排。",
|
||||
"规划中": "规划中",
|
||||
"内容生产与投放自动化:素材生成、渠道分发、效果回收。": "内容生产与投放自动化:素材生成、渠道分发、效果回收。",
|
||||
"五步跑通一条产线": "五步跑通一条产线",
|
||||
"订阅产线": "订阅产线",
|
||||
"在产品商城选购产线订阅,账号权益即时生效。": "在产品商城选购产线订阅,账号权益即时生效。",
|
||||
"发起会话": "发起会话",
|
||||
"进入产线工作台,用一句话下达任务。": "进入产线工作台,用一句话下达任务。",
|
||||
"Agent 自主执行": "Agent 自主执行",
|
||||
"任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。": "任务拆解、模型调用、交付件产出全程自动推进,可随时插话纠偏。",
|
||||
"人类门禁": "人类门禁",
|
||||
"关键节点冒泡为平台待办,人看过正文再放行。": "关键节点冒泡为平台待办,人看过正文再放行。",
|
||||
"交付与记账": "交付与记账",
|
||||
"产出归档、按量出账,消费明细随时可查。": "产出归档、按量出账,消费明细随时可查。",
|
||||
"准备好把业务装上产线了吗?": "准备好把业务装上产线了吗?",
|
||||
"注册账号,订阅第一条产线,让 Agent 今天就开始干活。": "注册账号,订阅第一条产线,让 Agent 今天就开始干活。",
|
||||
"立即注册": "立即注册",
|
||||
"© 2026 开元云(北京)科技有限公司": "© 2026 开元云(北京)科技有限公司",
|
||||
"登录": "登录",
|
||||
"可行性研究": "可行性研究",
|
||||
"调研": "调研",
|
||||
"需求挖掘立项": "需求挖掘立项",
|
||||
"市场需求": "市场需求",
|
||||
"共性需求": "共性需求",
|
||||
"需求规格": "需求规格",
|
||||
"架构与可行性": "架构与可行性",
|
||||
"FP与成本": "FP与成本",
|
||||
"商业价值": "商业价值",
|
||||
"风险": "风险",
|
||||
"结论建议": "结论建议",
|
||||
"产线矩阵": "产线矩阵"
|
||||
}
|
||||
1719
wwwroot/index.ui
1719
wwwroot/index.ui
File diff suppressed because it is too large
Load Diff
@ -38,7 +38,7 @@
|
||||
{
|
||||
"widgettype": "Text",
|
||||
"options": {
|
||||
"text": "欢迎使用产线平台",
|
||||
"otext": "欢迎使用产线平台", "text": "欢迎使用产线平台", "i18n": true,
|
||||
"cfontsize": 0.8,
|
||||
"color": "#94a3b8"
|
||||
}
|
||||
|
||||
@ -13,7 +13,8 @@
|
||||
var n = (d && d.count) || 0;
|
||||
var b = bricks.getWidgetById && bricks.getWidgetById('todo_badge', bricks.app);
|
||||
if (b && b.text_w) {
|
||||
b.text_w.set_text(n > 0 ? ('🔔 待办 ' + n) : '🔔 待办');
|
||||
var _t = function(s, o){ return (bricks.app && bricks.app.i18n) ? bricks.app.i18n._(s, o) : s; };
|
||||
b.text_w.set_text(n > 0 ? _t('🔔 待办 ${n}', {n: n}) : _t('🔔 待办'));
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user