LibreOfficeでGoogle翻訳-2'

#####必須条件
１．LibreOfficeとSDKがインストールされていて、LibreOfficeでPythonマクロが動作すること。
　LibreOfficeのダウンロード
　https://ja.libreoffice.org/

　UbuntuのLibreOffice(MS Office互換性あり)でPythonマクロを使用する方法（超初級者向け）
　https://qiita.com/ty21ky/items/2c8b001363c8293198e2

２．LibreOfficeバンドルのPythonで追加のパッケージが使用できること。
　LibreOfficeバンドルのPythonにUbuntu - Pythonのパッケージのパスを追加する
　https://qiita.com/ty21ky/items/3b944a7abe23e3bcaf8f

３．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翻訳が動作するかどうかは確認していません。

#####使い方
１．翻訳したいファイルをLibreOffice Writerで開く（Writerで開くことが出来るファイルのみ使用可）
　Writerを新規作成し、文章をコピペしても良い。

２．翻訳したい文章を選択する。（翻訳できる文字数は、ドキュメントによると15k）

３．キーボードショートカットかツールボタンを作成しておき、実行する。（Sub ToJ、Sub ToE）マクロを実行からでも使用可。日本語、英語以外は追加する。

４．翻訳した文章を貼り付けたい位置で、ペーストする。（ペーストはWriter以外のアプリにもできるようです。コピペができるアプリであれば。）

本当は、すべてPythonプログラムで作成する予定でしたが、Writer以外のアプリから翻訳したい文章をコピーして翻訳することが出来るのですが、Writerで翻訳したい文章をコピーするとLibreOfficeがフリーズしてしまい、私の知識では解決することが出来ないため、今年の２月に作ったプログラムのGoogle翻訳の部分だけをgoogletrans 2.2.0に変更したものです。
２月につくったプログラムは、「Google Translate API、無料で使えるか-Qiita」（現在は削除されています）にネットで探したサンプルプログラムを組みわせただけのものです。
参考元を表示しようと思っても控えていなかったためできません。
もし、問題がありそうでしたらご指摘いただいたらすぐにこの記事を削除します。

#####Pythonマクロ
/home/ユーザ名/.config/libreoffice/4/user/Scripts/python/
に保存(Ubuntuの場合)

```python:MultGoogleT1.py
#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

```shell-session
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
```