mirror of
https://github.com/ZSeven-W/openpencil.git
synced 2026-06-01 03:14:29 +07:00
* feat(canvas): enhance font handling and text measurement - Introduced a new `cssFontFamily` utility to ensure proper quoting of font family names in canvas text rendering. - Updated text measurement functions to utilize `cssFontFamily`, improving compatibility with various font formats. - Added a `systemFontFamilies` set in `SkiaFontManager` to manage system fonts that cannot be loaded into CanvasKit, ensuring fallback to bitmap rendering. - Implemented a hook to enumerate system fonts, enhancing the font selection experience in the UI. - Added a new `FontPicker` component for improved font selection, integrating bundled and system fonts with search functionality. - Updated translations for new font-related UI elements across multiple languages. This update significantly improves text rendering accuracy and user experience when selecting fonts. * feat(figma): enhance clipboard data processing and font handling - Introduced a new mechanism to identify and handle known non-Google fonts, preventing unnecessary requests to the Google Fonts CDN for system and proprietary fonts. - Improved the Figma clipboard data extraction process by simplifying error handling and removing excessive debug logs, enhancing performance and readability. - Added functionality to convert unresolved image references in Figma clipboard data into placeholder rectangles, ensuring better visual fidelity when images are missing. - Enhanced instance conversion logic to merge symbol properties into instances, ensuring that clipboard data retains necessary layout and visual properties. This update significantly improves the handling of Figma clipboard data and font management, leading to a more robust user experience. * refactor(figma): enhance clipboard data processing and style resolution - Improved the Figma clipboard data extraction by adding optional HTML parsing to enrich nodes with style hints, ensuring better fidelity in text rendering. - Updated the `figmaClipboardToNodes` function to log conversion results and handle unresolved image references more effectively. - Refactored style resolution logic to ensure inline properties are correctly applied from style references, enhancing the overall rendering accuracy of Figma imports. This update significantly enhances the handling of Figma clipboard data and style management, leading to a more robust user experience. * feat(canvas): add image fill support and enhancements to fill section - Introduced support for image fills in the SkiaRenderer, allowing for dynamic image rendering with various fit modes and adjustments. - Added a new ImageFillPopover component for managing image fill properties, including exposure, contrast, and saturation adjustments. - Updated the FillSection component to include an option for image fills, enhancing the user interface for fill selection. - Improved localization for new image-related features across multiple languages. This update significantly enhances the capabilities of the canvas rendering system, providing users with more options for fill types and customization. * feat(canvas): enhance text shadow rendering and fill section UI - Implemented a new method for drawing text shadows as blurred copies of glyphs, aligning with Figma's drop-shadow behavior. - Updated the `drawText` method to incorporate shadow effects for text nodes, improving visual fidelity. - Adjusted the FillSection component to use a fixed width for better layout consistency. This update significantly enhances text rendering capabilities and improves the user interface for fill options. * refactor(figma): simplify arc ellipse conversion logic - Removed unnecessary position adjustments for flipped nodes, as the extractPosition function already computes the correct visual top-left. - Cleaned up comments to clarify the handling of arc properties without rotation adjustments, streamlining the conversion process for arc ellipses. This update enhances the clarity and efficiency of the arc ellipse conversion logic in the Figma node converters. * fix(canvas): use drawImageRect for image fill modes instead of broken shader scaling CanvasKit's Image.makeShaderOptions() fails to render when the localMatrix contains scaling factors with Clamp/Decal tile modes. Only Repeat mode works reliably with shader scaling. - Tile mode: keep shader + TileMode.Repeat (works correctly) - Fill/Fit/Crop/Stretch: use drawImageRect with canvas clipping - Add drawImageFillRect() for non-tile image fill rendering - makeFillPaint() returns optional imageFillDraw info for drawRect * fix(panels): fix image adjustment reset button not working The reset button called onAdjustmentChange in a loop, but each call spread from the same stale fill reference, so only the last adjustment was actually reset. Added onResetAdjustments callback that resets all adjustment values in a single atomic update. --------- Co-authored-by: Fini <fini.yang@gmail.com>
418 lines
16 KiB
TypeScript
418 lines
16 KiB
TypeScript
import type { TranslationKeys } from './en'
|
|
|
|
const ko: TranslationKeys = {
|
|
// ── Common ──
|
|
'common.rename': '이름 변경',
|
|
'common.duplicate': '복제',
|
|
'common.delete': '삭제',
|
|
'common.cancel': '취소',
|
|
'common.save': '저장',
|
|
'common.close': '닫기',
|
|
'common.connect': '연결',
|
|
'common.disconnect': '연결 해제',
|
|
'common.import': '가져오기',
|
|
'common.export': '내보내기',
|
|
'common.name': '이름',
|
|
'common.untitled': '제목 없음',
|
|
'common.best': '추천',
|
|
'common.selected': '{{count}}개 선택됨',
|
|
|
|
// ── Toolbar ──
|
|
'toolbar.select': '선택',
|
|
'toolbar.text': '텍스트',
|
|
'toolbar.frame': '프레임',
|
|
'toolbar.hand': '손',
|
|
'toolbar.undo': '실행 취소',
|
|
'toolbar.redo': '다시 실행',
|
|
'toolbar.variables': '변수',
|
|
'toolbar.uikitBrowser': 'UIKit 브라우저',
|
|
|
|
// ── Shapes ──
|
|
'shapes.rectangle': '사각형',
|
|
'shapes.ellipse': '타원',
|
|
'shapes.line': '선',
|
|
'shapes.icon': '아이콘',
|
|
'shapes.importImageSvg': '이미지 또는 SVG 가져오기\u2026',
|
|
'shapes.pen': '펜',
|
|
'shapes.shapeTools': '도형 도구',
|
|
'shapes.moreShapeTools': '더 많은 도형 도구',
|
|
|
|
// ── Top Bar ──
|
|
'topbar.hideLayers': '레이어 숨기기',
|
|
'topbar.showLayers': '레이어 표시',
|
|
'topbar.new': '새로 만들기',
|
|
'topbar.open': '열기',
|
|
'topbar.save': '저장',
|
|
'topbar.importFigma': 'Figma 가져오기',
|
|
'topbar.codePanel': '코드',
|
|
'topbar.lightMode': '라이트 모드',
|
|
'topbar.darkMode': '다크 모드',
|
|
'topbar.fullscreen': '전체 화면',
|
|
'topbar.exitFullscreen': '전체 화면 종료',
|
|
'topbar.edited': '— 수정됨',
|
|
'topbar.agentsAndMcp': '에이전트 & MCP',
|
|
'topbar.setupAgentsMcp': '에이전트 & MCP 설정',
|
|
'topbar.connected': '연결됨',
|
|
'topbar.agentStatus': '에이전트 {{agents}}개{{agentSuffix}} · MCP {{mcp}}개',
|
|
|
|
// ── Right Panel ──
|
|
'rightPanel.design': '디자인',
|
|
'rightPanel.code': '코드',
|
|
'rightPanel.noSelection': '요소를 선택하세요',
|
|
|
|
// ── Pages ──
|
|
'pages.title': '페이지',
|
|
'pages.addPage': '페이지 추가',
|
|
'pages.moveUp': '위로 이동',
|
|
'pages.moveDown': '아래로 이동',
|
|
|
|
// ── Status Bar ──
|
|
'statusbar.zoomOut': '축소',
|
|
'statusbar.zoomIn': '확대',
|
|
'statusbar.resetZoom': '확대/축소 초기화',
|
|
|
|
// ── Updater ──
|
|
'updater.softwareUpdate': '소프트웨어 업데이트',
|
|
'updater.dismiss': '닫기',
|
|
'updater.current': '현재 버전',
|
|
'updater.latest': '최신 버전',
|
|
'updater.unknown': '알 수 없음',
|
|
'updater.checking': '확인 중...',
|
|
'updater.downloadProgress': '다운로드 진행률',
|
|
'updater.checkAgain': '다시 확인',
|
|
'updater.restartInstall': '재시작 및 설치',
|
|
'updater.installing': '설치 중...',
|
|
'updater.releaseDate': '출시일: {{date}}',
|
|
'updater.restartHint':
|
|
'업데이트를 적용하려면 재시작하세요. 재실행은 보통 10~15초 소요됩니다.',
|
|
'updater.unknownError': '알 수 없는 업데이트 오류입니다.',
|
|
'updater.title.checking': '업데이트 확인 중',
|
|
'updater.title.available': '업데이트 발견',
|
|
'updater.title.downloading': '업데이트 다운로드 중',
|
|
'updater.title.downloaded': '설치 준비 완료',
|
|
'updater.title.error': '업데이트 실패',
|
|
'updater.subtitle.checking': '최신 릴리스를 확인하고 있습니다...',
|
|
'updater.subtitle.available': '버전 {{version}}을 사용할 수 있습니다.',
|
|
'updater.subtitle.availableGeneric': '새 버전을 사용할 수 있습니다.',
|
|
'updater.subtitle.downloading':
|
|
'버전 {{version}}을 백그라운드에서 다운로드 중입니다.',
|
|
'updater.subtitle.downloadingGeneric':
|
|
'업데이트 패키지를 백그라운드에서 다운로드 중입니다.',
|
|
'updater.subtitle.downloaded': '버전 {{version}}이 다운로드되었습니다.',
|
|
'updater.subtitle.downloadedGeneric': '업데이트가 다운로드되었습니다.',
|
|
'updater.subtitle.error': '업데이트를 확인하거나 다운로드할 수 없습니다.',
|
|
|
|
// ── Layers ──
|
|
'layers.title': '레이어',
|
|
'layers.empty': '레이어가 없습니다. 툴바에서 도형을 그려보세요.',
|
|
|
|
// ── Layer Context Menu ──
|
|
'layerMenu.groupSelection': '선택 항목 그룹화',
|
|
'layerMenu.createComponent': '컴포넌트 만들기',
|
|
'layerMenu.detachComponent': '컴포넌트 분리',
|
|
'layerMenu.detachInstance': '인스턴스 분리',
|
|
'layerMenu.booleanUnion': '합치기',
|
|
'layerMenu.booleanSubtract': '빼기',
|
|
'layerMenu.booleanIntersect': '교차',
|
|
'layerMenu.toggleLock': '잠금 전환',
|
|
'layerMenu.toggleVisibility': '표시 전환',
|
|
|
|
// ── Property Panel ──
|
|
'property.createComponent': '컴포넌트 만들기',
|
|
'property.detachComponent': '컴포넌트 분리',
|
|
'property.goToComponent': '컴포넌트로 이동',
|
|
'property.detachInstance': '인스턴스 분리',
|
|
|
|
// ── Fill ──
|
|
'fill.title': '채우기',
|
|
'fill.solid': '단색',
|
|
'fill.linear': '선형',
|
|
'fill.radial': '방사형',
|
|
'fill.image': '이미지',
|
|
'fill.stops': '정지점',
|
|
'fill.angle': '각도',
|
|
|
|
// ── Image ──
|
|
'image.title': '이미지',
|
|
'image.fit': '맞춤 모드',
|
|
'image.fill': '채우기',
|
|
'image.fitMode': '맞춤',
|
|
'image.crop': '자르기',
|
|
'image.tile': '타일',
|
|
'image.clickToUpload': '클릭하여 업로드',
|
|
'image.changeImage': '이미지 변경',
|
|
'image.adjustments': '조정',
|
|
'image.exposure': '노출',
|
|
'image.contrast': '대비',
|
|
'image.saturation': '채도',
|
|
'image.temperature': '색온도',
|
|
'image.tint': '틴트',
|
|
'image.highlights': '하이라이트',
|
|
'image.shadows': '그림자',
|
|
'image.reset': '초기화',
|
|
|
|
// ── Stroke ──
|
|
'stroke.title': '선',
|
|
|
|
// ── Appearance ──
|
|
'appearance.layer': '레이어',
|
|
'appearance.opacity': '불투명도',
|
|
|
|
// ── Layout ──
|
|
'layout.flexLayout': '플렉스 레이아웃',
|
|
'layout.freedom': '자유 (레이아웃 없음)',
|
|
'layout.vertical': '세로 레이아웃',
|
|
'layout.horizontal': '가로 레이아웃',
|
|
'layout.alignment': '정렬',
|
|
'layout.gap': '간격',
|
|
'layout.spaceBetween': '균등 배치',
|
|
'layout.spaceAround': '균등 여백',
|
|
'layout.dimensions': '크기',
|
|
'layout.fillWidth': '너비 채우기',
|
|
'layout.fillHeight': '높이 채우기',
|
|
'layout.hugWidth': '너비 맞춤',
|
|
'layout.hugHeight': '높이 맞춤',
|
|
'layout.clipContent': '콘텐츠 잘라내기',
|
|
|
|
// ── Padding ──
|
|
'padding.title': '패딩',
|
|
'padding.paddingMode': '패딩 모드',
|
|
'padding.paddingValues': '패딩 값',
|
|
'padding.oneValue': '모든 면에 동일한 값',
|
|
'padding.horizontalVertical': '가로/세로',
|
|
'padding.topRightBottomLeft': '위/오른쪽/아래/왼쪽',
|
|
|
|
// ── Typography ──
|
|
'text.typography': '타이포그래피',
|
|
'text.lineHeight': '줄 높이',
|
|
'text.letterSpacing': '자간',
|
|
'text.horizontal': '가로',
|
|
'text.vertical': '세로',
|
|
'text.alignLeft': '왼쪽 정렬',
|
|
'text.alignCenter': '가운데 정렬',
|
|
'text.alignRight': '오른쪽 정렬',
|
|
'text.justify': '양쪽 정렬',
|
|
'text.top': '위',
|
|
'text.middle': '중간',
|
|
'text.bottom': '아래',
|
|
'text.weight.thin': 'Thin',
|
|
'text.weight.light': 'Light',
|
|
'text.weight.regular': 'Regular',
|
|
'text.weight.medium': 'Medium',
|
|
'text.weight.semibold': 'Semibold',
|
|
'text.weight.bold': 'Bold',
|
|
'text.weight.black': 'Black',
|
|
'text.font.search': '글꼴 검색\u2026',
|
|
'text.font.bundled': '번들',
|
|
'text.font.system': '시스템',
|
|
'text.font.loading': '글꼴 로드 중\u2026',
|
|
'text.font.noResults': '글꼴을 찾을 수 없습니다',
|
|
|
|
// ── Text Layout ──
|
|
'textLayout.title': '레이아웃',
|
|
'textLayout.dimensions': '크기',
|
|
'textLayout.resizing': '크기 조절',
|
|
'textLayout.autoWidth': '자동 W',
|
|
'textLayout.autoWidthDesc': '자동 너비 — 텍스트가 가로로 확장됩니다',
|
|
'textLayout.autoHeight': '자동 H',
|
|
'textLayout.autoHeightDesc':
|
|
'자동 높이 — 고정 너비, 높이가 자동 조절됩니다',
|
|
'textLayout.fixed': '고정',
|
|
'textLayout.fixedDesc':
|
|
'고정 크기 — 너비와 높이가 모두 고정됩니다',
|
|
'textLayout.fillWidth': '너비 채우기',
|
|
'textLayout.fillHeight': '높이 채우기',
|
|
|
|
// ── Effects ──
|
|
'effects.title': '효과',
|
|
'effects.dropShadow': '그림자',
|
|
'effects.blur': '블러',
|
|
'effects.spread': '확산',
|
|
'effects.color': '색상',
|
|
|
|
// ── Export ──
|
|
'export.title': '내보내기',
|
|
'export.format': '형식',
|
|
'export.scale': '배율',
|
|
'export.selectedOnly': '선택 항목만 내보내기',
|
|
'export.exportFormat': '{{format}} 내보내기',
|
|
'export.exportLayer': '레이어 내보내기',
|
|
|
|
// ── Corner Radius ──
|
|
'cornerRadius.title': '모서리 반경',
|
|
|
|
// ── Size / Position ──
|
|
'size.position': '위치',
|
|
|
|
// ── Icon ──
|
|
'icon.title': '아이콘',
|
|
'icon.searchIcons': '아이콘 검색...',
|
|
'icon.noIconsFound': '아이콘을 찾을 수 없습니다',
|
|
'icon.typeToSearch': 'Iconify 아이콘을 검색하려면 입력하세요',
|
|
'icon.iconsCount': '아이콘 {{count}}개',
|
|
|
|
// ── Variables Panel ──
|
|
'variables.addTheme': '테마 추가',
|
|
'variables.addVariant': '변형 추가',
|
|
'variables.addVariable': '변수 추가',
|
|
'variables.searchVariables': '변수 검색...',
|
|
'variables.noMatch': '검색과 일치하는 변수가 없습니다',
|
|
'variables.noDefined': '정의된 변수가 없습니다',
|
|
'variables.closeShortcut': '닫기 (⌘⇧V)',
|
|
'variables.presets': '프리셋',
|
|
'variables.savePreset': '현재 설정을 프리셋으로 저장…',
|
|
'variables.loadPreset': '프리셋 불러오기',
|
|
'variables.importPreset': '파일에서 가져오기…',
|
|
'variables.exportPreset': '파일로 내보내기…',
|
|
'variables.presetName': '프리셋 이름',
|
|
'variables.noPresets': '저장된 프리셋 없음',
|
|
|
|
// ── AI Chat ──
|
|
'ai.newChat': '새 대화',
|
|
'ai.collapse': '접기',
|
|
'ai.tryExample': '예시로 디자인 해보세요...',
|
|
'ai.tipSelectElements':
|
|
'팁: 대화 전에 캔버스에서 요소를 선택하면 컨텍스트를 제공할 수 있습니다.',
|
|
'ai.generating': '생성 중...',
|
|
'ai.designWithAgent': '에이전트로 디자인...',
|
|
'ai.attachImage': '이미지 첨부',
|
|
'ai.stopGenerating': '생성 중지',
|
|
'ai.sendMessage': '메시지 보내기',
|
|
'ai.loadingModels': '모델 로딩 중...',
|
|
'ai.noModelsConnected': '연결된 모델 없음',
|
|
'ai.quickAction.loginScreen': '모바일 로그인 화면 디자인',
|
|
'ai.quickAction.loginScreenPrompt':
|
|
'이메일 입력, 비밀번호 입력, 로그인 버튼, 소셜 로그인 옵션이 있는 모던 모바일 로그인 화면을 디자인해 주세요',
|
|
'ai.quickAction.foodApp': '음식 앱 홈페이지',
|
|
'ai.quickAction.foodAppPrompt':
|
|
'Generate a well-designed food mobile app homepage',
|
|
'ai.quickAction.bottomNav': '하단 네비게이션 바 디자인',
|
|
'ai.quickAction.bottomNavPrompt':
|
|
'홈, 검색, 추가, 메시지, 프로필 5개 탭이 있는 모바일 앱 하단 네비게이션 바를 디자인해 주세요',
|
|
'ai.quickAction.colorPalette': '앱에 맞는 색상 팔레트 추천',
|
|
'ai.quickAction.colorPalettePrompt':
|
|
'반려동물 관리 앱에 어울리는 모던한 색상 팔레트를 추천해 주세요',
|
|
|
|
// ── Code Panel ──
|
|
'code.reactTailwind': 'React + Tailwind',
|
|
'code.htmlCss': 'HTML + CSS',
|
|
'code.cssVariables': 'CSS Variables',
|
|
'code.copyClipboard': '클립보드에 복사',
|
|
'code.copied': '복사됨!',
|
|
'code.download': '코드 파일 다운로드',
|
|
'code.closeCodePanel': '코드 패널 닫기',
|
|
'code.genCssVars': '전체 문서의 CSS 변수를 생성 중',
|
|
'code.genSelected':
|
|
'선택한 요소 {{count}}개의 코드를 생성 중',
|
|
'code.genDocument': '전체 문서의 코드를 생성 중',
|
|
'code.aiEnhance': 'AI 개선',
|
|
'code.cancelEnhance': '개선 취소',
|
|
'code.resetEnhance': '원본으로 복원',
|
|
'code.enhancing': 'AI가 코드를 개선 중...',
|
|
'code.enhanced': 'AI로 개선됨',
|
|
|
|
// ── Save Dialog ──
|
|
'save.saveAs': '다른 이름으로 저장',
|
|
'save.fileName': '파일 이름',
|
|
|
|
// ── Agent Settings ──
|
|
'agents.title': '에이전트 & MCP 설정',
|
|
'agents.agentsOnCanvas': '캔버스 에이전트',
|
|
'agents.mcpIntegrations': '터미널 MCP 연동',
|
|
'agents.transport': '전송 방식',
|
|
'agents.port': '포트',
|
|
'agents.mcpRestart':
|
|
'MCP 연동은 터미널을 재시작한 후 적용됩니다.',
|
|
'agents.modelCount': '모델 {{count}}개',
|
|
'agents.connectionFailed': '연결 실패',
|
|
'agents.serverError': '서버 오류 {{status}}',
|
|
'agents.failedTo': '{{action}} 실패',
|
|
'agents.failedToMcp': 'MCP 서버 {{action}} 실패',
|
|
'agents.failedTransport': '전송 방식 업데이트 실패',
|
|
'agents.failedMcpTransport': 'MCP 전송 방식 업데이트 실패',
|
|
'agents.claudeCode': 'Claude Code',
|
|
'agents.claudeModels': 'Claude 모델',
|
|
'agents.codexCli': 'Codex CLI',
|
|
'agents.openaiModels': 'OpenAI 모델',
|
|
'agents.opencode': 'OpenCode',
|
|
'agents.opencodeDesc': '75개 이상의 LLM 제공자',
|
|
'agents.copilot': 'GitHub Copilot',
|
|
'agents.copilotDesc': 'GitHub Copilot 모델',
|
|
'agents.mcpServer': 'MCP 서버',
|
|
'agents.mcpServerStart': '시작',
|
|
'agents.mcpServerStop': '정지',
|
|
'agents.mcpServerRunning': '실행 중',
|
|
'agents.mcpServerStopped': '정지됨',
|
|
'agents.mcpLanAccess': 'LAN 접근',
|
|
'agents.mcpClientConfig': '클라이언트 설정',
|
|
'agents.stdio': 'stdio',
|
|
'agents.http': 'http',
|
|
'agents.stdioHttp': 'stdio + http',
|
|
'agents.autoUpdate': '자동 업데이트 확인',
|
|
'agents.notInstalled': '설치되지 않음',
|
|
'agents.install': '설치',
|
|
'agents.installing': '설치 중...',
|
|
'agents.installFailed': '설치 실패',
|
|
'agents.viewDocs': '문서',
|
|
|
|
// ── Figma Import ──
|
|
'figma.title': 'Figma에서 가져오기',
|
|
'figma.dropFile': '.fig 파일을 여기에 놓으세요',
|
|
'figma.orBrowse': '또는 클릭하여 찾아보기',
|
|
'figma.exportTip': 'Figma에서 내보내기: 파일 → 로컬 사본 저장 (.fig)',
|
|
'figma.selectFigFile': '.fig 파일을 선택해 주세요',
|
|
'figma.noPages': '.fig 파일에서 페이지를 찾을 수 없습니다',
|
|
'figma.parseFailed': '.fig 파일 파싱에 실패했습니다',
|
|
'figma.convertFailed': 'Figma 파일 변환에 실패했습니다',
|
|
'figma.parsing': '.fig 파일 파싱 중...',
|
|
'figma.converting': '노드 변환 중...',
|
|
'figma.selectPage':
|
|
'이 파일에는 {{count}}개의 페이지가 있습니다. 가져올 페이지를 선택하세요:',
|
|
'figma.layers': '{{count}}개 레이어',
|
|
'figma.importAll': '모든 페이지 가져오기',
|
|
'figma.importComplete': '가져오기 완료!',
|
|
'figma.moreWarnings': '...외 {{count}}개의 경고',
|
|
'figma.tryAgain': '다시 시도',
|
|
'figma.layoutMode': '레이아웃 모드:',
|
|
'figma.preserveLayout': 'Figma 레이아웃 유지',
|
|
'figma.autoLayout': 'OpenPencil 자동 레이아웃',
|
|
'figma.comingSoon': '출시 예정',
|
|
|
|
// ── Landing Page ──
|
|
'landing.open': 'Open',
|
|
'landing.pencil': 'Pencil',
|
|
'landing.tagline': '오픈소스 벡터 디자인 도구. Design as Code.',
|
|
'landing.newDesign': '새 디자인',
|
|
'landing.shortcutHint': '{{key1}} + {{key2}} 키를 눌러 새 디자인을 만드세요',
|
|
|
|
// ── 404 ──
|
|
'notFound.message': '페이지를 찾을 수 없습니다',
|
|
|
|
// ── Component Browser ──
|
|
'componentBrowser.title': 'UIKit 브라우저',
|
|
'componentBrowser.exportKit': '키트 내보내기',
|
|
'componentBrowser.importKit': '키트 가져오기',
|
|
'componentBrowser.kit': '키트:',
|
|
'componentBrowser.all': '전체',
|
|
'componentBrowser.imported': '(가져옴)',
|
|
'componentBrowser.components': '컴포넌트',
|
|
'componentBrowser.searchComponents': '컴포넌트 검색...',
|
|
'componentBrowser.deleteKit': '{{name}} 삭제',
|
|
'componentBrowser.category.all': '전체',
|
|
'componentBrowser.category.buttons': '버튼',
|
|
'componentBrowser.category.inputs': '입력',
|
|
'componentBrowser.category.cards': '카드',
|
|
'componentBrowser.category.nav': '내비게이션',
|
|
'componentBrowser.category.layout': '레이아웃',
|
|
'componentBrowser.category.feedback': '피드백',
|
|
'componentBrowser.category.data': '데이터',
|
|
'componentBrowser.category.other': '기타',
|
|
|
|
// ── Variable Picker ──
|
|
'variablePicker.boundTo': '--{{name}}에 바인딩됨',
|
|
'variablePicker.bindToVariable': '변수에 바인딩',
|
|
'variablePicker.unbind': '변수 바인딩 해제',
|
|
'variablePicker.noVariables': '{{type}} 변수가 정의되지 않았습니다',
|
|
} as const
|
|
|
|
export default ko
|