# Pot (간편 번역기)
> A cross-platform translator application ([Telegram Group](https://t.me/pot_app))
![License](https://img.shields.io/github/license/pot-app/pot-desktop.svg)
![Tauri](https://img.shields.io/badge/Tauri-1.6.8-blue?logo=tauri)
![JavaScript](https://img.shields.io/badge/-JavaScript-yellow?logo=javascript&logoColor=white)
![Rust](https://img.shields.io/badge/-Rust-orange?logo=rust&logoColor=white)
![Windows](https://img.shields.io/badge/-Windows-blue?logo=windows&logoColor=white)
![MacOS](https://img.shields.io/badge/-macOS-black?&logo=apple&logoColor=white)
![Linux](https://img.shields.io/badge/-Linux-yellow?logo=linux&logoColor=white)
- [사용법](#usage)
- [기능](#features)
- [지원 서비스](#supported-services)
- [플러그인 시스템](#plugin-system)
- [설치](#installation)
- [외부호출](#external-calls)
- [Wayland 지원](#wayland-support)
- [다국어](#internationalizationweblate)
- [기여자](#contributors)
- [감사한 사람들](#thanks)
# 사용법
| 선택영역 자동번역 | 입력단어 번역 | 외부호출 |
| --------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------ |
| 문장을 선택하고 *번역단축키*를 누릅니다 | 번역창을 열고, 번역할 문장을 입력합니다 | 다른 프로그램과 연동하여 효율적으로 사용가능합니다, [External Calls](#external-calls) 참고 |
| | | |
| 클립보드 자동인식 | 스크린샷 OCR언어인식 | 스크린샷 자동번역 |
| -------------------------------------------------------------------- | --------------------------------- | ---------------------------------------- |
| 클립보드 모니터링 옵션을 통해, 텍스트를 복사하면 자동으로 번역합니다 | 화면캡쳐를 통해 문자를 인식합니다 | 화면을 캡쳐하면 인식한 문장을 번역합니다 |
| | | |
# 기능
- [x] 여러 번역 사이트를 사용한 동시번역 ([상세 페이지](#supported-services))
- [x] 문자인식 OCR ([상세 페이지](#supported-services))
- [x] 텍스트 음성 변환 ([상세 페이지](#supported-services))
- [x] 사전 앱에 내보내기 ([상세 페이지](#supported-services))
- [x] 외부호출 ([External Calls](#external-calls))
- [x] 플러그인 시스템 ([Plugin System](#plugin-system))
- [x] 운영체제 지원 - Windows, macOS and Linux
- [x] Wayland 지원 (Tested on KDE, Gnome and Hyprland)
- [x] 다중언어 지원
# 상세 페이지
## 번역
- [x] [OpenAI](https://platform.openai.com/)
- [x] [ChatGLM](https://www.zhipuai.cn/)
- [x] [Gemini Pro](https://gemini.google.com/)
- [x] [Ollama](https://www.ollama.com/) (Offline)
- [x] [Ali Translate](https://www.aliyun.com/product/ai/alimt)
- [x] [Baidu Translate](https://fanyi.baidu.com/)
- [x] [Caiyun](https://fanyi.caiyunapp.com/)
- [x] [Tencent Transmart](https://fanyi.qq.com/)
- [x] [Tencent Interactive Translate](https://transmart.qq.com/)
- [x] [Volcengine Translate](https://translate.volcengine.com/)
- [x] [NiuTrans](https://niutrans.com/)
- [x] [Google Translate](https://translate.google.com)
- [x] [Bing Translate](https://learn.microsoft.com/zh-cn/azure/cognitive-services/translator/)
- [x] [Bing Dictionary](https://www.bing.com/dict)
- [x] [DeepL](https://www.deepl.com/)
- [x] [Youdao](https://ai.youdao.com/)
- [x] [Cambridge Dictionary](https://dictionary.cambridge.org/)
- [x] [Yandex](https://translate.yandex.com/)
- [x] [Lingva](https://github.com/TheDavidDelta/lingva-translate) ([Plugin](https://github.com/pot-app/pot-app-translate-plugin-template))
- [x] [Tatoeba](https://tatoeba.org/) ([Plugin](https://github.com/pot-app/pot-app-translate-plugin-tatoeba))
- [x] [ECDICT](https://github.com/skywind3000/ECDICT) ([Plugin](https://github.com/pot-app/pot-app-translate-plugin-ecdict))
추가항목은 다음을 참고 [Plugin System](#plugin-system)
## 문자인식
- [x] System OCR (Offline)
- [x] [Windows.Media.OCR](https://learn.microsoft.com/en-us/uwp/api/windows.media.ocr.ocrengine?view=winrt-22621) on Windows
- [x] [Apple Vision Framework](https://developer.apple.com/documentation/vision/recognizing_text_in_images) on MacOS
- [x] [Tesseract OCR](https://github.com/tesseract-ocr) on Linux
- [x] [Tesseract.js](https://tesseract.projectnaptha.com/) (Offline)
- [x] [Baidu](https://ai.baidu.com/tech/ocr/general)
- [x] [Tencent](https://cloud.tencent.com/product/ocr-catalog)
- [x] [Volcengine](https://www.volcengine.com/product/OCR)
- [x] [iflytek](https://www.xfyun.cn/services/common-ocr)
- [x] [Tencent Image Translate](https://cloud.tencent.com/document/product/551/17232)
- [x] [Baidu Image Translate](https://fanyi-api.baidu.com/product/22)
- [x] [Simple LaTeX](https://simpletex.cn/)
- [x] [OCRSpace](https://ocr.space/) ([Plugin](https://github.com/pot-app/pot-app-recognize-plugin-template))
- [x] [Rapid](https://github.com/RapidAI/RapidOcrOnnx) (Offline [Plugin](https://github.com/pot-app/pot-app-recognize-plugin-rapid))
- [x] [Paddle](https://github.com/hiroi-sora/PaddleOCR-json) (Offline [Plugin](https://github.com/pot-app/pot-app-recognize-plugin-paddle))
추가항목은 다음을 참고 [Plugin System](#plugin-system)
## 문자-음성변환
- [x] [Lingva](https://github.com/thedaviddelta/lingva-translate)
추가항목은 다음을 참고 [Plugin System](#plugin-system)
## 사전
- [x] [Anki](https://apps.ankiweb.net/)
- [x] [Eudic](https://dict.eudic.net/)
- [x] [Youdao](https://www.youdao.com/) ([Plugin](https://github.com/pot-app/pot-app-collection-plugin-youdao))
- [x] [ShanBay](https://web.shanbay.com/web/main) ([Plugin](https://github.com/pot-app/pot-app-collection-plugin-shanbay))
추가항목은 다음을 참고 [Plugin System](#plugin-system)
# -플러그인- 시스템
정해진 기본 설정항목 외에, -플러그인 시스템-을 통해 사용자가 원하는 기능을 추가할 수 있습니다.
## -플러그인-의 설치
설치가능한 플러그인 항목은 다음을 참고하세요 [Plugin List](https://pot-app.com/plugin.html). 그리고 필요한 항목을 다운받으십시오.
플러그인의 확장자는 `.potext` 입니다. 다운받은 `.potext` 확장자 파일을 프로그램 설정메뉴 - 서비스 - Add External Plugin - Install External Plugin 메뉴에서 등록하여 설치합니다. 파일을 등록하면 해당 항목을 프로그램의 사용목록에 표시가 되어 사용이 가능해 집니다.
### 문제해결
- 특정모듈을 불러오지 못할 때 (Windows)
C++ 라이브러리가 없을 때 이러한 문제가 주로 발생합니다. 다음페이지를 방문하여 필요한 라이브러리를 설치합니다. [참고 페이지](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022)
- 유효하지 않은 Win32 프로그램 (Windows)
시스템 또는 프로그램과 호환되지 않는 플러그인을 다운받아 설치한 경우입니다. 플러그인에서 적절한 파일을 다운받았는지 확인하시고 재설치 하십시오.
## -플러그인-의 개발
템플릿 [Template](https://pot-app.com/en/plugin.html#template) 항목에서 다양한 항목을 플러그인들을 찾을 수 있습니다 [Plugin List](https://pot-app.com/en/plugin.html). 이 곳에서 필요한 문서를 참고하십시오.
# 설치방법
## Windows 윈도우
### Winget 을 이용한 설치
```powershell
winget install Pylogmon.pot
```
### 수동 설치
1. 최신버전 다운로드 페이지 [Release](https://github.com/pot-app/pot-desktop/releases/latest)에서 `.exe` 파일을 다운받습니다.
- 64-bit 버전 사용시, `pot_{version}_x64-setup.exe`
- 32-bit 버전 사용시, `pot_{version}_x86-setup.exe`
- arm64 버전 사용시, `pot_{version}_arm64-setup.exe`
2. 더블클릭하여 설치를 합니다.
### 문제해결
- 설치 후 프로그램창이 보이지 않거나 오른쪽 하단 시스템 트레이 항목에 아이콘이 표시되지 않을 경우,
윈도우-브라우저에서 사용하는 WebView2 기능이 설치되지 않았거나 비활성화 된 경우 입니다. 이 때는 WebView2 를 설치하거나 기능을 재설정 하십시오.
회사/기업 사용자의 경우 WebView2 기능이 설치되지 않았거나 비활성화된 경우가 있습니다. 이 경우 다음을 설치하십시오. WebView2 version `pot_{version} at [Release](https://github.com/pot-app/pot-desktop/releases/latest) _{arch}_fix_webview2_runtime-setup.exe`
문제가 해결되지 않는 경우, Windows 7 compatibility mode에서 시도해 보십시오.
## MacOS 맥OS
### Brew를 통한 설치
1. 탭에 추가:
```bash
brew tap pot-app/homebrew-tap
```
2. 설치:
```bash
brew install --cask pot
```
3. 업데이트:
```bash
brew upgrade --cask pot
```
### 수동설치
1. 최신버전 다운로드 페이지 [Release](https://github.com/pot-app/pot-desktop/releases/latest)에서 `.dmg` 파일을 다운받습니다. (M1 사용자이면, 다음 파일명을 다운로드 합니다 `pot_{version}_aarch64.dmg`, 기타 사용자는 다음 파일을 다운로드 합니다. `pot_{version}_x64.dmg`)
2. 더블클릭하여 설치를 합니다.
### 문제해결
- "pot" 을 열 수 없는 경우는 개발자 인증이 되지 않아서 입니다.
취소 버튼을 누르고 설정 메뉴로 들어갑니다 -> 개인정보 및 보안 메뉴에서 설정을 합니다.
열기 버튼을 클릭한 다음 팝업 창에서 열기 버튼을 클릭합니다. 그 이후에는 포트를 열 때 더 이상 팝업 경고가 표시되지 않습니다.
개인정보 및 보안에서 위의 옵션을 찾을 수 없거나 Apple Silicon 컴퓨터에서 파일 손상과 같은 오류 메시지가 표시되는 경우. Terminal.app을 열고 다음 명령을 입력한 다음(중간에 비밀번호를 입력해야 할 수도 있음), pot을 다시 시작합니다:
```bash
sudo xattr -d com.apple.quarantine /Applications/pot.app
```
- 열 때마다 권한 프롬프트가 나타나거나 바로 가기 번역을 수행할 수 없는 경우 설정 -> 개인정보 및 보안 -> 지원 기능으로 이동하여 Pot을 제거한 다음 Pot을 다시 추가하세요..
## Linux
### Debian/Ubuntu 데비안/우분투
리눅스 환경을 위해 `deb` 파일이 제공됩니다
참고 : 두 가지 버전이 제공됩니다. `glibc2.28`기반의 `universal`과 `openssl-1.1` 버전입니다. 프로그램이 당신의 컴퓨터에서 정상적으로 실행되지 않는다면 dependency와 관련된 문제일 경우가 많습니다. `universal`버전을 사용하면 이전 버전의 dependency를 사용하여 실행하면 대부분 실행이 가능합니다.
### Arch/Manjaro
> [!WARNING]
> In newer version of [Webkit2Gtk](https://archlinux.org/packages/extra/x86_64/webkit2gtk) (2.42.0), Because Nvidia Proprietary drives are not fully implemented DMABUF, it will cause failure to start and crash.
> Please downgrade or add the `WEBKIT_DISABLE_DMABUF_RENDERER=1` environment variable to `/etc/environment` (or other places where environment variables are set) to turn off the use of DMABUF.
1. View on [AUR](https://aur.archlinux.org/packages?O=0&K=pot-translation)
Use aur helper:
```bash
yay -S pot-translation # or pot-translation-bin or pot-translation-git
# or
paru -S pot-translation # or pot-translation-bin or pot-translation-git
```
2. If you are using `archlinuxcn`, you can install directly using pacman:
```bash
sudo pacman -S pot-translation
```
### Flatpak
> [!WARNING]
> 시스템 트레이 아이콘이 Flatpak을 통해 설치하면 표시되지 않습니다.
# 외부호출
Pot은 완벽한 HTTP 인터페이스를 제공합니다. 이를 통해 다른 프로그램과 연동해서 사용이 가능합니다. 타 프로그램은 HTTP requests를 `127.0.0.1:port` 주소로 보내어 활용할 수 있습니다. 기본 포트는 `60828`입니다. 이는 사용자 설정에서 변경이 가능합니다.
## API 상세:
```bash
POST "/" => Translate given text (body is text to translate)
GET "/config" => Open settings
POST "/translate" => Translate given text (same as "/")
GET "/selection_translate" => Translate selected text
GET "/input_translate" => Open input translation
GET "/ocr_recognize" => Perform OCR on screenshot
GET "/ocr_translate" => Perform translation on screenshot
GET "/ocr_recognize?screenshot=false" => OCR without taking screenshot
GET "/ocr_translate?screenshot=false" => Translate screenshot without taking screenshot
GET "/ocr_recognize?screenshot=true" => OCR with screenshot
GET "/ocr_translate?screenshot=true" => Translate screenshot
```
## 예제:
- 선택영역 자동번역:
"선택영역 자동번역"을 호출하려면 간단히 `127.0.0.1:port`에 호출요청을 합니다:
E.g. curl 사용시:
```bash
curl "127.0.0.1:60828/selection_translate"
```
## 자체스크린샷 미사용 OCR 기능
OCR 및 번역을 위해서 pot은 자체 스크린샷(화면캡쳐)기능을 사용하지 않을 수 있습니다. 자체 화면캡쳐 툴을 사용하면 특정환경에서 자체 스크린샷 기능이 정상적으로 동작하지 않는 것을 해결할 수 있습니다.
### Workflow:
1. 타 스크린샷 프로그램을 사용하여 화면을 캡쳐합니다
2. 캡쳐한 화면을 다음 위치에 저장합니다. `$CACHE/com.pot-app.desktop/pot_screenshot_cut.png`
3. 외부호출을 통해 번역요청을 요청합니다. `127.0.0.1:port/ocr_recognize?screenshot=false`
> `$CACHE` 는 시스템 캐시 폴더입니다. e.g. 윈도우는 다음경로를 확인하세요 `C:\Users\{username}\AppData\Local\com.pot-app.desktop\pot_screenshot_cut.png` .
### 예제
리눅스에서 Flameshot을 활용한 OCR:
```bash
rm ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png && flameshot gui -s -p ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png && curl "127.0.0.1:60828/ocr_recognize?screenshot=false"
```
## Existing Usages (Quick selection translation)
### SnipDo (Windows)
1. SnipDo를 [Microsoft Store](https://apps.microsoft.com/store/detail/snipdo/9NPZ2TVKJVT7) 에서 다운받아 설치합니다.
2. DSnipDo 확장팩을 최신버전 다운 경로에서 [Release](https://github.com/pot-app/pot-desktop/releases/latest) (pot.pbar) 다운받습니다.
3. 더블클릭하여 설치합니다.
4. 특정단어를 선택하게 되면, 선택영역의 오른쪽 윗 부분에 번역아이콘이 보이게 됩니다. 클릭하여 번역을 진행합니다.
### PopClip (MacOS)
1. PopClip를 [App Store](https://apps.apple.com/us/app/popclip/id445189367?mt=12) 에서 다운받아 설치합니다.
2. PopClip 확장팩을 최신버전 다운 경로에서 [Release](https://github.com/pot-app/pot-desktop/releases/latest) (pot.popclipextz) 다운받습니다.
3. 더블클릭하여 설치합니다.
4. PopClip settings에서 기능을 활성화 하면 선택영역의 번역을 할 수 있습니다.
### Starry (Linux)
> Starry는 아직 개발단계에 머물러 있습니다.따라서 사용자가 직업 컴파일해야 합니다.
Github: [ccslykx/Starry](https://github.com/ccslykx/Starry)
# Wayland 지원
배포판마다 Wayland에 대한 지원 수준이 다르기 때문에 pot 자체로는 완벽한 호환성을 달성할 수 없습니다. 하지만 다음은 적절한 구성을 통해 구현할 수 있는 몇 가지 일반적인 문제에 대한 해결책으로, Wayland에서 pot을 완벽하게 실행할 수 있습니다.
## 단축키를 적용할 수 없을 때,
타우리Tauri는 웨이랜드Wayland를 지원하지 않기 때문에, pot의 단축키 기능은 웨이랜드Waylan에서 사용할 수 없습니다.
시스템 단축키를 설정하고 `curl`로 요청을 보내 팟을 호출할 수 있으며, 자세한 내용은[External Calls](#external-calls) 을 참조하세요.
## 단축키가 동작하지 않을 때,
일부 순수 웨이랜드Wayland 데스크톱 환경/창 관리자(예: 하이프랜드)에서는 pot의 기본 제공 스크린샷 기능을 사용할 수 없습니다. 이 경우 다른 스크린샷 도구를 대신 사용할 수 있습니다. 자세한 내용은 [Not Using Built-in Screenshot](#not-using-built-in-screenshot) 섹션을 참조하세요.
아래는 스크린샷 기능을 구현하기 위해 `grim`과 `slurp`를 사용하는 Hyprland의 구성 예시입니다:
```conf
bind = ALT, X, exec, grim -g "$(slurp)" ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png && curl "127.0.0.1:60828/ocr_recognize?screenshot=false"
bind = ALT, C, exec, grim -g "$(slurp)" ~/.cache/com.pot-app.desktop/pot_screenshot_cut.png && curl "127.0.0.1:60828/ocr_translate?screenshot=false"
```
다른 데스크톱 환경/창 관리자도 비슷한 작업을 수행합니다.
## 번역창은 마우스 좌표를 따라갑니다.
현재 웨이랜드Wayland에서 정확한 마우스 좌표를 얻을 수 없기 때문에 내부 구현이 제대로 작동하지 않습니다. 특정 데스크톱 환경/창 관리자의 경우 창 규칙을 설정하여 마우스 위치에 따른 창을 구현할 수 있습니다. 여기서는 하이프랜드Hyprland를 예로 들어보겠습니다:
```conf
windowrulev2 = float, class:(pot), title:(Translator|OCR|PopClip|Screenshot Translate) # Translation window floating
windowrulev2 = move cursor 0 0, class:(pot), title:(Translator|PopClip|Screenshot Translate) # Translation window follows the mouse position.
```
# 다중언어 지원([Weblate](https://hosted.weblate.org/engage/pot-app/))
[![](https://hosted.weblate.org/widget/pot-app/pot-desktop/svg-badge.svg)](https://hosted.weblate.org/engage/pot-app/)
[![](https://hosted.weblate.org/widget/pot-app/pot-desktop/multi-auto.svg)](https://hosted.weblate.org/engage/pot-app/)
# 기여자
## 사용자 컴파일
### 요구사항
Node.js >= 18.0.0
pnpm >= 8.5.0
Rust >= 1.80.0
### 컴파일 방법
1. repository을 복사합니다
```bash
git clone https://github.com/pot-app/pot-desktop.git
```
2. dependencies를 설치합니다
```bash
cd pot-desktop
pnpm install
```
3. (Only Linux) dependencies를 설치합니다
```bash
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev patchelf libxdo-dev libxcb1 libxrandr2 libdbus-1-3
```
4. 개발모드 (Optional)
```bash
pnpm tauri dev # Run the app in development mode
```
5. 빌드
```bash
pnpm tauri build # Build into installation package
```
# 관련사항
- [Bob](https://github.com/ripperhe/Bob) Inspiration
- [bob-plugin-openai-translator](https://github.com/yetone/bob-plugin-openai-translator) OpenAI API Reference
- [@uiYzzi](https://github.com/uiYzzi) Implementation ideas
- [@Lichenkass](https://github.com/Lichenkass) Maintaining the Deepin App Store.
- [Tauri](https://github.com/tauri-apps/tauri) A user-friendly GUI framework.