obsidian 에 대한 팁과 사용방법에 대한글을 계속 작성합니다.
- 관련글 모음 :
obsidian 구글번역 플러그인
공식적인 플러그인이 없다. 그래서 직접만들기로 하자.
- 다음의 내용은 win10 에서 작성하고 동작확인완료하였습니다.
- obsidian shell plugin 이 최신으로 업데이트 되어 다시 작성하였습니다.
사용 플로우
obsidian shell plugin
(https://github.com/Taitava/obsidian-shellcommands)을 이용하여 외부 스크립트를 실행하고, 해당 결과를 다시 에디터로 반환 할 수있는 환경을 구성한다.- 번역을 위한 외부 스크립트는 python을 이용한다.
- 텍스트를 선택하여 지정한 단축키를 누르면 번역을 한다.
위와같이 할경우 python 을 이용하므로 향후 엄청나게 다양한 원하는 모든 기능들을 만들수있을 것이다.
windows 용 python 설치하기
windows 용 python 을 설치하여 python 스크립트를 동작시킬 수 있도록 한다.
obsidian shell 을 정상적으로 사용하기위한 설정
다음의 두 포스팅을 확인하여 동일하게 진행한다.
위의 포스팅은 powershell 에서 utf8 인코딩을 정상적으로 할 수 있도록 하는 세팅이다. 위대로 설정후 재부팅을 하면 powershell 내에서 호출하는 python 에서도 한글이 정상사용가능하다. (obsidian powershell 도 한글출력가능)
daum 번역용 스크립트 만들기
간단하게 python 스크립트를 다음과같이 만들고, obsidian vault 폴더내의 특정 경로에 스크립트를 생성하자.
- https://github.com/monologg/kakaotrans 의 코드를 단순화 하였다.
코드는 https://gist.github.com/kksworks/25eddb73eede0045cfaec591f5df16fc 에도 확인가능하다.
import os, sys
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# source from https://github.com/monologg/kakaotrans
DEFAULT_USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
BASE_URL = 'https://translate.kakao.com/translator/translate.json'
LANGUAGES = {
'kr': 'korean',
'en': 'english',
'jp': 'japanese',
'cn': 'chinse',
'vi': 'vietnamese',
'id': 'indonesian',
'ar': 'arabic',
'bn': 'bengali',
'de': 'german',
'es': 'spanish',
'fr': 'french',
'hi': 'hindi',
'it': 'italian',
'ms': 'malay',
'nl': 'dutch'
}
class Translator(object):
"""
Kakao Translate ajax API implemenation class
You have to create an instance of Translator to use this API
"""
def __init__(self, service_url=None, user_agent=DEFAULT_USER_AGENT):
self.service_url = service_url or BASE_URL
self.headers = {
"Host": "translate.kakao.com",
"Connection": "keep-alive",
"Accept": "*/*",
"Origin": "https://translate.kakao.com",
"X-Requested-With": "XMLHttpRequest",
"User-Agent": user_agent,
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Referer": "https://translate.kakao.com/",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,la;q=0.6"
}
def translate(self, query, src='en', tgt='kr', separate_lines=False,
save_as_file=False, file_name=None):
"""
Translate text from source language to target langauge
:param query: The source text to be translated
:param src: Source language. You can set as 'auto' for auto detecting the source language.
:param tgt: Target Language
:param separate_lines: If this is set as True, this function will return the list of translated sentences
:param save_as_file: Whether save the translated result as file or not
:param file_name: File name for saving the result.
:return: Translated Text
If separate_line==False, return the translated result in one sentence
If separate_line==True, return the list of multiple translated sentences
Basic usage:
>>> from kakaotrans import Translator
>>> translator = Translator()
>>> translator.translate("Try your best rather than be the best.")
"""
# To replace multiple whitespace to single whitespace
# This helps the translator to understand the query and split the sentences more clearly
query = ' '.join(query.strip().split())
# Assert language code
if src != 'auto' and src not in LANGUAGES:
raise ValueError('Invalid source language')
if tgt not in LANGUAGES:
raise ValueError('Invalid target language')
if src == tgt:
raise ValueError("Source language and Target language cannot be same")
# Send the POST request
params = {
'queryLanguage': src,
'resultLanguage': tgt,
'q': query
}
response = requests.post(self.service_url, headers=self.headers, data=params, verify=False)
# Check whether the status code is 200
if response.status_code != 200:
raise Exception("Response Error")
translated_lines = response.json()['result']['output'][0]
# Save the result as file
if save_as_file and not file_name:
raise ValueError("You must specified the filename if you want to save the result as file.")
if save_as_file:
with open(file_name, 'w', encoding='utf-8') as f:
for line in translated_lines:
f.write(line + '\n')
if separate_lines:
return translated_lines
else:
return ' '.join(translated_lines)
def daum_translate(target_str) :
translator = Translator()
print(translator.translate(target_str))
if __name__ == '__main__':
daum_translate(sys.argv[1])
obsidian shell 설정
new command
버튼을 누른후 다음의 내용을 추가하자.
python {{vault_path}}\your-path\daum-translate-py {{selection}}
- 코드설명
- 선택한 텍스트코드를 인자로 파이썬 스크립트를 실행한다.
추가한 커맨드의 상세설정으로 이동하여 operation system & shell
탭으로 이동, windows shell 을 powershell5
혹은 powershell core
로 변경한다.
파이썬 스크립트에서 번역한 내용으로 replace 하기 위해서 output 설정은 다음과 같이 caret position
으로 변경한다.
사용하기
단축키지정
단축키 확장 플러그인을 설치하자.
- Obsidian-shortcuts-extender : https://github.com/ryjjin/Obsidian-shortcuts-extender
- 해당 플러그인이 있으면 다른 플러그인의 기능도 단축키로 지정가능
필자는 ctrl + shift + G
로 지정함
사용하기
에디트 모드에서 번역하려는 문자열을 선택후에, ctrl + shift + G
를 누르면 자동으로 한글로 구글번역이 된다.
쉽게 사용가능할 수 있다.
시연동영상
View post on imgur.com
결론
obsidian 의 shell plugin 을 이용하면 원하는 거의 모든기능을 구현 할 수 있다.
....