#+TITLE: Translate Layer

#+TAGS: layer|tool

[[file:img/screen-record.gif]]

* Table of Contents                     :TOC_5_gh:noexport:
- [[#description][Description]]
  - [[#features][Features:]]
- [[#install][Install]]
- [[#usage][Usage]]
- [[#configuration][Configuration]]
  - [[#language-pair][Language Pair]]
  - [[#highlighting][Highlighting]]
  - [[#read-only][Read-only]]
  - [[#face][Face]]
- [[#key-bindings][Key bindings]]
- [[#variables][Variables]]

* Description
This layer is designed for Paragraph-oriented minor mode for
side-by-side document translation workflow.

** Features:
- Paragraph-oriented side-by-side document translation workflow
- Integrate word/paragraph online translation

* Install
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =translate= to the existing =dotspacemacs-configuration-layers= list in this file.

* Usage
It's quite simple to use this layer. Open the translation file you are currently working
on, and call command =translate-open-reference-file= or =translate-select-reference-buffer=
to set the reference buffer or open an existed reference file. Now you can just keep your
cursor in your translation buffer. The cursor in the reference buffer will be kept in
sync with the cursor in the translation buffer.

* Configuration
All layer configurations can be done by setting layer variables in your dotfile.
No custom user config lines are necessary. For more details please see the homepage
of package [[https://github.com/rayw000/translate-mode][translate-mode]] and [[https://github.com/lorniu/go-translate/][go-translate]].

** Language Pair
You need to set language pairs to make online translation work.

#+BEGIN_SRC emacs-lisp
  (translate :variables gts-translate-list '(("en" "zh") ("en" "fr")))
#+END_SRC

** Highlighting
Set =translate-enable-highlight= to =nil= to disable highlighting.

#+BEGIN_SRC emacs-lisp
  (translate :variables translate-enable-highlight nil)
#+END_SRC

** Read-only
You can set =translate-reference-buffer-read-only= to =t= to make the reference buffer read-only.

#+BEGIN_SRC emacs-lisp
  (translate :variables translate-reference-buffer-read-only t)
#+END_SRC

** Face
The face of highlight paragraph can be customized by =translate-paragraph-highlight-face=.
Put this following line into =custom-set-faces= in your =~/.spacemacs~ file to set the background
color to red, for example.

#+BEGIN_SRC emacs-lisp
  '(translate-paragraph-highlight ((t (:extend t :background "red"))))
#+END_SRC

* Key bindings

| Key binding   | Description                                                                  |
|---------------+------------------------------------------------------------------------------|
| ~SPC a t T t~ | Toggle =translate-mode=                                                      |
| ~SPC a t T p~ | Open a translation list buffer for current paragraph in the reference buffer |
| ~SPC a t T w~ | Popup translation list for word at point, also can be used on regions        |
| ~SPC a t T f~ | Prompt to open the reference file                                            |
| ~SPC a t T b~ | Prompt to select a buffer and set it as the reference buffer                 |
| ~SPC a t T h~ | Toggle paragraph highlighting                                                |

* Variables
These variables can be used to customize =translate= layer.

| Variable                     | Default Value | Description                                                               |
|------------------------------+---------------+---------------------------------------------------------------------------|
| =translate/paragraph-render= | ='posframe=   | Paragraph translation render. Valid values are ='posframe= and ='buffer=. |
| =translate/word-render=      | ='posframe=   | Word translation render. Valid values are ='posframe= and ='buffer=.      |
