必須条件
1.LibreOfficeとSDKがインストールされていて、LibreOfficeでPythonマクロが動作すること。
LibreOfficeのダウンロード
https://ja.libreoffice.org/
UbuntuのLibreOffice(MS Office互換性あり)でPythonマクロを使用する方法(超初級者向け)
https://qiita.com/ty21ky/items/2c8b001363c8293198e2
2.LibreOfficeバンドルのPythonで追加のパッケージが使用できること。
LibreOfficeバンドルのPythonにUbuntu - Pythonのパッケージのパスを追加する
https://qiita.com/ty21ky/items/3b944a7abe23e3bcaf8f
3.googletrans 2.2.0をインストールされていること。
LibreOfficeでGoogle翻訳-1
https://qiita.com/ty21ky/items/39ef28784b4416d04656
実行した環境
Ubuntu Stdio 17.10
LibreOffice 6.0.0.3
Python 3.5.4(LibreOfficeバンドル)
WindowsのLibreOfficeでPythonマクロが動作することは確認していますが、このGoogle翻訳が動作するかどうかは確認していません。
使い方
1.翻訳したいファイルをLibreOffice Writerで開く(Writerで開くことが出来るファイルのみ使用可)
Writerを新規作成し、文章をコピペしても良い。
2.翻訳したい文章を選択する。(翻訳できる文字数は、ドキュメントによると15k)
3.キーボードショートカットかツールボタンを作成しておき、実行する。(Sub ToJ、Sub ToE)マクロを実行からでも使用可。日本語、英語以外は追加する。
4.翻訳した文章を貼り付けたい位置で、ペーストする。(ペーストはWriter以外のアプリにもできるようです。コピペができるアプリであれば。)
本当は、すべてPythonプログラムで作成する予定でしたが、Writer以外のアプリから翻訳したい文章をコピーして翻訳することが出来るのですが、Writerで翻訳したい文章をコピーするとLibreOfficeがフリーズしてしまい、私の知識では解決することが出来ないため、今年の2月に作ったプログラムのGoogle翻訳の部分だけをgoogletrans 2.2.0に変更したものです。
2月につくったプログラムは、「Google Translate API、無料で使えるか-Qiita」(現在は削除されています)にネットで探したサンプルプログラムを組みわせただけのものです。
参考元を表示しようと思っても控えていなかったためできません。
もし、問題がありそうでしたらご指摘いただいたらすぐにこの記事を削除します。
Pythonマクロ
/home/ユーザ名/.config/libreoffice/4/user/Scripts/python/
に保存(Ubuntuの場合)
# import pyperclip #不要 削除
from googletrans import Translator
translator = Translator()
def left(s, amount = 1, substring = ""):
if (substring == ""):
return s[:amount]
else:
if (len(substring) > amount):
substring = substring[:amount]
return substring + s[:-amount]
def right(s, amount = 1, substring = ""):
if (substring == ""):
return s[-amount:]
else:
if (len(substring) > amount):
substring = substring[:amount]
return s[:-amount] + substring
def Honyaku(ModeEng):
mode = left(ModeEng,2)
eng = right(ModeEng,-3)
return translator.translate(eng, dest=mode).text
LibreOffice Basicマクロ
ツール ー> マクロ ー> マクロの管理 ー> LibreOffice Basic ー>
例.
マイマクロ ー> Standard ー> 新規作成をクリック ー> Module1
REM ***** BASIC *****
Global sTxtCString As String
Sub ToJ
MultHonyaku1("ja") '全ての言語を日本語に
End Sub
Sub ToE
MultHonyaku1("en") '全ての言語を英語に
End Sub
Function MultHonyaku1(Mode As String) as void
Dim oSels As Object
Dim oSel As Object
Dim oString
oDoc = ThisComponent
'選択した文字列を取得
oSels = oDoc.getCurrentSelection()
oSel = oSels.getByIndex(i)
oString = oSel.getString() '選択した文字列
oString = Mode + oString
'Pythonマクロを実行
Dim a(0) As String
Dim b(0),c(0) As String
a(0) = oString
com1 = ""
scpr = ThisComponent.getScriptProvider
scmod = scpr.getScript("vnd.sun.star.script:MultGoogleT1.py$Honyaku?language=Python&location=user")
returnFromPython = scmod.invoke(a,b,c)
Dim Honyaku As String
Honyaku = returnFromPython
CopyToClipBoard(Honyaku)
End Function
Sub CopyToClipBoard( sText )
' create SystemClipboard instance
oClip = CreateUnoService( _
"com.sun.star.datatransfer.clipboard.SystemClipboard")
oTR = createUnoListener("Tr_", _
"com.sun.star.datatransfer.XTransferable")
' set data
oClip.setContents(oTR,Null)
sTxtCString = sText
End Sub
Function Tr_getTransferData( _
aFlavor as com.sun.star.datatransfer.DataFlavor)
If (aFlavor.MimeType = "text/plain;charset=utf-16") Then
Tr_getTransferData() = sTxtCString
End If
End Function
Function Tr_getTransferDataFlavors()
Dim aFlavor As new com.sun.star.datatransfer.DataFlavor
aFlavor.MimeType = "text/plain;charset=utf-16"
aFlavor.HumanPresentableName = "Unicode-Text"
Tr_getTransferDataFlavors() = array(aFlavor)
End Function
Function Tr_isDataFlavorSupported( _
aFlavor as com.sun.star.datatransfer.DataFlavor) as Boolean
If aFlavor.MimeType = "text/plain;charset=utf-16" Then
Tr_isDataFlavorSupported = true
Else
Tr_isDataFlavorSupported = false
End If
End Function