mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 09:15:29 +01:00 
			
		
		
		
	Add '@n' escape sequences and some documentation on translated strings.
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							fc13c00ef3
						
					
				
				
					commit
					5a6618cc57
				
			@@ -704,6 +704,8 @@ function core.translate(textdomain, str, ...)
 | 
			
		||||
			end
 | 
			
		||||
			arg_index = arg_index + 1
 | 
			
		||||
			return ESCAPE_CHAR .. "F" .. arg[a] .. ESCAPE_CHAR .. "E"
 | 
			
		||||
		elseif matched == "n" then
 | 
			
		||||
			return "\n"
 | 
			
		||||
		else
 | 
			
		||||
			return matched
 | 
			
		||||
		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.
 | 
			
		||||
 | 
			
		||||
### 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:
 | 
			
		||||
@@ -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.
 | 
			
		||||
* `@\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
 | 
			
		||||
------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -80,6 +80,8 @@ void Translations::loadTranslation(const std::string &data)
 | 
			
		||||
				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]);
 | 
			
		||||
@@ -113,6 +115,8 @@ void Translations::loadTranslation(const std::string &data)
 | 
			
		||||
				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]);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user