[GO] La commande de traduction (TUI) faite par refroidissement est trop pratique, alors utilisez-la!

J'ai écrit un outil de traduction (commande TUI) qui enveloppe GAS dans le langage Go. tran_1.gif

Public cible

Cela peut valoir la peine d'être lu pour ceux qui:

table des matières

1.Tout d'abord

Je ne suis pas bon en anglais, donc je ne peux pas abandonner les sites de dictionnaires et les sites de traduction lors de la lecture et de l'écriture de documents. Je travaille habituellement dans le terminal, mais c'est stressant car je fais des va-et-vient entre le navigateur Web et le logiciel du terminal.

Un jour, je n'avais jamais touché à GAS (Google Apps Script), alors j'ai décidé de l'essayer pour une étude ultérieure, et j'ai créé une commande de traduction simple qui enveloppe LanguageApp.

Au début, j'avais l'intention de commencer à le fabriquer d'une manière à la mode, mais je l'ai trouvé étonnamment pratique à utiliser, alors j'aimerais le présenter dans un article.

La commande est publiée dans le référentiel suivant.

Un outil similaire est translate-shell. Je suis sûr que beaucoup d'entre vous l'utilisent, mais plus loin dans cet article, je parlerai des différences entre go-tran et translate-shell.

2. Présentation de go-tran

Système d'Exploitation pris en charge

Nous avons confirmé l'opération sous Linux et Windows. (Je pense que cela fonctionne sur Mac)

Interface interactive

L'exécution de la commande tran sans argument lance un shell interactif.

traduire

Par défaut, il est traduit dans la langue de la locale actuelle de l'environnement d'exécution, il vous suffit donc de saisir la langue étrangère que vous souhaitez traduire. Vous trouverez ci-dessous des exemples de traduction de l'anglais, du français, de l'italien, de l'espagnol, du coréen et du chinois en japonais. tran_1.gif Dans l'image ci-dessus, l'invite est : ja> ''. Il est au format (Source): (Cible)>, la langue source est Auto et la langue cible est le japonais (ja). est ce que cela signifie. Par exemple, lors de la traduction du japonais vers l'anglais, ja: en> s'affiche.

Changer de langue

Pour changer la langue de destination, entrez le code de langue à 2 chiffres (ISO639-1). Voici un exemple de traduction du japonais en anglais (en), français (fr), italien (it), espagnol (es), coréen (ko) et chinois (zh) tout en changeant de langue cible. est. tran_2.gif

Si vous ne connaissez pas le code de langue

Si vous ne connaissez pas le code de langue, vous pouvez le rechercher avec la commande l (l: Codes de langue).

La commande l affiche une liste de chaînes saisies identiques au code ISO639-1 ou ayant une correspondance partielle pour le nom de langue ISO (nom anglais). Si vous ne trouvez pas non plus, vous pouvez le convertir en anglais en interne, puis effectuer une nouvelle recherche, de sorte que vous pouvez trouver le code de langue souhaité relativement facilement, même avec le nom que vous avez entré en japonais, par exemple.

Ce qui suit est la commande "l qui contient" ni "," nese "," allemand "," kurde "," zoulou ", et la liste a été affichée, mais" cambrien " N'a pas été trouvé. " tran_3.gif

Interface de lot

Si vous spécifiez un nom de fichier dans l'argument de ligne de commande ou que vous vous connectez à l'entrée standard de la commande par pipe ou redirection, elle sera exécutée en tant que commande batch.

Spécification du fichier

Si vous passez le chemin du fichier comme argument et exécutez go-tran, le fichier sera traduit. Là encore, la langue de destination de la conversion (valeur par défaut) est déterminée par les paramètres régionaux actuels de l'environnement d'exécution. tran_5.gif

Pipes et redirections

Si l'entrée standard n'est pas un terminal, go-tran s'exécute en mode batch.

Par exemple, dans mon environnement Ubuntu, l'homme est affiché en japonais, mais il existe certaines commandes pour lesquelles un manuel japonais n'est pas disponible. Ce n'est pas aussi japonais que les commandes que vous n'utilisez pas souvent. Dans le passé, quand je tombais sur un mot anglais que je ne connaissais pas, je devais ouvrir un navigateur Web pour le rechercher.

Mais à partir de maintenant, tout ce que vous avez à faire est de rediriger l'homme vers go-tran. tran_4.gif

3. Comment utiliser go-tran

Installation

** Si vous avez un environnement Go **

install go-tran


$ go get -u github.com/y-bash/go-tran
$ cd $GOPATH/src/github.com/y-bash/go-tran
$ go install ./...

