diff --git a/docs/illustrations/translation_1.png b/docs/illustrations/translation_1.png
new file mode 100644
index 0000000000000000000000000000000000000000..4201607de2484cb0642664e29763f36c980c85fc
Binary files /dev/null and b/docs/illustrations/translation_1.png differ
diff --git a/docs/illustrations/translation_2.png b/docs/illustrations/translation_2.png
new file mode 100644
index 0000000000000000000000000000000000000000..359c1661653272ca8ed1b81a2b998aad6f293dd6
Binary files /dev/null and b/docs/illustrations/translation_2.png differ
diff --git a/docs/index.md b/docs/index.md
index 8ac50f39af79f7940a9adb445f427c0360357013..37dece5b62023e70b49c905a8f68b0e06e053502 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -8,6 +8,7 @@
 
 [Troubleshooting](./troubleshooting.md)
 
+[Translation](./translation.md)
 
 ## Building VIPSLogic
 
diff --git a/docs/translation.md b/docs/translation.md
new file mode 100644
index 0000000000000000000000000000000000000000..9c6626873d74d34cdaf2eb8a28e4deeaf2d9ee9f
--- /dev/null
+++ b/docs/translation.md
@@ -0,0 +1,45 @@
+# Translating VIPSLogic
+2022-09-22
+
+## How the translation works
+VIPSLogic is written in Java. Java's standard way of handling translation is by using ResourceBundle. ResourceBundle is a Java class that is used to store texts and components that are locale sensitive. To print a localized text, we could do it this way (FreeMarker example from VIPSLogic code):
+
+```html
+<h1>${i18nBundle.greeting} VIPSLogic</h1>
+```
+
+The ${} markup is FreeMarker specific. «i18nBundle» is our instance of the ResourceBundle class. The important stuff here is the keyword «greeting». This is used by the ResouceBundle class to look up the localized phrase. Where does it look for the phrase? It looks in a properties file called `vipslogictexts_[language_code].properties`. So, if your browser has set Norwegian as its preferred language, «no» is the code for Norwegian, and the ResourceBundle class looks for `vipslogictexts_no.properties`, it looks in that file for the keyword «greeting». In that file, the line with «greeting» looks like this:
+
+```properties
+greeting=Velkommen til
+```
+
+Thus, what is printed in the end, is
+
+```html
+<h1>Velkommen til VIPSLogic</h1>
+```
+
+IF, however, the file vipslogictexts_no.properties does not exist (the translation has not been made yet), the ResourceBundle loads the file `vipslogictexts.properties` .
+This file contains all the phrases in VIPSLogic's default language, which is English. In that file, the line with the «greeting» keyword looks like this:
+
+```
+greeting=Welcome to
+```
+
+So in that case, what's printed is of course
+
+```html
+<h1>Welcome to VIPSLogic</h1>
+```
+
+## How to edit a language file
+The easiest way to edit a language file, is to use a ResourceBundle editor. NetBeans has a good one. See screenshot below
+
+![NetBeans properties editor](./illustrations/translation_1.png "NetBeans properties editor")
+
+There are also ResourceBundle editors available for Eclipse, for instance this one: https://marketplace.eclipse.org/content/dazzle
+
+It's of course also possible to edit the files one by one in an ordinary text editor like NotePad, jEdit, Emacs, etc. In that case, please make sure to set the character set for the file to be UTF-8.
+
+The VIPSLogic properties files are located in `[VIPSLogic_HOME]/src/main/resources/no/nibio/vips/logic/i18n/`
\ No newline at end of file