namespace AxCopilot.Services;
///
/// 간단한 다국어 문자열 서비스.
/// 설정의 Language 값(ko/en/ja/zh/vi)에 따라 UI 문자열을 반환합니다.
///
public static class L10n
{
private static string _lang = "ko";
public static void SetLanguage(string lang) =>
_lang = lang?.ToLowerInvariant() ?? "ko";
public static string Get(string key) =>
(_lang switch
{
"en" => _en,
"ja" => _ja,
"zh" => _zh,
"vi" => _vi,
_ => _ko
}).TryGetValue(key, out var v) ? v : _ko.GetValueOrDefault(key, key);
/// 런처 입력창에 표시할 랜덤 안내 문구를 반환합니다.
public static string GetRandomPlaceholder() =>
(_lang switch
{
"en" => _enPlaceholders,
"ja" => _jaPlaceholders,
"zh" => _zhPlaceholders,
"vi" => _viPlaceholders,
_ => _koPlaceholders
}) is { } list ? list[Random.Shared.Next(list.Length)] : Get("placeholder");
// ─── 한국어 랜덤 플레이스홀더 (100종) ───────────────────────────────────────
private static readonly string[] _koPlaceholders =
[
// ── 기본 인사 (15종) ──
"무엇을 도와드릴까요?",
"오늘도 좋은 하루 되세요. 무엇을 찾으시나요?",
"안녕하세요! 어떤 작업을 도와드릴까요?",
"필요하신 것이 있으시면 입력해 주세요.",
"편하게 검색해 보세요.",
"명령어를 입력하시면 바로 실행해 드리겠습니다.",
"무엇이든 빠르게 찾아드리겠습니다.",
"오늘도 효율적인 하루를 응원합니다.",
"언제든 도움이 필요하시면 말씀해 주세요.",
"어떤 파일이나 앱이든 바로 열어드릴 수 있습니다.",
"찾으시는 것을 입력해 보세요.",
"앱, 파일, 명령어 모두 여기서 시작됩니다.",
"빠른 실행을 도와드리겠습니다.",
"키보드 하나로 모든 업무를 시작해 보세요.",
"입력 한 번이면 원하는 앱이 바로 열립니다.",
// ── 계산기 (5종) ──
"= 1920*1080 으로 수식 계산을 해보세요.",
"= 100/3 처럼 입력하면 바로 계산됩니다.",
"= sqrt(144) 같은 함수도 지원합니다.",
"= 2^10 으로 거듭제곱도 계산할 수 있습니다.",
"= (100+200)*1.1 괄호·소수점 모두 지원됩니다.",
// ── 클립보드 (6종) ──
"# 을 입력하면 클립보드 히스토리를 열 수 있습니다.",
"Ctrl+H로 클립보드 히스토리를 바로 열어보세요.",
"Shift+↑↓로 여러 클립보드 항목을 한 번에 합칠 수 있습니다.",
"# 회의 로 클립보드에서 '회의' 관련 항목만 필터링됩니다.",
"클립보드 히스토리는 DPAPI로 안전하게 암호화됩니다.",
"$ upper 로 클립보드 텍스트를 대문자로 변환할 수 있습니다.",
// ── 웹 검색 (5종) ──
"? 키워드 로 웹 검색을 즉시 실행할 수 있습니다.",
"?n 키워드 로 네이버 검색도 가능합니다.",
"? WPF DataBinding 처럼 바로 검색할 수 있습니다.",
"검색 엔진은 설정에서 변경할 수 있습니다.",
"? 환율 달러 같은 검색도 한 번에 가능합니다.",
// ── 시스템 정보 (8종) ──
"info cpu 로 CPU 사용률을 확인해 보세요.",
"* ip 로 내 IP 주소를 빠르게 확인할 수 있습니다.",
"info disk 에서 드라이브를 Enter하면 탐색기가 열립니다.",
"info ram 을 Enter하면 실시간 리소스 모니터를 열 수 있습니다.",
"info battery 로 배터리 상태를 확인할 수 있습니다.",
"info volume 으로 현재 볼륨 레벨을 볼 수 있습니다.",
"info uptime 으로 PC 가동 시간을 확인할 수 있습니다.",
"info 를 입력하면 시스템 전체 상태를 한눈에 볼 수 있습니다.",
// ── 즐겨찾기 (5종) ──
"Ctrl+P로 자주 쓰는 파일을 즐겨찾기에 추가해 보세요.",
"fav 을 입력하면 즐겨찾기 목록을 볼 수 있습니다.",
"Ctrl+B를 누르면 즐겨찾기 목록을 바로 토글할 수 있습니다.",
"자주 여는 폴더를 즐겨찾기에 등록하면 한 번에 열립니다.",
"즐겨찾기에 등록된 항목은 Ctrl+P로 간편하게 해제됩니다.",
// ── 스니펫 (5종) ──
"; 키워드 로 미리 등록한 텍스트를 즉시 확장할 수 있습니다.",
"스니펫은 런처 없이 어디서든 자동 확장됩니다.",
"자주 쓰는 이메일 서명을 스니펫으로 등록해 보세요.",
"스니펫에 {{date}} 변수를 넣으면 오늘 날짜가 자동 삽입됩니다.",
"설정 › 스니펫에서 키워드·내용을 자유롭게 관리하세요.",
// ── 워크스페이스 (4종) ──
"~save 이름 으로 현재 창 배치를 저장해 보세요.",
"~이름 으로 저장된 창 배치를 한 번에 복원할 수 있습니다.",
"여러 모니터 창 배치를 워크스페이스로 관리해 보세요.",
"~list 로 저장된 워크스페이스 목록을 확인할 수 있습니다.",
// ── 색상 (4종) ──
"color #FF5733 으로 색상 코드를 변환할 수 있습니다.",
"pick 을 입력하면 화면에서 색상을 추출할 수 있습니다.",
"color rgb(75,94,252) 처럼 RGB 형식도 지원됩니다.",
"추출한 색상은 HEX·RGB·HSL로 자동 변환됩니다.",
// ── 날짜 계산 (4종) ──
"date +30 으로 30일 후 날짜를 계산할 수 있습니다.",
"date -7 로 일주일 전 날짜도 바로 확인됩니다.",
"date 로 오늘 날짜와 요일을 바로 확인할 수 있습니다.",
"date +365 로 1년 후 날짜도 계산할 수 있습니다.",
// ── 파일 액션 (6종) ──
"파일을 선택하고 → 키를 누르면 다양한 액션을 사용할 수 있습니다.",
"Ctrl+Shift+E로 선택한 파일을 탐색기에서 바로 열 수 있습니다.",
"Ctrl+T로 해당 경로에서 터미널을 열 수 있습니다.",
"Ctrl+C로 파일 이름만 복사, Ctrl+Shift+C로 전체 경로를 복사합니다.",
"Ctrl+Enter로 관리자 권한으로 실행할 수 있습니다.",
"Alt+Enter로 파일 속성 대화상자를 열 수 있습니다.",
// ── 단축키 (5종) ──
"F1 을 누르면 전체 도움말을 확인할 수 있습니다.",
"Ctrl+K로 단축키 참조 창을 열어보세요.",
"Ctrl+1~9로 원하는 번호의 항목을 즉시 실행할 수 있습니다.",
"Ctrl+L로 입력창을 즉시 비울 수 있습니다.",
"Ctrl+, 로 설정 창을 바로 열 수 있습니다.",
// ── 터미널 (4종) ──
"> ipconfig 로 터미널 명령을 바로 실행할 수 있습니다.",
"> ping google.com 같은 네트워크 진단도 가능합니다.",
"> dir 로 현재 디렉터리 목록을 확인할 수 있습니다.",
"^ notepad 로 메모장을 직접 실행할 수 있습니다.",
// ── 캡처 (4종) ──
"cap screen 으로 화면을 캡처할 수 있습니다.",
"cap region 으로 원하는 영역만 캡처할 수 있습니다.",
"cap window 로 현재 활성 창만 캡처할 수 있습니다.",
"설정에서 캡처 글로벌 단축키를 지정할 수 있습니다.",
// ── 시스템 명령 (5종) ──
"/ lock 으로 화면을 즉시 잠글 수 있습니다.",
"/ shutdown 으로 PC를 종료할 수 있습니다.",
"/ restart 로 PC를 재시작할 수 있습니다.",
"/ sleep 으로 절전 모드로 전환할 수 있습니다.",
"/ recycle 로 휴지통을 비울 수 있습니다.",
// ── 기타 유틸 (10종) ──
"encode base64 hello 로 인코딩/디코딩이 됩니다.",
"json 을 입력하면 클립보드 JSON을 정리해 줍니다.",
"emoji 웃음 으로 이모지를 검색할 수 있습니다.",
"kill 프로세스명 으로 프로세스를 종료할 수 있습니다.",
"recent 를 입력하면 최근 실행 목록을 확인할 수 있습니다.",
"note 내용 으로 빠른 메모를 저장할 수 있습니다.",
"journal 오늘 할 일 로 업무 일지를 기록할 수 있습니다.",
"pipe upper | trim 으로 텍스트를 파이프라인 처리할 수 있습니다.",
"diff 로 클립보드의 두 텍스트를 비교할 수 있습니다.",
"stats 로 클립보드 텍스트의 글자수·단어수를 확인합니다.",
// ── 폴더/URL 별칭 (4종) ──
"cd desktop 으로 바탕화면 폴더를 바로 열 수 있습니다.",
"@blog 으로 등록된 URL을 즉시 열 수 있습니다.",
"cd 경로 로 원하는 폴더를 바로 열 수 있습니다.",
"Ctrl+D로 다운로드 폴더를 바로 열 수 있습니다.",
// ── 창 관리 (4종) ──
"win chrome 으로 크롬 창을 바로 전환할 수 있습니다.",
"snap left 로 현재 창을 왼쪽에 정렬할 수 있습니다.",
"snap grid 로 여러 창을 격자 배치할 수 있습니다.",
"Tab 키로 선택한 항목의 제목을 자동완성할 수 있습니다.",
// ── 테마 (2종) ──
"설정에서 8종 테마(Dark·Light·OLED 등)를 선택할 수 있습니다.",
"커스텀 테마로 나만의 색상 조합을 만들어 보세요.",
// ── AX Agent (8종) ──
"! 질문 으로 AX Agent에게 바로 물어볼 수 있습니다.",
"! 오늘 회의 내용 정리해줘 처럼 AX Agent과 대화해 보세요.",
"AX Agent은 ! 를 입력하는 것만으로 시작됩니다.",
"! 를 입력하면 AX Agent이 업무를 도와드립니다.",
"AX Agent이 직관적으로 답변합니다. ! 로 바로 시작해 보세요.",
"! 이메일 초안 작성해줘 같은 요청도 가능합니다.",
"AX Agent 대화 내역은 암호화되어 안전하게 보관됩니다.",
"! 보고서 요약해줘 처럼 업무 보조에 활용해 보세요.",
// ── AX Agent 기능 안내 (8종) ──
"AX Agent에서 코드 구문 강조와 마크다운 렌더링을 지원합니다.",
"Ollama/vLLM/Gemini/Claude 4종 LLM을 지원합니다.",
"AX Agent 대화에서 프롬프트 카드로 AI 역할을 바로 지정할 수 있습니다.",
"AX Agent에서 대화를 분류하고 검색할 수 있습니다. ! 로 시작하세요!",
"AX Agent은 토큰 사용량과 응답 시간을 실시간으로 표시합니다.",
"AX Agent에서 타이핑 효과로 자연스러운 대화를 경험해 보세요.",
"대화 제목을 클릭하면 바로 이름을 변경할 수 있습니다.",
"프롬프트 템플릿으로 자주 쓰는 지시를 저장해 보세요.",
// ── 캡처 업데이트 (3종) ──
"cap 모드에서 Shift+Enter로 지연 캡처(3/5/10초)를 할 수 있습니다.",
"cap region 으로 원하는 영역만 정확하게 캡처할 수 있습니다.",
"지연 캡처로 메뉴가 열린 상태도 캡처할 수 있습니다.",
// ── Phase L4 신기능 안내 (12종) ──
"C:\\ 또는 D:\\ 를 입력하면 바로 인라인 파일 탐색기가 열립니다!",
"파일 탐색 중 → 키로 폴더 진입, ← 키로 상위 폴더로 돌아갑니다.",
"F3 키로 선택한 파일을 바로 미리볼 수 있습니다. PDF·코드·Office 모두 지원!",
"F3 미리보기에서 코드 파일은 언어별 색상 강조와 줄 번호를 표시합니다.",
"F3 미리보기에서 Word·Excel 파일의 텍스트 내용도 확인할 수 있습니다.",
"입력이 없을 때 ↑/↓ 키로 이전 검색어를 불러올 수 있습니다.",
"ext:.pdf 를 입력하면 PDF 파일만 검색할 수 있습니다.",
"size:>10mb 필터로 대용량 파일만 골라서 찾아보세요.",
"modified:week 으로 최근 일주일 내 수정된 파일만 검색할 수 있습니다.",
"= 20km 처럼 입력하면 킬로미터를 자동으로 변환 제안해 드립니다!",
"= 100°F 를 입력하면 섭씨·켈빈으로 자동 변환됩니다.",
"= today+30d 로 30일 후 날짜를 바로 계산할 수 있습니다.",
];
private static readonly string[] _enPlaceholders =
[
"What can I help you with?",
"Type anything to search or run commands.",
"Try = 1920*1080 for quick calculations.",
"Press # to browse clipboard history.",
"Type ? keyword to search the web instantly.",
"Press F1 for the full help guide.",
"Use Ctrl+P to bookmark your favorite files.",
"Type info cpu to check system resources.",
];
private static readonly string[] _jaPlaceholders =
[
"何をお手伝いしますか?",
"検索やコマンドを入力してください。",
"= 1920*1080 で計算ができます。",
"# でクリップボード履歴を表示できます。",
"F1 でヘルプを表示できます。",
];
private static readonly string[] _zhPlaceholders =
[
"我能帮你做什么?",
"输入内容进行搜索或执行命令。",
"试试 = 1920*1080 进行快速计算。",
"按 # 浏览剪贴板历史。",
"按 F1 查看完整帮助。",
];
private static readonly string[] _viPlaceholders =
[
"Tôi có thể giúp gì cho bạn?",
"Nhập nội dung để tìm kiếm hoặc chạy lệnh.",
"Thử = 1920*1080 để tính toán nhanh.",
"Nhấn # để xem lịch sử clipboard.",
"Nhấn F1 để xem hướng dẫn đầy đủ.",
];
// ─── 한국어 (기본) ────────────────────────────────────────────────────────
private static readonly Dictionary _ko = new()
{
["placeholder"] = "무엇을 도와드릴까요?",
["loading"] = "검색 중...",
["no_results"] = "결과 없음",
["help_copy_hint"] = "Enter로 예시를 클립보드에 복사",
["help_total"] = "총 {0}개 명령어 · {1}개 단축키 · Enter → 전체 기능 창 열기",
["clipboard_empty"] = "클립보드 히스토리가 없습니다",
["clipboard_empty_hint"] = "텍스트를 복사하면 이 곳에 기록됩니다",
["merge_hint"] = "✓ {0}개 선택됨 · Shift+Enter로 합치기 · Esc로 취소",
["action_breadcrumb"] = "파일 액션",
["large_type_hint"] = "Shift+Enter: Large Type",
["settings_hotkey"] = "단축키",
["settings_theme"] = "테마",
["settings_language"] = "언어",
};
// ─── English ──────────────────────────────────────────────────────────────
private static readonly Dictionary _en = new()
{
["placeholder"] = "What can I help you with?",
["loading"] = "Searching...",
["no_results"] = "No results",
["help_copy_hint"] = "Press Enter to copy example to clipboard",
["help_total"] = "{0} commands · {1} shortcuts · Enter → Show all features",
["clipboard_empty"] = "No clipboard history",
["clipboard_empty_hint"] = "Copy text and it will appear here",
["merge_hint"] = "✓ {0} selected · Shift+Enter to merge · Esc to cancel",
["action_breadcrumb"] = "File Action",
["large_type_hint"] = "Shift+Enter: Large Type",
["settings_hotkey"] = "Hotkey",
["settings_theme"] = "Theme",
["settings_language"] = "Language",
};
// ─── 日本語 ───────────────────────────────────────────────────────────────
private static readonly Dictionary _ja = new()
{
["placeholder"] = "何をお手伝いしますか?",
["loading"] = "検索中...",
["no_results"] = "結果なし",
["help_copy_hint"] = "Enterで例をクリップボードにコピー",
["help_total"] = "コマンド {0}個 · ショートカット {1}個 · Enter → 全機能表示",
["clipboard_empty"] = "クリップボード履歴がありません",
["clipboard_empty_hint"] = "テキストをコピーするとここに表示されます",
["merge_hint"] = "✓ {0}件選択 · Shift+Enterで結合 · Escでキャンセル",
["action_breadcrumb"] = "ファイルアクション",
["large_type_hint"] = "Shift+Enter: 拡大表示",
["settings_hotkey"] = "ショートカット",
["settings_theme"] = "テーマ",
["settings_language"] = "言語",
};
// ─── 中文 ─────────────────────────────────────────────────────────────────
private static readonly Dictionary _zh = new()
{
["placeholder"] = "我能帮你做什么?",
["loading"] = "搜索中...",
["no_results"] = "无结果",
["help_copy_hint"] = "按 Enter 复制示例到剪贴板",
["help_total"] = "{0} 个命令 · {1} 个快捷键 · Enter → 显示全部功能",
["clipboard_empty"] = "没有剪贴板历史",
["clipboard_empty_hint"] = "复制文本后将显示在此处",
["merge_hint"] = "✓ 已选 {0} 项 · Shift+Enter 合并 · Esc 取消",
["action_breadcrumb"] = "文件操作",
["large_type_hint"] = "Shift+Enter: 大字显示",
["settings_hotkey"] = "热键",
["settings_theme"] = "主题",
["settings_language"] = "语言",
};
// ─── Tiếng Việt ───────────────────────────────────────────────────────────
private static readonly Dictionary _vi = new()
{
["placeholder"] = "Tôi có thể giúp gì cho bạn?",
["loading"] = "Đang tìm kiếm...",
["no_results"] = "Không có kết quả",
["help_copy_hint"] = "Nhấn Enter để sao chép ví dụ vào clipboard",
["help_total"] = "{0} lệnh · {1} phím tắt · Enter → Xem tất cả tính năng",
["clipboard_empty"] = "Không có lịch sử clipboard",
["clipboard_empty_hint"] = "Sao chép văn bản và nó sẽ xuất hiện ở đây",
["merge_hint"] = "✓ Đã chọn {0} mục · Shift+Enter để gộp · Esc hủy",
["action_breadcrumb"] = "Hành động tệp",
["large_type_hint"] = "Shift+Enter: Hiển thị lớn",
["settings_hotkey"] = "Phím tắt",
["settings_theme"] = "Giao diện",
["settings_language"] = "Ngôn ngữ",
};
}