LoginSignup
1
3

More than 5 years have passed since last update.

LibreOfficeでGoogle翻訳-2'

Last updated at Posted at 2018-04-23
必須条件

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の場合)

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

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
1
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3