mirror of
https://github.com/minetest/minetest.git
synced 2025-01-10 10:00:22 +01:00
Add '@n' escape sequences and some documentation on translated strings.
This commit is contained in:
parent
fc13c00ef3
commit
5a6618cc57
@ -704,6 +704,8 @@ function core.translate(textdomain, str, ...)
|
|||||||
end
|
end
|
||||||
arg_index = arg_index + 1
|
arg_index = arg_index + 1
|
||||||
return ESCAPE_CHAR .. "F" .. arg[a] .. ESCAPE_CHAR .. "E"
|
return ESCAPE_CHAR .. "F" .. arg[a] .. ESCAPE_CHAR .. "E"
|
||||||
|
elseif matched == "n" then
|
||||||
|
return "\n"
|
||||||
else
|
else
|
||||||
return matched
|
return matched
|
||||||
end
|
end
|
||||||
|
@ -2199,6 +2199,15 @@ Two functions are provided to translate strings: `minetest.translate` and `minet
|
|||||||
|
|
||||||
this will be displayed as "Laine Rouge" on clients with a French locale.
|
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
|
### Translation file format
|
||||||
A translation file has the suffix `.[lang].tr`, where `[lang]` is the language it corresponds to.
|
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:
|
The file should be a text file, with the following format:
|
||||||
@ -2221,6 +2230,7 @@ Strings that need to be translated can contain several escapes, preceded by `@`.
|
|||||||
files to avoid begin confused with the `=` separating the original from the translation.
|
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
|
* `@\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.
|
in strings given to `minetest.translate`, but is in translation files.
|
||||||
|
* `@n` acts as a literal newline as well.
|
||||||
|
|
||||||
`minetest` namespace reference
|
`minetest` namespace reference
|
||||||
------------------------------
|
------------------------------
|
||||||
|
@ -80,6 +80,8 @@ void Translations::loadTranslation(const std::string &data)
|
|||||||
if (i + 1 < wline.length()) {
|
if (i + 1 < wline.length()) {
|
||||||
if (wline[i + 1] == L'=') {
|
if (wline[i + 1] == L'=') {
|
||||||
word1.put(L'=');
|
word1.put(L'=');
|
||||||
|
} else if (wline[i + 1] == L'n') {
|
||||||
|
word1.put(L'\n');
|
||||||
} else {
|
} else {
|
||||||
word1.put(L'@');
|
word1.put(L'@');
|
||||||
word1.put(wline[i + 1]);
|
word1.put(wline[i + 1]);
|
||||||
@ -113,6 +115,8 @@ void Translations::loadTranslation(const std::string &data)
|
|||||||
if (i + 1 < wline.length()) {
|
if (i + 1 < wline.length()) {
|
||||||
if (wline[i + 1] == L'=') {
|
if (wline[i + 1] == L'=') {
|
||||||
word2.put(L'=');
|
word2.put(L'=');
|
||||||
|
} else if (wline[i + 1] == L'n') {
|
||||||
|
word2.put(L'\n');
|
||||||
} else {
|
} else {
|
||||||
word2.put(L'@');
|
word2.put(L'@');
|
||||||
word2.put(wline[i + 1]);
|
word2.put(wline[i + 1]);
|
||||||
|
Loading…
Reference in New Issue
Block a user