J'ai écrit un outil de traduction (commande TUI) qui enveloppe GAS dans le langage Go.
Cela peut valoir la peine d'être lu pour ceux qui:
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.
Nous avons confirmé l'opération sous Linux et Windows. (Je pense que cela fonctionne sur Mac)
L'exécution de la commande tran sans argument lance un shell interactif.
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.
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.
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.
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é. "
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.
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.
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.
** 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.
Le fichier exécutable est nommé tran.
$ tran
Welcome to the GO-TRAN!
...
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)
|
|
s [str] | Langue originelle(Source)Basculer.
|
|
[t] code t [str] |
Langue de destination(Target)Basculer.
|
|
q | Fin |
Les principales combinaisons de touches sont: (Compatible Bash)
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 | → |
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 |
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 |
Le format de la commande est le suivant.
format
tran [options] [path...]
[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 |
|
* 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" |
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.trans
J'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-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
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.
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
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/@@script@@/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@@script@@@
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.
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.
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