** Si vous ne disposez pas d'un environnement Go et n'obtenez que le code source **

get source code


$ git clone https://github.com/y-bash/go-tran.git

Si vous n'avez pas d'environnement Go mais que vous souhaitez utiliser un binaire, n'hésitez pas à nous contacter car nous envisagerons une méthode.

Utiliser de manière interactive

commencer

Le fichier exécutable est nommé tran.

$ tran
Welcome to the GO-TRAN!
...

Description de la commande

Les caractères que vous saisissez sont généralement évalués comme suit.

Chaîne La description
Un personnage Jugé comme une commande.
2 lettres Changement de langue cible.
3 caractères ou plus Traduire le texte saisi selon le mode actuel.

Les types de commandes sont les suivants.

commander La description Exemple
h Afficher l'aide.
l [str] Affiche une liste de codes et de noms de langue.
(Le code de langue est ISO639-1)
  • Lorsque str est spécifié
    Afficher une liste des codes de langue correspondants
  • Lorsque str est omis
    Tout le code(184 cas)Spectacle
  • Dans le code, le nom"en"Comprenant
    l en
  • Dans le nom"nor"Comprenant
    l nor
  • Nom anglais dans le nom"Welsh"Comprenant
    l Gallois
s [str] Langue originelle(Source)Basculer.
  • Lorsque str est spécifié
    Passer à la langue correspondante
  • Lorsque str est omis
    Auto (Passer en mode automatique)
    * Normalement, il n'y a aucun problème avec Auto.
  • En anglais
    s en
  • Vers l'espagnol
    s spanish
  • Au portugais
    s portugais
  • Auto(mode automatique)Quoi
    s
[t] code

t [str]
Langue de destination(Target)Basculer.
  • Lorsque t est omis
    Code à 2 chiffres(ISO639-1)alors
    Passer à la langue spécifiée
  • Quand str est spécifié après t
    Passer à la langue correspondante
  • Si str après t est omis
    Paramètres régionaux actuels de l'environnement d'exécution
    Basculer vers
  • Vers les paramètres régionaux actuels
    t
  • En anglais
    t en
  • Vers le latin
    t Latin
  • Vers le langage C
    c
q Fin

Opération clé

Les principales combinaisons de touches sont: (Compatible Bash)

Déplacer le curseur

Clé La description 代替Clé
Ctrl-a Aller au début de la ligne Home
Ctrl-e Aller à la fin de la ligne End
Ctrl-b 1 caractère en arrière
Ctrl-f 1 caractère en avant

Supprimer des caractères

Clé La description 代替Clé
Ctrl-h Supprimer le caractère avant la position du curseur Back
space
Ctrl-d Supprimer le caractère à la position du curseur Delete
Ctrl-k Supprimer de la position du curseur à la fin de la ligne
Ctrl-u Supprimer du début de la ligne juste avant la position du curseur

Opération historique

Les commandes et les textes que vous saisissez sont enregistrés dans l'historique et vous pouvez les suivre en appuyant sur des touches.

Clé La description 代替Clé
Ctrl-p Revenir dans l'historique des entrées
Ctrl-n Parcourez l'historique des entrées
Ctrl-r Recherche incrémentale de l'historique des entrées

Utiliser comme commande batch

Format

Le format de la commande est le suivant.

format


tran [options] [path...]

option

[12 octobre 2020] Ajout de l'option -a et de l'option -e

Les options sont:

