this will be displayed as "Laine Rouge" on clients with a French locale.
+### Operations on translated strings
+
+The output of `minetest.translate` is a string, with escape sequences adding additional information to that string
+so that it can be translated on the different clients. In particular, you can't expect operations like string.length
+to work on them like you would expect them to, or string.gsub to work in the expected manner. However, string
+concatenation will still work as expected (note that you should only use this for things like formspecs; do not
+translate sentences by breaking them into parts; arguments should be used instead), and operations such as
+`minetest.colorize` which are only concatenation under the hood as well.
+
### Translation file format
A translation file has the suffix `.[lang].tr`, where `[lang]` is the language it corresponds to.
The file should be a text file, with the following format:
files to avoid begin confused with the `=` separating the original from the translation.
* `@\n` (where the `\n` is a literal newline) acts as a literal newline. As with `@=`, this escape is not required
in strings given to `minetest.translate`, but is in translation files.
+* `@n` acts as a literal newline as well.
`minetest` namespace reference
------------------------------
if (i + 1 < wline.length()) {
if (wline[i + 1] == L'=') {
word1.put(L'=');
+ } else if (wline[i + 1] == L'n') {
+ word1.put(L'\n');
} else {
word1.put(L'@');
word1.put(wline[i + 1]);
if (i + 1 < wline.length()) {
if (wline[i + 1] == L'=') {
word2.put(L'=');
+ } else if (wline[i + 1] == L'n') {
+ word2.put(L'\n');
} else {
word2.put(L'@');
word2.put(wline[i + 1]);