export default {
  translation: {
    common: {
      confirm: '확인',
      back: '뒤로',
      noResults: '결과를 찾을 수 없습니다',
      selectPlaceholder: '값 선택',
      selectAll: '전체 선택',
      delete: '삭제',
      deleteModalTitle: '정말 삭제하시겠습니까?',
      deleteThem: '정말 삭제하시겠습니까?',
      ok: '확인',
      cancel: '취소',
      yes: '예',
      no: '아니오',
      total: '전체',
      rename: '이름 변경',
      name: '이름',
      save: '저장',
      namePlaceholder: '이름을 입력하세요',
      descriptionPlaceholder: '설명을 입력하세요',
      next: '다음',
      create: '만들기',
      edit: '편집',
      upload: '업로드',
      english: 'English',
      portugueseBr: 'Portuguese (Brazil)',
      chinese: '简体中文',
      traditionalChinese: '繁體中文',
      russian: 'Русский',
      indonesian: 'Bahasa Indonesia',
      indonesia: 'Bahasa Indonesia',
      spanish: 'Español',
      vietnamese: 'Tiếng Việt',
      japanese: '日本語',
      german: 'Deutsch',
      french: 'Français',
      italian: 'Italiano',
      bulgarian: 'Български',
      arabic: 'العربية',
      turkish: 'Türkçe',
      korean: '한국어',
      language: '언어',
      languageMessage: '언어를 입력해 주세요',
      languagePlaceholder: '언어를 선택하세요',
      copy: '복사',
      copied: '복사됨',
      viewMore: '더 보기',
      viewLess: '접기',
      comingSoon: '준비 중',
      download: '다운로드',
      close: '닫기',
      preview: '미리보기',
      move: '이동',
      warn: '경고',
      action: '작업',
      s: 'S',
      pleaseSelect: '선택해 주세요',
      pleaseInput: '입력해 주세요',
      submit: '적용',
      clear: '초기화',
      embedIntoSite: '웹페이지에 임베드',
      openInNewTab: '새 탭에서 열기',
      previousPage: '이전',
      nextPage: '다음',
      previous: '이전',
      add: '추가',
      remove: '제거',
      search: '검색',
      noDataFound: '데이터를 찾을 수 없습니다',
      noData: '사용 가능한 데이터가 없습니다',
      promptPlaceholder: `입력하거나 /를 사용하여 변수를 빠르게 삽입하세요.`,
      mcp: {
        namePlaceholder: '내 MCP 서버',
        nameRequired:
          '1~64자이어야 하며 영문자, 숫자, 하이픈, 밑줄만 사용할 수 있습니다.',
        urlPlaceholder: 'https://api.example.com/v1/mcp',
        tokenPlaceholder: '예: eyJhbGciOiJIUzI1Ni...',
      },
      selected: '선택됨',
      seeAll: '전체 보기',
      bulkOperate: '일괄 작업',
      owner: '소유자',
      running: '실행 중...',
    },
    login: {
      loginTitle: '계정에 로그인',
      signUpTitle: '계정 만들기',
      login: '로그인',
      signUp: '회원가입',
      loginDescription: '다시 만나서 반갑습니다!',
      registerDescription: '가입을 환영합니다!',
      emailLabel: '이메일',
      emailPlaceholder: '이메일을 입력하세요',
      passwordLabel: '비밀번호',
      passwordPlaceholder: '비밀번호를 입력하세요',
      rememberMe: '로그인 상태 유지',
      signInTip: '계정이 없으신가요?',
      signUpTip: '이미 계정이 있으신가요?',
      nicknameLabel: '닉네임',
      nicknamePlaceholder: '닉네임을 입력하세요',
      register: '계정 만들기',
      continue: '계속',
      title: 'LLM 컨텍스트 구축을 위한 최고의 RAG 엔진',
      start: '시작하기',
      description:
        '무료로 가입하여 최고의 RAG 기술을 경험해 보세요. 데이터셋과 AI를 만들어 비즈니스를 강화하세요.',
      review: '500개 이상의 리뷰',
      seeAll: '전체 보기',
    },
    header: {
      knowledgeBase: '데이터셋',
      chat: '채팅',
      register: '회원가입',
      signin: '로그인',
      home: '홈',
      setting: '사용자 설정',
      logout: '로그아웃',
      fileManager: '파일',
      skills: '스킬',
      flow: '에이전트',
      search: '검색',
      welcome: '환영합니다,',
      dataset: '데이터셋',
      memories: '메모리',
    },
    skills: {
      title: '스킬',
      selectSpace: '시작할 스킬 공간을 선택하세요',
      spacePlaceholder: '공간 이름 입력',
      createSpace: '스킬 공간 만들기',
      createSpaceTitle: '새 스킬 공간 만들기',
      createSpaceDescription: '스킬을 구성하고 관리할 새 공간을 만드세요.',
      spaceName: '공간 이름',
      spaceNamePlaceholder: '예: my-space',
      spaceNameRequired: '공간 이름을 입력해 주세요',
      noSpaces: '스킬 공간이 없습니다. 첫 번째 공간을 만들어 보세요!',
      enterSpace: '입장',
      spaceCreated: '스킬 공간이 생성되었습니다',
      spaceDeleted: '스킬 공간이 삭제되었습니다',
      fetchError: '스킬을 불러오지 못했습니다',
      deleteSpaceTitle: '스킬 공간 삭제',
      deleteSpaceDescription:
        '이 스킬 공간을 삭제하시겠습니까? 이 작업은 취소할 수 없으며 공간 내 모든 스킬이 영구적으로 삭제됩니다.',
      deleteSpaceName: '공간 이름',
      uploadSuccess: '스킬이 업로드되었습니다',
      uploadError: '스킬 업로드에 실패했습니다',
      deleteSuccess: '스킬이 삭제되었습니다',
      deleteError: '스킬 삭제에 실패했습니다',
      skillExists:
        '같은 이름의 스킬이 이미 존재합니다. 먼저 삭제하거나 다른 이름을 사용해 주세요.',
      uploadSkill: '스킬 업로드',
      searchPlaceholder: '스킬 검색...',
      noSkills: '스킬이 없습니다. 첫 번째 스킬을 업로드하세요.',
      noSearchResults: '검색 결과에 맞는 스킬이 없습니다',
      filesCount: '파일 {{count}}개',
      foldersCount: '폴더 {{count}}개',
      pageInfo: '{{total}} 페이지 중 {{current}} 페이지',
      totalSkills: '전체 스킬 {{total}}개',
      backToSkills: '스킬 목록으로',
      selectFileToView: '파일을 선택하여 보기',
      skillName: '스킬 이름',
      skillNamePlaceholder: '예: my-awesome-skill',
      skillNameHelp: '영문자, 숫자, 하이픈, 밑줄만 사용 가능합니다',
      source: '소스',
      version: '버전',
      skillVersion: '버전',
      skillVersionPlaceholder: '예: 1.0.0',
      versionFormatHelp: '버전은 semver 형식이어야 합니다 (예: 1.0.0)',
      versionRequired: '버전을 입력해 주세요',
      selectFilesOrFolder: '파일 또는 폴더 선택',
      uploadDescription:
        '스킬 파일을 업로드하세요. 파일을 드래그 앤 드롭하거나 폴더를 선택할 수 있습니다.',
      selectFolder: '폴더 선택',
      dragFilesHint: '또는 아래로 파일을 드래그하세요',
      dragFilesTitle: '스킬 폴더를 여기에 드래그하세요',
      dragFilesDescription:
        '스킬 폴더를 여기에 드래그 앤 드롭하거나 아래의 "폴더 선택" 버튼을 사용하세요.',
      filesSelected: '파일 {{count}}개 선택됨',
      uploading: '업로드 중...',
      files: '파일',
      noFiles: '파일 없음',
      versionHistory: '버전 히스토리',
      selectVersion: '미리 볼 버전 선택',
      latest: '최신',
      metadata: {
        basic: '기본 정보',
        emoji: '이모지',
        skillKey: '스킬 키',
        always: '항상 활성',
        primaryEnv: '기본 환경 변수',
        requires: '요구사항',
        requiredBins: '필수 바이너리',
        requiredEnv: '필수 환경 변수',
        anyBins: '최소 하나 필요',
        install: '의존성',
        links: '링크',
        homepage: '홈페이지',
        repository: '저장소',
        documentation: '문서',
      },
      validation: {
        missing_skill_md:
          '유효하지 않은 스킬: SKILL.md를 찾을 수 없습니다. 스킬 디렉토리에 유효한 SKILL.md 파일이 있는지 확인해 주세요.',
        invalid_frontmatter:
          '유효하지 않은 스킬: SKILL.md에 유효한 frontmatter(---으로 시작하고 끝나야 함)가 있어야 합니다.',
        missing_name:
          '유효하지 않은 스킬: SKILL.md frontmatter에 "name" 필드가 포함되어야 합니다.',
        invalid_name_format:
          '유효하지 않은 스킬: "name"은 소문자 및 URL 안전 문자(영문자, 숫자, 하이픈)여야 합니다.',
        invalid_version:
          '유효하지 않은 스킬: "version"은 유효한 semver 형식이어야 합니다 (예: 1.0.0).',
        invalid_metadata:
          '유효하지 않은 스킬: metadata에 유효하지 않은 필드가 있습니다.',
        invalid_file_type: '유효하지 않은 스킬: 텍스트 기반 파일만 허용됩니다.',
        invalid_path:
          '유효하지 않은 스킬: 파일 경로에 유효하지 않은 문자가 포함되어 있습니다.',
        file_too_large:
          '유효하지 않은 스킬: 개별 파일 크기가 5MB 제한을 초과합니다.',
        total_size_exceeded:
          '유효하지 않은 스킬: 전체 번들 크기가 50MB 제한을 초과합니다.',
        no_files: '선택된 파일이 없습니다. 스킬 폴더를 선택해 주세요.',
        noValidFiles:
          '유효한 파일을 찾을 수 없습니다. 선택 항목을 확인해 주세요.',
        junkFilesFound:
          '임시 파일이 감지되었습니다 (예: .DS_Store). 업로드 전에 제거해 주세요.',
        read_failed:
          '유효하지 않은 스킬: SKILL.md 파일을 읽는 데 실패했습니다.',
        invalid: '유효하지 않은 스킬 형식입니다.',
        valid: '유효한 스킬 형식입니다. 업로드 준비가 완료되었습니다.',
        versionExists:
          '이 버전이 이미 존재합니다. 다른 버전 번호를 사용해 주세요.',
        error: '유효성 검사 실패',
      },
      parsedMetadata: 'SKILL.md에서 파싱됨:',
      addSkill: '스킬 추가',
      upload: '업로드',
      importFromGit: 'Git에서 가져오기',
      gitPlatform: '플랫폼',
      repoUrl: '저장소 URL',
      repoUrlHelp: '선택적 경로가 포함된 저장소 URL을 지원합니다',
      accessToken: '액세스 토큰',
      githubTokenHelp:
        '비공개 저장소 또는 더 높은 요청 제한을 위해 필요합니다 (5000 req/시간)',
      giteeTokenHelp:
        '비공개 저장소 또는 더 높은 요청 제한을 위해 필요합니다 (2000 req/시간)',
      rateLimitInfo: '요청 제한 정보',
      githubRateLimit:
        '공개 저장소: IP당 60 req/시간. 토큰 사용 시 5000 req/시간.',
      giteeRateLimit:
        '공개 저장소: IP당 1000 req/시간. 토큰 사용 시 2000 req/시간.',
      import: '가져오기',
      importing: '가져오는 중...',
      configureSearch: '검색 설정',
    },
    skillSearch: {
      configTitle: '스킬 검색 설정',
      configDesc: '스킬의 인덱싱 및 검색 방식을 설정합니다',
      embeddingModel: 'Embedding 모델',
      embeddingModelPlaceholder: 'Embedding 모델 선택',
      vectorSimilarityWeight: '벡터 유사도 가중치',
      similarityThreshold: '유사도 임계값',
      topK: 'Top K 결과',
      indexFields: '인덱스 필드',
      indexFieldsDesc: '검색 인덱스에 포함할 필드를 선택하세요',
      fieldName: '이름',
      fieldNameDesc: '스킬 이름',
      fieldTags: '태그',
      fieldTagsDesc: '스킬 태그',
      fieldDescription: '설명',
      fieldDescriptionDesc: '스킬 설명',
      fieldContent: '내용',
      fieldContentDesc: '스킬 내용 (예: README)',
      weight: '가중치',
      pureVector: '벡터만',
      hybrid: '하이브리드',
      keyword: '키워드',
      vector: '벡터',
      keywordOnly: '키워드만',
      balanced: '균형',
      vectorOnly: '벡터만',
      reindex: '전체 재인덱스',
      reindexing: '재인덱스 중...',
      reindexSuccess: '재인덱스 완료',
      pleaseSelectEmbeddingModel: 'Embedding 모델을 선택해 주세요',
      saveSuccess: '저장되었습니다',
      saveError: '저장에 실패했습니다',
      semanticSearchPlaceholder: '의미로 스킬 검색...',
      switchToSemantic: '시맨틱 검색으로 전환',
      switchToLocal: '로컬 검색으로 전환',
    },
    memories: {
      llmTooltip:
        '대화 내용을 분석하여 핵심 정보를 추출하고, 구조화된 메모리 요약을 생성합니다.',
      embeddingModelTooltip:
        '텍스트를 수치 벡터로 변환하여 의미 유사도 검색 및 메모리 검색에 활용합니다.',
      embeddingModelError: '메모리 유형은 필수이며 "raw"는 삭제할 수 없습니다.',
      memoryTypeTooltip: `Raw: 사용자와 에이전트 간의 원본 대화 내용 (기본 필수)\nSemantic: 사용자와 세계에 대한 일반 지식 및 사실\nEpisodic: 특정 이벤트와 경험의 타임스탬프 기록\nProcedural: 학습된 스킬, 습관 및 자동화된 절차`,
      raw: 'raw',
      semantic: 'semantic',
      episodic: 'episodic',
      procedural: 'procedural',
      editName: '이름 편집',
      memory: '메모리',
      createMemory: '메모리 만들기',
      name: '이름',
      memoryNamePlaceholder: '메모리 이름',
      memoryType: '메모리 유형',
      embeddingModel: 'Embedding 모델',
      selectModel: '모델 선택',
      llm: 'LLM',
      delMemoryWarn: `삭제 후에는 이 메모리의 모든 메시지가 삭제되며 에이전트가 검색할 수 없습니다.`,
    },
    memory: {
      taskLogDialog: {
        title: '메모리',
        startTime: '시작 시간',
        status: '상태',
        details: '세부 정보',
        success: '성공',
        running: '실행 중',
        failed: '실패',
      },
      messages: {
        forget: '잊기',
        forgetMessageTip: '정말 잊으시겠습니까?',
        messageDescription:
          '메모리 추출은 고급 설정의 프롬프트와 Temperature로 구성됩니다.',
        copied: '복사됨!',
        contentEmbed: '내용 Embed',
        content: '내용',
        delMessageWarn: `잊은 후에는 이 메시지를 에이전트가 검색할 수 없습니다.`,
        forgetMessage: '메시지 잊기',
        sessionId: '세션 ID',
        agent: '에이전트',
        type: '유형',
        validDate: '유효 날짜',
        forgetAt: '잊는 시간',
        source: '소스',
        enable: '활성화',
        action: '작업',
      },
      config: {
        descriptionPlaceholder: '메모리에 대한 설명을 작성해 주세요',
        memorySizeTooltip: `각 메시지의 내용 + 임베딩 벡터를 포함합니다 (≈ 내용 + 차원 × 8 바이트).\n예: 1024차원 임베딩을 사용하는 1KB 메시지는 약 9KB입니다. 5MB 기본 제한은 약 500개의 메시지를 담을 수 있습니다.`,
        avatar: '아바타',
        description: '설명',
        memorySize: '메모리 크기',
        advancedSettings: '고급 설정',
        permission: '권한',
        onlyMe: '나만',
        team: '팀',
        storageType: '저장소 유형',
        storageTypePlaceholder: '저장소 유형을 선택해 주세요',
        forgetPolicy: '메모리 망각 정책',
        temperature: 'Temperature',
        systemPrompt: '시스템 프롬프트',
        systemPromptPlaceholder: '시스템 프롬프트를 입력해 주세요',
        userPrompt: '사용자 프롬프트',
        userPromptPlaceholder: '사용자 프롬프트를 입력해 주세요',
      },
      sideBar: {
        messages: '메시지',
        configuration: '설정',
      },
    },
    knowledgeList: {
      welcome: '어서 오세요',
      description: '오늘은 어떤 데이터셋을 사용하시겠습니까?',
      createKnowledgeBase: '데이터셋 만들기',
      name: '이름',
      namePlaceholder: '이름을 입력해 주세요.',
      doc: '문서',
      searchKnowledgePlaceholder: '검색',
      noMoreData: `전부입니다. 더 이상 없습니다.`,
      parserRequired: 'Chunk 방법을 선택해 주세요',
      dataFlowRequired: '데이터 흐름을 선택해 주세요',
    },
    knowledgeDetails: {
      metadata: {
        fields: '필드',
        selectFiles: '{{count}}개 파일 선택됨',
        fieldNameInvalid: '필드 이름은 영문자 또는 밑줄만 포함할 수 있습니다.',
        builtIn: '기본 제공',
        generation: '생성',
        toMetadataSetting: '생성 설정',
        toMetadataSettingTip: '설정에서 자동 메타데이터를 구성하세요.',
        descriptionTip:
          'LLM이 이 필드의 값을 추출하도록 설명 또는 예시를 제공하세요. 비워두면 필드 이름에 의존합니다.',
        restrictDefinedValuesTip:
          '열거형 모드: LLM 추출을 사전 설정된 값으로만 제한합니다. 아래에서 값을 정의하세요.',
        valueExists:
          '값이 이미 존재합니다. 중복된 항목을 병합하고 관련 파일을 모두 합칠까요?',
        fieldNameExists:
          '필드 이름이 이미 존재합니다. 중복된 항목을 병합하고 관련 파일을 모두 합칠까요?',
        valueSingleExists: '값이 이미 존재합니다. 중복된 항목을 병합할까요?',
        fieldSingleNameExists:
          '필드 이름이 이미 존재합니다. 중복된 항목을 병합할까요?',
        fieldExists: '필드가 이미 존재합니다.',
        fieldSetting: '필드 설정',
        changesAffectNewParses: '변경 사항은 새로 파싱되는 항목에만 적용됩니다',
        // editMetadataForDataset: 'View and edit metadata for ',
        restrictDefinedValues: '정의된 값으로 제한',
        metadataGenerationSettings: '메타데이터 생성 설정',
        // manageMetadataForDataset: 'Manage metadata for this dataset',
        manageMetadata: '메타데이터 관리',
        metadata: '메타데이터',
        values: '값 목록',
        value: '값',
        action: '작업',
        field: '필드',
        type: '타입',
        description: '설명',
        fieldName: '필드 이름',
        editMetadata: '메타데이터 편집',
        addMetadata: '메타데이터 추가',
        deleteWarn: '이 {{field}}은(는) 연결된 모든 파일에서 제거됩니다',
        deleteManageFieldAllWarn:
          '선택한 필드와, 필드에 연관된 값들이 모든 파일에서 삭제됩니다.',
        deleteManageValueAllWarn: '선택한 값이 모든 파일에서 삭제됩니다.',
        deleteManageFieldSingleWarn:
          '선택한 필드와, 필드에 연관된 값들이 이 파일에서 삭제됩니다.',
        deleteManageValueSingleWarn: '선택한 값이 이 파일에서 삭제됩니다.',
        deleteSettingFieldWarn: `이 필드는 삭제되지만 기존 메타데이터에는 영향을 주지 않습니다.`,
        deleteSettingValueWarn: `이 값은 삭제되지만 기존 메타데이터에는 영향을 주지 않습니다.`,
      },
      redoAll: '기존 chunk 초기화',
      applyAutoMetadataSettings: '전역 자동 메타데이터 설정 적용',
      parseFileTip: '파싱을 진행하시겠습니까?',
      parseFile: '파일 파싱',
      emptyMetadata: '메타데이터 없음',
      metadataField: '메타데이터 필드',
      systemAttribute: '시스템 속성',
      localUpload: '로컬 업로드',
      fileSize: '파일 크기',
      fileType: '파일 유형',
      uploadedBy: '업로더',
      notGenerated: '생성되지 않음',
      generatedOn: '생성 날짜: ',
      subbarFiles: '파일',
      generateKnowledgeGraph:
        '데이터셋의 모든 문서에서 엔티티와 관계를 추출합니다. 완료까지 시간이 걸릴 수 있습니다.',
      generateRaptor:
        '문서 chunk의 재귀적 클러스터링 및 요약을 수행하여 계층적 트리 구조를 구축하고, 긴 문서에서 맥락을 더욱 고려한 검색을 가능하게 합니다.',
      generate: '생성',
      raptor: 'RAPTOR',
      processingType: '처리 유형',
      dataPipeline: '수집 파이프라인 설정',
      dataPipelineTitle: '수집 파이프라인',
      operations: '작업',
      taskId: '작업 ID',
      duration: '소요 시간',
      details: '세부 정보',
      status: '상태',
      task: '작업',
      startDate: '시작 날짜',
      source: '소스',
      fileName: '파일 이름',
      datasetLogs: '데이터셋',
      fileLogs: '파일',
      overview: '로그',
      success: '성공',
      failed: '실패',
      completed: '완료',
      datasetLog: '데이터셋 로그',
      created: '생성됨',
      learnMore: '기본 제공 파이프라인 소개',
      general: '일반',
      chunkMethodTab: 'Chunk 방법',
      testResults: '결과',
      testSetting: '설정',
      retrievalTesting: '검색 테스트',
      retrievalTestingDescription:
        'RAGFlow가 LLM에 전달하고자 하는 내용을 정확히 가져올 수 있는지 확인하는 검색 테스트를 실행하세요.',
      Parse: '파싱',
      dataset: '데이터셋',
      testing: '검색 테스트',
      files: '파일',
      configuration: '설정',
      knowledgeGraph: '지식 그래프',
      name: '이름',
      namePlaceholder: '이름을 입력해 주세요',
      doc: '문서',
      datasetDescription:
        'AI 채팅을 시작하기 전, 파일 파싱이 완료될 때까지 기다려 주세요.',
      addFile: '파일 추가',
      searchFiles: '파일 검색',
      localFiles: '로컬 파일',
      emptyFiles: '빈 파일 만들기',
      webCrawl: '웹 크롤',
      chunkNumber: 'Chunk',
      uploadDate: '업로드 날짜',
      chunkMethod: 'Chunking 방법',
      enabled: '활성화',
      disabled: '비활성화',
      action: '작업',
      parsingStatus: '파싱 상태',
      parsingStatusTip:
        '문서 파싱 시간은 여러 요소에 따라 달라집니다. 지식 그래프, RAPTOR, 자동 질문 추출, 자동 키워드 추출 등의 기능을 활성화하면 처리 시간이 크게 늘어납니다. 진행 표시줄이 멈추면 다음 FAQ를 참고하세요: https://ragflow.io/docs/dev/faq#why-does-my-document-parsing-stall-at-under-one-percent.',
      processBeginAt: '시작 시간',
      processDuration: '소요 시간',
      progressMsg: '진행 상황',
      noTestResultsForRuned:
        '관련 결과를 찾을 수 없습니다. 쿼리나 파라미터를 조정해 보세요.',
      noTestResultsForNotRuned:
        '아직 테스트가 실행되지 않았습니다. 결과가 여기에 표시됩니다.',
      testingDescription:
        'RAGFlow가 LLM에 전달하고자 하는 내용을 정확히 가져올 수 있는지 확인하는 검색 테스트를 실행하세요. 키워드 유사도 가중치나 유사도 임계값 등 기본 설정을 조정하여 최적의 결과를 얻었다면, 해당 변경 사항은 자동으로 저장되지 않으므로 채팅 어시스턴트 설정 또는 검색 에이전트 컴포넌트 설정에 적용해야 합니다.',
      similarityThreshold: '유사도 임계값',
      similarityThresholdTip:
        'RAGFlow는 검색 시 가중 키워드 유사도와 가중 벡터 코사인 유사도, 또는 가중 키워드 유사도와 가중 rerank 점수의 조합을 사용합니다. 이 파라미터는 사용자 쿼리와 chunk 간 유사도 임계값을 설정합니다.\n이 임계값보다 낮은 유사도 점수를 가진 chunk는 결과에서 제외됩니다. 기본 임계값은 0.2이며, 하이브리드 유사도 점수가 20 이상인 chunk만 검색됩니다.',
      vectorSimilarityWeight: '벡터 유사도 가중치',
      vectorSimilarityWeightTip:
        '벡터 코사인 유사도 또는 rerank 점수와 함께 사용되는 결합 유사도 점수에서 키워드 유사도의 가중치를 설정합니다. 두 가중치의 합은 1.0이어야 합니다.',
      keywordSimilarityWeight: '키워드 유사도 가중치',
      keywordSimilarityWeightTip:
        '벡터 코사인 유사도 또는 rerank 점수와 함께 사용되는 결합 유사도 점수에서 키워드 유사도의 가중치를 설정합니다. 두 가중치의 합은 1.0이어야 합니다.',
      testText: '테스트 텍스트',
      testTextPlaceholder: '질문을 입력하세요',
      testingLabel: '실행',
      similarity: '하이브리드 유사도',
      termSimilarity: '용어 유사도',
      vectorSimilarity: '벡터 유사도',
      hits: '검색 결과',
      view: '보기',
      filesSelected: '파일 선택됨',
      upload: '업로드',
      run: '파싱',
      runningStatus0: '대기 중',
      runningStatus1: '파싱 중',
      runningStatus2: '취소됨',
      runningStatus3: '성공',
      runningStatus4: '실패',
      pageRanges: '페이지 범위',
      pageRangesTip:
        '파싱할 페이지 범위를 지정합니다. 범위 밖의 페이지는 처리되지 않습니다.',
      fromPlaceholder: '시작',
      fromMessage: '시작 페이지 번호를 입력해 주세요',
      toPlaceholder: '끝',
      toMessage: '끝 페이지 번호를 입력해 주세요 (끝 번호는 포함되지 않습니다)',
      layoutRecognize: 'PDF 파서',
      layoutRecognizeTip:
        '비전 모델을 사용하여 PDF 레이아웃을 분석하고 문서 제목, 텍스트 블록, 이미지 및 표를 효과적으로 찾습니다. Naive 옵션을 선택하면 PDF의 일반 텍스트만 검색됩니다. 이 옵션은 현재 PDF 문서에만 적용됩니다.',
      taskPageSize: '작업 페이지 크기',
      taskPageSizeMessage: '작업 페이지 크기를 입력해 주세요',
      taskPageSizeTip: `레이아웃 인식 중 PDF 파일은 처리 속도를 높이기 위해 chunk로 분할되어 병렬로 처리됩니다. 이 파라미터는 각 chunk의 크기를 설정합니다. chunk 크기가 클수록 페이지 간에 연속적인 텍스트가 분리될 가능성이 낮아집니다.`,
      addPage: '페이지 추가',
      greaterThan: '현재 값은 끝 값보다 커야 합니다',
      greaterThanPrevious: '현재 값은 이전 끝 값보다 커야 합니다',
      selectFiles: '파일 선택',
      changeSpecificCategory: '특정 카테고리 변경',
      uploadTitle: '파일을 여기에 드래그 앤 드롭하여 업로드',
      uploadDescription:
        '단일 또는 일괄 파일 업로드를 지원합니다. 로컬 배포 RAGFlow의 경우: 업로드당 총 파일 크기 제한은 1GB이며, 일괄 업로드 제한은 32개 파일입니다. 계정당 총 파일 수에는 제한이 없습니다. cloud.ragflow.io의 경우: 업로드당 총 파일 크기 제한은 10MB이며, 각 파일은 10MB를 초과할 수 없고 계정당 최대 128개 파일입니다.',
      chunk: 'Chunk',
      bulk: '일괄',
      cancel: '취소',
      close: '닫기',
      rerankModel: 'Rerank 모델',
      rerankPlaceholder: '값 선택',
      rerankTip: `선택 사항입니다. 비워두면 RAGFlow는 가중 키워드 유사도와 가중 벡터 코사인 유사도의 조합을 사용합니다. rerank 모델을 선택하면 가중 rerank 점수가 가중 벡터 코사인 유사도를 대체합니다. rerank 모델을 사용하면 시스템 응답 시간이 크게 증가합니다. rerank 모델을 사용하려면 SaaS reranker를 사용하거나, 로컬 배포 rerank 모델을 선호하는 경우 docker-compose-gpu.yml로 RAGFlow를 시작해야 합니다.`,
      topK: 'Top-K',
      topKTip: `Rerank 모델과 함께 사용하며, 지정된 reranking 모델로 전송할 텍스트 chunk 수를 정의합니다.`,
      delimiter: `텍스트 구분자`,
      delimiterTip:
        '구분자는 하나 또는 여러 특수 문자로 구성될 수 있습니다. 여러 문자인 경우 백틱(` `)으로 감싸야 합니다. 예를 들어 구분자를 \\n`##`;으로 설정하면 줄바꿈, 이중 해시 기호(##), 세미콜론에서 텍스트가 분리됩니다.',
      enableChildrenDelimiter: '하위 chunk를 검색에 사용',
      childrenDelimiter: '텍스트 구분자',
      childrenDelimiterTip:
        '구분자는 하나 또는 여러 특수 문자로 구성될 수 있습니다. 여러 문자인 경우 백틱(` `)으로 감싸야 합니다. 예를 들어 구분자를 \\n`##`;으로 설정하면 줄바꿈, 이중 해시 기호(##), 세미콜론에서 텍스트가 분리됩니다.',

      html4excel: 'Excel을 HTML로',
      html4excelTip: `일반 chunking 방법과 함께 사용합니다. 비활성화 시 데이터셋의 스프레드시트(XLSX 또는 XLS(Excel 97-2003))는 키-값 쌍으로 파싱됩니다. 활성화 시 HTML 표로 파싱되며, 원래 표가 12행을 초과하면 12행마다 분리됩니다. 자세한 내용은 https://ragflow.io/docs/dev/enable_excel2html 을 참조하세요.`,
      autoKeywords: '자동 키워드',
      autoKeywordsTip: `각 chunk에서 N개의 키워드를 자동으로 추출하여 해당 키워드가 포함된 쿼리에서의 순위를 높입니다. '설정'에서 지정된 인덱싱 모델이 추가 토큰을 소비합니다. chunk 목록에서 추가된 키워드를 확인하거나 업데이트할 수 있습니다. 자세한 내용은 https://ragflow.io/docs/dev/autokeyword_autoquestion 을 참조하세요.`,
      autoQuestions: '자동 질문',
      autoQuestionsTip: `각 chunk에서 N개의 질문을 자동으로 추출하여 해당 질문이 포함된 쿼리에서의 순위를 높입니다. chunk 목록에서 추가된 질문을 확인하거나 업데이트할 수 있습니다. 오류가 발생해도 chunking 과정에 영향을 주지 않으나, 원래 chunk에 빈 결과가 추가될 수 있습니다. '설정'에서 지정된 인덱싱 모델이 추가 토큰을 소비합니다. 자세한 내용은 https://ragflow.io/docs/dev/autokeyword_autoquestion 을 참조하세요.`,
      redo: '기존 {{chunkNum}}개의 chunk를 초기화하시겠습니까?',
      setMetaData: '메타데이터 설정',
      pleaseInputJson: 'JSON을 입력해 주세요',
      documentMetaTips: `<p>메타데이터는 JSON 형식입니다(검색 불가). 이 문서의 chunk가 프롬프트에 포함되면 LLM 프롬프트에 추가됩니다.</p>
<p>예시:</p>
<b>메타데이터:</b><br>
<code>
  {
      "Author": "Alex Dowson",
      "Date": "2024-11-12"
  }
</code><br>
<b>프롬프트 내용:</b><br>
<p>Document: the_name_of_document</p>
<p>Author: Alex Dowson</p>
<p>Date: 2024-11-12</p>
<p>Relevant fragments as following:</p>
<ul>
<li>  Here is the chunk content....</li>
<li>  Here is the chunk content....</li>
</ul>
`,
      metaData: '메타 데이터',
      deleteDocumentConfirmContent:
        '이 문서는 지식 그래프와 연결되어 있습니다. 삭제 후 관련 노드 및 관계 정보가 삭제되지만, 그래프는 즉시 업데이트되지 않습니다. 그래프 업데이트는 지식 그래프 추출 작업이 포함된 새 문서를 파싱하는 과정에서 수행됩니다.',
      plainText: 'Naive',
      reRankModelWaring: 'Re-rank 모델은 처리 시간이 매우 오래 걸립니다.',
    },
    knowledgeConfiguration: {
      randomSeedTip:
        'Seed는 의사 난수 알고리즘의 시작점으로, 여러 실행에서 동일한 출력을 재현할 수 있도록 합니다.',
      datasetDescription: '데이터셋을 설명하세요',
      overlappedPercentTip: '인접한 두 chunk 간의 겹침 비율',
      globalIndexModelTip:
        '지식 그래프, RAPTOR, 자동 메타데이터, 자동 키워드 및 자동 질문 생성에 사용됩니다. 모델 성능이 생성 품질에 영향을 줍니다.',
      globalIndexModel: '인덱싱 모델',
      settings: '설정',
      autoMetadataTip: `메타데이터를 자동으로 생성합니다. 파싱 시 새로 추가되는 파일에 적용되며, 기존 파일은 업데이트하려면 재파싱이 필요합니다(Chunk는 그대로 유지됩니다). 이때 '설정'에서 지정한 인덱싱 모델이 추가 토큰을 소비하니 참고하세요.`,
      imageTableContextWindow: '이미지 및 표 컨텍스트 윈도우',
      imageTableContextWindowTip:
        '이미지 및 표 위아래의 N개 토큰 텍스트를 캡처하여 더 풍부한 배경 컨텍스트를 제공합니다.',
      autoMetadata: '자동 메타데이터',
      mineruOptions: 'MinerU 옵션',
      mineruParseMethod: '파싱 방법',
      mineruParseMethodTip:
        'PDF 파싱 방법: auto (자동 감지), txt (텍스트 추출), ocr (광학 문자 인식)',
      mineruFormulaEnable: '수식 인식',
      mineruFormulaEnableTip:
        '수식 인식을 활성화합니다. 참고: 키릴 문자 문서에서는 올바르게 작동하지 않을 수 있습니다.',
      mineruTableEnable: '표 인식',
      mineruTableEnableTip: '표 인식 및 추출을 활성화합니다.',
      paddleocrOptions: 'PaddleOCR 옵션',
      paddleocrApiUrl: 'PaddleOCR API URL',
      paddleocrApiUrlTip: 'PaddleOCR 서비스의 API 엔드포인트 URL',
      paddleocrApiUrlPlaceholder:
        '예: https://paddleocr-server.com/layout-parsing',
      paddleocrAccessToken: 'AI Studio 액세스 토큰',
      paddleocrAccessTokenTip: 'PaddleOCR API용 액세스 토큰 (선택 사항)',
      paddleocrAccessTokenPlaceholder: 'AI Studio 토큰 (선택 사항)',
      paddleocrAlgorithm: 'PaddleOCR 알고리즘',
      paddleocrAlgorithmTip: 'PaddleOCR 파싱에 사용할 알고리즘',
      paddleocrSelectAlgorithm: '알고리즘 선택',
      paddleocrModelNamePlaceholder: '예: paddleocr-from-env-1',
      overlappedPercent: '겹침 비율(%)',
      generationScopeTip:
        'RAPTOR를 전체 데이터셋에 대해 생성할지, 단일 파일에 대해 생성할지 결정합니다.',
      scopeDataset: '데이터셋',
      generationScope: '생성 범위',
      scopeSingleFile: '단일 파일',
      autoParse: '자동 파싱',
      rebuildTip:
        '연결된 데이터 소스에서 파일을 다시 다운로드하여 재파싱합니다.',
      baseInfo: '기본 정보',
      globalIndex: '전역 인덱스',
      dataSource: '데이터 소스',
      linkSourceSetTip: '이 데이터셋과 데이터 소스 간의 연결을 관리합니다',
      linkDataSource: '데이터 소스 연결',
      tocExtraction: 'PageIndex',
      tocExtractionTip:
        '기존 chunk에 대해 계층적 목차(파일당 하나의 디렉토리)를 생성합니다. 쿼리 시 디렉토리 향상이 활성화되면 시스템이 대형 모델을 사용하여 사용자 질문과 관련된 디렉토리 항목을 결정하고 관련 chunk를 식별합니다.',
      deleteGenerateModalContent: `
        <p>생성된 <strong class='text-text-primary'>{{type}}</strong> 결과를 삭제하면
        이 데이터셋에서 파생된 모든 엔티티와 관계가 제거됩니다.
        원본 파일은 그대로 유지됩니다.<p>
        <br/>
        계속하시겠습니까?
      `,
      extractRaptor: 'RAPTOR 추출',
      extractKnowledgeGraph: '지식 그래프 추출',
      filterPlaceholder: '필터를 입력해 주세요',
      fileFilterTip: '',
      fileFilter: '파일 필터',
      setDefaultTip: '',
      setDefault: '기본값으로 설정',
      editLinkDataPipeline: '수집 파이프라인 편집',
      linkPipelineSetTip:
        '이 데이터셋과 수집 파이프라인 간의 연결을 관리합니다',
      default: '기본값',
      dataPipeline: '수집 파이프라인을 전환하거나 설정합니다.',
      linkDataPipeline: '수집 파이프라인 연결',
      enableAutoGenerate: '자동 생성 활성화',
      teamPlaceholder: '팀을 선택해 주세요.',
      dataFlowPlaceholder: '파이프라인을 선택해 주세요.',
      buildItFromScratch: '처음부터 만들기',
      dataFlow: '파이프라인',
      parseType: '파싱 유형',
      manualSetup: '파이프라인',
      builtIn: '기본 제공',
      titleDescription: 'LLM 및 프롬프트를 포함한 데이터셋에 대해 설정합니다.',
      name: '데이터셋 이름',
      photo: '데이터셋 사진',
      photoTip: '최대 4MB의 이미지를 업로드할 수 있습니다.',
      description: '설명',
      language: '문서 언어',
      languageMessage: '언어를 입력해 주세요',
      languagePlaceholder: '언어를 입력해 주세요',
      permissions: '권한',
      embeddingModel: 'Embedding 모델',
      chunkTokenNumber: '권장 chunk 크기',
      chunkTokenNumberMessage: '텍스트 chunk 토큰 수는 필수입니다',
      embeddingModelTip:
        '데이터셋에서 사용 중인 기본 임베딩 모델입니다. 데이터셋에 이미 chunk가 있는 상태에서 임베딩 모델을 변경하면, 시스템이 일부 chunk를 무작위로 샘플링해 호환성을 검사합니다. 새 모델로 해당 chunk를 다시 임베딩한 뒤 기존 벡터와의 코사인 유사도를 계산하며, 평균 유사도가 0.9 이상일 때만 모델 전환이 가능합니다. 기준을 충족하지 못하면, 데이터셋의 모든 chunk를 삭제한 후에만 모델을 변경할 수 있습니다.',
      permissionsTip:
        "'팀'으로 설정하면 모든 팀원이 데이터셋을 관리할 수 있습니다.",
      chunkTokenNumberTip:
        'Chunk 생성을 위한 토큰 임계값을 설정합니다. 이 임계값보다 토큰이 적은 세그먼트는 임계값을 초과할 때까지 다음 세그먼트와 결합되며, 그 시점에 chunk가 생성됩니다. 임계값을 초과하더라도 구분자가 나오지 않으면 새 chunk가 생성되지 않습니다.',
      chunkMethod: 'Chunking 방법',
      chunkMethodTip: '오른쪽의 안내를 참조하세요.',
      upload: '업로드',
      english: 'English',
      chinese: 'Chinese',
      portugueseBr: 'Portuguese (Brazil)',
      embeddingModelPlaceholder: 'Embedding 모델을 선택해 주세요.',
      chunkMethodPlaceholder: 'Chunking 방법을 선택해 주세요.',
      tableColumnMode: '컬럼 모드',
      tableColumnModeAuto: '자동',
      tableColumnModeManual: '수동',
      tableColumnModeAutoDescription:
        '모든 컬럼이 chunk 텍스트에 포함되고 메타데이터로 저장됩니다 (RAGFlow 기본값).',
      tableColumnRoles: '컬럼 역할',
      tableColumnRolesTip:
        'Chunk 텍스트에 포함할 컬럼(벡터 및 전문 검색용 인덱싱), 메타데이터에만 포함할 컬럼(필터링 가능), 또는 둘 다를 선택합니다. 변경 사항은 새 파싱에 적용되며, 기존 문서에 적용하려면 재파싱이 필요합니다.',
      tableColumnRoleIndexing: '인덱싱',
      tableColumnRoleMetadata: '메타데이터',
      tableColumnRoleBoth: '둘 다',
      tableColumnRolesEmpty:
        'CSV 또는 Excel 파일을 업로드하고 파싱하여 컬럼 역할 설정을 시작하세요.',
      tableColumnRolesReparseTip:
        '새 컬럼 역할을 적용하려면 기존 문서를 재파싱하세요.',
      parserLabel: {
        naive: '일반',
        qa: 'Q&A',
        resume: '이력서',
        manual: '매뉴얼',
        table: '표',
        paper: '논문',
        book: '도서',
        laws: '법률',
        presentation: '프레젠테이션',
        picture: '이미지',
        one: '단일',
        audio: '오디오',
        email: '이메일',
        tag: '태그',
      },
      save: '저장',
      me: '나만',
      team: '팀',
      cancel: '취소',
      methodTitle: 'Chunking 방법 설명',
      methodExamples: '예시',
      methodExamplesDescription: '다음 스크린샷은 설명을 위해 제공됩니다.',
      dialogueExamplesTitle: '보기',
      methodEmpty: '데이터셋 카테고리에 대한 시각적 설명이 여기에 표시됩니다',
      book: `<p>지원 파일 형식: <b>DOCX</b>, <b>PDF</b>, <b>TXT</b>.</p><p>
      PDF 도서의 경우 불필요한 정보를 제거하고 분석 시간을 줄이기 위해 <i>페이지 범위</i>를 설정하세요.</p>`,
      laws: `<p>지원 파일 형식: <b>DOCX</b>, <b>PDF</b>, <b>TXT</b>.</p><p>
      법률 문서는 일반적으로 엄격한 작성 형식을 따릅니다. 텍스트 특성을 사용하여 분할 지점을 식별합니다.
      </p><p>
      chunk는 '조'와 일치하는 세분화 단위를 가지며, 모든 상위 수준 텍스트가 chunk에 포함됩니다.
      </p>`,
      manual: `<p><b>PDF</b>만 지원됩니다.</p><p>
      매뉴얼이 계층적 섹션 구조를 가지고 있다고 가정하며, 가장 낮은 섹션 제목을 기본 chunking 단위로 사용합니다. 따라서 같은 섹션 내의 그림과 표는 분리되지 않으므로 chunk 크기가 커질 수 있습니다.
      </p>`,
      naive: `<p>지원 파일 형식: <b>MD, MDX, DOCX, XLSX, XLS (Excel 97-2003), PPTX, PDF, TXT, JPEG, JPG, PNG, TIF, GIF, CSV, JSON, EML, HTML</b>.</p>
      <p>이 방법은 'naive' 방식으로 파일을 chunk합니다: </p>
      <p>
      <ul>
      <li>비전 감지 모델을 사용하여 텍스트를 더 작은 세그먼트로 분할합니다.</li>
      <li>그런 다음 '텍스트 chunk 토큰 수'에서 지정한 임계값을 초과할 때까지 인접 세그먼트를 결합하여 chunk를 생성합니다.</li></ul></p>`,
      paper: `<p><b>PDF</b> 파일만 지원됩니다.</p><p>
      논문은 <i>abstract, 1.1, 1.2</i> 등 섹션별로 분할됩니다. </p><p>
      이 방식은 LLM이 논문을 더 효과적으로 요약하고 더 포괄적이고 이해하기 쉬운 응답을 제공할 수 있게 합니다.
      그러나 AI 대화의 컨텍스트가 증가하고 LLM의 연산 비용이 늘어납니다. 따라서 대화 중에는 '<b>topN</b>' 값을 줄이는 것을 고려하세요.</p>`,
      presentation: `<p>지원 파일 형식: <b>PDF</b>, <b>PPTX</b>.</p><p>
      슬라이드의 모든 페이지가 chunk로 처리되며 썸네일 이미지가 저장됩니다.</p><p>
      <i>이 chunking 방법은 업로드된 모든 PPT 파일에 자동으로 적용되므로 수동으로 지정할 필요가 없습니다.</i></p>`,
      qa: `
      <p>
      이 chunking 방법은 <b>XLSX</b> 및 <b>CSV/TXT</b> 파일 형식을 지원합니다.
    </p>
    <ul>
    <li>
      파일이 <b>XLSX</b> 또는 <b>XLS (Excel 97-2003)</b> 형식인 경우, 헤더 없이 두 개의 컬럼을 포함해야 합니다: 하나는 질문용, 다른 하나는 답변용이며, 질문 컬럼이 답변 컬럼 앞에 와야 합니다. 컬럼이 올바르게 구성되어 있으면 여러 시트도 허용됩니다.
    </li>
    <li>
      파일이 <b>CSV/TXT</b> 형식인 경우, 질문과 답변을 구분하기 위해 TAB을 구분자로 사용하여 UTF-8로 인코딩되어야 합니다.
    </li>
    </ul>
    <p>
      <i>
        위 규칙을 따르지 않는 텍스트 줄은 무시되며,
        각 Q&A 쌍은 별도의 chunk로 처리됩니다.
      </i>
    </p>
      `,
      resume: `<p>지원 파일 형식: <b>DOCX</b>, <b>PDF</b>, <b>TXT</b>.
      </p><p>
      다양한 형식의 이력서를 파싱하여 채용 담당자의 후보자 검색을 용이하게 하는 구조화된 데이터로 정리합니다.
      </p>
      `,
      table: `<p>지원 파일 형식: <b>XLSX</b> 및 <b>CSV/TXT</b>.</p><p>
      전제 조건 및 팁:
      <ul>
    <li>CSV 또는 TXT 파일의 경우, 컬럼 간 구분자는 <em><b>TAB</b></em>이어야 합니다.</li>
    <li>첫 번째 행은 컬럼 헤더여야 합니다.</li>
    <li>컬럼 헤더는 LLM의 이해를 돕기 위해 의미 있는 용어여야 합니다.
    슬래시 <i>'/'</i>로 구분된 동의어를 나란히 배치하고, 괄호를 사용하여 값을 열거하는 것이 좋습니다. 예: <i>'성별/Gender (남, 여)'</i>.<p>
    헤더 예시:<ol>
        <li>공급업체/vendor<b>'TAB'</b>색상 (노란색, 파란색, 갈색)<b>'TAB'</b>성별/Gender (남, 여)<b>'TAB'</b>사이즈 (M, L, XL, XXL)</li>
        </ol>
        </p>
    </li>
    <li>표의 모든 행은 chunk로 처리됩니다.</li>
    </ul>`,
      picture: `
    <p>이미지 파일을 지원하며, 동영상 지원은 곧 제공될 예정입니다.</p><p>
    이 방법은 OCR 모델을 사용하여 이미지에서 텍스트를 추출합니다.
    </p><p>
    OCR 모델이 추출한 텍스트가 불충분하다고 판단되면 지정된 비전 LLM을 사용하여 이미지 설명을 제공합니다.
    </p>`,
      one: `
    <p>지원 파일 형식: <b>DOCX, XLSX, XLS (Excel 97-2003), PDF, TXT</b>.
    </p><p>
    이 방법은 각 문서 전체를 하나의 chunk로 처리합니다.
    </p><p>
    LLM이 해당 컨텍스트 길이를 처리할 수 있는 경우 전체 문서를 요약해야 할 때 적합합니다.
    </p>`,
      knowledgeGraph: `<p>지원 파일 형식: <b>DOCX, EXCEL, PPT, IMAGE, PDF, TXT, MD, JSON, EML</b>

<p>이 방법은 'naive'/'일반' 방식으로 파일을 chunk합니다. 문서를 세그먼트로 분할한 다음 '텍스트 chunk 토큰 수'에서 지정한 임계값을 초과할 때까지 인접 세그먼트를 결합하여 chunk를 생성합니다.</p>
<p>그런 다음 chunk를 LLM에 전달하여 지식 그래프와 마인드맵을 위한 엔티티와 관계를 추출합니다.</p>
<p><b>엔티티 유형</b>을 설정해야 합니다.</p>`,
      tag: `<p>'태그' chunking 방법을 사용하는 데이터셋은 태그 세트로 기능합니다. 다른 데이터셋은 이를 사용하여 chunk에 태그를 지정하며, 이 데이터셋에 대한 쿼리도 이 태그 세트를 사용하여 태그가 지정됩니다.</p>
<p>태그 세트는 RAG(Retrieval-Augmented Generation) 프로세스에 <b>직접 관여하지 않습니다</b>.</p>
<p>이 데이터셋의 각 chunk는 독립적인 설명-태그 쌍입니다.</p>
<p>지원 파일 형식: <b>XLSX</b> 및 <b>CSV/TXT</b>:</p>
<p>파일이 <b>XLSX</b> 형식인 경우, 헤더 없이 두 개의 컬럼을 포함해야 합니다: 하나는 태그 설명용, 다른 하나는 태그 이름용이며, 설명 컬럼이 태그 컬럼 앞에 와야 합니다. 컬럼이 올바르게 구성되어 있으면 여러 시트도 허용됩니다.</p>
<p>파일이 <b>CSV/TXT</b> 형식인 경우, 설명과 태그를 구분하기 위해 TAB을 구분자로 사용하여 UTF-8로 인코딩되어야 합니다.</p>
<p>태그 컬럼에서는 <b>쉼표</b>를 사용하여 태그를 구분합니다.</p>
<i>위 규칙을 따르지 않는 텍스트 줄은 무시됩니다.</i>
`,
      useRaptor: 'RAPTOR',
      useRaptorTip:
        'RAPTOR는 멀티홉 질의응답 작업에 사용할 수 있습니다. 파일 탭에서 [생성 > RAPTOR]를 클릭하여 활성화하세요. 자세한 내용은 https://ragflow.io/docs/dev/enable_raptor 을 참조하세요.',
      prompt: '프롬프트',
      promptTip:
        'LLM의 역할, 원하는 응답 길이, 톤, 언어 등을 포함한 시스템 프롬프트를 사용하세요. 시스템 프롬프트는 LLM에 대한 다양한 데이터 입력으로 사용되는 키(변수)와 함께 자주 사용됩니다. 사용할 키를 표시하려면 슬래시 `/` 또는 (x) 버튼을 사용하세요.',
      promptMessage: '프롬프트는 필수입니다',
      promptText: `다음 단락을 요약해 주세요. 숫자에 주의하고 내용을 지어내지 마세요. 단락은 다음과 같습니다:
      {cluster_content}
위 내용을 요약해 주세요.`,
      maxToken: '최대 토큰',
      maxTokenTip: '생성된 요약 chunk당 최대 토큰 수입니다.',
      maxTokenMessage: '최대 토큰은 필수입니다',
      threshold: '임계값',
      thresholdTip:
        'RAPTOR에서 chunk는 의미론적 유사도에 따라 클러스터링됩니다. 임계값 파라미터는 chunk를 그룹화하는 데 필요한 최소 유사도를 설정합니다. 임계값이 높을수록 각 클러스터의 chunk 수가 적어지고, 낮을수록 많아집니다.',
      thresholdMessage: '임계값은 필수입니다',
      clusteringMethod: '클러스터링 방법',
      clusteringMethodTip:
        'RAPTOR 클러스터링 방법입니다. AHC는 더 큰 최대 클러스터 값을 사용할 수 있지만, 대용량 입력에서 더 많은 메모리가 필요할 수 있습니다.',
      clusteringMethodGmm: 'GMM',
      clusteringMethodAhc: 'AHC',
      maxCluster: '최대 클러스터',
      maxClusterTip: '생성할 최대 클러스터 수입니다.',
      maxClusterMessage: '최대 클러스터는 필수입니다',
      randomSeed: '랜덤 시드',
      randomSeedMessage: '랜덤 시드는 필수입니다',
      entityTypes: '엔티티 유형',
      vietnamese: 'Tiếng Việt',
      pageRank: 'Page rank',
      pageRankTip: `검색 시 특정 데이터셋에 더 높은 PageRank 점수를 부여할 수 있습니다. 해당 점수는 이 데이터셋에서 검색된 chunk의 하이브리드 유사도 점수에 추가되어 순위를 높입니다. 자세한 내용은 https://ragflow.io/docs/dev/set_page_rank 을 참조하세요.`,
      tagName: '태그',
      frequency: '빈도',
      searchTags: '태그 검색',
      tagCloud: '클라우드',
      tagTable: '표',
      tagSet: '태그 세트',
      tagSetTip: `
     <p> 데이터셋의 chunk에 자동 태그를 지정할 태그 데이터셋을 하나 이상 선택하세요. 자세한 내용은 https://ragflow.io/docs/dev/use_tag_sets 을 참조하세요.</p>
<p>사용자 쿼리도 자동으로 태그가 지정됩니다.</p>
이 자동 태그 기능은 기존 데이터셋에 도메인별 지식 레이어를 추가하여 검색을 향상시킵니다.
<p>자동 태그와 자동 키워드의 차이점:</p>
<ul>
  <li>태그 데이터셋은 사용자 정의 폐쇄형 세트인 반면, LLM이 추출한 키워드는 개방형 세트로 볼 수 있습니다.</li>
  <li>자동 태그 기능을 실행하기 전에 지정된 형식으로 태그 세트를 업로드해야 합니다.</li>
  <li>자동 키워드 기능은 LLM에 의존하며 상당한 수의 토큰을 소비합니다.</li>
</ul>
      `,
      topnTags: 'Top-N 태그',
      tags: '태그',
      addTag: '태그 추가',
      useGraphRag: '지식 그래프',
      useGraphRagTip:
        '현재 데이터셋의 파일 청크에 대해 지식 그래프를 구성하여, 중첩된 논리가 포함된 멀티홉 질의응답(multi-hop QA) 성능을 향상시킵니다. 자세한 내용은 https://ragflow.io/docs/dev/construct_knowledge_graph 을 참조하세요.',
      graphRagMethod: '방법',
      graphRagMethodTip: `
      Light: (기본값) github.com/HKUDS/LightRAG에서 제공하는 프롬프트를 사용하여 엔티티와 관계를 추출합니다. 더 적은 토큰, 메모리, 연산 리소스를 사용합니다.</br>
      General: github.com/microsoft/graphrag에서 제공하는 프롬프트를 사용하여 엔티티와 관계를 추출합니다.</br>
      NER: spaCy NER과 규칙 기반 키워드 추출을 사용하여 엔티티와 관계를 추출합니다. 추출 자체에 LLM이 필요하지 않아 빠르고 리소스 효율적입니다.`,
      graphRagBatchChunkTokenSize: '배치 chunk 토큰 크기',
      graphRagBatchChunkTokenSizeTip:
        '지식 그래프 엔티티 및 관계 추출을 위해 LLM에 전송되는 각 chunk 배치의 토큰 제한입니다. NER에는 적용되지 않습니다.',
      resolution: '엔티티 해석',
      resolutionTip: `엔티티 중복 제거 기능입니다. 활성화하면 LLM이 유사한 엔티티(예: '2025'와 '2025년', 'IT'와 '정보 기술')를 결합하여 더 정확한 그래프를 구성합니다.`,
      community: '커뮤니티 리포트',
      communityTip:
        '지식 그래프에서 커뮤니티는 관계로 연결된 엔티티 클러스터입니다. LLM이 각 커뮤니티에 대한 요약(커뮤니티 리포트)을 생성하도록 할 수 있습니다. 자세한 내용은 https://www.microsoft.com/en-us/research/blog/graphrag-improving-global-search-via-dynamic-community-selection/ 을 참조하세요.',
      theDocumentBeingParsedCannotBeDeleted:
        '파싱 중인 문서는 삭제할 수 없습니다',
      lastWeek: '지난 주 대비',
    },
    chunk: {
      type: '유형',
      docType: {
        image: '이미지',
        table: '표',
        text: '텍스트',
      },
      size: '크기',
      uploadedTime: '업로드 시간',
      chunk: 'Chunk',
      createChunk: 'Chunk 만들기',
      editChunk: 'Chunk 편집',
      bulk: '일괄',
      selectAll: '전체 선택',
      enabledSelected: '선택 항목 활성화',
      disabledSelected: '선택 항목 비활성화',
      deleteSelected: '선택 항목 삭제',
      search: '검색',
      all: '전체',
      enabled: '활성화됨',
      disabled: '비활성화됨',
      keyword: '키워드',
      image: '이미지',
      imageUploaderTitle: '이미지를 교체하려면 새 이미지를 업로드하세요',
      function: '함수',
      chunkMessage: '값을 입력해 주세요',
      full: '전체 텍스트',
      ellipse: '간단히',
      graph: '지식 그래프',
      mind: '마인드맵',
      question: '질문',
      questionTip: `Chunk 임베딩의 기반이 될 질문을 작성해 주세요`,
      chunkResult: 'Chunk 결과',
      chunkResultTip: `임베딩 및 검색에 사용되는 chunk 세그먼트를 확인합니다`,
      enable: '활성화',
      disable: '비활성화',
      delete: '삭제',
    },
    chat: {
      chatSupport: '채팅 지원',
      replyInstantly: '보통 즉시 답변합니다',
      typeYourMessage: '메시지를 입력하세요...',
      messagePlaceholder: '여기에 메시지를 입력하세요...',
      exit: '나가기',
      multipleModels: '다중 모델',
      applyModelConfigs: '모델 설정 적용',
      conversations: '대화 목록',
      chatApps: '채팅 앱',
      newConversation: '새 대화',
      createAssistant: '어시스턴트 만들기',
      assistantSetting: '어시스턴트 설정',
      promptEngine: '프롬프트 엔진',
      modelSetting: '모델 설정',
      chat: '채팅',
      newChat: '새 채팅',
      send: '전송',
      sendPlaceholder: '어시스턴트에게 메시지 보내기...',
      chatConfiguration: '채팅 설정',
      chatConfigurationDescription:
        ' 선택한 데이터셋에 대한 채팅 어시스턴트를 여기에서 설정하세요! 💕',
      assistantName: '어시스턴트 이름',
      assistantNameMessage: '어시스턴트 이름은 필수입니다',
      namePlaceholder: '예: Resume Jarvis',
      assistantAvatar: '어시스턴트 아바타',
      language: '언어',
      emptyResponse: '빈 응답',
      emptyResponseTip: `쿼리에 대해 데이터셋에서 결과를 찾을 수 없을 때 표시할 응답을 설정합니다. 빈 칸으로 두면 LLM이 자유롭게 응답합니다.`,
      emptyResponseMessage: `데이터셋에서 관련 내용을 찾지 못하면 빈 응답이 표시됩니다. 데이터셋을 선택하지 않은 경우 '빈 응답' 필드를 비워야 합니다.`,
      emptyResponsePlaceholder:
        '찾고 있는 답변을 데이터셋에서 찾을 수 없습니다',
      setAnOpener: '시작 인사말',
      setAnOpenerInitial: `안녕하세요! 저는 어시스턴트입니다. 무엇을 도와드릴까요?`,
      setAnOpenerTip: '사용자에게 표시할 시작 인사말을 설정하세요.',
      knowledgeBases: '데이터셋',
      knowledgeBasesPlaceholder: '값 선택',
      knowledgeBasesMessage: '선택해 주세요',
      knowledgeBasesTip:
        '이 채팅 어시스턴트에 연결할 데이터셋을 선택하세요. 비어 있는 데이터셋은 드롭다운 목록에 표시되지 않습니다.',
      system: '시스템 프롬프트',
      systemPlaceholder: `당신은 지능형 어시스턴트입니다. 당신의 주요 기능은 제공된 지식 베이스를 기반으로 질문에 답하는 것입니다.

**필수 규칙:**
  - 답변은 반드시 이 데이터셋에서만 도출되어야 합니다: {knowledge}.
  - **정보가 있는 경우**: 내용을 요약하여 자세한 답변을 제공하세요.
  - **정보가 없는 경우**: 응답에 반드시 이 문장을 포함해야 합니다: "찾고 있는 답변을 지식 베이스에서 찾을 수 없습니다!"
  - **항상** 전체 대화 기록을 고려하세요.`,
      systemInitialValue: `당신은 지능형 어시스턴트입니다. 당신의 주요 기능은 제공된 지식 베이스를 기반으로 질문에 답하는 것입니다.

      **필수 규칙:**
        - 답변은 반드시 이 데이터셋에서만 도출되어야 합니다: \`{knowledge}\`.
        - **정보가 있는 경우**: 내용을 요약하여 자세한 답변을 제공하세요.
        - **정보가 없는 경우**: 응답에 반드시 이 문장을 포함해야 합니다: "찾고 있는 답변을 데이터셋에서 찾을 수 없습니다!"
        - **항상** 전체 대화 기록을 고려하세요.`,
      systemMessage: '입력해 주세요',
      systemTip:
        'LLM에 대한 프롬프트 또는 지침으로, 역할, 원하는 응답 길이, 톤, 언어 등을 포함합니다. 모델이 추론을 기본적으로 지원하는 경우 프롬프트에 //no_thinking을 추가하여 추론을 중지할 수 있습니다.',
      topN: 'Top N',
      topNTip: `'유사도 임계값' 이상의 유사도 점수를 가진 모든 chunk가 LLM에 전송되는 것은 아닙니다. 검색된 chunk에서 'Top N'개를 선택합니다.`,
      variable: '변수',
      variableTip: `RAGFlow의 채팅 어시스턴트 관리 API와 함께 사용하면 변수를 통해 더 유연한 시스템 프롬프트 전략을 개발할 수 있습니다. 정의된 변수는 '시스템 프롬프트'에서 LLM의 프롬프트 일부로 사용됩니다. {knowledge}는 지정된 데이터셋에서 검색된 chunk를 나타내는 예약 특수 변수이며, 모든 변수는 '시스템 프롬프트'에서 중괄호 {}로 묶어야 합니다. 자세한 내용은 https://ragflow.io/docs/dev/set_chat_variables 를 참조하세요.`,
      add: '추가',
      key: '키',
      optional: '선택 사항',
      operation: '작업',
      model: '모델',
      modelTip: '대규모 언어 채팅 모델',
      modelMessage: '선택해 주세요',
      modelEnabledTools: '활성화된 도구',
      modelEnabledToolsTip:
        '채팅 모델이 사용할 도구를 하나 이상 선택하세요. 도구 호출을 지원하지 않는 모델에는 적용되지 않습니다.',
      freedom: '창의성',
      improvise: '자유',
      precise: '정밀',
      balance: '균형',
      custom: '사용자 정의',
      freedomTip: `'Temperature', 'Top P', 'Presence penalty', 'Frequency penalty' 설정의 단축키로 모델의 자유도를 나타냅니다. '자유'를 선택하면 더 창의적인 응답이 생성되고, '정밀'(기본값)을 선택하면 더 보수적인 응답이 생성됩니다. '균형'은 중간 수준입니다.`,
      temperature: 'Temperature',
      temperatureMessage: 'Temperature는 필수입니다',
      temperatureTip: `이 파라미터는 모델 예측의 무작위성을 제어합니다. 낮은 temperature는 더 보수적인 응답을 생성하고, 높은 temperature는 더 창의적이고 다양한 응답을 생성합니다.`,
      topP: 'Top P',
      topPMessage: 'Top P는 필수입니다',
      topPTip:
        '"nucleus sampling"이라고도 하며, 샘플링할 가장 가능성 높은 단어의 더 작은 집합을 선택하기 위한 임계값을 설정합니다.',
      presencePenalty: 'Presence penalty',
      presencePenaltyMessage: 'Presence penalty는 필수입니다',
      presencePenaltyTip:
        '대화에서 이미 나타난 단어에 패널티를 부여하여 모델이 동일한 정보를 반복하지 않도록 합니다.',
      frequencyPenalty: 'Frequency penalty',
      frequencyPenaltyMessage: 'Frequency penalty는 필수입니다',
      frequencyPenaltyTip:
        'Presence penalty와 유사하게, 모델이 동일한 단어를 자주 반복하는 경향을 줄입니다.',
      maxTokens: '최대 토큰',
      maxTokensMessage: '최대 토큰은 필수입니다',
      maxTokensTip: `모델의 최대 컨텍스트 크기입니다. 유효하지 않거나 잘못된 값을 입력하면 오류가 발생합니다. 기본값은 512입니다.`,
      maxTokensInvalidMessage: '유효한 숫자를 입력해 주세요.',
      maxTokensMinMessage: '최대 토큰은 0보다 작을 수 없습니다.',
      quote: '인용 표시',
      quoteTip: '답변과 함께 원문을 출처로 표시할지 설정합니다.',
      selfRag: 'Self-RAG',
      selfRagTip: '참조: https://huggingface.co/papers/2310.11511',
      overview: '채팅 ID',
      pv: '메시지 수',
      uv: '활성 사용자 수',
      speed: '토큰 출력 속도',
      tokens: '소비된 토큰 수',
      round: '세션 상호작용 수',
      thumbUp: '고객 만족도',
      preview: '미리보기',
      embedded: '삽입됨',
      serviceApiEndpoint: '서비스 API 엔드포인트',
      apiKey: 'API Key',
      apiReference: 'API 문서',
      dateRange: '날짜 범위:',
      backendServiceApi: 'API 서버',
      createNewKey: '새 키 만들기',
      created: '생성됨',
      action: '작업',
      embedModalTitle: '웹페이지에 삽입',
      published: '게시됨',
      publishedTooltip:
        '이 삽입에 게시된 버전을 사용합니다. 활성화하면 생성된 URL에 release=true가 포함됩니다.',
      embedType: '삽입 유형',
      fullscreenChat: '전체 화면 채팅 (전통적인 iframe)',
      floatingWidget: '플로팅 위젯 (Intercom 스타일)',
      theme: '테마',
      light: '라이트',
      dark: '다크',
      enableStreaming: '스트리밍 응답 활성화',
      muteWidget: '위젯 소리 끄기',
      comingSoon: '준비 중',
      fullScreenTitle: '전체 삽입',
      fullScreenDescription:
        '다음 iframe을 원하는 위치에 웹사이트에 삽입하세요',
      partialTitle: '부분 삽입',
      extensionTitle: 'Chrome 확장 프로그램',
      tokenError: 'API 키를 먼저 만들어 주세요.',
      betaError: '시스템 설정 페이지에서 RAGFlow API 키를 먼저 획득해 주세요.',
      searching: '검색 중...',
      parsing: '파싱 중',
      uploading: '업로드 중',
      uploadFailed: '업로드 실패',
      regenerate: '재생성',
      read: '내용 읽기',
      tts: '텍스트 음성 변환',
      ttsTip:
        '텍스트를 오디오로 재생하려면 설정 페이지에서 TTS 모델을 먼저 선택해 주세요.',
      relatedQuestion: '관련 질문',
      answerTitle: 'R',
      multiTurn: '멀티턴 최적화',
      multiTurnTip:
        '다중 라운드 대화에서 컨텍스트를 사용하여 사용자 쿼리를 최적화합니다. 활성화하면 추가 LLM 토큰이 소비됩니다.',
      howUseId: '채팅 ID 사용 방법?',
      description: '어시스턴트 설명',
      descriptionPlaceholder: '저는 채팅 어시스턴트입니다.',
      useKnowledgeGraph: '지식 그래프 사용',
      useKnowledgeGraphTip:
        '멀티홉 질의응답을 위한 검색 시, 지정된 데이터셋의 지식 그래프를 사용할 수 있습니다. 이 옵션을 활성화하면 엔티티, 관계 및 커뮤니티 리포트 chunk 전체에 걸쳐 반복 검색이 수행되어 검색 시간이 크게 증가합니다.',
      keyword: '키워드 분석',
      keywordTip: `LLM을 사용하여 사용자 질문을 분석하고, 관련성 계산 시 강조될 키워드를 추출합니다. 긴 쿼리에 효과적이지만 응답 시간이 증가합니다.`,
      languageTip:
        '지정된 언어로 문장을 재작성할 수 있으며, 선택하지 않으면 가장 최근 질문을 기본값으로 사용합니다.',
      avatarHidden: '아바타 숨기기',
      locale: '지역',
      selectLanguage: '언어 선택',
      reasoning: '추론',
      reasoningTip: `Deepseek-R1 또는 OpenAI o1과 같은 모델에서 볼 수 있는 질문 답변 중 추론 워크플로를 활성화할지 여부입니다. 활성화하면 모델이 외부 지식에 접근하고 chain-of-thought 추론 등의 기법을 활용하여 복잡한 질문을 단계별로 처리할 수 있습니다.`,
      tavilyApiKeyTip:
        'API 키가 올바르게 설정되면 Tavily 기반 웹 검색이 데이터셋 검색을 보완하는 데 사용됩니다.',
      tavilyApiKeyMessage: 'Tavily API 키를 입력해 주세요',
      tavilyApiKeyHelp: '어떻게 얻나요?',
      crossLanguage: '교차 언어 검색',
      crossLanguagePlaceholder: '값 선택',
      crossLanguageTip: `교차 언어(cross-language) 검색을 위해 언어를 하나 이상 선택하세요. 언어를 선택하지 않으면 시스템은 원본 쿼리로 검색합니다.`,
      createChat: '채팅 만들기',
      metadata: '메타데이터',
      metadataTip:
        '메타데이터 필터링은 태그, 카테고리, 액세스 권한 등의 메타데이터 속성을 사용하여 시스템 내 관련 정보 검색을 세밀하게 제어하는 프로세스입니다.',
      conditions: '조건',
      metadataKeys: '필터 가능한 항목',
      addCondition: '조건 추가',
      meta: {
        disabled: '비활성화',
        auto: '자동',
        manual: '수동',
        semi_auto: '반자동',
      },
      cancel: '취소',
      chatSetting: '채팅 설정',
      tocEnhance: 'PageIndex',
      tocEnhanceTip: `문서 파싱 과정에서 목차 정보가 생성됩니다(일반 방법의 '목차 추출 활성화' 옵션 참조). 이 정보를 활용하면 대형 모델이 사용자 질의와 관련된 목차 항목을 반환하고, 이를 바탕으로 관련 청크를 검색한 뒤 정렬 시 해당 청크에 가중치를 부여할 수 있습니다. 책에서 목차를 보고 원하는 정보를 찾아가는 사람의 행동 방식을 모방한 방식입니다.`,
      batchDeleteSessions: '일괄 삭제',
      deleteSelectedConfirm: '선택한 {{count}}개의 세션을 삭제하시겠습니까?',
      showChunkMetadata: 'Chunk 메타데이터 표시',
      showChunkMetadataTip:
        '검색된 텍스트 청크와 함께 문서 메타데이터(예: 제목, 페이지 번호, 업로드 날짜)를 표시합니다',
      metadataFields: '메타데이터 필드',
      metadataFieldsTip: '각 청크와 함께 표시할 메타데이터 필드를 선택하세요',
    },
    setting: {
      Verify: '확인',
      keyValid: 'API 키가 유효합니다.',
      keyInvalid: 'API 키가 유효하지 않습니다.',
      enableToolCall: '도구 호출 활성화',
      enableToolCallTip:
        '선택한 모델 유형이 도구 호출을 지원할 때 이 모델이 도구를 호출할 수 있도록 허용합니다.',
      deleteModel: '모델 삭제',
      bedrockCredentialsHint:
        '팁: AWS IAM 인증을 사용하려면 액세스 키 / 시크릿 키를 비워두세요.',
      awsAuthModeAccessKeySecret: '액세스 키',
      awsAuthModeIamRole: 'IAM 역할',
      awsAuthModeAssumeRole: '역할 위임',
      awsAccessKeyId: 'AWS 액세스 키 ID',
      awsSecretAccessKey: 'AWS 시크릿 액세스 키',
      awsRoleArn: 'AWS 역할 ARN',
      awsRoleArnMessage: 'AWS 역할 ARN을 입력해 주세요',
      awsAssumeRoleTip:
        '이 모드를 선택하면 Amazon EC2 인스턴스가 기존 역할을 위임하여 AWS 서비스에 접근합니다. 추가 자격 증명이 필요하지 않습니다.',
      modelEmptyTip:
        '사용 가능한 모델이 없습니다. <br>오른쪽 패널에서 모델을 추가해 주세요.',
      sourceEmptyTip:
        '아직 추가된 데이터 소스가 없습니다. 아래에서 선택하여 연결하세요.',
      seconds: '초',
      minutes: '분',
      edit: '편집',
      cropTip:
        '선택 영역을 드래그하여 이미지 자르기 위치를 선택하고, 스크롤하여 확대/축소하세요',
      cropImage: '이미지 자르기',
      selectModelPlaceholder: '모델 선택',
      configureModelTitle: '모델 설정',
      connectorNameTip: '커넥터에 대한 설명적인 이름',
      syncDeletedFiles: '삭제된 파일 동기화',
      confluenceIsCloudTip:
        'Confluence Cloud 인스턴스인 경우 체크, Confluence Server/Data Center인 경우 체크 해제',
      confluenceWikiBaseUrlTip:
        'Confluence 인스턴스의 기본 URL (예: https://your-domain.atlassian.net/wiki)',
      confluenceSpaceKeyTip:
        '선택 사항: 특정 공간으로 동기화를 제한할 스페이스 키를 지정하세요. 비워두면 모든 접근 가능한 공간을 동기화합니다. 여러 공간은 쉼표로 구분하세요 (예: DEV,DOCS,HR)',
      s3PrefixTip: `S3 버킷 내 파일을 가져올 폴더 경로를 지정하세요.\n예: general/v2/`,
      S3CompatibleEndpointUrlTip: `S3 호환 스토리지에 필요합니다. S3 호환 엔드포인트 URL을 지정하세요.\n예: https://fsn1.your-objectstorage.com`,
      S3CompatibleAddressingStyleTip: `S3 호환 스토리지에 필요합니다. S3 호환 주소 지정 스타일을 지정하세요.\n예: Virtual Hosted Style`,
      addDataSourceModalTitle: '{{name}} 커넥터 만들기',
      deleteSourceModalTitle: '데이터 소스 삭제',
      deleteSourceModalContent: `
      <p>이 데이터 소스 링크를 삭제하시겠습니까?</p>`,
      deleteSourceModalConfirmText: '확인',
      errorMsg: '오류 메시지',
      newDocs: '새 문서',
      timeStarted: '시작 시간',
      log: '로그',
      rssDescription:
        '공개 RSS 또는 Atom 피드에 연결하여 피드 항목을 지식 베이스에 동기화합니다.',
      confluenceDescription:
        'Confluence 워크스페이스를 통합하여 문서를 검색합니다.',
      s3Description:
        'AWS S3 버킷에 연결하여 저장된 파일을 가져오고 동기화합니다.',
      google_cloud_storageDescription:
        'Google Cloud Storage 버킷을 연결하여 파일을 가져오고 동기화합니다.',
      r2Description:
        'Cloudflare R2 버킷을 연결하여 파일을 가져오고 동기화합니다.',
      oci_storageDescription:
        'Oracle Cloud Object Storage 버킷을 연결하여 파일을 가져오고 동기화합니다.',
      discordDescription:
        'Discord 서버를 연결하여 채팅 데이터에 접근하고 분석합니다.',
      notionDescription:
        'Notion의 페이지와 데이터베이스를 동기화하여 지식 검색에 활용합니다.',
      google_driveDescription:
        'OAuth를 통해 Google Drive를 연결하고 특정 폴더 또는 드라이브를 동기화합니다.',
      gmailDescription: 'OAuth를 통해 Gmail을 연결하여 이메일을 동기화합니다.',
      webdavDescription: 'WebDAV 서버에 연결하여 파일을 동기화합니다.',
      webdavRemotePathTip:
        '선택 사항: WebDAV 서버의 폴더 경로를 지정하세요 (예: /Documents). 비워두면 루트에서 동기화합니다.',
      google_driveTokenTip:
        'OAuth 도우미 또는 Google Cloud Console에서 생성된 OAuth 토큰 JSON을 업로드하세요. "installed" 또는 "web" 애플리케이션의 client_secret JSON도 업로드할 수 있습니다. 첫 동기화의 경우 OAuth 동의를 완료하기 위해 브라우저 창이 열립니다. JSON에 이미 갱신 토큰이 포함된 경우 자동으로 재사용됩니다.',
      google_drivePrimaryAdminTip:
        '동기화 중인 Drive 콘텐츠에 접근 권한이 있는 이메일 주소',
      zendeskDescription:
        'Zendesk를 연결하여 티켓, 기사 및 기타 콘텐츠를 동기화합니다.',
      google_driveMyDriveEmailsTip:
        '"내 드라이브" 콘텐츠를 인덱싱할 이메일(쉼표로 구분, 기본 관리자 포함).',
      google_driveSharedFoldersTip:
        '크롤링할 Google Drive 폴더 링크(쉼표로 구분).',
      gmailPrimaryAdminTip:
        'Gmail / Workspace 접근 권한이 있는 기본 관리자 이메일로, 도메인 사용자를 열거하고 기본 동기화 계정으로 사용됩니다.',
      gmailTokenTip:
        'Google Console에서 생성된 OAuth JSON을 업로드하세요. 클라이언트 자격 증명만 포함된 경우 브라우저 기반 인증을 한 번 실행하여 장기 갱신 토큰을 발급받으세요.',
      dropboxDescription:
        'Dropbox를 연결하여 선택한 계정의 파일과 폴더를 동기화합니다.',
      teamsDescription:
        'Microsoft Graph를 통해 Microsoft Teams를 연결하여 채널 게시물 및 답글을 동기화합니다.',
      teamsTenantIdTip:
        'Azure AD 테넌트 ID. Team.ReadBasic.All 및 ChannelMessage.Read.All 애플리케이션 권한이 있는 앱이 필요합니다 (관리자 동의).',
      slackDescription:
        'Slack 워크스페이스를 연결하여 채널 메시지와 스레드를 동기화합니다.',
      slackBotTokenTip:
        'Slack 봇 사용자 OAuth 토큰 (xoxb-로 시작). 앱에 channels:read, channels:history, users:read 권한이 필요합니다.',
      slackChannelsTip:
        '선택 사항: 동기화할 채널 이름 (예: general). 비워두면 접근 가능한 모든 채널을 동기화합니다.',
      sharepointDescription:
        'Microsoft Graph를 통해 SharePoint 사이트를 연결하여 문서 라이브러리를 동기화합니다.',
      sharepointSiteUrlTip:
        '인덱싱할 SharePoint 사이트의 전체 URL (예: https://contoso.sharepoint.com/sites/MySite). Sites.Read.All 및 Files.Read.All 애플리케이션 권한이 있는 Azure AD 앱이 필요합니다 (관리자 동의).',
      bitbucketDescription: 'Bitbucket을 연결하여 PR 콘텐츠를 동기화합니다.',
      bitbucketTopWorkspaceTip:
        '인덱싱할 Bitbucket 워크스페이스 (예: https://bitbucket.org/atlassian/workspace 의 "atlassian").',
      bitbucketRepositorySlugsTip:
        '쉼표로 구분된 저장소 슬러그. 예: repo-one,repo-two',
      bitbucketProjectsTip: '쉼표로 구분된 프로젝트 키. 예: PROJ1,PROJ2',
      bitbucketWorkspaceTip:
        '이 커넥터는 워크스페이스의 모든 저장소를 인덱싱합니다.',
      boxDescription: 'Box 드라이브를 연결하여 파일과 폴더를 동기화합니다.',
      githubDescription:
        'GitHub를 연결하여 풀 리퀘스트와 이슈를 검색용으로 동기화합니다.',
      airtableDescription:
        'Airtable에 연결하여 지정된 워크스페이스 내 특정 테이블의 파일을 동기화합니다.',
      dingtalkAITableDescription:
        'DingTalk AI Table에 연결하여 지정된 테이블의 레코드를 동기화합니다.',
      gitlabDescription:
        'GitLab을 연결하여 저장소, 이슈, 머지 리퀘스트 및 관련 문서를 동기화합니다.',
      asanaDescription:
        'Asana에 연결하여 지정된 워크스페이스의 파일을 동기화합니다.',
      imapDescription:
        'IMAP 사서함에 연결하여 지식 검색을 위한 이메일을 동기화합니다.',
      dropboxAccessTokenTip:
        'Dropbox 앱 콘솔에서 files.metadata.read, files.content.read, sharing.read 권한으로 장기 액세스 토큰을 생성하세요.',
      moodleDescription:
        'Moodle LMS에 연결하여 강의 콘텐츠, 포럼 및 리소스를 동기화합니다.',
      moodleUrlTip:
        'Moodle 인스턴스의 기본 URL (예: https://moodle.university.edu). /webservice 또는 /login은 포함하지 마세요.',
      moodleTokenTip:
        'Moodle에서 웹 서비스 토큰을 생성하세요: 사이트 관리 → 서버 → 웹 서비스 → 토큰 관리. 동기화할 강의에 등록된 사용자여야 합니다.',
      seafileDescription:
        'SeaFile 서버에 연결하여 라이브러리의 파일과 문서를 동기화합니다.',
      seafileUrlTip:
        'SeaFile 서버의 프로토콜이 포함된 전체 URL. 예: https://seafile.example.com - 후행 슬래시나 도메인 이후 경로는 포함하지 마세요.',
      seafileAccountScopeTip:
        '아래 계정 API 토큰이 접근할 수 있는 모든 라이브러리를 동기화합니다.',
      seafileTokenPanelHeading: '다음 인증 방법 중 하나를 제공하세요:',
      seafileTokenPanelAccountBullet:
        '- 모든 라이브러리에 대한 접근 권한을 부여합니다.',
      seafileTokenPanelLibraryBullet:
        '— 단일 라이브러리로만 범위가 제한됩니다 (더 안전).',
      seafileValidationAccountTokenRequired:
        '전체 계정 범위에는 계정 API 토큰이 필요합니다',
      seafileValidationTokenRequired:
        '계정 API 토큰 또는 라이브러리 토큰 중 하나를 제공하세요',
      seafileValidationLibraryIdRequired: '라이브러리 ID가 필요합니다',
      seafileValidationDirectoryPathRequired: '디렉토리 경로가 필요합니다',
      seafileSyncScopeTip:
        '동기화 범위를 제어합니다: ' +
        '(1) 전체 계정 - 토큰이 접근할 수 있는 모든 라이브러리를 동기화합니다. 계정 API 토큰이 필요합니다. ' +
        '(2) 단일 라이브러리 - 특정 라이브러리 내 모든 파일을 동기화합니다. 라이브러리 ID와 계정 API 토큰 또는 라이브러리 API 토큰이 필요합니다. ' +
        '(3) 특정 디렉토리 - 라이브러리 내 특정 폴더의 파일만 동기화합니다. 라이브러리 ID, 해당 라이브러리 내 폴더 경로, 계정 API 토큰 또는 라이브러리 API 토큰이 필요합니다.',
      seafileTokenTip:
        '계정 수준 SeaFile API 토큰입니다. ' +
        '계정에 표시되는 모든 라이브러리에 대한 접근 권한을 부여합니다. ' +
        '동기화 범위가 "전체 계정"인 경우 필요합니다. ' +
        '"단일 라이브러리" 또는 "특정 디렉토리"의 경우 이 토큰이나 라이브러리 API 토큰을 대신 사용할 수 있습니다.',
      seafileRepoTokenTip:
        '단일 특정 라이브러리에만 접근 권한을 부여하는 라이브러리 범위 API 토큰입니다. ' +
        '"단일 라이브러리" 및 "특정 디렉토리" 동기화 범위에서 계정 API 토큰 대신 사용할 수 있습니다.',
      seafileRepoIdTip:
        '동기화할 SeaFile 라이브러리의 고유 식별자 (UUID)입니다. ' +
        'SeaFile 웹 인터페이스에서 라이브러리를 열 때 브라우저 주소 표시줄에서 확인할 수 있습니다. ' +
        '예: 7a9e1b3c-4d5f-6a7b-8c9d-0e1f2a3b4c5d. ' +
        '동기화 범위가 "단일 라이브러리" 또는 "특정 디렉토리"인 경우 필요합니다.',
      seafileSyncPathTip:
        '위에서 지정한 라이브러리 ID 내에서 동기화할 폴더의 절대 경로입니다. ' +
        '슬래시로 시작해야 합니다. ' +
        '이 경로 아래의 모든 파일과 하위 폴더가 재귀적으로 포함됩니다. ' +
        '예: /Documents/Reports. ' +
        '중요: 폴더가 지정된 라이브러리 내에 존재해야 합니다. ' +
        '라이브러리 외부의 경로는 지원되지 않습니다. ' +
        '동기화 범위가 "특정 디렉토리"인 경우에만 사용됩니다.',
      seafileIncludeSharedTip:
        '활성화하면 다른 사용자가 공유한 라이브러리도 동기화에 포함됩니다. ' +
        '비활성화하면 계정이 소유한 라이브러리만 동기화됩니다. ' +
        '동기화 범위가 "전체 계정"인 경우에만 적용됩니다.',
      seafileBatchSizeTip:
        '동기화 중 배치당 처리되고 반환되는 문서 수입니다. ' +
        '값이 작을수록 메모리 사용이 줄어들지만 전체적으로 느릴 수 있습니다. ' +
        '기본값: 100.',
      jiraDescription:
        'Jira 워크스페이스를 연결하여 이슈, 댓글 및 첨부 파일을 동기화합니다.',
      jiraBaseUrlTip:
        'Jira 사이트의 기본 URL (예: https://your-domain.atlassian.net).',
      jiraProjectKeyTip:
        '선택 사항: 단일 프로젝트 키로 동기화를 제한합니다 (예: ENG).',
      jiraJqlTip:
        '선택적 JQL 필터. 프로젝트/시간 필터를 사용하려면 비워두세요.',
      jiraBatchSizeTip: '배치당 Jira에서 요청하는 최대 이슈 수입니다.',
      jiraCommentsTip: '생성된 마크다운 문서에 Jira 댓글을 포함합니다.',
      jiraAttachmentsTip: '동기화 중 첨부 파일을 별도 문서로 다운로드합니다.',
      jiraAttachmentSizeTip: '이 바이트 수보다 큰 첨부 파일은 건너뜁니다.',
      jiraLabelsTip: '인덱싱 중 건너뛸 레이블 (쉼표로 구분).',
      jiraBlacklistTip: '작성자 이메일이 이 항목과 일치하는 댓글은 무시됩니다.',
      jiraScopedTokenTip:
        '범위가 지정된 Atlassian 토큰 (api.atlassian.com)을 사용할 때 활성화하세요.',
      jiraEmailTip: 'Jira 계정/API 토큰과 연결된 이메일.',
      jiraTokenTip:
        'https://id.atlassian.com/manage-profile/security/api-tokens 에서 생성된 API 토큰.',
      jiraPasswordTip: 'Jira Server/Data Center 환경의 선택적 비밀번호.',
      mysqlDescription:
        'MySQL 데이터베이스에 연결하여 SQL 쿼리로 테이블 데이터를 동기화합니다.',
      mysqlQueryTip:
        '데이터베이스에서 데이터를 추출하는 SQL 쿼리 (예: SELECT * FROM products WHERE status = "active").',
      mysqlContentColumnsTip:
        '문서 콘텐츠로 결합하여 벡터화할 컬럼 이름 (쉼표로 구분).',
      mysqlMetadataColumnsTip:
        '문서 메타데이터로 저장할 컬럼 이름 (벡터화되지 않지만 검색 가능, 쉼표로 구분).',
      mysqlIdColumnTip:
        '고유 문서 ID로 사용할 컬럼. 지정하지 않으면 콘텐츠 해시가 사용됩니다.',
      mysqlTimestampColumnTip:
        '증분 동기화를 위한 날짜/타임스탬프 컬럼. 마지막 동기화 이후 수정된 행만 가져옵니다.',
      postgresqlDescription:
        'PostgreSQL 데이터베이스에 연결하여 SQL 쿼리로 테이블 데이터를 동기화합니다.',
      postgresqlQueryTip:
        "데이터베이스에서 데이터를 추출하는 SQL 쿼리 (예: SELECT * FROM products WHERE status = 'active').",
      postgresqlContentColumnsTip:
        '문서 콘텐츠로 결합하여 벡터화할 컬럼 이름 (쉼표로 구분).',
      postgresqlMetadataColumnsTip:
        '문서 메타데이터로 저장할 컬럼 이름 (벡터화되지 않지만 검색 가능, 쉼표로 구분).',
      postgresqlIdColumnTip:
        '고유 문서 ID로 사용할 컬럼. 지정하지 않으면 콘텐츠 해시가 사용됩니다.',
      postgresqlTimestampColumnTip:
        '증분 동기화를 위한 날짜/타임스탬프 컬럼. 마지막 동기화 이후 수정된 행만 가져옵니다.',
      rest_apiDescription:
        '유연한 설정 기반 커넥터를 사용하여 REST API 엔드포인트를 데이터 소스로 연결합니다.',
      onedriveDescription:
        'Microsoft Graph 델타 쿼리를 통해 OneDrive 또는 비즈니스용 OneDrive를 연결하여 파일과 폴더를 인덱싱합니다.',
      onedriveTenantIdTip:
        'Microsoft 365 조직의 Azure Active Directory 테넌트 ID (디렉토리 ID).',
      onedriveClientIdTip:
        'Files.Read.All 권한이 있는 Azure AD 앱 등록의 애플리케이션 (클라이언트) ID.',
      onedriveClientSecretTip:
        'Azure AD 앱 등록에서 생성된 클라이언트 시크릿 값.',
      onedriveFolderPathTip:
        '인덱싱을 제한할 선택적 하위 폴더 경로 (예: /Documents/Reports). 비워두면 전체 드라이브를 인덱싱합니다.',
      outlookDescription:
        'Microsoft Graph 델타 쿼리를 통해 Outlook / Microsoft 365 사서함을 연결하고 메시지를 인덱싱합니다.',
      outlookTenantIdTip:
        'Microsoft 365 조직의 Azure Active Directory 테넌트 ID (디렉토리 ID).',
      outlookClientIdTip:
        'Mail.Read 권한이 있는 Azure AD 앱 등록의 애플리케이션 (클라이언트) ID.',
      outlookClientSecretTip:
        'Azure AD 앱 등록에서 생성된 클라이언트 시크릿 값.',
      outlookFolderTip:
        '동기화할 메일 폴더 (예: inbox, sentitems, archive). 기본값은 inbox.',
      outlookUserIdsTip:
        '동기화할 사서함의 UPN 또는 개체 ID (쉼표로 구분). 비워두면 테넌트의 모든 사서함을 동기화합니다 (User.Read.All 필요).',
      salesforceDescription:
        'Salesforce org를 연결하고 SOQL을 통해 CRM 레코드(계정, 연락처, 기회, 케이스, Knowledge 기사)를 증분 동기화로 인덱싱합니다.',
      salesforceInstanceUrlTip:
        'Salesforce org URL (예: https://your-domain.my.salesforce.com, 후행 슬래시 없음).',
      salesforceClientIdTip:
        '클라이언트 자격 증명 흐름이 활성화되고 api 범위가 있는 Connected App의 소비자 키.',
      salesforceClientSecretTip:
        '클라이언트 자격 증명 인증에 사용되는 Connected App의 소비자 시크릿.',
      salesforceObjectsTip:
        '인덱싱할 SObject API 이름 (쉼표로 구분). 기본값: Account, Contact, Opportunity, Case, Knowledge__kav.',
      salesforceApiVersionTip:
        'Salesforce REST API 버전 (예: v59.0). 조직이 지원하는 버전을 사용하세요.',
      azure_blobDescription:
        'Azure Blob Storage 컨테이너의 blob을 지식 베이스로 인덱싱합니다. 계정 키, 연결 문자열, SAS 토큰 인증을 지원합니다. ETag 지문을 통해 변경되지 않은 blob은 건너뜁니다.',
      azureBlobAuthModeTip:
        '인증 방법을 선택하세요. 계정 키와 연결 문자열은 container_name이 필요하고, SAS 토큰은 container_url + sas_token이 필요합니다.',
      azureBlobAccountNameTip:
        'Azure 스토리지 계정 이름 (예: mystorageaccount). 계정 키 인증에 필요합니다.',
      azureBlobAccountKeyTip:
        '스토리지 계정 액세스 키 (Base64 인코딩). 계정 키 인증에 필요합니다.',
      azureBlobConnectionStringTip:
        '전체 Azure Storage 연결 문자열 (DefaultEndpointsProtocol=https;AccountName=...;...). 연결 문자열 인증에 필요합니다.',
      azureBlobContainerUrlTip:
        '컨테이너의 전체 HTTPS URL (예: https://account.blob.core.windows.net/container). SAS 토큰 인증에 필요합니다.',
      azureBlobSasTokenTip:
        'SAS 쿼리 문자열 ("?" 앞 부분 없이). SAS 토큰 인증에 필요합니다.',
      azureBlobContainerNameTip:
        '인덱싱할 컨테이너 이름. 계정 키 및 연결 문자열 인증에 필요합니다.',
      azureBlobPrefixTip:
        '인덱싱을 가상 폴더로 제한할 선택적 blob 이름 접두사 (예: documents/reports/). 비워두면 전체 컨테이너를 인덱싱합니다.',
      restApiQueryParamsTip:
        'URL 쿼리 파라미터로 전송되는 Key=value 쌍 (한 줄에 하나씩). URL에 파라미터를 포함하는 대신 사용하세요.',
      restApiHeadersTip:
        '모든 요청에 포함할 추가 HTTP 헤더의 선택적 JSON 객체.',
      restApiItemsPathTip:
        '응답의 항목 배열에 대한 필드 이름 또는 JSONPath. 비워두면 자동 감지합니다 ("items", "results", "data" 등 시도).',
      restApiIdFieldTip:
        '안정적인 문서 ID를 구성하는 데 사용되는 각 항목 내의 필드 경로. 비워두면 콘텐츠 해시에서 자동 생성합니다.',
      restApiContentFieldsTip:
        '문서 콘텐츠로 연결할 항목 필드의 쉼표로 구분된 목록.',
      restApiMetadataFieldsTip:
        '메타데이터로 저장할 항목 필드의 쉼표로 구분된 목록.',
      restApiNextCursorPathTip:
        'API 응답의 다음 페이지 커서로 확인되는 JSONPath 표현식.',
      restApiPollTimestampFieldTip:
        '증분 동기화에 사용되는 각 항목의 마지막 업데이트 시간을 나타내는 필드 경로.',
      restApiRequestBodyTip:
        'POST 요청에 전송할 선택적 JSON 본문. 쿼리 파라미터 및 페이지네이션과 함께 사용됩니다.',
      restApiRequestDelayTip:
        '연속 페이지 요청 사이의 지연 시간(초). API의 속도 제한을 피하는 데 도움이 됩니다. 비활성화하려면 0으로 설정하세요.',
      restApiValidationApiKeyRequired:
        '인증 유형이 API Key (Header)일 때 API 키가 필요합니다.',
      restApiValidationApiKeyHeaderNameRequired:
        '인증 유형이 API Key (Header)일 때 API 키 헤더 이름이 필요합니다.',
      restApiValidationBearerTokenRequired:
        '인증 유형이 Bearer Token일 때 Bearer 토큰이 필요합니다.',
      restApiValidationBasicUsernameRequired:
        '인증 유형이 Basic Auth일 때 사용자 이름이 필요합니다.',
      restApiValidationBasicPasswordRequired:
        '인증 유형이 Basic Auth일 때 비밀번호가 필요합니다.',
      restApiTestConnection: '연결 테스트',
      restApiTestSuccess: 'REST API 커넥터 유효성 검사 성공.',
      restApiTestFailed:
        'REST API 커넥터 유효성 검사 실패. 설정과 로그를 확인해 주세요.',
      availableSourcesDescription: '추가할 데이터 소스를 선택하세요',
      availableSources: '사용 가능한 소스',
      datasourceDescription: '데이터 소스 및 연결 관리',
      save: '저장',
      search: '검색',
      availableModels: '사용 가능한 모델',
      profile: '프로필',
      avatar: '아바타',
      avatarTip: '프로필에 표시됩니다.',
      profileDescription: '프로필 사진과 개인 정보를 업데이트하세요.',
      maxTokens: '최대 토큰',
      maxTokensMessage: '최대 토큰은 필수입니다',
      maxTokensTip: `모델의 최대 컨텍스트 크기입니다. 유효하지 않거나 잘못된 값을 입력하면 오류가 발생합니다. 기본값은 512입니다.`,
      maxTokensInvalidMessage: '유효한 숫자를 입력해 주세요.',
      maxTokensMinMessage: '최대 토큰은 0보다 작을 수 없습니다.',
      password: '비밀번호',
      passwordDescription:
        '비밀번호를 변경하려면 현재 비밀번호를 입력해 주세요.',
      model: '모델 제공업체',
      systemModelDescription: '시작하기 전에 이 설정을 완료해 주세요',
      dataSources: '데이터 소스',
      team: '팀',
      system: '시스템',
      logout: '로그아웃',
      api: 'API',
      username: '이름',
      usernameMessage: '사용자 이름을 입력해 주세요',
      photo: '사진',
      photoDescription: '프로필에 표시됩니다.',
      colorSchema: '색상 테마',
      colorSchemaMessage: '색상 테마를 선택해 주세요',
      colorSchemaPlaceholder: '색상 테마를 선택하세요',
      bright: '밝게',
      dark: '어둡게',
      timezone: '시간대',
      timezoneMessage: '시간대를 입력해 주세요',
      timezonePlaceholder: '시간대를 선택하세요',
      email: '이메일',
      emailDescription: '등록 후에는 이메일을 변경할 수 없습니다.',
      currentPassword: '현재 비밀번호',
      currentPasswordMessage: '비밀번호를 입력해 주세요',
      newPassword: '새 비밀번호',
      changePassword: '비밀번호 변경',
      newPasswordMessage: '비밀번호를 입력해 주세요',
      newPasswordDescription: '새 비밀번호는 8자 이상이어야 합니다.',
      confirmPassword: '새 비밀번호 확인',
      confirmPasswordMessage: '비밀번호를 확인해 주세요',
      confirmPasswordNonMatchMessage: '입력한 새 비밀번호가 일치하지 않습니다!',
      cancel: '취소',
      addedModels: '추가된 모델',
      modelsToBeAdded: '추가할 모델',
      addTheModel: '추가',
      apiKey: 'API Key',
      apiKeyMessage: 'API 키를 입력해 주세요',
      apiKeyTip: '해당 LLM 공급업체에 등록하여 API 키를 얻을 수 있습니다.',
      showMoreModels: '모델 보기',
      hideModels: '모델 숨기기',
      baseUrl: 'Base URL',
      baseUrlTip:
        'API 키가 OpenAI에서 발급된 경우 무시하세요. 다른 중간 제공업체는 API 키와 함께 이 기본 URL을 제공합니다.',
      tongyiBaseUrlTip:
        '중국 사용자: 입력 불필요 또는 https://dashscope.aliyuncs.com/compatible-mode/v1 사용. 해외 사용자: https://dashscope-intl.aliyuncs.com/compatible-mode/v1 사용',
      siliconBaseUrlTip:
        '중국 사용자: 입력 불필요 또는 https://api.siliconflow.cn/v1 사용. 해외 사용자: https://api.siliconflow.com/v1 사용',
      tongyiBaseUrlPlaceholder: '(해외 사용자만 입력, 팁 참조)',
      minimaxBaseUrlTip: '해외 사용자만: https://api.minimax.io/v1 사용',
      minimaxBaseUrlPlaceholder:
        '(해외 사용자만, https://api.minimax.io/v1 입력)',
      openaiBaseUrlPlaceholder: 'https://api.openai.com/v1',
      anthropicBaseUrlPlaceholder: 'https://api.anthropic.com/v1',
      siliconflowBaseUrlPlaceholder: 'https://api.siliconflow.cn/v1',
      groupId: '그룹 ID',
      providerOrder: '제공업체 순서',
      paddleocrApiUrl: 'PaddleOCR API URL',
      paddleocrApiUrlMessage: 'PaddleOCR API URL을 입력해 주세요',
      paddleocrApiUrlPlaceholder:
        '예: https://paddleocr-server.com/layout-parsing',
      paddleocrAccessToken: 'PaddleOCR 액세스 토큰',
      paddleocrAccessTokenMessage: 'PaddleOCR 액세스 토큰을 입력해 주세요',
      paddleocrAccessTokenPlaceholder: 'PaddleOCR 액세스 토큰 (선택 사항)',
      paddleocrAlgorithm: 'PaddleOCR 알고리즘',
      paddleocrAlgorithmMessage: 'PaddleOCR 알고리즘을 선택해 주세요',
      mineruApiserver: 'MinerU API 서버',
      mineruApiserverMessage: 'MinerU API 서버 URL을 입력해 주세요',
      mineruApiserverPlaceholder: '예: http://host.docker.internal:9987',
      mineruOutputDir: 'MinerU 출력 디렉토리',
      mineruOutputDirMessage: 'MinerU 출력 디렉토리를 입력해 주세요',
      mineruOutputDirPlaceholder: '/tmp/mineru',
      mineruBackend: 'MinerU 백엔드',
      mineruBackendMessage: 'MinerU 백엔드를 선택해 주세요',
      mineruSelectBackend: '처리 백엔드 선택',
      mineruServerUrl: 'MinerU 서버 URL',
      mineruServerUrlMessage: 'MinerU 서버 URL을 입력해 주세요',
      mineruServerUrlPlaceholder: '예: http://your-vllm-server:30000',
      mineruDeleteOutput: '출력 파일 삭제',
      mineruDeleteOutputMessage: '출력 삭제 값이 유효하지 않습니다',
      opendataloaderApiserver: 'OpenDataLoader API 서버',
      opendataloaderApiserverMessage: 'OpenDataLoader API 서버를 입력해 주세요',
      opendataloaderApiserverPlaceholder:
        'http://your-opendataloader-service:9383',
      modify: '수정',
      systemModelSettings: '기본 모델 설정',
      chatModel: 'LLM',
      chatModelTip: '새로 생성된 각 데이터셋의 기본 LLM입니다.',
      embeddingModel: 'Embedding',
      embeddingModelTip:
        '새로 생성된 각 데이터셋의 기본 임베딩 모델입니다. 드롭다운에서 임베딩 모델을 찾을 수 없으면 RAGFlow 슬림 에디션(임베딩 모델 미포함)을 사용 중인지 확인하거나 https://ragflow.io/docs/dev/supported_models 에서 모델 제공업체가 이 모델을 지원하는지 확인하세요.',
      img2txtModel: 'VLM',
      img2txtModelTip:
        '새로 생성된 각 데이터셋의 기본 VLM입니다. 이미지나 동영상을 설명합니다. 드롭다운에서 모델을 찾을 수 없으면 https://ragflow.io/docs/dev/supported_models 에서 모델 제공업체가 이 모델을 지원하는지 확인하세요.',
      sequence2txtModel: 'ASR',
      sequence2txtModelTip:
        '새로 생성된 각 데이터셋의 기본 ASR 모델입니다. 이 모델을 사용하여 음성을 텍스트로 변환하세요.',
      rerankModel: 'Rerank',
      rerankModelTip: `Chunk rerank를 위한 기본 rerank 모델입니다. 드롭다운에서 모델을 찾을 수 없으면 https://ragflow.io/docs/dev/supported_models 에서 모델 제공업체가 이 모델을 지원하는지 확인하세요.`,
      ttsModel: 'TTS',
      ttsModelTip:
        '기본 텍스트 음성 변환 모델입니다. 드롭다운에서 모델을 찾을 수 없으면 https://ragflow.io/docs/dev/supported_models 에서 모델 제공업체가 이 모델을 지원하는지 확인하세요.',
      workspace: '워크스페이스',
      upgrade: '업그레이드',
      addLlmTitle: 'LLM 추가',
      editLlmTitle: '{{name}} 모델 편집',
      editModel: '모델 편집',
      instanceName: '인스턴스 이름',
      instanceNameMessage: '인스턴스 이름을 입력해 주세요',
      instanceNameTip:
        '동일한 팩토리 아래에서 이 제공업체 인스턴스를 식별하기 위한 고유 이름입니다.',
      modelName: '모델 이름',
      modelID: '모델 ID',
      modelUid: '모델 UID',
      modelNameMessage: '모델 이름을 입력해 주세요',
      modelType: '모델 유형',
      modelTypeMessage: '모델 유형을 입력해 주세요',
      addLlmBaseUrl: '기본 URL',
      baseUrlNameMessage: '기본 URL을 입력해 주세요',
      paddleocr: {
        apiUrl: 'PaddleOCR API URL',
        apiUrlPlaceholder: '예: https://paddleocr-server.com/layout-parsing',
        accessToken: 'AI Studio 액세스 토큰',
        accessTokenPlaceholder: 'AI Studio 토큰 (선택 사항)',
        algorithm: 'PaddleOCR 알고리즘',
        selectAlgorithm: '알고리즘 선택',
        modelNamePlaceholder: '예: paddleocr-from-env-1',
        modelNameRequired: '모델 이름은 필수입니다',
        apiUrlRequired: 'PaddleOCR API URL은 필수입니다',
      },
      vision: '비전을 지원하나요?',
      ollamaLink: '{{name}} 통합 방법',
      FishAudioLink: 'FishAudio 사용 방법',
      TencentCloudLink: 'TencentCloud ASR 사용 방법',
      volcModelNameMessage: '모델 이름을 입력해 주세요',
      addEndpointID: '모델 ID',
      endpointIDMessage: '모델의 모델 ID를 입력해 주세요',
      addArkApiKey: 'VOLC ARK_API_KEY',
      ArkApiKeyMessage: 'ARK_API_KEY를 입력해 주세요',
      bedrockModelNameMessage: '모델 이름을 입력해 주세요',
      addBedrockEngineAK: 'ACCESS KEY',
      bedrockAKMessage: 'ACCESS KEY를 입력해 주세요',
      addBedrockSK: 'SECRET KEY',
      bedrockSKMessage: 'SECRET KEY를 입력해 주세요',
      bedrockRegion: 'AWS 리전',
      bedrockRegionMessage: '선택해 주세요',
      'us-east-2': '미국 동부 (오하이오)',
      'us-east-1': '미국 동부 (버지니아 북부)',
      'us-west-1': '미국 서부 (캘리포니아 북부)',
      'us-west-2': '미국 서부 (오레곤)',
      'af-south-1': '아프리카 (케이프타운)',
      'ap-east-1': '아시아 태평양 (홍콩)',
      'ap-south-2': '아시아 태평양 (하이데라바드)',
      'ap-southeast-3': '아시아 태평양 (자카르타)',
      'ap-southeast-5': '아시아 태평양 (말레이시아)',
      'ap-southeast-4': '아시아 태평양 (멜버른)',
      'ap-south-1': '아시아 태평양 (뭄바이)',
      'ap-northeast-3': '아시아 태평양 (오사카)',
      'ap-northeast-2': '아시아 태평양 (서울)',
      'ap-southeast-1': '아시아 태평양 (싱가포르)',
      'ap-southeast-2': '아시아 태평양 (시드니)',
      'ap-east-2': '아시아 태평양 (타이베이)',
      'ap-southeast-7': '아시아 태평양 (태국)',
      'ap-northeast-1': '아시아 태평양 (도쿄)',
      'ca-central-1': '캐나다 (중부)',
      'ca-west-1': '캐나다 서부 (캘거리)',
      'eu-central-1': '유럽 (프랑크푸르트)',
      'eu-west-1': '유럽 (아일랜드)',
      'eu-west-2': '유럽 (런던)',
      'eu-south-1': '유럽 (밀라노)',
      'eu-west-3': '유럽 (파리)',
      'eu-south-2': '유럽 (스페인)',
      'eu-north-1': '유럽 (스톡홀름)',
      'eu-central-2': '유럽 (취리히)',
      'il-central-1': '이스라엘 (텔아비브)',
      'mx-central-1': '멕시코 (중부)',
      'me-south-1': '중동 (바레인)',
      'me-central-1': '중동 (UAE)',
      'sa-east-1': '남아메리카 (상파울루)',
      'us-gov-east-1': 'AWS GovCloud (미국 동부)',
      'us-gov-west-1': 'AWS GovCloud (미국 서부)',
      addTencentCloudSID: 'TencentCloud 시크릿 ID',
      TencentCloudSIDMessage: '시크릿 ID를 입력해 주세요',
      addTencentCloudSK: 'TencentCloud 시크릿 키',
      TencentCloudSKMessage: '시크릿 키를 입력해 주세요',
      SparkModelNameMessage: 'Spark 모델을 선택해 주세요',
      addSparkAPIPassword: 'Spark APIPassword',
      SparkAPIPasswordMessage: 'APIPassword를 입력해 주세요',
      addSparkAPPID: 'Spark APP ID',
      SparkAPPIDMessage: 'APP ID를 입력해 주세요',
      addSparkAPISecret: 'Spark API SECRET',
      SparkAPISecretMessage: 'API SECRET을 입력해 주세요',
      addSparkAPIKey: 'Spark APIKey',
      SparkAPIKeyMessage: 'APIKey를 입력해 주세요',
      yiyanModelNameMessage: '모델 이름을 입력해 주세요',
      addyiyanAK: 'yiyan API Key',
      yiyanAKMessage: 'API Key를 입력해 주세요',
      addyiyanSK: 'yiyan SECRET KEY',
      yiyanSKMessage: 'SECRET KEY를 입력해 주세요',
      FishAudioModelNameMessage: '음성 합성 모델에 이름을 지정해 주세요',
      addFishAudioAK: 'Fish Audio API Key',
      addFishAudioAKMessage: 'API Key를 입력해 주세요',
      addFishAudioRefID: 'FishAudio 참조 ID',
      addFishAudioRefIDMessage:
        '참조 ID를 입력해 주세요 (기본 모델을 사용하려면 비워두세요).',
      GoogleModelIDMessage: '모델 ID를 입력해 주세요',
      addGoogleProjectID: '프로젝트 ID',
      GoogleProjectIDMessage: '프로젝트 ID를 입력해 주세요',
      addGoogleServiceAccountKey:
        '서비스 계정 키 (애플리케이션 기본 자격 증명을 사용하는 경우 비워두세요)',
      GoogleServiceAccountKeyMessage:
        'Google Cloud 서비스 계정 키를 base64 형식으로 입력해 주세요',
      addGoogleRegion: 'Google Cloud 리전',
      GoogleRegionMessage: 'Google Cloud 리전을 입력해 주세요',
      modelProvidersWarn: `먼저 <b>설정 > 모델 제공업체</b>에서 임베딩 모델과 LLM을 모두 추가하세요. 그런 다음 '기본 모델 설정'에서 설정하세요.`,
      apiVersion: 'API-Version',
      apiVersionMessage: 'API 버전을 입력해 주세요',
      add: '추가',
      updateDate: '날짜',
      role: '상태',
      invite: '멤버 초대',
      agree: '수락',
      refuse: '거절',
      teamMembers: '팀 멤버',
      joinedTeams: '가입한 팀',
      sureDelete: '이 멤버를 제거하시겠습니까?',
      quit: '나가기',
      sureQuit: '가입한 팀을 나가시겠습니까?',
      secretKey: '시크릿 키',
      publicKey: '공개 키',
      secretKeyMessage: '시크릿 키를 입력해 주세요',
      publicKeyMessage: '공개 키를 입력해 주세요',
      hostMessage: '호스트를 입력해 주세요',
      configuration: '설정',
      langfuseDescription:
        'LLM 애플리케이션을 디버그하고 개선하기 위한 추적, 평가, 프롬프트 관리 및 메트릭.',
      viewLangfuseSDocumentation: 'Langfuse 문서 보기',
      view: '보기',
      modelsToBeAddedTooltip:
        '모델 제공업체가 목록에 없지만 "OpenAI 호환"이라고 하는 경우 OpenAI-API-compatible 카드를 선택하여 관련 모델을 추가하세요. ',
      mcp: 'MCP',
      mineru: {
        modelNameRequired: '모델 이름은 필수입니다',
        apiServerRequired: 'MinerU API 서버 설정이 필요합니다',
        serverUrlBackendLimit:
          'MinerU 서버 URL 주소는 HTTP 클라이언트 백엔드에서만 사용 가능합니다',
        apiserver: 'MinerU API 서버 설정',
        outputDir: 'MinerU 출력 디렉토리 경로',
        backend: 'MinerU 처리 백엔드 유형',
        serverUrl: 'MinerU 서버 URL 주소',
        deleteOutput: '처리 후 출력 파일 삭제',
        selectBackend: '처리 백엔드 선택',
        backendOptions: {
          pipeline: '표준 파이프라인 처리',
          vlmTransformers: 'Transformers를 사용한 비전 언어 모델',
          vlmVllmEngine: 'vLLM 엔진을 사용한 비전 언어 모델',
          vlmHttpClient: 'HTTP 클라이언트를 통한 비전 언어 모델',
          vlmMlxEngine: 'MLX 엔진을 사용한 비전 언어 모델',
          vlmVllmAsyncEngine:
            'vLLM 비동기 엔진을 사용한 비전 언어 모델 (실험적)',
          vlmLmdeployEngine: 'LMDeploy 엔진을 사용한 비전 언어 모델 (실험적)',
        },
      },
      modelTypes: {
        chat: '채팅',
        embedding: 'Embedding',
        rerank: 'Rerank',
        sequence2text: 'sequence2text',
        tts: 'TTS',
        image2text: 'OCR',
        speech2text: 'ASR',
      },
      showToc: '목차 보기',
      hideToc: '목차 숨기기',
      listModels: '모델 목록',
      allModels: '전체 모델',
      listModelsSearchPlaceholder: '모델 검색…',
      listModelsEmpty: '사용 가능한 모델 없음',
      listModelsLoading: '모델 로딩 중…',
      selectModelBeforeVerify: '검증 전 모델을 최소 하나 이상 선택해 주세요.',
      addCustomModel: '커스텀 모델 추가',
      addCustomModelTitle: '커스텀 모델 추가',
      editCustomModelTitle: '모델 편집',
      modelMaxTokens: '최대 토큰',
      modelFeatures: '모델 기능',
      modelFeatureToolCall: '도구 호출',
      modelFeatureFunctionCall: '함수 호출',
      modelNameRequired: '모델 이름은 필수입니다',
      modelNameDuplicate: '이미 존재하는 모델 이름입니다',
      modelTypeRequired: '모델 유형을 최소 하나 이상 선택해 주세요',
      modelMaxTokensMessage: '최대 토큰은 숫자여야 합니다',
      modelMaxTokensMinMessage: '최대 토큰은 0 이상이어야 합니다',
    },
    message: {
      registered: '등록되었습니다!',
      logout: '로그아웃',
      logged: '로그인되었습니다!',
      pleaseSelectChunk: 'Chunk를 선택해 주세요',
      registerDisabled: '사용자 등록이 비활성화되었습니다',
      modified: '수정됨',
      created: '생성됨',
      deleted: '삭제됨',
      renamed: '이름 변경됨',
      operated: '처리됨',
      updated: '업데이트됨',
      uploaded: '업로드됨',
      200: '서버가 요청한 데이터를 성공적으로 반환했습니다.',
      201: '데이터를 성공적으로 생성하거나 수정했습니다.',
      202: '요청이 백그라운드에서 대기 중입니다 (비동기 작업).',
      204: '데이터가 성공적으로 삭제되었습니다.',
      400: '요청에 오류가 발생하여 서버가 데이터를 생성하거나 수정하지 않았습니다.',
      401: '다시 로그인해 주세요.',
      403: '사용자가 인증되었지만 접근이 금지되었습니다.',
      404: '존재하지 않는 레코드에 대한 요청이며 서버가 작업을 수행하지 않았습니다.',
      406: '요청한 형식이 지원되지 않습니다.',
      410: '요청한 리소스가 영구적으로 삭제되었으며 더 이상 사용할 수 없습니다.',
      413: '한 번에 업로드된 파일의 총 크기가 너무 큽니다.',
      422: '객체를 생성할 때 유효성 검사 오류가 발생했습니다.',
      500: '서버 오류가 발생했습니다. 서버를 확인해 주세요.',
      502: '게이트웨이 오류.',
      503: '서비스를 사용할 수 없습니다. 서버가 일시적으로 과부하 상태이거나 유지보수 중입니다.',
      504: '게이트웨이 타임아웃.',
      requestError: '요청 오류',
      networkAnomalyDescription:
        '네트워크에 이상이 있어 서버에 연결할 수 없습니다.',
      networkAnomaly: '네트워크 이상',
      hint: '힌트',
    },
    fileManager: {
      uploadFolderTitle: '폴더 업로드',
      folder: '폴더',
      files: '파일',
      name: '이름',
      uploadDate: '업로드 날짜',
      knowledgeBase: '데이터셋',
      size: '크기',
      action: '작업',
      addToKnowledge: '데이터셋에 연결',
      pleaseSelect: '선택해 주세요',
      newFolder: '새 폴더',
      file: '파일',
      uploadFile: '파일 업로드',
      parseOnCreation: '생성 시 파싱',
      directory: '디렉토리',
      uploadTitle: '파일을 여기에 드래그 앤 드롭하여 업로드',
      uploadDescription:
        '단일 또는 일괄 파일 업로드를 지원합니다. 로컬 배포 RAGFlow의 경우: 업로드당 총 파일 크기 제한은 1GB이며, 일괄 업로드 제한은 32개 파일입니다. 계정당 총 파일 수에는 제한이 없습니다. cloud.ragflow.io의 경우: 업로드당 총 파일 크기 제한은 10MB이며, 각 파일은 10MB를 초과할 수 없고 계정당 최대 128개 파일입니다.',
      local: '로컬 업로드',
      s3: 'S3 업로드',
      preview: '미리보기',
      fileError: '파일 오류',
      uploadLimit:
        '각 파일은 10MB를 초과할 수 없으며, 총 파일 수는 128개를 초과할 수 없습니다.',
      destinationFolder: '대상 폴더',
      pleaseUploadAtLeastOneFile: '최소 하나의 파일을 업로드해 주세요',
    },
    flow: {
      preprocess: {
        preprocess: '전처리',
        mainContent: '본문 내용',
        abstract: '요약',
        author: '저자',
        sectionTitle: '섹션 제목',
      },
      editTags: '태그 편집',
      editTagsDescription:
        '에이전트를 정리하고 필터링하기 위한 태그를 추가하세요. Enter 또는 쉼표를 눌러 추가합니다.',
      tagsPlaceholder: '태그를 입력하고 Enter를 누르세요',
      tagSuggestionsLabel: '기존 태그',
      removeTagAriaLabel: '{{tag}} 제거',
      includeHeadingContent: '상위 제목 내용 분리',
      includeHeadingContentTip:
        '활성화하면 chunk에 제목 경로와 내용만 포함되며, 상위 제목 바로 아래의 내용은 별도 chunk로 유지됩니다.',
      rootAsHeading: '첫 번째 chunk를 전역 컨텍스트로 설정',
      rootAsHeadingTip:
        '첫 번째 분할을 전역 제목으로 처리하여 문서 계층 전반에서 일관된 컨텍스트를 유지합니다. 첫 번째 섹션이 주제를 식별하는 이력서에 적합합니다.',
      hierarchyTip: `제목 트리를 구성하고 전체 계층 경로(예: 1부 › 3장 › 2절 + 본문)를 포함하는 자급자족 chunk를 생성합니다.\n
적합한 경우: 각 chunk가 계층 내 위치로 식별되어야 하는 법령, 규정, 계약서, 기술 사양 등 고도로 구조화된 텍스트.`,
      groupTip: `선택한 제목 수준에서 문서를 평탄하게 분할하고, 인접한 작은 섹션을 병합하여 의미 흐름을 보장합니다. chunk에는 계층 경로가 포함되지 않습니다.\n
적합한 경우: 서적, 매뉴얼, 보고서, 기사 등 인접 단락의 연결이 중요한 내용 중심 문서.`,
      enableMultiColumn: '다단 레이아웃 감지',
      enableMultiColumnTip:
        '다단 페이지 레이아웃을 감지하고 파싱하여 올바른 읽기 순서를 유지합니다. 두 열 또는 신문 스타일 레이아웃의 PDF나 문서에 활성화하세요.',
      removeToc: '원본 목차 제거',
      removeTocTip:
        '원본 PDF에 포함된 목차를 제거하여 일반 내용이나 검색용 chunk로 파싱되지 않도록 합니다.',
      removeHeaderFooter: '머리글 및 바닥글 제거',
      autoPlay: '오디오 자동 재생',
      downloadFileTypeTip: '다운로드할 파일 유형',
      downloadFileType: '다운로드 파일 유형',
      formatTypeError: '형식 또는 유형 오류',
      variableNameMessage: '변수 이름은 문자, 밑줄, 숫자만 포함할 수 있습니다',
      variableDescription: '변수 설명',
      defaultValue: '기본값',
      conversationVariable: '대화 변수',
      recommended: '추천',
      customerSupport: '고객 지원',
      marketing: '마케팅',
      consumerApp: '소비자 앱',
      other: '기타',
      ingestionPipeline: '수집 파이프라인',
      agents: '에이전트',
      publishedAt: '게시 일시',
      days: '일',
      beginInput: '입력 시작',
      ref: '변수',
      stockCode: '종목 코드',
      apiKeyPlaceholder:
        'YOUR_API_KEY (https://serpapi.com/manage-api-key 에서 발급)',
      flowStart: '시작',
      flowNum: 'N',
      test: '테스트',
      extractDepth: '추출 깊이',
      format: '형식',
      basic: '기본',
      advanced: '고급',
      general: '일반',
      searchDepth: '검색 깊이',
      tavilyTopic: 'Tavily 주제',
      maxResults: '최대 결과 수',
      includeAnswer: '답변 포함',
      includeRawContent: '원시 콘텐츠 포함',
      includeImages: '이미지 포함',
      includeImageDescriptions: '이미지 설명 포함',
      includeDomains: '포함 도메인',
      ExcludeDomains: '제외 도메인',
      Days: '일',
      comma: '쉼표',
      semicolon: '세미콜론',
      period: '마침표',
      lineBreak: '줄 바꿈',
      tab: '탭',
      space: '공백',
      delimiters: '구분자',
      one: '하나',
      oneChunkTitle: '참고',
      oneChunkDescription:
        '파싱된 모든 섹션이 순서대로 단일 chunk로 병합됩니다.',
      flattenMediaToText: '비전 모델 비활성화',
      flattenMediaToTextTip:
        '이미지 및 표 섹션을 일반 텍스트로 처리하고 비전 향상을 건너뜁니다.',
      enableChildrenDelimiters: '하위 chunk를 검색에 사용',
      merge: '병합',
      split: '분할',
      script: '스크립트',
      iterationItemDescription:
        '반복의 현재 요소를 나타내며, 이후 단계에서 참조하고 조작할 수 있습니다.',
      guidingQuestion: '안내 질문',
      onFailure: '실패 시',
      userPromptDefaultValue: '에이전트에게 전송해야 하는 지시입니다.',
      search: '검색',
      communication: '커뮤니케이션',
      developer: '개발자',
      typeCommandORsearch: '명령어 또는 검색어를 입력하세요...',
      builtIn: '내장',
      ExceptionDefaultValue: '예외 기본값',
      exceptionMethod: '예외 처리 방법',
      maxRounds: '최대 반성 횟수',
      delayAfterError: '오류 후 지연',
      maxRetries: '최대 재시도 횟수',
      maxSteps: '최대 단계 수',
      headless: '헤드리스',
      enableDefaultExtensions: '기본 확장 기능 활성화',
      enableDefaultExtensionsTip:
        'browser-use 기본 확장 기능(uBlock, 쿠키 처리, ClearURLs)을 활성화합니다. 런타임 확장 다운로드를 피하려면 비활성화하세요.',
      chromiumSandbox: 'Chromium 샌드박스',
      chromiumSandboxTip:
        'Chromium 샌드박스 활성화 여부입니다. Docker root 환경에서는 일반적으로 비활성화되며, 일반 호스트에서는 활성화를 권장합니다.',
      persistSession: '세션 유지',
      persistSessionTip:
        '활성화하면 이 Browser 노드가 브라우저 세션을 재사용하여 반복 로그인을 방지합니다.',
      uploadSources: '업로드 소스',
      uploadSourcesTip:
        '파일 ID, 파일 URL 또는 변수를 지원합니다. 쉼표로 여러 값을 구분하거나 JSON 배열 형식(예: ["id1","https://example.com/a.pdf"])을 사용할 수 있습니다.',
      advancedSettings: '고급 설정',
      addTools: '도구 추가',
      sysPromptDefaultValue: `
      <role>
        You are a helpful assistant, an AI assistant specialized in problem-solving for the user.
        If a specific domain is provided, adapt your expertise to that domain; otherwise, operate as a generalist.
      </role>
      <instructions>
        1. Understand the user's request.
        2. Decompose it into logical subtasks.
        3. Execute each subtask step by step, reasoning transparently.
        4. Validate accuracy and consistency.
        5. Summarize the final result clearly.
      </instructions>`,
      singleLineText: '한 줄 텍스트',
      multimodalModels: '멀티모달 모델',
      textOnlyModels: '텍스트 전용 모델',
      allModels: '모든 모델',
      codeExecDescription:
        '사용자 정의 Python 또는 Javascript 로직을 작성하세요.',
      stringTransformDescription:
        '텍스트 내용을 수정합니다. 현재 텍스트 분할 및 연결을 지원합니다.',
      foundation: '기반',
      tools: '도구',
      dataManipulation: '데이터 조작',
      flow: '플로우',
      dialog: '대화',
      cite: '인용',
      citeTip: 'citeTip',
      name: '이름',
      nameMessage: '이름을 입력해 주세요',
      lastSavedAt: '마지막 저장 시각',
      description: '설명',
      descriptionMessage: '특정 작업을 위한 에이전트입니다.',
      examples: '예시',
      to: '받는 사람',
      msg: '메시지',
      msgTip:
        '업스트림 구성 요소의 변수 내용 또는 직접 입력한 텍스트를 출력합니다.',
      messagePlaceholder: `메시지 내용을 입력하세요. '/'를 사용해 변수를 빠르게 삽입할 수 있습니다.`,
      messageMsg: '메시지를 입력하거나 이 필드를 삭제하세요.',
      addField: '옵션 추가',
      addMessage: '메시지 추가',
      loop: '루프',
      loopDescription:
        '루프는 현재 구성 요소의 최대 반복 횟수입니다. 루프 횟수가 이 값을 초과하면 구성 요소가 현재 작업을 완료할 수 없음을 의미하며, 에이전트를 재최적화해 주세요.',
      exitLoop: '루프 종료',
      exitLoopDescription: `"break"와 동일합니다. 이 노드에는 설정 항목이 없습니다. 루프 본문이 이 노드에 도달하면 루프가 종료됩니다.`,
      loopVariables: '루프 변수',
      maximumLoopCount: '최대 루프 횟수',
      loopTerminationCondition: '루프 종료 조건',
      yes: '예',
      no: '아니오',
      key: '키',
      componentId: '구성 요소 ID',
      add: '추가',
      operation: '작업',
      run: '실행',
      save: '저장',
      title: 'ID:',
      beginDescription: '플로우의 시작점',
      answerDescription: `사람과 봇 사이의 인터페이스 역할을 하는 구성 요소로, 사용자 입력을 받고 에이전트의 응답을 표시합니다.`,
      retrievalDescription: `지정된 데이터셋에서 정보를 검색하는 구성 요소입니다. 선택한 데이터셋이 동일한 임베딩 모델을 사용하는지 확인하세요.`,
      generateDescription: `LLM이 응답을 생성하도록 프롬프트하는 구성 요소입니다. 프롬프트가 올바르게 설정되었는지 확인하세요.`,
      categorizeDescription: `LLM을 사용하여 사용자 입력을 미리 정의된 카테고리로 분류하는 구성 요소입니다. 각 카테고리의 이름, 설명, 예시 및 해당 다음 구성 요소를 지정해 주세요.`,
      relevantDescription: `LLM을 사용하여 업스트림 출력이 사용자의 최신 쿼리와 관련 있는지 평가하는 구성 요소입니다. 각 판단 결과에 대한 다음 구성 요소를 지정해 주세요.`,
      rewriteQuestionDescription: `이전 대화 컨텍스트를 기반으로 상호작용 구성 요소의 사용자 쿼리를 재작성하는 구성 요소입니다.`,
      messageDescription:
        '이 구성 요소는 워크플로우의 최종 데이터 출력과 미리 정의된 메시지 내용을 반환합니다.',
      keywordDescription: `사용자 입력에서 상위 N개의 검색 결과를 검색하는 구성 요소입니다. 사용 전 TopN 값이 올바르게 설정되었는지 확인하세요.`,
      switchDescription: `이전 구성 요소의 출력을 기반으로 조건을 평가하고 실행 흐름을 제어하는 구성 요소입니다. 케이스를 정의하고 각 케이스 또는 기본 동작에 대한 작업을 지정하여 복잡한 분기 로직을 구현할 수 있습니다.`,
      wikipediaDescription: `wikipedia.org에서 검색하는 구성 요소로, TopN을 사용하여 검색 결과 수를 지정합니다. 기존 데이터셋을 보완합니다.`,
      promptText: `다음 단락들을 요약해 주세요. 숫자에 주의하고 내용을 임의로 만들지 마세요. 단락은 다음과 같습니다:
        {input}
  위 내용이 요약해야 할 내용입니다.`,
      createGraph: '에이전트 만들기',
      createFromTemplates: '템플릿에서 만들기',
      retrieval: '검색',
      generate: '생성',
      answer: '상호작용',
      categorize: '분류',
      rewriteQuestion: '재작성',
      rewrite: '재작성',
      begin: '시작',
      message: '메시지',
      blank: '빈 템플릿',
      createFromNothing: '처음부터 에이전트 만들기',
      addItem: '항목 추가',
      addSubItem: '하위 항목 추가',
      nameRequiredMsg: '이름은 필수입니다',
      nameRepeatedMsg: '이름은 중복될 수 없습니다',
      keywordExtract: '키워드',
      keywordExtractDescription: `사용자 쿼리에서 키워드를 추출하는 구성 요소로, Top N으로 추출할 키워드 수를 지정합니다.`,
      baidu: 'Baidu',
      baiduDescription: `baidu.com에서 검색하는 구성 요소로, TopN을 사용하여 검색 결과 수를 지정합니다. 기존 데이터셋을 보완합니다.`,
      duckDuckGo: 'DuckDuckGo',
      duckDuckGoDescription:
        'duckduckgo.com에서 검색하는 구성 요소로, TopN을 사용하여 검색 결과 수를 지정할 수 있습니다. 기존 데이터셋을 보완합니다.',
      searXNG: 'SearXNG',
      searXNGDescription:
        '제공된 SearXNG 인스턴스 URL을 통해 검색하는 구성 요소입니다. TopN과 인스턴스 URL을 지정하세요.',
      docGenerator: 'Doc Generator',
      docGeneratorDescription: `Markdown 내용에서 파일을 생성합니다.`,
      browser: '브라우저',
      browserDescription:
        '브라우저 작업을 자동화합니다. 모델 설정 및 프롬프트 기반 작업을 지원합니다. 업로드 소스는 파일 ID와 URL을 지원하며, 다운로드된 파일은 대상 폴더에 저장할 수 있습니다.',
      subtitle: '자막',
      logoImage: '로고 이미지',
      logoPosition: '로고 위치',
      logoWidth: '로고 너비',
      logoHeight: '로고 높이',
      fontFamily: '폰트 패밀리',
      fontSize: '폰트 크기',
      titleFontSize: '제목 폰트 크기',
      pageSize: '페이지 크기',
      orientation: '방향',
      marginTop: '상단 여백',
      marginBottom: '하단 여백',
      filename: '파일 이름',
      outputDirectory: '출력 디렉토리',
      addPageNumbers: '페이지 번호 추가',
      addTimestamp: '타임스탬프 추가',
      watermarkText: '워터마크 텍스트',
      channel: '채널',
      channelTip: `구성 요소의 입력에 대해 텍스트 검색 또는 뉴스 검색을 수행합니다`,
      text: '텍스트',
      news: '뉴스',
      messageHistoryWindowSize: '메시지 창 크기',
      messageHistoryWindowSizeTip:
        'LLM에 표시되는 대화 기록 창 크기입니다. 클수록 좋지만 LLM의 최대 토큰 한도에 주의하세요.',
      wikipedia: 'Wikipedia',
      pubMed: 'PubMed',
      pubMedDescription:
        'https://pubmed.ncbi.nlm.nih.gov/ 에서 검색하는 구성 요소로, TopN을 사용하여 검색 결과 수를 지정할 수 있습니다. 기존 데이터셋을 보완합니다.',
      email: '이메일',
      emailTip:
        '이메일은 필수 항목입니다. 여기에 이메일 주소를 입력해야 합니다.',
      arXiv: 'ArXiv',
      arXivDescription:
        'https://arxiv.org/ 에서 검색하는 구성 요소로, TopN을 사용하여 검색 결과 수를 지정할 수 있습니다. 기존 데이터셋을 보완합니다.',
      sortBy: '정렬 기준',
      submittedDate: '제출일',
      lastUpdatedDate: '최종 업데이트일',
      relevance: '관련성',
      google: 'Google',
      googleDescription:
        'https://www.google.com/ 에서 검색하는 구성 요소로, TopN을 사용하여 검색 결과 수를 지정할 수 있습니다. 기존 데이터셋을 보완합니다. serpapi.com의 API 키가 필요합니다.',
      bing: 'Bing',
      bingDescription:
        'https://www.bing.com/ 에서 검색하는 구성 요소로, TopN을 사용하여 검색 결과 수를 지정할 수 있습니다. 기존 데이터셋을 보완합니다. microsoft.com의 API 키가 필요합니다.',
      apiKey: 'API Key',
      country: '국가 및 지역',
      language: '언어',
      googleScholar: 'Google Scholar',
      googleScholarDescription:
        'https://scholar.google.com/ 에서 검색하는 구성 요소입니다. Top N을 사용하여 검색 결과 수를 지정할 수 있습니다.',
      yearLow: '최소 연도',
      yearHigh: '최대 연도',
      patents: '특허',
      data: '데이터',
      deepL: 'DeepL',
      deepLDescription:
        'https://www.deepl.com/ 에서 전문 번역을 제공하는 구성 요소입니다.',
      authKey: '인증 키',
      sourceLang: '원본 언어',
      targetLang: '대상 언어',
      gitHub: 'GitHub',
      gitHubDescription:
        'https://github.com/ 에서 저장소를 검색하는 구성 요소입니다. Top N을 사용하여 검색 결과 수를 지정할 수 있습니다.',
      baiduFanyi: 'BaiduFanyi',
      baiduFanyiDescription:
        'https://fanyi.baidu.com/ 에서 전문 번역을 제공하는 구성 요소입니다.',
      appid: '앱 ID',
      secretKey: '시크릿 키',
      domain: '도메인',
      transType: '번역 유형',
      baiduSecretKeyOptions: {
        translate: '일반 번역',
        fieldtranslate: '분야별 번역',
      },
      baiduDomainOptions: {
        it: '정보 기술',
        finance: '금융 및 경제',
        machinery: '기계 제조',
        senimed: '생의학',
        novel: '온라인 문학',
        academic: '학술 논문',
        aerospace: '항공우주',
        wiki: '인문 사회과학',
        news: '뉴스 및 정보',
        law: '법률 및 규정',
        contract: '계약',
      },
      baiduSourceLangOptions: {
        auto: '자동 감지',
        zh: '중국어',
        en: '영어',
        yue: '광둥어',
        wyw: '고전 중국어',
        jp: '일본어',
        kor: '한국어',
        fra: '프랑스어',
        spa: '스페인어',
        th: '태국어',
        ara: '아랍어',
        ru: '러시아어',
        pt: '포르투갈어',
        de: '독일어',
        it: '이탈리아어',
        el: '그리스어',
        nl: '네덜란드어',
        pl: '폴란드어',
        bul: '불가리아어',
        est: '에스토니아어',
        dan: '덴마크어',
        fin: '핀란드어',
        cs: '체코어',
        rom: '루마니아어',
        slo: '슬로베니아어',
        swe: '스웨덴어',
        hu: '헝가리어',
        cht: '번체 중국어',
        vie: '베트남어',
      },
      qWeather: 'QWeather',
      qWeatherDescription:
        'https://www.qweather.com/ 에서 기온, 대기질 등 날씨 정보를 검색하는 구성 요소입니다.',
      lang: '언어',
      type: '유형',
      webApiKey: 'Web API 키',
      userType: '사용자 유형',
      timePeriod: '기간',
      qWeatherLangOptions: {
        zh: '간체 중국어',
        'zh-hant': '번체 중국어',
        en: '영어',
        de: '독일어',
        es: '스페인어',
        fr: '프랑스어',
        it: '이탈리아어',
        ja: '일본어',
        ko: '한국어',
        ru: '러시아어',
        hi: '힌디어',
        th: '태국어',
        ar: '아랍어',
        pt: '포르투갈어',
        bn: '벵골어',
        ms: '말레이어',
        nl: '네덜란드어',
        el: '그리스어',
        la: '라틴어',
        sv: '스웨덴어',
        id: '인도네시아어',
        pl: '폴란드어',
        tr: '터키어',
        cs: '체코어',
        et: '에스토니아어',
        vi: '베트남어',
        fil: '필리핀어',
        fi: '핀란드어',
        he: '히브리어',
        is: '아이슬란드어',
        nb: '노르웨이어',
      },
      qWeatherTypeOptions: {
        weather: '날씨 예보',
        indices: '날씨 생활 지수',
        airquality: '대기질',
      },
      qWeatherUserTypeOptions: {
        free: '무료 구독자',
        paid: '유료 구독자',
      },
      qWeatherTimePeriodOptions: {
        now: '현재',
        '3d': '3일',
        '7d': '7일',
        '10d': '10일',
        '15d': '12일',
        '30d': '30일',
      },
      publish: 'API',
      exeSQL: 'SQL 실행',
      exeSQLDescription:
        'MySQL, PostgreSQL, MariaDB에서 SQL 쿼리를 수행하는 구성 요소입니다.',
      dbType: '데이터베이스 유형',
      database: '데이터베이스',
      username: '사용자 이름',
      userId: '사용자 ID',
      host: '호스트',
      port: '포트',
      password: '비밀번호',
      switch: 'Switch',
      logicalOperator: '논리 연산자',
      switchOperatorOptions: {
        equal: '같음',
        notEqual: '같지 않음',
        gt: '초과',
        ge: '이상',
        lt: '미만',
        le: '이하',
        contains: '포함',
        notContains: '포함하지 않음',
        startWith: '시작 문자',
        endWith: '끝 문자',
        empty: '비어 있음',
        notEmpty: '비어 있지 않음',
        in: '포함됨',
        notIn: '포함되지 않음',
        is: '임',
        isNot: '아님',
      },
      switchLogicOperatorOptions: {
        and: 'AND',
        or: 'OR',
      },
      operator: '연산자',
      value: '값',
      useTemplate: '사용',
      wenCai: 'WenCai',
      queryType: '쿼리 유형',
      wenCaiDescription:
        '다양한 금융 웹사이트에서 주가, 펀딩 뉴스 등 금융 정보를 조회하는 구성 요소입니다.',
      wenCaiQueryTypeOptions: {
        stock: '주식',
        zhishu: '지수',
        fund: '펀드',
        hkstock: '홍콩 주식',
        usstock: '미국 주식',
        threeboard: '신규 OTC 시장',
        conbond: '전환 사채',
        insurance: '보험',
        futures: '선물',
        lccp: '금융',
        foreign_exchange: '외환',
      },
      akShare: 'AkShare',
      akShareDescription:
        'https://www.eastmoney.com/ 에서 주식 뉴스를 조회하는 구성 요소입니다.',
      yahooFinance: 'YahooFinance',
      yahooFinanceDescription:
        '티커 심볼을 사용하여 상장 기업 정보를 조회하는 구성 요소입니다.',
      crawler: '웹 크롤러',
      crawlerDescription:
        '지정된 URL에서 HTML 소스 코드를 크롤링하는 구성 요소입니다.',
      proxy: '프록시',
      crawlerResultOptions: {
        html: 'Html',
        markdown: 'Markdown',
        content: '콘텐츠',
      },
      extractType: '추출 유형',
      info: '정보',
      history: '이력',
      financials: '재무',
      balanceSheet: '대차대조표',
      cashFlowStatement: '현금 흐름표',
      jin10: 'Jin10',
      jin10Description:
        'Jin10 오픈 플랫폼에서 뉴스 업데이트, 캘린더, 시세, 참조 등 금융 정보를 조회하는 구성 요소입니다.',
      flashType: '속보 유형',
      filter: '필터',
      contain: '포함',
      calendarType: '캘린더 유형',
      calendarDatashape: '캘린더 데이터 형태',
      symbolsDatatype: '심볼 데이터 유형',
      symbolsType: '심볼 유형',
      jin10TypeOptions: {
        flash: '속보',
        calendar: '캘린더',
        symbols: '시세',
        news: '참조',
      },
      jin10FlashTypeOptions: {
        '1': '시장 뉴스',
        '2': '선물 뉴스',
        '3': '미국-홍콩 뉴스',
        '4': 'A주 뉴스',
        '5': '원자재 및 외환 뉴스',
      },
      jin10CalendarTypeOptions: {
        cj: '거시경제 데이터 캘린더',
        qh: '선물 캘린더',
        hk: '홍콩 주식시장 캘린더',
        us: '미국 주식시장 캘린더',
      },
      jin10CalendarDatashapeOptions: {
        data: '데이터',
        event: '이벤트',
        holiday: '공휴일',
      },
      jin10SymbolsTypeOptions: {
        GOODS: '상품 시세',
        FOREX: '외환 시세',
        FUTURE: '국제 시장 시세',
        CRYPTO: '암호화폐 시세',
      },
      jin10SymbolsDatatypeOptions: {
        symbols: '상품 목록',
        quotes: '최신 시장 시세',
      },
      concentrator: 'Concentrator',
      concentratorDescription:
        '업스트림 구성 요소의 출력을 수신하고 다운스트림 구성 요소에 입력으로 전달하는 구성 요소입니다.',
      tuShare: 'TuShare',
      tuShareDescription:
        '주류 금융 웹사이트에서 금융 뉴스 브리프를 조회하는 구성 요소로, 산업 및 정량 연구를 지원합니다.',
      tuShareSrcOptions: {
        sina: 'Sina',
        wallstreetcn: 'wallstreetcn',
        '10jqka': '스트레이트 플러시',
        eastmoney: 'Eastmoney',
        yuncaijing: 'YUNCAIJING',
        fenghuang: 'FENGHUANG',
        jinrongjie: 'JRJ',
      },
      token: '토큰',
      src: '소스',
      startDate: '시작일',
      endDate: '종료일',
      keyword: '키워드',
      note: '메모',
      noteDescription: '메모',
      notePlaceholder: '메모를 입력해 주세요',
      invoke: 'HTTP 요청',
      invokeDescription: `다른 구성 요소의 출력 또는 상수를 입력으로 사용하여 원격 서비스를 호출하는 구성 요소입니다.`,
      url: 'URL',
      method: '방법',
      timeout: '타임아웃',
      headers: '헤더',
      cleanHtml: 'HTML 정리',
      cleanHtmlTip:
        '응답이 HTML 형식이고 주요 내용만 필요한 경우 활성화하세요.',
      invalidUrl:
        '유효한 URL이거나 {variable_name} 또는 {component@variable} 형식의 변수 플레이스홀더가 포함된 URL이어야 합니다',
      reference: '참조',
      input: '입력',
      output: '출력',
      parameter: '파라미터',
      howUseId: '에이전트 ID를 어떻게 사용하나요?',
      content: '내용',
      operationResults: '작업 결과',
      autosaved: '자동 저장됨',
      optional: '선택 사항',
      pasteFileLink: '파일 링크 붙여넣기',
      testRun: '테스트 실행',
      template: '템플릿',
      templateDescription:
        '다른 구성 요소의 출력을 형식화하는 구성 요소입니다. 1. Jinja2 템플릿을 지원하며, 입력을 객체로 변환한 후 템플릿을 렌더링합니다. 2. {parameter} 문자열 치환 방법도 동시에 지원합니다.',
      emailComponent: '이메일',
      emailDescription: '지정된 주소로 이메일을 전송합니다.',
      smtpServer: 'SMTP 호스트',
      smtpPort: 'SMTP 포트',
      senderEmail: '발신자 이메일 주소',
      smtpUsername: 'SMTP 로그인 사용자 이름',
      authCode: 'SMTP 비밀번호 / 앱 비밀번호',
      senderName: '발신자 표시 이름',
      toEmail: '수신자 이메일',
      ccEmail: '참조 이메일',
      emailSubject: '제목',
      emailContent: '내용',
      smtpServerRequired: 'SMTP 서버 주소를 입력해 주세요',
      senderEmailRequired: '발신자 이메일을 입력해 주세요',
      authCodeRequired: '인증 코드를 입력해 주세요',
      toEmailRequired: '수신자 이메일을 입력해 주세요',
      emailContentRequired: '이메일 내용을 입력해 주세요',
      emailSentSuccess: '이메일이 성공적으로 전송되었습니다',
      emailSentFailed: '이메일 전송에 실패했습니다',
      dynamicParameters: '동적 파라미터',
      jsonFormatTip:
        '업스트림 구성 요소는 다음 형식의 JSON 문자열을 제공해야 합니다:',
      toEmailTip: 'to_email: 수신자 이메일 (필수)',
      ccEmailTip: 'cc_email: 참조 이메일 (선택)',
      subjectTip: 'subject: 이메일 제목 (선택)',
      contentTip: 'content: 이메일 내용 (선택)',
      jsonUploadTypeErrorMessage: 'json 파일을 업로드해 주세요',
      jsonUploadContentErrorMessage: 'json 파일 오류',
      iteration: '반복',
      iterationDescription: `입력 배열을 반복하고 각 항목에 대해 정의된 로직을 실행하는 루프 구성 요소입니다.`,
      delimiterTip: `
이 구분자는 입력 텍스트를 여러 텍스트 조각으로 분할하는 데 사용되며, 각 조각은 반복의 입력 항목으로 처리됩니다.`,
      delimiterOptions: {
        comma: '쉼표',
        lineBreak: '줄 바꿈',
        tab: '탭',
        underline: '밑줄',
        diagonal: '슬래시',
        minus: '대시',
        semicolon: '세미콜론',
      },
      addVariable: '변수 추가',
      variableSettings: '변수 설정',
      systemPrompt: '시스템 프롬프트',
      userPrompt: '사용자 프롬프트',
      tocDataSource: '데이터 소스',
      addCategory: '카테고리 추가',
      categoryName: '카테고리 이름',
      nextStep: '다음 단계',
      variableExtractDescription:
        '대화 전반에 걸쳐 사용자 정보를 전역 변수로 추출합니다',
      variableExtract: '변수',
      variables: '변수',
      variablesTip: `빈 값으로 명확한 JSON 키 변수를 설정하세요. 예:
      {
        "UserCode":"",
        "NumberPhone":""
      }`,
      datatype: 'HTTP 요청의 MIME 유형',
      insertVariableTip: `/ 변수 삽입`,
      mergePath: '경로 병합',
      mergePathTip:
        '활성화하면 변수 바로 뒤의 점 접미사가 경로 쿼리로 병합됩니다. 예: {node@result.name}.',
      historyVersion: '버전 이력',
      version: {
        created: '생성됨',
        canvasCategory: '캔버스 카테고리',
        tags: '태그',
        details: '버전 세부 사항',
        dsl: 'DSL',
        download: '다운로드',
        version: '버전',
        select: '선택된 버전 없음',
      },
      setting: '설정',
      settings: {
        agentSetting: '에이전트 설정',
        title: '제목',
        description: '설명',
        upload: '업로드',
        photo: '사진',
        permissions: '권한',
        permissionsTip: '여기서 팀 멤버의 권한을 설정할 수 있습니다.',
        me: '나',
        team: '팀',
      },
      noMoreData: '더 이상 데이터가 없습니다',
      searchAgentPlaceholder: '에이전트 검색',
      footer: {
        profile: 'All rights reserved @ React',
      },
      layout: {
        file: '파일',
        knowledge: '지식',
        chat: '채팅',
      },
      prompt: '프롬프트',
      promptTip:
        '시스템 프롬프트를 사용하여 LLM의 작업을 설명하고, 응답 방식을 지정하며, 기타 요구 사항을 개략적으로 설명하세요. 시스템 프롬프트는 LLM의 다양한 데이터 입력 역할을 하는 키(변수)와 함께 사용되는 경우가 많습니다. 사용할 키를 표시하려면 슬래시 `/` 또는 (x) 버튼을 사용하세요.',
      promptMessage: '프롬프트는 필수입니다',
      infor: '정보 실행',
      knowledgeBasesTip:
        '이 채팅 어시스턴트와 연결할 데이터셋을 선택하거나, 아래에서 데이터셋 ID를 포함한 변수를 선택하세요.',
      knowledgeBaseVars: '데이터셋 변수',
      code: '코드',
      codeDescription: '개발자가 사용자 정의 Python 로직을 작성할 수 있습니다.',
      dataOperations: '데이터 작업',
      dataOperationsDescription: 'Data 객체에 대한 다양한 작업을 수행합니다.',
      listOperations: '목록 작업',
      listOperationsDescription: '목록에 대한 작업을 수행합니다.',
      variableAssigner: '변수 할당자',
      variableAssignerDescription:
        'Data 객체에서 키와 값을 추출, 필터링, 편집하는 작업을 수행하는 구성 요소입니다.',
      variableAggregator: '변수 집계자',
      variableAggregatorDescription: `
여러 브랜치의 변수를 단일 변수로 집계하여 다운스트림 노드에 대한 통합 설정을 달성하는 프로세스입니다.`,
      inputVariables: '입력 변수',
      runningHintText: '실행 중...🕞',
      openingSwitch: '인사말 보기',
      openingCopy: '시작 인사말',
      openingSwitchTip: '사용자가 처음에 시작 인사말을 보게 됩니다.',
      modeTip: '워크플로우가 시작되는 방식을 정의합니다.',
      mode: '모드',
      conversational: '대화형',
      task: '작업',
      beginInputTip:
        '여기서 정의된 입력 파라미터는 다운스트림 워크플로우의 구성 요소에서 접근할 수 있습니다.',
      query: '쿼리 변수',
      switchPromptMessage:
        '프롬프트 문구가 변경됩니다. 기존 프롬프트 문구를 버리겠습니까?',
      queryRequired: '쿼리는 필수입니다',
      queryTip: '사용할 변수를 선택하세요',
      agent: '에이전트',
      addAgent: '에이전트 추가',
      agentDescription:
        '추론, 도구 사용, 멀티에이전트 협업이 갖춰진 에이전트 구성 요소를 구축합니다.',
      maxRecords: '최대 레코드 수',
      createAgent: '에이전트 플로우',
      stringTransform: '텍스트 처리',
      userFillUp: '응답 대기',
      userFillUpDescription: `워크플로우를 일시 중지하고 계속하기 전에 사용자의 메시지를 기다립니다.`,
      codeExec: '코드',
      tavilySearch: 'Tavily 검색',
      tavilySearchDescription: 'Tavily 서비스를 통한 검색 결과입니다.',
      tavilyExtract: 'Tavily 추출',
      tavilyExtractDescription: 'Tavily Extract',
      log: '로그',
      management: '관리',
      import: '가져오기',
      export: '내보내기',
      seconds: '초',
      subject: '제목',
      tag: '태그',
      tagPlaceholder: '태그를 입력해 주세요',
      descriptionPlaceholder: '설명을 입력해 주세요',
      line: '한 줄 텍스트',
      paragraph: '단락 텍스트',
      options: '드롭다운 옵션',
      file: '파일 업로드',
      integer: '숫자',
      boolean: '불리언',

      logTimeline: {
        begin: '시작 준비',
        agent: '에이전트가 생각 중',
        userFillUp: '입력을 기다리는 중',
        retrieval: '지식 검색 중',
        message: '에이전트 말하기',
        awaitResponse: '입력을 기다리는 중',
        switch: '최적 경로 선택 중',
        iteration: '일괄 처리 중',
        categorize: '정보 분류 중',
        code: '스크립트 실행 중',
        textProcessing: '텍스트 정리 중',
        tavilySearch: '웹 검색 중',
        tavilyExtract: '페이지 읽는 중',
        exeSQL: '데이터베이스 쿼리 중',
        google: '웹 검색 중',
        wikipedia: 'Wikipedia 검색 중',
        googleScholar: '학술 검색 중',
        gitHub: 'GitHub 검색 중',
        email: '이메일 전송 중',
        httpRequest: 'API 호출 중',
        wenCai: '금융 데이터 쿼리 중',
      },
      goto: '실패 브랜치',
      comment: '기본값',
      sqlStatement: 'SQL 구문',
      sqlStatementTip:
        'SQL 쿼리를 여기에 작성하세요. 변수, 순수 SQL 또는 변수 구문을 혼합하여 사용할 수 있습니다.',
      frameworkPrompts: '프레임워크',
      release: '게시',
      production: '프로덕션',
      productionTooltip:
        '이 버전이 프로덕션에 게시되었습니다. API 또는 임베디드 페이지를 통해 접근하세요.',
      confirmPublish: '게시 확인',
      publishIngestionPipeline: '이 수집 파이프라인을 게시하려고 합니다.',
      publishAgent: '아래 에이전트를 게시합니다',
      linkedDataset: '연결된 데이터셋:',
      lastPublished: '마지막 게시',
      createFromBlank: '빈 템플릿에서 만들기',
      createFromTemplate: '템플릿에서 만들기',
      importJsonFile: 'JSON 파일 가져오기',
      ceateAgent: '워크플로우',
      createPipeline: '수집 파이프라인',
      chooseAgentType: '에이전트 유형 선택',
      parser: '파서',
      parserDescription:
        '파일에서 원시 텍스트와 구조를 추출하여 다운스트림 처리에 사용합니다.',
      tokenizer: '인덱서',
      tokenizerRequired: '인덱서 노드를 먼저 추가해 주세요',
      tokenizerDescription:
        '선택한 검색 방법에 따라 텍스트를 필요한 데이터 구조(예: 임베딩 검색용 벡터 임베딩)로 변환합니다.',
      tokenChunker: 'Token Chunker',
      tokenChunkerDescription:
        '선택적 구분자와 오버랩을 사용하여 토큰 길이별로 텍스트를 chunk로 분할합니다.',
      titleChunkerDescription:
        '제목 계층으로 문서를 섹션으로 분할합니다. 정규식 규칙으로 제목 수준을 정의한 다음 Hierarchy 또는 Group 모드를 선택하여 chunk 구조를 제어합니다.',
      titleChunker: 'Title Chunker',
      extractor: 'Transformer',
      extractorDescription:
        'LLM을 사용하여 문서 chunk에서 요약, 분류 등 구조화된 인사이트를 추출합니다.',
      outputFormat: '출력 형식',
      fileFormats: '파일 유형',
      fileFormatOptions: {
        pdf: 'PDF',
        spreadsheet: '스프레드시트',
        image: '이미지',
        email: '이메일',
        markdown: 'Markdown',
        'text&code': '텍스트 & 코드',
        html: 'HTML',
        doc: 'DOC',
        docx: 'DOCX',
        slides: 'PPTX',
        audio: '오디오',
        video: '비디오',
      },
      fields: '필드',
      addParser: '파서 추가',
      rule: '규칙',
      addRule: '규칙 추가',
      group: '그룹',
      hierarchy: '계층',
      addRegularExpressions: '정규 표현식 추가',
      regularExpressions: '정규 표현식',
      overlappedPercent: '오버랩 비율 (%)',
      searchMethod: '검색 방법',
      searchMethodTip: `콘텐츠를 검색하는 방법(전문 검색, 임베딩 또는 둘 다)을 정의합니다.
인덱서는 선택한 방법에 맞는 데이터 구조에 콘텐츠를 저장합니다.`,
      // file: 'File',
      parserMethod: 'PDF 파서',
      tableResultType: '표 결과 유형',
      markdownImageResponseType: 'Markdown 이미지 응답 유형',
      // systemPrompt: 'System Prompt',
      systemPromptPlaceholder:
        '이미지 분석용 시스템 프롬프트를 입력하세요. 비워두면 시스템 기본값이 사용됩니다.',
      exportJson: 'JSON 내보내기',
      viewResult: '결과 보기',
      running: '실행 중',
      summary: '요약',
      keywords: '키워드',
      questions: '질문',
      metadata: '메타데이터',
      toc: '페이지 인덱스',
      fieldName: '결과 대상',
      prompts: {
        system: {
          keywords: `Role
You are a text analyzer.

Task
Extract the most important keywords/phrases of a given piece of text content.

Requirements
- Summarize the text content, and give the top 5 important keywords/phrases.
- The keywords MUST be in the same language as the given piece of text content.
- The keywords are delimited by ENGLISH COMMA.
- Output keywords ONLY.`,
          questions: `Role
You are a text analyzer.

Task
Propose 3 questions about a given piece of text content.

Requirements
- Understand and summarize the text content, and propose the top 3 important questions.
- The questions SHOULD NOT have overlapping meanings.
- The questions SHOULD cover the main content of the text as much as possible.
- The questions MUST be in the same language as the given piece of text content.
- One question per line.
- Output questions ONLY.`,
          summary: `Act as a precise summarizer. Your task is to create a summary of the provided content that is both concise and faithful to the original.

Key Instructions:
1. Accuracy: Strictly base the summary on the information given. Do not introduce any new facts, conclusions, or interpretations that are not explicitly stated.
2. Language: Write the summary in the same language as the source text.
3. Objectivity: Present the key points without bias, preserving the original intent and tone of the content. Do not editorialize.
4. Conciseness: Focus on the most important ideas, omitting minor details and fluff.`,
          metadata: `Extract important structured information from the given content. Output ONLY a valid JSON string with no additional text. If no important structured information is found, output an empty JSON object: {}.

Important structured information may include: names, dates, locations, events, key facts, numerical data, or other extractable entities.`,
          toc: '',
        },
        user: {
          keywords: `Text Content
[Insert text here]`,
          questions: `Text Content
[Insert text here]`,
          summary: `Text to Summarize:
[Insert text here]`,
          metadata: `Content: [INSERT CONTENT HERE]`,
          toc: '[Insert text here]',
        },
      },
      cancel: '취소',
      swicthPromptMessage:
        '프롬프트 문구가 변경됩니다. 기존 프롬프트 문구를 버리겠습니까?',
      tokenizerSearchMethodOptions: {
        full_text: '전문 검색',
        embedding: '임베딩',
      },
      filenameEmbeddingWeight: '파일 이름 임베딩 가중치',
      tokenizerFieldsOptions: {
        text: '처리된 텍스트',
        keywords: '키워드',
        questions: '질문',
        summary: '보강된 컨텍스트',
      },
      imageParseMethodOptions: {
        ocr: 'OCR',
      },
      structuredOutput: {
        configuration: '설정',
        structuredOutput: '구조화된 출력',
      },
      operations: '작업',
      operationsOptions: {
        selectKeys: '키 선택',
        literalEval: 'Literal eval',
        combine: '결합',
        filterValues: '값 필터링',
        appendOrUpdate: '추가 또는 업데이트',
        removeKeys: '키 제거',
        renameKeys: '키 이름 변경',
      },
      ListOperationsOptions: {
        nth: 'N번째',
        head: '첫 번째',
        tail: '마지막',
        sort: '정렬',
        filter: '필터',
        dropDuplicates: '중복 제거',
      },
      sortMethod: '정렬 방법',
      strictMode: '엄격 모드',
      strictModeTip:
        'Off는 허용 모드로 잘못된 n에 대해 빈 결과를 반환합니다. On은 엄격 모드로 범위를 벗어난 n에 대해 오류를 발생시킵니다.',
      SortMethodOptions: {
        asc: '오름차순',
        desc: '내림차순',
      },
      variableAssignerLogicalOperatorOptions: {
        overwrite: '덮어쓰기',
        clear: '지우기',
        set: '설정',
        add: '더하기',
        subtract: '빼기',
        multiply: '곱하기',
        divide: '나누기',
        append: '추가',
        extend: '확장',
        removeFirst: '첫 번째 제거',
        removeLast: '마지막 제거',
      },
      webhook: {
        name: 'Webhook',
        methods: '방법',
        contentTypes: '콘텐츠 유형',
        security: '보안',
        schema: '스키마',
        response: '응답',
        executionMode: '실행 모드',
        executionModeTip:
          '수락된 응답: 요청이 확인된 직후 확인 응답을 반환하고, 워크플로우는 백그라운드에서 비동기적으로 계속 실행됩니다. / 최종 응답: 워크플로우 실행이 완료된 후에만 응답을 반환합니다.',
        authMethods: '인증 방법',
        authType: '인증 유형',
        limit: '요청 빈도 제한',
        per: '기간',
        maxBodySize: '최대 본문 크기',
        ipWhitelist: 'IP 화이트리스트',
        tokenHeader: '토큰 헤더',
        tokenValue: '토큰 값',
        username: '사용자 이름',
        password: '비밀번호',
        algorithm: '알고리즘',
        secret: '시크릿',
        issuer: '발급자',
        audience: '대상',
        requiredClaims: '필수 클레임',
        header: '헤더',
        status: '상태',
        headersTemplate: '헤더 템플릿',
        bodyTemplate: '본문 템플릿',
        basic: 'Basic',
        bearer: 'Bearer',
        apiKey: 'API Key',
        queryParameters: '쿼리 파라미터',
        headerParameters: '헤더 파라미터',
        requestBodyParameters: '요청 본문 파라미터',
        immediately: '수락된 응답',
        streaming: '최종 응답',
        overview: '개요',
        logs: '로그',
        agentStatus: '에이전트 상태:',
      },
      saveToMemory: '메모리에 저장',
      retrievalFrom: '검색 소스',
      id: 'ID',
      state: '상태',
      number: '번호',
      latestDate: '최신 날짜',
      createDate: '생성 날짜',
      noDataToExport: '내보낼 데이터가 없습니다',
      success: '성공',
      failed: '실패',
      logTitle: '제목',
    },
    llmTools: {
      bad_calculator: {
        name: '계산기',
        description:
          '두 숫자의 합을 계산하는 도구입니다 (잘못된 답을 줄 수 있음)',
        params: {
          a: '첫 번째 숫자',
          b: '두 번째 숫자',
        },
      },
    },
    modal: {
      okText: '확인',
      cancelText: '취소',
    },
    mcp: {
      export: '내보내기',
      import: '가져오기',
      url: 'URL',
      serverType: '서버 유형',
      addMCP: 'MCP 추가',
      editMCP: 'MCP 편집',
      toolsAvailable: '사용 가능한 도구',
      mcpServers: 'MCP 서버',
      mcpServer: 'MCP 서버',
      customizeTheListOfMcpServers: 'MCP 서버 목록 사용자 정의',
      cachedTools: '캐시된 도구',
      bulkManage: '일괄 관리',
      exitBulkManage: '일괄 관리 종료',
      selected: '선택됨',
    },
    search: {
      searchApps: '앱 검색',
      createSearch: '검색 만들기',
      searchGreeting: '오늘 무엇을 도와드릴까요？',
      profile: '프로필 숨기기',
      locale: '지역',
      embedCode: '임베드 코드',
      id: 'ID',
      copySuccess: '복사 성공',
      welcomeBack: '돌아오셨군요',
      searchSettings: '검색 설정',
      name: '이름',
      avatar: '아바타',
      description: '설명',
      datasets: '데이터셋',
      rerankModel: 'Rerank 모델',
      AISummary: 'AI 요약',
      enableWebSearch: '웹 검색 활성화',
      enableRelatedSearch: '관련 검색 활성화',
      showQueryMindmap: '쿼리 마인드맵 표시',
      embedApp: '앱 임베드',
      relatedSearch: '관련 검색',
      descriptionValue: '저는 지능형 어시스턴트입니다.',
      okText: '저장',
      cancelText: '취소',
      chooseDataset: '먼저 데이터셋을 선택해 주세요',
      selectLocalePlaceholder: '지역 선택',
    },
    language: {
      english: '영어',
      chinese: '중국어',
      spanish: '스페인어',
      french: '프랑스어',
      german: '독일어',
      japanese: '일본어',
      korean: '한국어',
      vietnamese: '베트남어',
      russian: '러시아어',
      bulgarian: '불가리아어',
      arabic: '아랍어',
      turkish: '터키어',
    },
    pagination: {
      total: '총 {{total}}개',
      page: '{{page}} / 페이지',
    },
    dataflowParser: {
      result: '결과',
      parseSummary: '파싱 요약',
      parseSummaryTip: '파서: DeepDoc',
      parserMethod: '파서 방법',
      outputFormat: '출력 형식',
      rerunFromCurrentStep: '현재 단계부터 재실행',
      rerunFromCurrentStepTip:
        '변경 사항이 감지되었습니다. 재실행하려면 클릭하세요.',
      confirmRerun: '재실행 프로세스 확인',
      confirmRerunModalContent: `
      <p class="text-sm text-text-disabled font-medium mb-2">
        <span class="text-text-secondary">{{step}}</span> 단계부터 프로세스를 재실행하려고 합니다.
      </p>
      <p class="text-sm mb-3 text-text-disabled">이 작업은 다음을 수행합니다:</p><br />
      <ul class="list-disc list-inside space-y-1 text-sm text-text-secondary">
        <li>• 현재 단계 이후의 기존 결과를 덮어씁니다</li>
        <li>• 추적을 위한 새 로그 항목을 생성합니다</li>
        <li>• 이전 단계는 변경되지 않습니다</li>
      </ul>`,
      changeStepModalTitle: '단계 전환 경고',
      changeStepModalContent: `
      <p>현재 이 단계의 결과를 편집 중입니다.</p>
      <p>이후 단계로 전환하면 변경 사항이 손실됩니다.</p>
      <p>유지하려면 재실행을 클릭하여 현재 단계를 재실행하세요.</p> `,
      changeStepModalConfirmText: '그래도 전환',
      changeStepModalCancelText: '취소',
      unlinkPipelineModalTitle: '수집 파이프라인 연결 해제',
      unlinkPipelineModalConfirmText: '연결 해제',
      unlinkPipelineModalContent: `
      <p>연결이 해제되면 이 데이터셋은 현재 수집 파이프라인과 더 이상 연결되지 않습니다.</p>
      <p>이미 파싱 중인 파일은 완료될 때까지 계속 처리됩니다</p>
      <p>아직 파싱되지 않은 파일은 더 이상 처리되지 않습니다</p> <br/>
      <p>계속하시겠습니까?</p> `,
      unlinkSourceModalTitle: '데이터 소스 연결 해제',
      unlinkSourceModalContent: `
      <p>이 데이터 소스의 연결을 해제하시겠습니까？</p>`,
      unlinkSourceModalConfirmText: '연결 해제',
    },
    datasetOverview: {
      downloadTip: '데이터 소스에서 다운로드 중인 파일입니다.',
      processingTip: '수집 파이프라인에서 처리 중인 파일입니다.',
      totalFiles: '전체 파일',
      downloading: '다운로드 중',
      downloadSuccessTip: '총 성공한 다운로드 수',
      downloadFailedTip: '총 실패한 다운로드 수',
      processingSuccessTip: '총 성공적으로 처리된 파일 수',
      processingFailedTip: '총 실패한 처리 수',
      processing: '처리 중',
      noData: '아직 로그가 없습니다',
    },
    deleteModal: {
      delAgent: '에이전트 삭제',
      delDataset: '데이터셋 삭제',
      delSearch: '검색 삭제',
      delFile: '파일 삭제',
      delFiles: '파일 삭제',
      delFilesContent: '선택된 파일 {{count}}개',
      delChat: '채팅 삭제',
      delMember: '멤버 삭제',
      delMemory: '메모리 삭제',
    },
    empty: {
      noMCP: '사용 가능한 MCP 서버가 없습니다',
      agentTitle: '아직 에이전트 앱이 없습니다',
      notFoundAgent: '에이전트 앱을 찾을 수 없습니다',
      datasetTitle: '아직 데이터셋이 없습니다',
      notFoundDataset: '데이터셋을 찾을 수 없습니다',
      chatTitle: '아직 채팅 앱이 없습니다',
      notFoundChat: '채팅 앱을 찾을 수 없습니다',
      searchTitle: '아직 검색 앱이 없습니다',
      notFoundSearch: '검색 앱을 찾을 수 없습니다',
      memoryTitle: '아직 메모리가 없습니다',
      notFoundMemory: '메모리를 찾을 수 없습니다',
      skillsTitle: '아직 스킬 공간이 없습니다',
      notFoundSkills: '스킬 공간을 찾을 수 없습니다',
      addNow: '지금 추가',
    },
    admin: {
      loginTitle: '관리자 콘솔',
      title: 'RAGFlow',
      confirm: '확인',
      close: '닫기',
      yes: '예',
      no: '아니오',
      delete: '삭제',
      cancel: '취소',
      reset: '초기화',
      import: '가져오기',
      description: '설명',
      noDescription: '설명 없음',
      none: '없음',
      resourceType: {
        dataset: '데이터셋',
        chat: '채팅',
        agent: '에이전트',
        search: '검색',
        file: '파일',
        team: '팀',
        memory: '메모리',
      },
      permissionType: {
        enable: '활성화',
        read: '읽기',
        write: '쓰기',
        share: '공유',
      },
      serviceStatus: '서비스 상태',
      userManagement: '사용자 관리',
      sandboxSettings: '샌드박스 설정',
      registrationWhitelist: '등록 화이트리스트',
      roles: '역할',
      monitoring: '모니터링',
      sandboxSettingsPage: {
        description:
          '코드 실행 샌드박스 제공업체를 설정합니다. 샌드박스는 에이전트의 Code 구성 요소에서 사용됩니다.',
        providerSelection: '제공업체 선택',
        providerSelectionDescription:
          '코드 실행을 위한 샌드박스 제공업체를 선택하세요',
        namedProviderConfiguration: '{{name}} 설정',
        namedProviderConfigurationDescription:
          '{{name}}의 연결 설정을 구성하세요.',
        saveConfiguration: '설정 저장',
        saving: '저장 중...',
        testConnectionResultModal: {
          title: '연결 테스트 결과',
          testing: '샌드박스 제공업체 연결 테스트 중...',
          success: '샌드박스 제공업체 연결 성공',
          failed: '샌드박스 제공업체 연결 실패',
          exitCode: '종료 코드',
          executionTime: '실행 시간',
          stdout: '표준 출력',
          stderr: '오류 출력 / 스택 트레이스',
        },
        testConnection: '연결 테스트',
        testing: '테스트 중...',
      },
      selectFile: '파일 선택',
      noFileSelected: '선택된 파일 없음',
      back: '뒤로',
      active: '활성',
      inactive: '비활성',
      enable: '활성화',
      disable: '비활성화',
      all: '전체',
      actions: '작업',
      newUser: '새 사용자',
      email: '이메일',
      name: '이름',
      nickname: '닉네임',
      status: '상태',
      id: 'ID',
      serviceType: '서비스 유형',
      host: '호스트',
      port: '포트',
      role: '역할',
      user: '사용자',
      userType: '사용자 유형',
      superuser: '최고 관리자',
      normalUser: '일반',
      createTime: '생성 시각',
      lastLoginTime: '마지막 로그인 시각',
      lastUpdateTime: '마지막 업데이트 시각',
      isAnonymous: '익명 여부',
      isSuperuser: '최고 관리자 여부',
      deleteUser: '사용자 삭제',
      deleteUserConfirmation: '이 사용자를 삭제하시겠습니까?',
      createNewUser: '새 사용자 만들기',
      changePassword: '비밀번호 변경',
      newPassword: '새 비밀번호',
      confirmNewPassword: '새 비밀번호 확인',
      password: '비밀번호',
      confirmPassword: '비밀번호 확인',
      invalidEmail: '유효한 이메일 주소를 입력해 주세요',
      passwordRequired: '비밀번호를 입력해 주세요',
      passwordMinLength: '비밀번호는 8자 이상이어야 합니다.',
      confirmPasswordRequired: '비밀번호를 확인해 주세요',
      confirmPasswordDoNotMatch: '입력한 비밀번호가 일치하지 않습니다!',
      read: '읽기',
      write: '쓰기',
      share: '공유',
      create: '만들기',
      extraInfo: '추가 정보',
      serviceDetail: `서비스 {{name}} 세부 사항`,
      taskExecutorDetail: '작업 실행자 세부 사항',
      whitelistManagement: '화이트리스트 관리',
      exportAsExcel: 'Excel 내보내기',
      importFromExcel: 'Excel 가져오기',
      createEmail: '이메일 만들기',
      deleteEmail: '이메일 삭제',
      editEmail: '이메일 편집',
      deleteWhitelistEmailConfirmation:
        '화이트리스트에서 이 이메일을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.',
      importWhitelist: '화이트리스트 가져오기 (Excel)',
      importSelectExcelFile: 'Excel 파일 (.xlsx)',
      importOverwriteExistingEmails: '기존 이메일 덮어쓰기',
      importInvalidExcelFile: '유효한 Excel 파일을 선택해 주세요',
      importFileRequired: '가져올 파일을 선택해 주세요',
      importFileTips:
        '파일에는 <code>email</code>이라는 단일 헤더 열이 있어야 합니다.',
      chunkNum: 'Chunk 수',
      docNum: '문서 수',
      tokenNum: '사용된 토큰',
      language: '언어',
      createDate: '생성 날짜',
      updateDate: '업데이트 날짜',
      permission: '권한',
      agentTitle: '에이전트 제목',
      canvasCategory: '캔버스 카테고리',
      newRole: '새 역할',
      addNewRole: '새 역할 추가',
      roleName: '역할 이름',
      roleNameRequired: '역할 이름은 필수입니다',
      resources: '리소스',
      editRoleDescription: '역할 설명 편집',
      deleteRole: '역할 삭제',
      deleteRoleConfirmation:
        '이 역할을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.',
      alive: '활성',
      timeout: '타임아웃',
      fail: '실패',
    },
    explore: {
      title: '시작',
      canvasList: '캔버스 목록',
      sessions: '세션',
      newSession: '새 세션',
      newSessionLabel: '새 대화 시작',
      deleteSession: '세션 삭제',
      searchCanvas: '캔버스 검색...',
      searchSessions: '세션 검색...',
      noCanvasSelected: '캔버스를 선택해 주세요',
      noSessionSelected: '세션을 선택하거나 새 세션을 만들어 주세요',
      noSessionsFound: '세션을 찾을 수 없습니다',
      createFirstSession: '첫 번째 세션을 만들어 보세요',
      noCanvasFound: '캔버스를 찾을 수 없습니다',
      deleteSelectedConfirm: '선택한 {{count}}개의 세션을 삭제하시겠습니까?',
      batchDeleteSessions: '세션 삭제',
    },
  },
};
