Ich habe ein Übersetzungstool (TUI-Befehl) geschrieben, das GAS in Go-Sprache umschließt.
Es kann sich für diejenigen lohnen, die:
Ich kann nicht gut Englisch, daher kann ich Wörterbuch- und Übersetzungsseiten beim Lesen und Schreiben von Dokumenten nicht loslassen. Normalerweise arbeite ich im Terminal, aber es ist stressig, weil ich zwischen dem Webbrowser und der Terminalsoftware hin und her gehe.
Eines Tages hatte ich GAS (Google Apps Script) noch nie berührt, daher habe ich beschlossen, es für ein späteres Studium auszuprobieren, und einen einfachen Übersetzungsbefehl erstellt, der LanguageApp umschließt.
Anfangs wollte ich es auf modische Weise machen, aber ich fand es überraschend bequem zu verwenden, deshalb möchte ich es in einem Artikel vorstellen.
Der Befehl wird im folgenden Repository veröffentlicht.
Ein ähnliches Tool ist translate-shell. Ich bin sicher, dass viele von Ihnen es verwenden, aber später in diesem Artikel werde ich auf die Unterschiede zwischen go-tran und translate-shell eingehen.
Wir haben den Betrieb unter Linux und Windows bestätigt. (Ich denke, es funktioniert auf dem Mac)
Wenn Sie den Befehl tran ohne Argumente ausführen, wird eine interaktive Shell gestartet.
Standardmäßig wird es in die Sprache des aktuellen Gebietsschemas der Ausführungsumgebung übersetzt. Sie müssen also nur die Fremdsprache eingeben, die Sie übersetzen möchten.
Im Folgenden finden Sie Beispiele für die Übersetzung von Englisch, Französisch, Italienisch, Spanisch, Koreanisch und Chinesisch ins Japanische.
Im obigen Bild lautet die Eingabeaufforderung `: ja>`
.
Es hat das Format `(Quelle): (Ziel)>`
, die Ausgangssprache ist Auto und die Zielsprache ist Japanisch (ja). ist was es bedeutet. Wenn Sie beispielsweise vom Japanischen ins Englische übersetzen, wird `ja: en>`
angezeigt.
Geben Sie den zweistelligen Sprachcode (ISO639-1) ein, um die Zielsprache zu wechseln. Das Folgende ist ein Beispiel für die Übersetzung von Japanisch in Englisch (en), Französisch (fr), Italienisch (it), Spanisch (es), Koreanisch (ko) und Chinesisch (zh) beim Umschalten der Zielsprache. ist.
Wenn Sie den Sprachcode nicht kennen, können Sie ihn mit dem Befehl l (l: Sprachcodes) nachschlagen.
Der Befehl l zeigt eine Liste der eingegebenen Zeichenfolgen an, die mit dem ISO639-1-Code identisch sind oder teilweise mit dem Namen der ISO-Sprache (englischer Name) übereinstimmen. Wenn Sie dies auch nicht finden, können Sie es intern in Englisch konvertieren und dann erneut suchen, sodass Sie den gewünschten Sprachcode auch mit dem Namen, den Sie beispielsweise auf Japanisch eingegeben haben, relativ leicht finden können.
Das Folgende ist "l Befehl, der" nor "," nese "," deutsch "," kurdisch "," Zulu "enthält, und die Liste wurde angezeigt, aber" kambrisch " Wurde nicht gefunden. "
Wenn Sie im Befehlszeilenargument einen Dateinamen angeben oder eine Verbindung zur Standardeingabe des Befehls per Pipe oder Umleitung herstellen, wird dieser als Stapelbefehl ausgeführt.
Wenn Sie den Pfadnamen der Datei als Argument übergeben und go-tran ausführen, wird die Datei übersetzt. Auch hier wird die Konvertierungszielsprache (Standardwert) durch das aktuelle Gebietsschema der Ausführungsumgebung bestimmt.
Wenn der Standardeingang kein Terminal ist, wird go-tran im Batch-Modus ausgeführt.
In meiner Ubuntu-Umgebung wird man beispielsweise auf Japanisch angezeigt, es gibt jedoch einige Befehle, für die kein japanisches Handbuch verfügbar ist. Es ist nicht so japanisch wie die Befehle, die Sie nicht oft verwenden. Als ich in der Vergangenheit auf ein englisches Wort stieß, das ich nicht kannte, musste ich einen Webbrowser öffnen, um es nachzuschlagen.
Aber von nun an müssen Sie nur noch den Mann zum Go-Tran umleiten.
** Wenn Sie eine Go-Umgebung haben **
install go-tran
$ go get -u github.com/y-bash/go-tran
$ cd $GOPATH/src/github.com/y-bash/go-tran
$ go install ./...
** Wenn Sie keine Go-Umgebung haben und nur den Quellcode erhalten **
get source code
$ git clone https://github.com/y-bash/go-tran.git
Wenn Sie keine Go-Umgebung haben, aber eine Binärdatei verwenden möchten, können Sie sich gerne an uns wenden, da wir eine Methode in Betracht ziehen.
Die ausführbare Datei heißt tran.
$ tran
Welcome to the GO-TRAN!
...
Die von Ihnen eingegebenen Zeichen werden im Allgemeinen wie folgt beurteilt.
String | Erläuterung |
---|---|
Ein Charakter | Als Befehl beurteilt. |
2 Buchstaben | Umschalten der Zielsprache. |
3 Zeichen oder mehr | Übersetzen Sie den eingegebenen Text gemäß dem aktuellen Modus. |
Die Arten von Befehlen sind wie folgt.
Befehl | Erläuterung | Beispiel |
---|---|---|
h | Hilfe anzeigen. | |
l [str] | Zeigt eine Liste der Sprachcodes und Namen an. (Sprachcode ist ISO639-1)
|
|
s [str] | Ausgangssprache(Source)Umschalten.
|
|
[t] code t [str] |
Zielsprache(Target)Umschalten.
|
|
q | Ende |
Die Hauptschlüsselbindungen sind: (Bash kompatibel)
Schlüssel | Erläuterung | 代替Schlüssel |
---|---|---|
Ctrl-a | Gehen Sie zum Anfang der Zeile | Home |
Ctrl-e | Gehen Sie zum Zeilenende | End |
Ctrl-b | 1 Zeichen rückwärts | ← |
Ctrl-f | 1 Zeichen vorwärts | → |
Schlüssel | Erläuterung | 代替Schlüssel |
---|---|---|
Ctrl-h | Löschen Sie das Zeichen vor der Cursorposition | Back space |
Ctrl-d | Löschen Sie das Zeichen an der Cursorposition | Delete |
Ctrl-k | Löschen Sie von der Cursorposition bis zum Ende der Zeile | |
Ctrl-u | Löschen Sie vom Zeilenanfang bis kurz vor die Cursorposition |
Die von Ihnen eingegebenen Befehle und Texte werden im Verlauf gespeichert und können mit Tastenanschlägen verfolgt werden.
Schlüssel | Erläuterung | 代替Schlüssel |
---|---|---|
Ctrl-p | Gehen Sie zurück in den Eingabeverlauf | ↑ |
Ctrl-n | Gehen Sie den Eingabeverlauf durch | ↓ |
Ctrl-r | Inkrementelle Suche im Eingabeverlauf |
Das Format des Befehls ist wie folgt.
format
tran [options] [path...]
[12. Oktober 2020] -a Option und -e Option hinzugefügt
Die Optionen sind:
option | Erläuterung | Beispiel |
---|---|---|
-a | Registrieren Sie sich beim GAS-Projekt des Benutzers Zeigen Sie das Skript an. Eingetragen Skript-URL in der Konfigurationsdatei Erstellen Sie Ihren eigenen API-Server, indem Sie ihn auflisten Sie können es nennen. Diese Option ist nur für den Stapelmodus verfügbar. |
$ tran -a |
-e | Der Originaltext und der übersetzte Text werden abwechselnd zeilenweise ausgegeben. Diese Option ist nur für den Stapelmodus verfügbar. |
```$tran -e english.txt |
-h | Hilfe anzeigen. Diese Option ist nur für den Stapelmodus verfügbar. |
$ tran -h |
-l | Liste der Sprachcodes und Namen(184 Fälle)Es wird angezeigt. (Sprachcode ist ISO639-1) Diese Option ist nur für den Stapelmodus verfügbar. |
$ tran -l |
-s code | Ausgangssprache(Source)Zu Sprachcode (ISO639-Geben Sie in 1) an. Wenn nicht angegeben, wird dies automatisch ermittelt. |
$ tran -s en |
-t code | Zielsprache(Target)Zu Sprachcode (ISO639-Geben Sie in 1) an. Wenn nicht angegeben, wird es in das aktuelle Gebietsschema konvertiert. |
$ tran -t en |
###Pfad
Die Methode zum Festlegen des Pfads lautet wie folgt.
path | Erläuterung | Beispiel |
---|---|---|
Bezeichnung | Bezeichnungしたファイルを翻訳して標準出力へ出力します。 | $ tran a.txt b.txt |
Kürzung |
|
* In der Zelle"|"Ist ein Zeichen voller Breite. Bitte seien Sie beim Kopieren vorsichtig. |
###Anwendungsbeispiel
Bestätigen Sie schnell schwierige englische Wörter
python
$ echo "penpineappleapplepen" | tran
Stift Ananas Apfelstift
Konvertieren Sie japanische Dateien in Englisch
python
$ tran -t en Japanese.txt
this is a pen.
Speichern Sie japanische Dateien in Latein
python
$ tran -t la Japanese.txt > Latin.txt
Geben Sie das Ergebnis der automatischen Übersetzung ins Japanische zurück und prüfen Sie, ob es gut passt
python
$ echo "Ich liebe Äpfel" | tran -t en | tran
Ich liebe Äpfel
strings.Builder (Golang)Machen Sie alle Kommentarzeilen im Quellcode von
python
$ grep '^\s*//' ./builder.go | sed -e 's/^\s*..\s*//' | tran
Copyright 2017 The Go Autoren. Alle Rechte vorbehalten.
Die Verwendung dieses Quellcodes unterliegt dem BSD-Stil
Die Lizenz in der LIZENZ-Datei.
Builder wird verwendet, um Zeichenfolgen mithilfe der Write-Methode effizient zu erstellen.
...
Ändern Sie die Fehlerzeile aller Protokolldateien im aktuellen Verzeichnis in Japanisch
python
$ find . -name '*.log' | xargs grep 'error:' | tran
./tool/vim/src/auto/config.log:conftest.c:154:12: Fehler: 'GETACLCNT' ist nicht deklariert (erste Verwendung in dieser Funktion)
./tool/vim/src/auto/config.log:conftest.c:154:26: Fehler: 'NULL' ist nicht deklariert (erste Verwendung in dieser Funktion)
...
##Einstellungsdatei [Hinzugefügt am 12. Oktober 2020]
Version 1.0.In diesem Abschnitt wird beschrieben, wie Sie die in 1 unterstützte Einstellungsdatei verwenden.
###Pfad der Konfigurationsdatei
Der Pfad der Konfigurationsdatei lautet wie folgt. (Abhängig vom Betriebssystem)
OS | Pfad |
---|---|
POSIX | $HOME/.config/y-bash/config.toml |
Windows | %AppData%\y-bash\tran\config.toml |
###Elemente, die eingestellt werden können
Tabelle | Schlüssel | Erläuterung | Ursprünglicher Wert |
---|---|---|---|
[default] | source | Quellcode(ISO639-1)Standardwert für. | "" |
[default] | target | Sprachcode des Konvertierungsziels(ISO639-1)Standardwert für. | Aktuelles Gebietsschema beim ersten Start. |
[api] | endpoint | GAS (Google Apps Script)Projekt-URI. Sie können Ihren eigenen API-Server angeben, indem Sie den URI eines vom Benutzer erstellten GAS-Projekts festlegen. Das in GAS einzustellende Skript ist-Kann mit der Option a angezeigt werden. [Beispiel] tran-a |
Wie vorher. |
[api] | limit_n_chars | Maximale Anzahl von Zeichen, die in einem einzelnen API-Aufruf gesendet werden. Wenn die Anzahl der Zeichen im Quelltext diesen Wert überschreitet, wird die API mehrmals aufgerufen. | 4000 |
[colors] | info | Textfarbe der Informationsnachricht | "#80a0d0" |
[colors] | info | Textfarbe der Statusänderungsnachricht | "#60c060" |
[colors] | error | Textfarbe der Fehlermeldung | "#d04040" |
[colors] | result | Textfarbe des konvertierten Textes | "#ffc864" |
Eigentlich übersetze ich-Ich habe etwas über Muschel gelernt, geh-Nachdem ich angefangen habe tran zu machen.
Die Funktionen sind fast ähnlich und die Befehlsnamen sind gleich.trans
Ich war überrascht, weil es war.
(Zuerst gehen-Es hieß trans)
Darüber hinaus übersetzen-Shell ist sehr funktional, z. B. zum Anzeigen zusätzlicher Informationen wie Teilwörtern und zum Anzeigen mehrerer Bedeutungen eines Wortes.
Aber nachdem Sie es ein wenig benutzt haben, gehen Sie-geh zu tran-Allmählich wurde mir klar, dass Tran gut ist.
translate-Die Shell zeigt nicht nur das Übersetzungsergebnis an, sondern auch die folgenden zusätzlichen Informationen.
*Ausgangssprache *Zielsprache *Wortteil (bei Wörtern) *Mehrfachbedeutungen (für Wörter)
translate-Ausführungsbeispiel der Shell
Da es wie ein Wörterbuch verwendet werden kann, kann es für das englische Schreiben praktisch sein. Wenn Sie jedoch ein solides englisches Dokument schreiben müssen, benötigen Sie ein solideres Wörterbuch.
translate-Gehe zur Muschel-Die Vorteile von tran sind:
*einfach
Es ist leicht zu erkennen, da keine zusätzlichen Informationen ausgegeben werden.
Zusätzliche Informationen wie Teiltexte können manchmal stören.
*Farbbildschirm
Über das Farbdisplay können Sie das gewünschte Teil sofort identifizieren.
*Sprachcode-Suchfunktion
go-Mit tran können Sie den Sprachcode leicht finden.
translate-Die Shell muss sich den Sprachcode merken oder sich die Dokumentation ansehen.
*
go-
translate-
*
go-
-tran ist einfach, Zeichen zu bearbeiten. Es scheint, dass die Shell nur Standardeingaben liest und es schwierig ist, Zeichen zu bearbeiten. Die Verlaufsfunktion tran kann zuvor eingegebene Befehle und Texte erneut anzeigen, bearbeiten und ausführen. Dies ist auch eine Funktion, die translateshell nicht hat.
*Windows native Unterstützung
go-Sie können tran an der Windows-Eingabeaufforderung ausführen.
translate-Es scheint, dass die Shell eine UNIX-kompatible Umgebung wie Cygwin erfordert.
go-Bild der Verwendung von tran
GAS (Google Apps Script)Mit Go erstellte Web-APIs und mit Go erstellte Clients sind sehr einfach.
##Erstellen Sie eine Web-API mit GAS
tanabeeIch bezog mich auf Mr.s populären Artikel.
Die folgende Verarbeitung wird dem Code hinzugefügt, der als Referenz verwendet wurde.
*Kehre mit json zurück
Der Code ist unten.
Translate.gs
// Gemeinsame Verarbeitung
// param e event
function process(e) {
let body // Antwortkörper
try {
const p = e.parameter // Anforderungsparameter
const s = LanguageApp.translate (p.text, p.source, p.target) // Übersetzen
body = {code: 200, text: s} // Erstellt einen Antworttext
} catch (e) {// param e Ausnahme
// Übersetzung fehlgeschlagen
try {
const msg = LanguageApp.translate (e.toString (), "", "en") // Fehlermeldung an Englisch senden
body = {code: 400, message: msg} // Erstellt einen Antworttext
} catch (e) {// param e Ausnahme
// Wenn Sie dies nicht tun, ist dies ein interner Fehler
body = {code: 500, message: e.toString ()} // Erstellt einen Antworttext
}
}
let resp = ContentService.createTextOutput () // Antwort
resp.setMimeType (ContentService.MimeType.JSON) // Setzt den MIME-Typ auf das JSON-Format
resp.setContent (JSON.stringify (body)) // Konvertiert den Antworttext in eine JSON-formatierte Zeichenfolge
return resp; // gib die Antwort zurück
}
// GET
// param e event
function doGet(e) {
Rückgabeprozess (e) // Gemeinsamen Prozess aufrufen
}
// POST
// param e event
function doPost(e) {
Rückgabeprozess (e) // Gemeinsamen Prozess aufrufen
}
Mit dem obigen Code verarbeiten(e)Und zwei Fänge(e)Wenn Sie Bedenken haben, eine Variable mit demselben Namen zu verwenden, ändern Sie den Variablennamen.
Nach dem Ändern des SkriptsProject versionZuNewIch wusste nicht, dass es sich nicht im Produkt widerspiegeln würde, wenn ich es nicht tun würde, also machte ich mir etwa 20 Minuten lang Sorgen darüber.
##Machen Sie einen Kunden mit Go
Die clientseitigen Funktionen (Go-Sprache), die die in GAS erstellte Web-API umschließen, lauten wie folgt.
tran.go
package tran
import (
"encoding/json"
"errors"
"io/ioutil"
"net/http"
"net/url"
"strings"
)
const gURL = "https://script.google.com/macros/s/@@script@@/exec" // @@ script @@ Korrektur erforderlich
// Struktur, die den JSON der Antwort abbildet
type TransData struct {
Code int `json:" code "` // Antwortstatus
Textzeichenfolge `json:" text "` // Übersetzungsergebnis
Meldungszeichenfolge `json:" message "` // Fehlermeldung
}
// Übersetzung
func Translate(text, source, target string) (string, error) {
// Parameter erstellen
v := url.Values{}
v.Add ("text", text) // Quellzeichenfolge
v.Add ("Quelle", Quelle) // Ausgangssprache (ISO639-1)
v.Add ("Ziel", Ziel) // Zielsprache (ISO639-1)
// Anforderung an die Übersetzungs-API per POST
resp, err := http.PostForm(gURL, v)
if resp != nil {
defer resp.Body.Close()
}
if err != nil {
return "", err
}
// Den Antworttext in den Puffer einlesen
buf, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
// Antworttext (JSON-Format) der Struktur zuordnen
var td TransData
if err := json.Unmarshal(buf, &td); err != nil {
return "", err
}
// Antwortstatus überprüfen
if td.Code != 200 {
// Fehlerbehandlung (Präfix "Exception:" entfernen)
msg := td.Message
prefix := "exception:"
if strings.HasPrefix(strings.ToLower(msg), prefix) {
msg = string(msg[len(prefix):])
msg = strings.TrimSpace(msg)
}
return "", errors.New(msg)
}
// Normale Verarbeitung
return td.Text, nil // Extrahiere die konvertierte Zeichenfolge aus der Struktur und gib sie zurück
}
Machen Sie nichts Schwieriges, HTTP-Anfrage auf einfachste Weise(POST)Ich werfe nur, aber bitte beachten Sie die folgenden Punkte.
*Vom obigen Code@@script@@@
Muss für jedes GAS-Projekt geändert werden.
*Nachrichtenpräfix, wenn ein Fehler auftritt"Exception: "Ich mache den Prozess des Entfernens, aber ich denke, dass dies je nach Situation unnötig ist.
Für anderen CodeHierBitte wende dich an die.
Im Moment gibt es die folgenden Probleme, aber ich denke nicht, dass es so schwierig sein wird, sie zu verbessern.
*Reaktionszeit
Derzeit verwendet die Serverseite den kostenlosen Plan von GAS, sodass es möglich ist, dass die Antwort aufgrund von Zugriffsbeschränkungen bei konzentriertem Datenverkehr schlecht ist.
Aus diesem Grund möchte ich zulassen, dass die Konfigurationseinstellungen des Befehls eine benutzerspezifische URL angeben. Dies erhöht die Belastung für Benutzer, GAS-Skripte in ihrem Google-Konto zu registrieren. Im Gegenzug sollten sie jedoch Befehle verwenden können, ohne sich um andere sorgen zu müssen.
[Aktualisiert am 12. Oktober 2020]
Dieses Problem ist Version 1.0.Es wurde in 1 gelöst. Sie können den URI Ihres eigenen GAS-Projekts in der Konfigurationsdatei festlegen. Detail istHierBitte wende dich an die.
*Stapelausgabeformat
Wenn Sie Protokolldateien und Dokumente übersetzen, möchten Sie diese dennoch mit dem Originaltext vergleichen.
Zu diesem Zweck planen wir die Option, den Originaltext und den übersetzten Text abwechselnd zeilenweise auszugeben. Wahrscheinlich nicht schwer zu handhaben.
[Aktualisiert am 12. Oktober 2020]
Dieses Problem ist Version 1.0.Es wurde in 1 gelöst.-Der Originaltext und der übersetzte Text können abwechselnd ausgegeben werden, indem sie mit der Option e ausgeführt werden. Detail istHierBitte wende dich an die.
*Zeichenbegrenzung
Ich habe festgestellt, dass beim Einfügen von viel Text in die GAS LanguageApp ein Fehler aufgetreten ist. In diesem Zusammenhang können wir den Maximalwert für die Anzahl der Zeichen festlegen, die gleichzeitig in die API eingegeben werden können, und das Programm so ändern, dass bei einer großen Textmenge diese separat übersetzt wird.
[Aktualisiert am 12. Oktober 2020]
Dieses Problem ist Version 1.0.Es wurde in 1 gelöst. Dateilimit für Einstellungen_n_chars (Der Anfangswert kann mit 4000 eingestellt werden). Detail istHierBitte wende dich an die.
In diesem Artikel ein Übersetzungstool in Go-Sprache(TUI-Befehl)Ich stellte die Geschichte des Machens und die Verwendung des Befehls vor. Ich habe auch kurz vorgestellt, wie man es macht. Ich schrieb auch, dass ich herausgefunden habe, dass es bereits ein ähnliches Tool gibt, und war zunächst enttäuscht, aber nach und nach begann ich zu denken, dass meine eigenen Befehle nicht schlecht waren.
Die Übersetzungs-API von GAS ist einfach zu bedienen und allen bekannt. Zuerst dachte ich, dass ein Produkt, das eine solche API verwendet, nicht besonders interessant wäre, aber als ich es tatsächlich herstellte, konnte ich etwas überraschend Praktisches herstellen (es ist natürlich, weil es eine alte Spezifikation ist). …).
Wenn ich meine eigenen mache, kann ich auch die Vor- und Nachteile beliebter Tools erkennen.
Es gibt so viele bekannte Lösungen wie Sterne. Aber diese Erfahrung ist eines dieser Dinge
*Es sieht so aus, als wäre es eine Ware, aber es gibt Anwendungen, die noch niemand bemerkt hat. *Es ist zum De-facto-Standard geworden, aber es gibt Verbesserungen, die noch niemand bemerkt hat.
Es war eine Gelegenheit, solche Dinge wieder zu erkennen.
Na dann!