option La description Exemple
-a Inscrivez-vous au projet GAS de l'utilisateur
Affichez le script. inscrit
URL de script dans le fichier de configuration
Créez votre propre serveur API en listant
Vous pouvez l'appeler.
Cette option concerne uniquement le mode batch.
$ tran -a
-e Le texte original et le texte traduit sont affichés alternativement ligne par ligne.
Cette option concerne uniquement le mode batch.
```$tran -e english.txt
-h Afficher l'aide.
Cette option concerne uniquement le mode batch.
$ tran -h
-l Liste des codes de langue et des noms(184 cas)Il est affiché.
(Le code de langue est ISO639-1)
Cette option concerne uniquement le mode batch.
$ tran -l
-s code Langue originelle(Source)À
Code de langue (ISO639-Précisez en 1).
S'il est omis, il sera automatiquement déterminé.
$ tran -s en
-t code Langue de destination(Target)À
Code de langue (ISO639-Précisez en 1).
S'il est omis, il est converti dans les paramètres régionaux actuels.
$ tran -t en

###chemin

La méthode pour spécifier le chemin est la suivante.

path La description Exemple
La désignation La désignationしたファイルを翻訳して標準出力へ出力します。 $ tran a.txt b.txt
réduction
  • Lorsque l'entrée standard est la borne
    Commencez de manière interactive
  • Si l'entrée standard est un tube ou une redirection
    Sortie du résultat traduit en sortie standard
  • Traduire man pour la commande ss
    $ man ss|tran|less
  • Traduire les erreurs de compilation Go
    $ go build . 2>&1|tran
  • Rediriger les fichiers
    $ tran < a.txt

* Dans la cellule"|"Est un caractère pleine largeur.
Soyez prudent lors de la copie.

###Exemple d'utilisation

Confirmer rapidement les mots anglais difficiles

python


$ echo "penpineappleapplepen" | tran
 Pen Pineapple Apple Pen

Convertir des fichiers japonais en anglais

python


$ tran -t en Japanese.txt
this is a pen.

Enregistrer les fichiers japonais en latin

python


$ tran -t la Japanese.txt > Latin.txt

Renvoyer le résultat de la traduction automatique en japonais et vérifier s'il correspond

python


 $ echo "J'adore les pommes" | tran -t en | tran
 J'adore les pommes

strings.Builder (Golang)Faire toutes les lignes de commentaire dans le code source de

python


 $ grep '^\s*//' ./builder.go | sed -e 's/^\s*..\s*//' | tran
 Copyright 2017 Les auteurs Go. tous les droits sont réservés.
 L'utilisation de ce code source est régie par le style BSD
 La licence dans le fichier LICENCE.
 Builder est utilisé pour créer efficacement des chaînes à l'aide de la méthode Write.
...

Changer la ligne d'erreur de tous les fichiers journaux sous le répertoire actuel en japonais

python


 $ find . -name '*.log' | xargs grep 'error:' | tran
 ./tool/vim/src/auto/config.log:conftest.c:154:12: Erreur: 'GETACLCNT' n'est pas déclaré (première utilisation dans cette fonction)
 ./tool/vim/src/auto/config.log:conftest.c:154:26: Erreur: 'NULL' n'est pas déclaré (première utilisation dans cette fonction)
...

##Fichier de configuration [Ajouté le 12 octobre 2020]

Version 1.0.Cette section décrit comment utiliser le fichier de paramètres pris en charge dans 1.

###Chemin du fichier de configuration

Le chemin du fichier de configuration est le suivant. (Dépend du système d'exploitation)

OS chemin
POSIX $HOME/.config/y-bash/config.toml
Windows %AppData%\y-bash\tran\config.toml

###Éléments pouvant être définis

table Clé La description valeur initiale
[default] source Code de la langue source(ISO639-1)Valeur par défaut pour. ""
[default] target Code de langue de la destination de conversion(ISO639-1)Valeur par défaut pour. Paramètres régionaux actuels au premier démarrage.
[api] endpoint GAS (Google Apps Script)URI du projet. Vous pouvez spécifier votre propre serveur API en définissant l'URI d'un projet GAS créé par l'utilisateur. Le script à définir dans GAS est-Peut être affiché avec l'option a.
[Exemple] tran-a
Comme avant.
[api] limit_n_chars Nombre maximum de caractères envoyés en un seul appel API. Si le nombre de caractères dans le texte source dépasse cette valeur, l'API sera appelée plusieurs fois. 4000
[colors] info Couleur du texte du message d'information "#80a0d0"
[colors] info Couleur du texte du message de changement d'état "#60c060"
[colors] error Couleur du texte du message d'erreur "#d04040"
[colors] result Couleur du texte du texte converti "#ffc864"

4. translate-Comparaison avec shell

En fait je traduis-J'ai appris sur Shell, allez-Après avoir commencé à faire tran. Les fonctions sont presque similaires et les noms de commandes sont les mêmes.transJ'ai été surpris parce que c'était le cas. (Au début, allez-Ça s'appelait trans)

De plus, traduisez-shell est très fonctionnel, comme l'affichage d'informations supplémentaires telles que des mots de partie et l'affichage de plusieurs significations d'un mot.

Mais après l'avoir un peu utilisé, allez-aller à tran-Je me suis progressivement rendu compte que tran est bon.

translate-Avantages de Shell

translate-Le shell affiche non seulement le résultat de la traduction, mais également les informations supplémentaires suivantes.

*Langue originelle *Langue de destination *Partie de mots (dans le cas de mots) *Significations multiples (pour les mots)

translate-Exemple d'exécution de shell translate-shell_1.gif

Puisqu'il peut être utilisé comme un dictionnaire, il peut être pratique pour l'écriture en anglais. Cependant, si vous devez rédiger un document anglais solide, vous aurez besoin d'un dictionnaire plus solide.

go-Avantages de tran

translate-aller au shell-Les avantages de tran sont:

*Facile
Il est facile à voir car il ne produit pas d'informations supplémentaires.
Des informations supplémentaires telles que les paroles des parties peuvent parfois gêner. *Écran couleur
L'écran couleur vous permet d'identifier instantanément la pièce que vous souhaitez voir. *Fonction de recherche de code de langue
go-Avec tran, vous pouvez facilement trouver le code de langue.
translate-Le shell devra se souvenir du code de langue ou consulter la documentation. *liaison de clé de type bash
go-tran est facile à modifier les caractères.
translate-Il semble que le shell ne lise que l'entrée standard et qu'il soit difficile d'éditer les caractères. *Fonction historique
go-tran peut réafficher les commandes et textes précédemment saisis, les éditer et les exécuter.
C'est aussi traduire-C'est une fonction que le shell n'a pas. *Prise en charge native de Windows
go-Vous pouvez exécuter tran à l'invite de commande Windows.
translate-Il semble que le shell nécessite un environnement compatible UNIX tel que Cygwin.

go-Image de l'utilisation de tran tran_1.gif

5.Facile à faire

GAS (Google Apps Script)Les API Web et les clients créés avec Go sont très simples.

##Créer une API Web avec GAS

tanabeeJ'ai fait référence à l'article populaire de M.

Le traitement suivant est ajouté au code qui a été utilisé comme référence.

*Retour avec json

Le code est ci-dessous.

Translate.gs


 // Traitement commun
 // événement param e
function process(e) {
 let body // corps de la réponse
    try {
 const p = e.parameter // paramètre de requête
 const s = LanguageApp.translate (p.text, p.source, p.target) // Traduire
 body = {code: 200, text: s} // Créer un corps de réponse
 } catch (e) {// exception de paramètre
 // La traduction a échoué
        try {
 const msg = LanguageApp.translate (e.toString (), "", "en") // Envoyer un message d'erreur en anglais
 body = {code: 400, message: msg} // Créer un corps de réponse
 } catch (e) {// exception de paramètre
 // Ne pas le faire est une erreur interne
 body = {code: 500, message: e.toString ()} // Créer un corps de réponse
        }
    }
 let resp = ContentService.createTextOutput () // Réponse
 resp.setMimeType (ContentService.MimeType.JSON) // Définit le type MIME au format JSON
 resp.setContent (JSON.stringify (body)) // Convertit le corps de la réponse en une chaîne au format JSON
 return resp; // retourne la réponse
}

// GET
 // événement param e
function doGet(e) {
 return process (e) // Appel du processus commun
}

// POST
 // événement param e
function doPost(e) {
 return process (e) // Appel du processus commun
}

Traiter avec le code ci-dessus(e)Et deux prises(e)Si vous craignez d'utiliser une variable portant le même nom dans, modifiez le nom de la variable.

Après avoir modifié le scriptProject versionÀNewJ'étais inquiet à ce sujet pendant environ 20 minutes car je ne savais pas que cela ne serait pas reflété dans le produit à moins que je ne le définisse.

##Créez un client avec Go

Les fonctions côté client (langage Go) qui encapsulent l'API Web créée dans GAS sont les suivantes.

tran.go


package tran

import (
        "encoding/json"
        "errors"
        "io/ioutil"
        "net/http"
        "net/url"
        "strings"
)

 const gURL = "https://script.google.com/macros/s/@@[email protected]@/exec" // @@ script @@ Correction requise

 // Structure qui mappe le JSON de la réponse
type TransData struct {
 Code int `json:" code "` // État de la réponse
 Chaîne de texte `json:" text "` // Résultat de la traduction
 Chaîne de message `json:" message "` // Message d'erreur
}

 // Traduction
func Translate(text, source, target string) (string, error) {
 // Créer des paramètres
        v := url.Values{}
 v.Add ("text", text) // Chaîne source
 v.Add ("source", source) // Langue source (ISO639-1)
 v.Add ("cible", cible) // Langue de destination (ISO639-1)

 // Demande d'API de traduction par POST
        resp, err := http.PostForm(gURL, v)
        if resp != nil {
                defer resp.Body.Close()
        }
        if err != nil {
                return "", err
        }
 // Lire le corps de la réponse dans le tampon
        buf, err := ioutil.ReadAll(resp.Body)
        if err != nil {
                return "", err
        }
 // Mapper le corps de la réponse (format JSON) à la structure
        var td TransData
        if err := json.Unmarshal(buf, &td); err != nil {
                return "", err
        }
 // Vérifier l'état de la réponse
        if td.Code != 200 {
 // Traitement des erreurs (supprimer le préfixe "Exception:")
                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)
        }
 // Traitement normal
 return td.Text, nil // Extraire la chaîne de caractères convertie de la structure et la renvoyer
}

Ne faites rien de difficile, demandez HTTP de la manière la plus simple(POST)Je lance juste, mais veuillez noter les points suivants.

*Du code ci-dessus@@[email protected]@@Doit être modifié pour chaque projet GAS. *Préfixe de message lorsqu'une erreur se produit"Exception: "Je fais le processus de suppression, mais je pense que cela n'est pas nécessaire selon la situation.

Pour les autres codes,IciVeuillez vous référer au.

6. go-défis tran

Pour le moment, il y a les problèmes suivants, mais je ne pense pas que ce sera si difficile à améliorer.

*Temps de réponse
Actuellement, le côté serveur utilise le plan gratuit de GAS, il est donc possible que la réponse soit médiocre en raison des restrictions d'accès lorsque le trafic est concentré.
Pour cela, je pense autoriser les paramètres de configuration de la commande à spécifier une URL spécifique à l'utilisateur. Cela augmentera le fardeau des utilisateurs pour enregistrer des scripts GAS dans leur compte Google, mais en échange cela devrait leur permettre d'utiliser des commandes sans se soucier des autres.
[Mis à jour le 12 octobre 2020]
Ce problème est la version 1.0.Il a été résolu en 1. Vous pouvez définir l'URI de votre propre projet GAS dans le fichier de configuration. Le détail estIciVeuillez vous référer au.

*Format de sortie par lots
Lors de la traduction de fichiers journaux et de documents, vous souhaitez toujours les comparer avec le texte d'origine.
Pour cela, nous prévoyons de fournir une option pour sortir le texte original et le texte traduit alternativement ligne par ligne. Probablement pas difficile à gérer.
[Mis à jour le 12 octobre 2020]
Ce problème est la version 1.0.Il a été résolu en 1.-Le texte original et le texte traduit peuvent être sortis en alternance en exécutant avec l'option e. Le détail estIciVeuillez vous référer au.

*Limite de caractères
J'ai trouvé que j'avais une erreur lorsque j'ai mis beaucoup de texte dans GAS LanguageApp. À ce propos, nous pourrons définir la valeur maximale du nombre de caractères pouvant être saisis dans l'API en une seule fois, et modifierons le programme de sorte que si une grande quantité de texte est saisie, il sera traduit séparément.
[Mis à jour le 12 octobre 2020]
Ce problème est la version 1.0.Il a été résolu en 1. Limite du fichier de paramètres_n_chars (La valeur initiale peut être réglée avec 4000). Le détail estIciVeuillez vous référer au.

7.en conclusion

Dans cet article, un outil de traduction en langue Go(Commande TUI)J'ai présenté l'histoire de la fabrication et comment utiliser la commande. J'ai également brièvement présenté comment le faire. J'ai également écrit que j'avais découvert qu'un outil similaire existait déjà, et au début j'ai été déçu, mais progressivement j'ai commencé à penser que mes propres commandes n'étaient pas mauvaises.

L'API de traduction de GAS est facile à utiliser et bien connue de tous. Au début, je pensais qu'un produit utilisant une telle API ne serait pas particulièrement intéressant, mais quand je l'ai fait, j'ai pu faire quelque chose qui était étonnamment pratique (c'est naturel parce que c'est une spécification oléore). …).

De plus, en créant le mien, je peux voir à la fois les avantages et les inconvénients des outils populaires.

Il existe autant de solutions connues que d'étoiles. Mais cette expérience est l'une de ces choses

*On dirait que c'est banalisé, mais il y a des utilisations que personne n'a encore remarquées. *C'est devenu la norme de facto, mais il y a des améliorations que personne n'a encore remarquées.

C'était l'occasion de reconnaître à nouveau de telles choses.

Eh bien!

Recommended Posts

La commande de traduction (TUI) faite par refroidissement est trop pratique, alors utilisez-la!
La commande pour générer le bibtex RFC est pratique, alors livrez-la à tous les étudiants X
Je me suis rendu compte qu'il était absurde de l'utiliser sans réfléchir car le module est pratique
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
Utilisez la commande pushd, qui est plus pratique que la commande cd, pour revenir instantanément au répertoire d'origine.
[Python] Qu'est-ce que pip? Expliquez la liste des commandes et comment l'utiliser avec des exemples réels