4975 lines
		
	
	
	
		
			171 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
		
		
			
		
	
	
			4975 lines
		
	
	
	
		
			171 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| 
								 | 
							
								#!/usr/bin/gawk -f
							 | 
						|||
| 
								 | 
							
								# https://github.com/soimort/translate-shell kaynak kodu kullanılmaktadır.
							 | 
						|||
| 
								 | 
							
								BEGIN {
							 | 
						|||
| 
								 | 
							
								Name        = "Translate Shell"
							 | 
						|||
| 
								 | 
							
								Description = "Command-line translator using Google Translate, Bing Translator, Yandex.Translate, etc."
							 | 
						|||
| 
								 | 
							
								Version     = "0.9.6.6"
							 | 
						|||
| 
								 | 
							
								ReleaseDate = "2017-12-17"
							 | 
						|||
| 
								 | 
							
								Command     = "trans"
							 | 
						|||
| 
								 | 
							
								EntryPoint  = "translate.awk"
							 | 
						|||
| 
								 | 
							
								EntryScript = "translate"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initConst() {
							 | 
						|||
| 
								 | 
							
								NULLSTR = ""
							 | 
						|||
| 
								 | 
							
								TRUE = 1
							 | 
						|||
| 
								 | 
							
								STDIN  = "/dev/stdin"
							 | 
						|||
| 
								 | 
							
								STDOUT = "/dev/stdout"
							 | 
						|||
| 
								 | 
							
								STDERR = "/dev/stderr"
							 | 
						|||
| 
								 | 
							
								SUPOUT = " > /dev/null "
							 | 
						|||
| 
								 | 
							
								SUPERR = " 2> /dev/null "
							 | 
						|||
| 
								 | 
							
								PIPE = " | "
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function anything(array,
							 | 
						|||
| 
								 | 
							
								i) {
							 | 
						|||
| 
								 | 
							
								for (i in array)
							 | 
						|||
| 
								 | 
							
								if (array[i]) return 1
							 | 
						|||
| 
								 | 
							
								return 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function exists(value) {
							 | 
						|||
| 
								 | 
							
								if (isarray(value))
							 | 
						|||
| 
								 | 
							
								return anything(value)
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								return value ? 1 : 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function belongsTo(element, array,
							 | 
						|||
| 
								 | 
							
								i) {
							 | 
						|||
| 
								 | 
							
								for (i in array)
							 | 
						|||
| 
								 | 
							
								if (element == array[i]) return element
							 | 
						|||
| 
								 | 
							
								return NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function identical(x, y,
							 | 
						|||
| 
								 | 
							
								i) {
							 | 
						|||
| 
								 | 
							
								if (!isarray(x) && !isarray(y))
							 | 
						|||
| 
								 | 
							
								return x == y
							 | 
						|||
| 
								 | 
							
								else if (isarray(x) && isarray(y)) {
							 | 
						|||
| 
								 | 
							
								if (length(x) != length(y)) return 0
							 | 
						|||
| 
								 | 
							
								for (i in x)
							 | 
						|||
| 
								 | 
							
								if (!identical(x[i], y[i])) return 0
							 | 
						|||
| 
								 | 
							
								return 1
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								return 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function append(array, element) {
							 | 
						|||
| 
								 | 
							
								array[anything(array) ? length(array) : 0] = element
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function compareByIndexFields(i1, v1, i2, v2,
							 | 
						|||
| 
								 | 
							
								t1, t2, tl, j) {
							 | 
						|||
| 
								 | 
							
								split(i1, t1, SUBSEP)
							 | 
						|||
| 
								 | 
							
								split(i2, t2, SUBSEP)
							 | 
						|||
| 
								 | 
							
								tl = length(t1) < length(t2) ? length(t1) : length(t2)
							 | 
						|||
| 
								 | 
							
								for (j = 1; j <= tl; j++) {
							 | 
						|||
| 
								 | 
							
								if (t1[j] < t2[j])
							 | 
						|||
| 
								 | 
							
								return -1
							 | 
						|||
| 
								 | 
							
								else if (t1[j] > t2[j])
							 | 
						|||
| 
								 | 
							
								return 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function isnum(string) {
							 | 
						|||
| 
								 | 
							
								return string == string + 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function startsWithAny(string, substrings,
							 | 
						|||
| 
								 | 
							
								i) {
							 | 
						|||
| 
								 | 
							
								for (i in substrings)
							 | 
						|||
| 
								 | 
							
								if (index(string, substrings[i]) == 1) return substrings[i]
							 | 
						|||
| 
								 | 
							
								return NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function matchesAny(string, patterns,
							 | 
						|||
| 
								 | 
							
								i) {
							 | 
						|||
| 
								 | 
							
								for (i in patterns)
							 | 
						|||
| 
								 | 
							
								if (string ~ "^" patterns[i]) return patterns[i]
							 | 
						|||
| 
								 | 
							
								return NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function replicate(string, len,
							 | 
						|||
| 
								 | 
							
								i, temp) {
							 | 
						|||
| 
								 | 
							
								temp = NULLSTR
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < len; i++)
							 | 
						|||
| 
								 | 
							
								temp = temp string
							 | 
						|||
| 
								 | 
							
								return temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function reverse(string,
							 | 
						|||
| 
								 | 
							
								i, temp) {
							 | 
						|||
| 
								 | 
							
								temp = NULLSTR
							 | 
						|||
| 
								 | 
							
								for (i = length(string); i > 0; i--)
							 | 
						|||
| 
								 | 
							
								temp = temp substr(string, i, 1);
							 | 
						|||
| 
								 | 
							
								return temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function join(array, separator, sortedIn, preserveNull,
							 | 
						|||
| 
								 | 
							
								i, j, saveSortedIn, temp) {
							 | 
						|||
| 
								 | 
							
								if (!sortedIn)
							 | 
						|||
| 
								 | 
							
								sortedIn = "compareByIndexFields"
							 | 
						|||
| 
								 | 
							
								temp = NULLSTR
							 | 
						|||
| 
								 | 
							
								j = 0
							 | 
						|||
| 
								 | 
							
								if (isarray(array)) {
							 | 
						|||
| 
								 | 
							
								saveSortedIn = PROCINFO["sorted_in"]
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = sortedIn
							 | 
						|||
| 
								 | 
							
								for (i in array)
							 | 
						|||
| 
								 | 
							
								if (preserveNull || array[i] != NULLSTR)
							 | 
						|||
| 
								 | 
							
								temp = j++ ? temp separator array[i] : array[i]
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = saveSortedIn
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								temp = array
							 | 
						|||
| 
								 | 
							
								return temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function explode(string, array) {
							 | 
						|||
| 
								 | 
							
								split(string, array, NULLSTR)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function escapeChar(char) {
							 | 
						|||
| 
								 | 
							
								switch (char) {
							 | 
						|||
| 
								 | 
							
								case "b":
							 | 
						|||
| 
								 | 
							
								return "\b"
							 | 
						|||
| 
								 | 
							
								case "f":
							 | 
						|||
| 
								 | 
							
								return "\f"
							 | 
						|||
| 
								 | 
							
								case "n":
							 | 
						|||
| 
								 | 
							
								return "\n"
							 | 
						|||
| 
								 | 
							
								case "r":
							 | 
						|||
| 
								 | 
							
								return "\r"
							 | 
						|||
| 
								 | 
							
								case "t":
							 | 
						|||
| 
								 | 
							
								return "\t"
							 | 
						|||
| 
								 | 
							
								case "v":
							 | 
						|||
| 
								 | 
							
								return "\v"
							 | 
						|||
| 
								 | 
							
								case "u0026":
							 | 
						|||
| 
								 | 
							
								return "&"
							 | 
						|||
| 
								 | 
							
								case "u003c":
							 | 
						|||
| 
								 | 
							
								return "<"
							 | 
						|||
| 
								 | 
							
								case "u003e":
							 | 
						|||
| 
								 | 
							
								return ">"
							 | 
						|||
| 
								 | 
							
								default:
							 | 
						|||
| 
								 | 
							
								return char
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function literal(string,
							 | 
						|||
| 
								 | 
							
								c, cc, escaping, i, s) {
							 | 
						|||
| 
								 | 
							
								if (string !~ /^".*"$/)
							 | 
						|||
| 
								 | 
							
								return string
							 | 
						|||
| 
								 | 
							
								explode(string, s)
							 | 
						|||
| 
								 | 
							
								string = NULLSTR
							 | 
						|||
| 
								 | 
							
								escaping = 0
							 | 
						|||
| 
								 | 
							
								for (i = 2; i < length(s); i++) {
							 | 
						|||
| 
								 | 
							
								c = s[i]
							 | 
						|||
| 
								 | 
							
								if (escaping) {
							 | 
						|||
| 
								 | 
							
								if (cc) {
							 | 
						|||
| 
								 | 
							
								cc = cc c
							 | 
						|||
| 
								 | 
							
								if (length(cc) == 5) {
							 | 
						|||
| 
								 | 
							
								string = string escapeChar(cc)
							 | 
						|||
| 
								 | 
							
								escaping = 0
							 | 
						|||
| 
								 | 
							
								cc = NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else if (c == "u") {
							 | 
						|||
| 
								 | 
							
								cc = c
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								string = string escapeChar(c)
							 | 
						|||
| 
								 | 
							
								escaping = 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								if (c == "\\")
							 | 
						|||
| 
								 | 
							
								escaping = 1
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								string = string c
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return string
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function escape(string) {
							 | 
						|||
| 
								 | 
							
								gsub(/\\/, "\\\\", string)
							 | 
						|||
| 
								 | 
							
								gsub(/"/, "\\\"", string)
							 | 
						|||
| 
								 | 
							
								return string
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function unescape(string) {
							 | 
						|||
| 
								 | 
							
								gsub(/\\\"/, "\"", string)
							 | 
						|||
| 
								 | 
							
								gsub(/\\\\/, "\\", string)
							 | 
						|||
| 
								 | 
							
								return string
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function parameterize(string, quotationMark) {
							 | 
						|||
| 
								 | 
							
								if (!quotationMark)
							 | 
						|||
| 
								 | 
							
								quotationMark = "'"
							 | 
						|||
| 
								 | 
							
								if (quotationMark == "'") {
							 | 
						|||
| 
								 | 
							
								gsub(/'/, "'\\''", string)
							 | 
						|||
| 
								 | 
							
								return "'" string "'"
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								return "\"" escape(string) "\""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function unparameterize(string,    temp) {
							 | 
						|||
| 
								 | 
							
								match(string, /^'(.*)'$/, temp)
							 | 
						|||
| 
								 | 
							
								if (temp[0]) {
							 | 
						|||
| 
								 | 
							
								string = temp[1]
							 | 
						|||
| 
								 | 
							
								gsub(/'\\''/, "'", string)
							 | 
						|||
| 
								 | 
							
								return string
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(string, /^"(.*)"$/, temp)
							 | 
						|||
| 
								 | 
							
								if (temp[0]) {
							 | 
						|||
| 
								 | 
							
								string = temp[1]
							 | 
						|||
| 
								 | 
							
								return unescape(string)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return string
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function toString(value, inline, heredoc, valOnly, numSub, level, sortedIn,
							 | 
						|||
| 
								 | 
							
								i, items, j, k, p, saveSortedIn, temp, v) {
							 | 
						|||
| 
								 | 
							
								if (!level) level = 0
							 | 
						|||
| 
								 | 
							
								if (!sortedIn)
							 | 
						|||
| 
								 | 
							
								sortedIn = "compareByIndexFields"
							 | 
						|||
| 
								 | 
							
								if (isarray(value)) {
							 | 
						|||
| 
								 | 
							
								saveSortedIn = PROCINFO["sorted_in"]
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = sortedIn
							 | 
						|||
| 
								 | 
							
								p = 0
							 | 
						|||
| 
								 | 
							
								for (i in value) {
							 | 
						|||
| 
								 | 
							
								split(i, j, SUBSEP); k = join(j, ",")
							 | 
						|||
| 
								 | 
							
								if (!numSub || !isnum(k)) k = parameterize(k, "\"")
							 | 
						|||
| 
								 | 
							
								v = toString(value[i], inline, heredoc, valOnly, numSub, level + 1, sortedIn)
							 | 
						|||
| 
								 | 
							
								if (!isarray(value[i])) v = parameterize(v, "\"")
							 | 
						|||
| 
								 | 
							
								if (valOnly)
							 | 
						|||
| 
								 | 
							
								items[p++] = inline ? v : (replicate("\t", level) v)
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								items[p++] = inline ? (k ": " v) :
							 | 
						|||
| 
								 | 
							
								(replicate("\t", level) k "\t" v)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = saveSortedIn
							 | 
						|||
| 
								 | 
							
								temp = inline ? join(items, ", ") :
							 | 
						|||
| 
								 | 
							
								("\n" join(items, "\n") "\n" replicate("\t", level))
							 | 
						|||
| 
								 | 
							
								temp = valOnly ? ("[" temp "]") : ("{" temp "}")
							 | 
						|||
| 
								 | 
							
								return temp
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								if (heredoc)
							 | 
						|||
| 
								 | 
							
								return "'''\n" value "\n'''"
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								return value
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function squeeze(line, preserveIndent) {
							 | 
						|||
| 
								 | 
							
								if (!preserveIndent)
							 | 
						|||
| 
								 | 
							
								gsub(/^[[:space:]]+/, NULLSTR, line)
							 | 
						|||
| 
								 | 
							
								gsub(/^[[:space:]]*#.*$/, NULLSTR, line)
							 | 
						|||
| 
								 | 
							
								gsub(/#[^"/]*$/, NULLSTR, line)
							 | 
						|||
| 
								 | 
							
								gsub(/[[:space:]]+$/, NULLSTR, line)
							 | 
						|||
| 
								 | 
							
								gsub(/[[:space:]]+\\$/, "\\", line)
							 | 
						|||
| 
								 | 
							
								return line
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function yn(string) {
							 | 
						|||
| 
								 | 
							
								return (tolower(string) ~ /^([0fn]|off)/) ? 0 : 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initAnsiCode() {
							 | 
						|||
| 
								 | 
							
								if (ENVIRON["TERM"] == "dumb") return
							 | 
						|||
| 
								 | 
							
								AnsiCode["reset"]         = AnsiCode[0] = "\33[0m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["bold"]          = "\33[1m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["underline"]     = "\33[4m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["negative"]      = "\33[7m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["no bold"]       = "\33[22m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["no underline"]  = "\33[24m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["positive"]      = "\33[27m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["black"]         = "\33[30m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["red"]           = "\33[31m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["green"]         = "\33[32m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["yellow"]        = "\33[33m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["blue"]          = "\33[34m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["magenta"]       = "\33[35m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["cyan"]          = "\33[36m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["gray"]          = "\33[37m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["default"]       = "\33[39m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["dark gray"]     = "\33[90m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["light red"]     = "\33[91m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["light green"]   = "\33[92m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["light yellow"]  = "\33[93m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["light blue"]    = "\33[94m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["light magenta"] = "\33[95m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["light cyan"]    = "\33[96m"
							 | 
						|||
| 
								 | 
							
								AnsiCode["white"]         = "\33[97m"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function ansi(code, text) {
							 | 
						|||
| 
								 | 
							
								switch (code) {
							 | 
						|||
| 
								 | 
							
								case "bold":
							 | 
						|||
| 
								 | 
							
								return AnsiCode[code] text AnsiCode["no bold"]
							 | 
						|||
| 
								 | 
							
								case "underline":
							 | 
						|||
| 
								 | 
							
								return AnsiCode[code] text AnsiCode["no underline"]
							 | 
						|||
| 
								 | 
							
								case "negative":
							 | 
						|||
| 
								 | 
							
								return AnsiCode[code] text AnsiCode["positive"]
							 | 
						|||
| 
								 | 
							
								default:
							 | 
						|||
| 
								 | 
							
								return AnsiCode[code] text AnsiCode[0]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function w(text) {
							 | 
						|||
| 
								 | 
							
								print ansi("yellow", text) > STDERR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function e(text) {
							 | 
						|||
| 
								 | 
							
								print ansi("bold", ansi("yellow", text)) > STDERR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function wtf(text) {
							 | 
						|||
| 
								 | 
							
								print ansi("bold", ansi("red", text)) > STDERR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function d(text) {
							 | 
						|||
| 
								 | 
							
								print ansi("gray", text) > STDERR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function da(value, name, inline, heredoc, valOnly, numSub, sortedIn,
							 | 
						|||
| 
								 | 
							
								i, j, saveSortedIn) {
							 | 
						|||
| 
								 | 
							
								if (!name)
							 | 
						|||
| 
								 | 
							
								name = "_"
							 | 
						|||
| 
								 | 
							
								if (!sortedIn)
							 | 
						|||
| 
								 | 
							
								sortedIn = "compareByIndexFields"
							 | 
						|||
| 
								 | 
							
								d(name " = " toString(value, inline, heredoc, valOnly, numSub, 0, sortedIn))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function assert(x, message) {
							 | 
						|||
| 
								 | 
							
								if (!message)
							 | 
						|||
| 
								 | 
							
								message = "[ERROR] Assertion failed."
							 | 
						|||
| 
								 | 
							
								if (x)
							 | 
						|||
| 
								 | 
							
								return x
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								e(message)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initUrlEncoding() {
							 | 
						|||
| 
								 | 
							
								UrlEncoding["\t"] = "%09"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["\n"] = "%0A"
							 | 
						|||
| 
								 | 
							
								UrlEncoding[" "]  = "%20"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["!"]  = "%21"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["\""] = "%22"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["#"]  = "%23"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["$"]  = "%24"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["%"]  = "%25"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["&"]  = "%26"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["'"]  = "%27"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["("]  = "%28"
							 | 
						|||
| 
								 | 
							
								UrlEncoding[")"]  = "%29"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["*"]  = "%2A"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["+"]  = "%2B"
							 | 
						|||
| 
								 | 
							
								UrlEncoding[","]  = "%2C"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["-"]  = "%2D"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["."]  = "%2E"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["/"]  = "%2F"
							 | 
						|||
| 
								 | 
							
								UrlEncoding[":"]  = "%3A"
							 | 
						|||
| 
								 | 
							
								UrlEncoding[";"]  = "%3B"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["<"]  = "%3C"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["="]  = "%3D"
							 | 
						|||
| 
								 | 
							
								UrlEncoding[">"]  = "%3E"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["?"]  = "%3F"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["@"]  = "%40"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["["]  = "%5B"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["\\"] = "%5C"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["]"]  = "%5D"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["^"]  = "%5E"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["_"]  = "%5F"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["`"]  = "%60"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["{"]  = "%7B"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["|"]  = "%7C"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["}"]  = "%7D"
							 | 
						|||
| 
								 | 
							
								UrlEncoding["~"]  = "%7E"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function quote(string,    i, r, s) {
							 | 
						|||
| 
								 | 
							
								r = NULLSTR
							 | 
						|||
| 
								 | 
							
								explode(string, s)
							 | 
						|||
| 
								 | 
							
								for (i = 1; i <= length(s); i++)
							 | 
						|||
| 
								 | 
							
								r = r (s[i] in UrlEncoding ? UrlEncoding[s[i]] : s[i])
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function unquote(string,    i, k, r, s, temp) {
							 | 
						|||
| 
								 | 
							
								r = NULLSTR
							 | 
						|||
| 
								 | 
							
								explode(string, s)
							 | 
						|||
| 
								 | 
							
								temp = NULLSTR
							 | 
						|||
| 
								 | 
							
								for (i = 1; i <= length(s); i++)
							 | 
						|||
| 
								 | 
							
								if (temp) {
							 | 
						|||
| 
								 | 
							
								temp = temp s[i]
							 | 
						|||
| 
								 | 
							
								if (length(temp) > 2) {
							 | 
						|||
| 
								 | 
							
								for (k in UrlEncoding)
							 | 
						|||
| 
								 | 
							
								if (temp == UrlEncoding[k]) {
							 | 
						|||
| 
								 | 
							
								r = r k
							 | 
						|||
| 
								 | 
							
								temp = NULLSTR
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (temp) {
							 | 
						|||
| 
								 | 
							
								r = r temp
							 | 
						|||
| 
								 | 
							
								temp = NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								if (s[i] != "%")
							 | 
						|||
| 
								 | 
							
								r = r s[i]
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								temp = s[i]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (temp)
							 | 
						|||
| 
								 | 
							
								r = r temp
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initUriSchemes() {
							 | 
						|||
| 
								 | 
							
								UriSchemes[0] = "file://"
							 | 
						|||
| 
								 | 
							
								UriSchemes[1] = "http://"
							 | 
						|||
| 
								 | 
							
								UriSchemes[2] = "https://"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function readFrom(file,    line, text) {
							 | 
						|||
| 
								 | 
							
								if (!file) file = "/dev/stdin"
							 | 
						|||
| 
								 | 
							
								text = NULLSTR
							 | 
						|||
| 
								 | 
							
								while (getline line < file)
							 | 
						|||
| 
								 | 
							
								text = (text ? text "\n" : NULLSTR) line
							 | 
						|||
| 
								 | 
							
								return text
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function writeTo(text, file) {
							 | 
						|||
| 
								 | 
							
								if (!file) file = "/dev/stdout"
							 | 
						|||
| 
								 | 
							
								print text > file
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getOutput(command,    content, line) {
							 | 
						|||
| 
								 | 
							
								content = NULLSTR
							 | 
						|||
| 
								 | 
							
								while ((command |& getline line) > 0)
							 | 
						|||
| 
								 | 
							
								content = (content ? content "\n" : NULLSTR) line
							 | 
						|||
| 
								 | 
							
								return content
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function fileExists(file) {
							 | 
						|||
| 
								 | 
							
								return !system("test -f " parameterize(file))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function dirExists(file) {
							 | 
						|||
| 
								 | 
							
								return !system("test -d " parameterize(file))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function detectProgram(prog, arg, returnOutput,    temp) {
							 | 
						|||
| 
								 | 
							
								if (returnOutput) {
							 | 
						|||
| 
								 | 
							
								prog " " arg SUPERR | getline temp
							 | 
						|||
| 
								 | 
							
								return temp
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								return (prog " " arg SUPERR | getline) ? prog : NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getGitHead(    line, group) {
							 | 
						|||
| 
								 | 
							
								if (fileExists(".git/HEAD")) {
							 | 
						|||
| 
								 | 
							
								getline line < ".git/HEAD"
							 | 
						|||
| 
								 | 
							
								match(line, /^ref: (.*)$/, group)
							 | 
						|||
| 
								 | 
							
								if (fileExists(".git/" group[1])) {
							 | 
						|||
| 
								 | 
							
								getline line < (".git/" group[1])
							 | 
						|||
| 
								 | 
							
								return substr(line, 1, 7)
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								return NULLSTR
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								return NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								BEGIN {
							 | 
						|||
| 
								 | 
							
								initConst()
							 | 
						|||
| 
								 | 
							
								initAnsiCode()
							 | 
						|||
| 
								 | 
							
								initUrlEncoding()
							 | 
						|||
| 
								 | 
							
								initUriSchemes()
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initGawk(    group) {
							 | 
						|||
| 
								 | 
							
								Gawk = "gawk"
							 | 
						|||
| 
								 | 
							
								GawkVersion = PROCINFO["version"]
							 | 
						|||
| 
								 | 
							
								split(PROCINFO["version"], group, ".")
							 | 
						|||
| 
								 | 
							
								if (group[1] < 4) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Oops! Your gawk (version " GawkVersion ") "\
							 | 
						|||
| 
								 | 
							
								"appears to be too old.\n"\
							 | 
						|||
| 
								 | 
							
								"        You need at least gawk 4.0.0 to run this program.")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initBiDi() {
							 | 
						|||
| 
								 | 
							
								FriBidi = detectProgram("fribidi", "--version", 1)
							 | 
						|||
| 
								 | 
							
								BiDiNoPad = FriBidi ? "fribidi --nopad" : "rev" SUPERR
							 | 
						|||
| 
								 | 
							
								BiDi = FriBidi ? "fribidi --width %s" :
							 | 
						|||
| 
								 | 
							
								"rev" SUPERR "| sed \"s/'/\\\\\\'/\" | xargs printf '%%s '"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initRlwrap() {
							 | 
						|||
| 
								 | 
							
								Rlwrap = detectProgram("rlwrap", "--version")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initEmacs() {
							 | 
						|||
| 
								 | 
							
								Emacs = detectProgram("emacs", "--version")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initCurl() {
							 | 
						|||
| 
								 | 
							
								Curl = detectProgram("curl", "--version")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function l(value, name, inline, heredoc, valOnly, numSub, sortedIn) {
							 | 
						|||
| 
								 | 
							
								if (Option["debug"]) {
							 | 
						|||
| 
								 | 
							
								if (name)
							 | 
						|||
| 
								 | 
							
								da(value, name, inline, heredoc, valOnly, numSub, sortedIn)
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								d(value)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function m(string) {
							 | 
						|||
| 
								 | 
							
								if (Option["debug"])
							 | 
						|||
| 
								 | 
							
								return ansi("cyan", string) RS
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function newerVersion(ver1, ver2,    i, group1, group2) {
							 | 
						|||
| 
								 | 
							
								split(ver1, group1, ".")
							 | 
						|||
| 
								 | 
							
								split(ver2, group2, ".")
							 | 
						|||
| 
								 | 
							
								for (i = 1; i <= 4; i++) {
							 | 
						|||
| 
								 | 
							
								if (group1[i] + 0 > group2[i] + 0)
							 | 
						|||
| 
								 | 
							
								return 1
							 | 
						|||
| 
								 | 
							
								else if (group1[i] + 0 < group2[i] + 0)
							 | 
						|||
| 
								 | 
							
								return 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function rlwrapMe(    i, command) {
							 | 
						|||
| 
								 | 
							
								initRlwrap()
							 | 
						|||
| 
								 | 
							
								if (!Rlwrap) {
							 | 
						|||
| 
								 | 
							
								l(">> not found: rlwrap")
							 | 
						|||
| 
								 | 
							
								return 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (ENVIRON["TRANS_ENTRY"]) {
							 | 
						|||
| 
								 | 
							
								command = Rlwrap " " ENVIRON["TRANS_ENTRY"] " "\
							 | 
						|||
| 
								 | 
							
								parameterize("-no-rlwrap")
							 | 
						|||
| 
								 | 
							
								} else if (fileExists(ENVIRON["TRANS_DIR"] "/" EntryScript)) {
							 | 
						|||
| 
								 | 
							
								command = Rlwrap " sh "\
							 | 
						|||
| 
								 | 
							
								parameterize(ENVIRON["TRANS_DIR"] "/" EntryScript)\
							 | 
						|||
| 
								 | 
							
								" - " parameterize("-no-rlwrap")
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								l(">> not found: $TRANS_ENTRY or EntryPoint")
							 | 
						|||
| 
								 | 
							
								return 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								for (i = 1; i < length(ARGV); i++)
							 | 
						|||
| 
								 | 
							
								if (ARGV[i])
							 | 
						|||
| 
								 | 
							
								command = command " " parameterize(ARGV[i])
							 | 
						|||
| 
								 | 
							
								l(">> forking: " command)
							 | 
						|||
| 
								 | 
							
								if (!system(command)) {
							 | 
						|||
| 
								 | 
							
								l(">> process exited with code 0")
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								l(">> process exited with non-zero return code")
							 | 
						|||
| 
								 | 
							
								return 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function emacsMe(    i, params, el, command) {
							 | 
						|||
| 
								 | 
							
								initEmacs()
							 | 
						|||
| 
								 | 
							
								if (!Emacs) {
							 | 
						|||
| 
								 | 
							
								l(">> not found: emacs")
							 | 
						|||
| 
								 | 
							
								return 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								params = ""
							 | 
						|||
| 
								 | 
							
								for (i = 1; i < length(ARGV); i++)
							 | 
						|||
| 
								 | 
							
								if (ARGV[i])
							 | 
						|||
| 
								 | 
							
								params = params " " parameterize(ARGV[i], "\"")
							 | 
						|||
| 
								 | 
							
								if (ENVIRON["TRANS_ENTRY"]) {
							 | 
						|||
| 
								 | 
							
								el = "(progn (setq explicit-shell-file-name \"" ENVIRON["TRANS_ENTRY"] "\") "\
							 | 
						|||
| 
								 | 
							
								"(setq explicit-" Command "-args '(\"-I\" \"-no-rlwrap\"" params ")) "\
							 | 
						|||
| 
								 | 
							
								"(command-execute 'shell) (rename-buffer \"" Name "\"))"
							 | 
						|||
| 
								 | 
							
								} else if (fileExists(ENVIRON["TRANS_DIR"] "/" EntryScript)) {
							 | 
						|||
| 
								 | 
							
								el = "(progn (setq explicit-shell-file-name \"" "sh" "\") "\
							 | 
						|||
| 
								 | 
							
								"(setq explicit-" "sh" "-args '(\"" ENVIRON["TRANS_DIR"] "/" EntryScript "\" \"-I\" \"-no-rlwrap\"" params ")) "\
							 | 
						|||
| 
								 | 
							
								"(command-execute 'shell) (rename-buffer \"" Name "\"))"
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								l(">> not found: $TRANS_ENTRY or EntryPoint")
							 | 
						|||
| 
								 | 
							
								return 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								command = Emacs " --eval " parameterize(el)
							 | 
						|||
| 
								 | 
							
								l(">> forking: " command)
							 | 
						|||
| 
								 | 
							
								if (!system(command)) {
							 | 
						|||
| 
								 | 
							
								l(">> process exited with code 0")
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								l(">> process exited with non-zero return code")
							 | 
						|||
| 
								 | 
							
								return 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function curl(url, output,    command, content, line) {
							 | 
						|||
| 
								 | 
							
								initCurl()
							 | 
						|||
| 
								 | 
							
								if (!Curl) {
							 | 
						|||
| 
								 | 
							
								l(">> not found: curl")
							 | 
						|||
| 
								 | 
							
								w("[WARNING] curl is not found.")
							 | 
						|||
| 
								 | 
							
								return NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								command = Curl " --location --silent"
							 | 
						|||
| 
								 | 
							
								if (Option["user-agent"])
							 | 
						|||
| 
								 | 
							
								command = command " --user-agent " parameterize(Option["user-agent"])
							 | 
						|||
| 
								 | 
							
								command = command " " parameterize(url)
							 | 
						|||
| 
								 | 
							
								if (output) {
							 | 
						|||
| 
								 | 
							
								command = command " --output " parameterize(output)
							 | 
						|||
| 
								 | 
							
								system(command)
							 | 
						|||
| 
								 | 
							
								return NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								content = NULLSTR
							 | 
						|||
| 
								 | 
							
								while ((command |& getline line) > 0)
							 | 
						|||
| 
								 | 
							
								content = (content ? content "\n" : NULLSTR) line
							 | 
						|||
| 
								 | 
							
								return content
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function curlPost(url, data, output,    command, content, line) {
							 | 
						|||
| 
								 | 
							
								initCurl()
							 | 
						|||
| 
								 | 
							
								if (!Curl) {
							 | 
						|||
| 
								 | 
							
								l(">> not found: curl")
							 | 
						|||
| 
								 | 
							
								w("[WARNING] curl is not found.")
							 | 
						|||
| 
								 | 
							
								return NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								command = Curl " --location --silent"
							 | 
						|||
| 
								 | 
							
								if (Option["user-agent"])
							 | 
						|||
| 
								 | 
							
								command = command " --user-agent " parameterize(Option["user-agent"])
							 | 
						|||
| 
								 | 
							
								command = command " --request POST --data " parameterize(data)
							 | 
						|||
| 
								 | 
							
								command = command " " parameterize(url)
							 | 
						|||
| 
								 | 
							
								if (output) {
							 | 
						|||
| 
								 | 
							
								command = command " --output " parameterize(output)
							 | 
						|||
| 
								 | 
							
								system(command)
							 | 
						|||
| 
								 | 
							
								return NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								content = NULLSTR
							 | 
						|||
| 
								 | 
							
								while ((command |& getline line) > 0)
							 | 
						|||
| 
								 | 
							
								content = (content ? content "\n" : NULLSTR) line
							 | 
						|||
| 
								 | 
							
								return content
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function dump(text, group,    command, temp) {
							 | 
						|||
| 
								 | 
							
								command = "hexdump" " -v -e'1/1 \"%03u\" \" \"'"
							 | 
						|||
| 
								 | 
							
								("echo " parameterize(text) PIPE command) | getline temp
							 | 
						|||
| 
								 | 
							
								split(temp, group, " ")
							 | 
						|||
| 
								 | 
							
								return length(group) - 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function base64(text,    command, temp) {
							 | 
						|||
| 
								 | 
							
								command = "base64"
							 | 
						|||
| 
								 | 
							
								("echo -n " parameterize(text) PIPE command) | getline temp
							 | 
						|||
| 
								 | 
							
								return temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function uprintf(text,    command, temp) {
							 | 
						|||
| 
								 | 
							
								command = "echo -en " parameterize(text)
							 | 
						|||
| 
								 | 
							
								("bash -c " parameterize(command, "\"")) | getline temp
							 | 
						|||
| 
								 | 
							
								return temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initLocale(    i) {
							 | 
						|||
| 
								 | 
							
								Locale["af"]["name"]               = "Afrikaans"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["endonym"]            = "Afrikaans"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["translations-of"]    = "Vertalings van %s"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["definitions-of"]     = "Definisies van %s"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["synonyms"]           = "Sinonieme"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["examples"]           = "Voorbeelde"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["see-also"]           = "Sien ook"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["iso"]                = "afr"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["glotto"]             = "afri1274"
							 | 
						|||
| 
								 | 
							
								Locale["af"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["name"]               = "Albanian"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["endonym"]            = "Shqip"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["translations-of"]    = "Përkthimet e %s"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["definitions-of"]     = "Përkufizime të %s"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["synonyms"]           = "Sinonime"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["examples"]           = "Shembuj"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["see-also"]           = "Shihni gjithashtu"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["iso"]                = "sqi"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["glotto"]             = "alba1267"
							 | 
						|||
| 
								 | 
							
								Locale["sq"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["name"]               = "Amharic"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["endonym"]            = "አማርኛ"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["translations-of"]    = "የ %s ትርጉሞች"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["definitions-of"]     = "የ %s ቃላት ፍችዎች"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["synonyms"]           = "ተመሳሳይ ቃላት"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["examples"]           = "ምሳሌዎች"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["see-also"]           = "የሚከተለውንም ይመልከቱ"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["family"]             = "Afro-Asiatic"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["iso"]                = "amh"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["glotto"]             = "amha1245"
							 | 
						|||
| 
								 | 
							
								Locale["am"]["script"]             = "Ethi"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["name"]               = "Arabic"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["endonym"]            = "العربية"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["translations-of"]    = "ترجمات %s"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["definitions-of"]     = "تعريفات %s"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["synonyms"]           = "مرادفات"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["examples"]           = "أمثلة"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["see-also"]           = "انظر أيضًا"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["family"]             = "Afro-Asiatic"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["iso"]                = "ara"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["glotto"]             = "stan1318"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["script"]             = "Arab"
							 | 
						|||
| 
								 | 
							
								Locale["ar"]["rtl"]                = "true"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["name"]               = "Armenian"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["endonym"]            = "Հայերեն"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["translations-of"]    = "%s-ի թարգմանությունները"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["definitions-of"]     = "%s-ի սահմանումները"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["synonyms"]           = "Հոմանիշներ"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["examples"]           = "Օրինակներ"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["see-also"]           = "Տես նաև"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["iso"]                = "hye"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["glotto"]             = "nucl1235"
							 | 
						|||
| 
								 | 
							
								Locale["hy"]["script"]             = "Armn"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["name"]               = "Azerbaijani"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["endonym"]            = "Azərbaycanca"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["translations-of"]    = "%s sözünün tərcüməsi"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["definitions-of"]     = "%s sözünün tərifləri"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["synonyms"]           = "Sinonimlər"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["examples"]           = "Nümunələr"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["see-also"]           = "Həmçinin, baxın:"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["family"]             = "Turkic"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["iso"]                = "aze"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["glotto"]             = "nort2697"
							 | 
						|||
| 
								 | 
							
								Locale["az"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["name"]               = "Basque"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["endonym"]            = "Euskara"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["translations-of"]    = "%s esapidearen itzulpena"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["definitions-of"]     = "Honen definizioak: %s"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["synonyms"]           = "Sinonimoak"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["examples"]           = "Adibideak"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["see-also"]           = "Ikusi hauek ere"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["family"]             = "Language Isolate"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["iso"]                = "eus"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["glotto"]             = "basq1248"
							 | 
						|||
| 
								 | 
							
								Locale["eu"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["name"]               = "Belarusian"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["endonym"]            = "беларуская"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["translations-of"]    = "Пераклады %s"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["definitions-of"]     = "Вызначэннi %s"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["synonyms"]           = "Сінонімы"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["examples"]           = "Прыклады"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["see-also"]           = "Гл. таксама"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["iso"]                = "bel"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["glotto"]             = "bela1254"
							 | 
						|||
| 
								 | 
							
								Locale["be"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["name"]               = "Bengali"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["endonym"]            = "বাংলা"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["translations-of"]    = "%s এর অনুবাদ"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["definitions-of"]     = "%s এর সংজ্ঞা"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["synonyms"]           = "প্রতিশব্দ"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["examples"]           = "উদাহরণ"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["see-also"]           = "আরো দেখুন"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["iso"]                = "ben"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["glotto"]             = "beng1280"
							 | 
						|||
| 
								 | 
							
								Locale["bn"]["script"]             = "Beng"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["name"]               = "Bosnian"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["endonym"]            = "Bosanski"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["translations-of"]    = "Prijevod za: %s"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["definitions-of"]     = "Definicije za %s"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["synonyms"]           = "Sinonimi"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["examples"]           = "Primjeri"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["see-also"]           = "Pogledajte i"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["iso"]                = "bos"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["glotto"]             = "bosn1245"
							 | 
						|||
| 
								 | 
							
								Locale["bs"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["name"]               = "Bulgarian"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["endonym"]            = "български"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["translations-of"]    = "Преводи на %s"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["definitions-of"]     = "Дефиниции за %s"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["synonyms"]           = "Синоними"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["examples"]           = "Примери"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["see-also"]           = "Вижте също"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["iso"]                = "bul"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["glotto"]             = "bulg1262"
							 | 
						|||
| 
								 | 
							
								Locale["bg"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["name"]               = "Catalan"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["endonym"]            = "Català"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["translations-of"]    = "Traduccions per a %s"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["definitions-of"]     = "Definicions de: %s"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["synonyms"]           = "Sinònims"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["examples"]           = "Exemples"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["see-also"]           = "Vegeu també"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["iso"]                = "cat"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["glotto"]             = "stan1289"
							 | 
						|||
| 
								 | 
							
								Locale["ca"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["name"]              = "Cebuano"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["endonym"]           = "Cebuano"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["translations-of"]   = "%s Mga Paghubad sa PULONG_O_HUGPONG SA PAMULONG"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["definitions-of"]    = "Mga kahulugan sa %s"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["synonyms"]          = "Mga Kapulong"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["examples"]          = "Mga pananglitan:"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["see-also"]          = "Kitaa pag-usab"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["family"]            = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["iso"]               = "ceb"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["glotto"]            = "cebu1242"
							 | 
						|||
| 
								 | 
							
								Locale["ceb"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["name"]               = "Chichewa"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["endonym"]            = "Nyanja"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["translations-of"]    = "Matanthauzidwe a %s"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["definitions-of"]     = "Mamasulidwe a %s"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["synonyms"]           = "Mau ofanana"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["examples"]           = "Zitsanzo"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["see-also"]           = "Onaninso"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["iso"]                = "nya"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["glotto"]             = "nyan1308"
							 | 
						|||
| 
								 | 
							
								Locale["ny"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["name"]            = "Chinese Simplified"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["endonym"]         = "简体中文"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["translations-of"] = "%s 的翻译"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["definitions-of"]  = "%s的定义"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["synonyms"]        = "同义词"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["examples"]        = "示例"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["see-also"]        = "另请参阅"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["family"]          = "Sino-Tibetan"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["iso"]             = "zho-CN"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["glotto"]          = "mand1415"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["script"]          = "Hans"
							 | 
						|||
| 
								 | 
							
								Locale["zh-CN"]["dictionary"]      = "true"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["name"]            = "Chinese Traditional"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["endonym"]         = "正體中文"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["translations-of"] = "「%s」的翻譯"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["definitions-of"]  = "「%s」的定義"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["synonyms"]        = "同義詞"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["examples"]        = "例句"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["see-also"]        = "另請參閱"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["family"]          = "Sino-Tibetan"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["iso"]             = "zho-TW"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["glotto"]          = "mand1415"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["script"]          = "Hant"
							 | 
						|||
| 
								 | 
							
								Locale["zh-TW"]["dictionary"]      = "true"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["name"]               = "Corsican"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["endonym"]            = "Corsu"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["translations-of"]    = "Traductions de %s"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["definitions-of"]     = "Définitions de %s"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["synonyms"]           = "Synonymes"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["examples"]           = "Exemples"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["see-also"]           = "Voir aussi"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["iso"]                = "cos"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["glotto"]             = "cors1242"
							 | 
						|||
| 
								 | 
							
								Locale["co"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["name"]               = "Croatian"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["endonym"]            = "Hrvatski"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["translations-of"]    = "Prijevodi riječi ili izraza %s"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["definitions-of"]     = "Definicije riječi ili izraza %s"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["synonyms"]           = "Sinonimi"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["examples"]           = "Primjeri"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["see-also"]           = "Također pogledajte"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["iso"]                = "hrv"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["glotto"]             = "croa1245"
							 | 
						|||
| 
								 | 
							
								Locale["hr"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["name"]               = "Czech"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["endonym"]            = "Čeština"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["translations-of"]    = "Překlad výrazu %s"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["definitions-of"]     = "Definice výrazu %s"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["synonyms"]           = "Synonyma"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["examples"]           = "Příklady"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["see-also"]           = "Viz také"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["iso"]                = "ces"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["glotto"]             = "czec1258"
							 | 
						|||
| 
								 | 
							
								Locale["cs"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["name"]               = "Danish"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["endonym"]            = "Dansk"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["translations-of"]    = "Oversættelser af %s"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["definitions-of"]     = "Definitioner af %s"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["synonyms"]           = "Synonymer"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["examples"]           = "Eksempler"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["see-also"]           = "Se også"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["iso"]                = "dan"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["glotto"]             = "dani1285"
							 | 
						|||
| 
								 | 
							
								Locale["da"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["name"]               = "Dutch"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["endonym"]            = "Nederlands"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["translations-of"]    = "Vertalingen van %s"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["definitions-of"]     = "Definities van %s"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["synonyms"]           = "Synoniemen"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["examples"]           = "Voorbeelden"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["see-also"]           = "Zie ook"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["iso"]                = "nld"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["glotto"]             = "dutc1256"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["nl"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["name"]               = "English"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["endonym"]            = "English"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["translations-of"]    = "Translations of %s"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["definitions-of"]     = "Definitions of %s"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["synonyms"]           = "Synonyms"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["examples"]           = "Examples"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["see-also"]           = "See also"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["iso"]                = "eng"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["glotto"]             = "stan1293"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["en"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["name"]               = "Esperanto"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["endonym"]            = "Esperanto"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["translations-of"]    = "Tradukoj de %s"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["definitions-of"]     = "Difinoj de %s"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["synonyms"]           = "Sinonimoj"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["examples"]           = "Ekzemploj"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["see-also"]           = "Vidu ankaŭ"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["family"]             = "Artificial Language"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["iso"]                = "epo"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["glotto"]             = "espe1235"
							 | 
						|||
| 
								 | 
							
								Locale["eo"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["name"]               = "Estonian"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["endonym"]            = "Eesti"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["translations-of"]    = "Sõna(de) %s tõlked"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["definitions-of"]     = "Sõna(de) %s definitsioonid"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["synonyms"]           = "Sünonüümid"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["examples"]           = "Näited"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["see-also"]           = "Vt ka"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["family"]             = "Uralic"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["iso"]                = "est"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["glotto"]             = "esto1258"
							 | 
						|||
| 
								 | 
							
								Locale["et"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["name"]               = "Filipino"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["endonym"]            = "Tagalog"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["translations-of"]    = "Mga pagsasalin ng %s"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["definitions-of"]     = "Mga kahulugan ng %s"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["synonyms"]           = "Mga Kasingkahulugan"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["examples"]           = "Mga Halimbawa"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["see-also"]           = "Tingnan rin ang"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["family"]             = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["iso"]                = "tgl"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["glotto"]             = "taga1270"
							 | 
						|||
| 
								 | 
							
								Locale["tl"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["name"]               = "Finnish"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["endonym"]            = "Suomi"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["translations-of"]    = "Käännökset tekstille %s"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["definitions-of"]     = "Määritelmät kohteelle %s"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["synonyms"]           = "Synonyymit"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["examples"]           = "Esimerkkejä"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["see-also"]           = "Katso myös"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["family"]             = "Uralic"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["iso"]                = "fin"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["glotto"]             = "finn1318"
							 | 
						|||
| 
								 | 
							
								Locale["fi"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["name"]               = "French"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["endonym"]            = "Français"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["translations-of"]    = "Traductions de %s"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["definitions-of"]     = "Définitions de %s"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["synonyms"]           = "Synonymes"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["examples"]           = "Exemples"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["see-also"]           = "Voir aussi"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["iso"]                = "fra"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["glotto"]             = "stan1290"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["fr"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["name"]               = "Galician"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["endonym"]            = "Galego"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["translations-of"]    = "Traducións de %s"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["definitions-of"]     = "Definicións de %s"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["synonyms"]           = "Sinónimos"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["examples"]           = "Exemplos"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["see-also"]           = "Ver tamén"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["iso"]                = "glg"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["glotto"]             = "gali1258"
							 | 
						|||
| 
								 | 
							
								Locale["gl"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["name"]               = "Georgian"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["endonym"]            = "ქართული"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["translations-of"]    = "%s-ის თარგმანები"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["definitions-of"]     = "%s-ის განსაზღვრებები"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["synonyms"]           = "სინონიმები"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["examples"]           = "მაგალითები"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["see-also"]           = "ასევე იხილეთ"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["family"]             = "Kartvelian"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["iso"]                = "kat"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["glotto"]             = "nucl1302"
							 | 
						|||
| 
								 | 
							
								Locale["ka"]["script"]             = "Geor"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["name"]               = "German"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["endonym"]            = "Deutsch"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["translations-of"]    = "Übersetzungen für %s"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["definitions-of"]     = "Definitionen von %s"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["synonyms"]           = "Synonyme"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["examples"]           = "Beispiele"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["see-also"]           = "Siehe auch"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["iso"]                = "deu"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["glotto"]             = "stan1295"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["de"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["name"]               = "Greek"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["endonym"]            = "Ελληνικά"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["translations-of"]    = "Μεταφράσεις του %s"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["definitions-of"]     = "Όρισμοί %s"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["synonyms"]           = "Συνώνυμα"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["examples"]           = "Παραδείγματα"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["see-also"]           = "Δείτε επίσης"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["iso"]                = "ell"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["glotto"]             = "mode1248"
							 | 
						|||
| 
								 | 
							
								Locale["el"]["script"]             = "Grek"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["name"]               = "Gujarati"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["endonym"]            = "ગુજરાતી"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["translations-of"]    = "%s ના અનુવાદ"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["definitions-of"]     = "%s ની વ્યાખ્યાઓ"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["synonyms"]           = "સમાનાર્થી"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["examples"]           = "ઉદાહરણો"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["see-also"]           = "આ પણ જુઓ"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["iso"]                = "guj"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["glotto"]             = "guja1252"
							 | 
						|||
| 
								 | 
							
								Locale["gu"]["script"]             = "Gujr"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["name"]               = "Haitian Creole"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["endonym"]            = "Kreyòl Ayisyen"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["translations-of"]    = "Tradiksyon %s"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["definitions-of"]     = "Definisyon nan %s"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["synonyms"]           = "Sinonim"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["examples"]           = "Egzanp:"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["see-also"]           = "Wè tou"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["iso"]                = "hat"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["glotto"]             = "hait1244"
							 | 
						|||
| 
								 | 
							
								Locale["ht"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["haw"]["name"]              = "Hawaiian"
							 | 
						|||
| 
								 | 
							
								Locale["haw"]["endonym"]           = "ʻŌlelo Hawaiʻi"
							 | 
						|||
| 
								 | 
							
								Locale["haw"]["family"]            = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["haw"]["iso"]               = "haw"
							 | 
						|||
| 
								 | 
							
								Locale["haw"]["glotto"]            = "hawa1245"
							 | 
						|||
| 
								 | 
							
								Locale["haw"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["name"]               = "Hausa"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["endonym"]            = "Hausa"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["translations-of"]    = "Fassarar %s"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["definitions-of"]     = "Ma'anoni na %s"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["synonyms"]           = "Masu kamancin ma'ana"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["examples"]           = "Misalai"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["see-also"]           = "Duba kuma"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["family"]             = "Afro-Asiatic"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["iso"]                = "hau"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["glotto"]             = "haus1257"
							 | 
						|||
| 
								 | 
							
								Locale["ha"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["name"]               = "Hebrew"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["endonym"]            = "עִבְרִית"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["translations-of"]    = "תרגומים של %s"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["definitions-of"]     = "הגדרות של %s"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["synonyms"]           = "מילים נרדפות"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["examples"]           = "דוגמאות"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["see-also"]           = "ראה גם"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["family"]             = "Afro-Asiatic"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["iso"]                = "heb"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["glotto"]             = "hebr1245"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["script"]             = "Hebr"
							 | 
						|||
| 
								 | 
							
								Locale["he"]["rtl"]                = "true"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["name"]               = "Hindi"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["endonym"]            = "हिन्दी"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["translations-of"]    = "%s के अनुवाद"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["definitions-of"]     = "%s की परिभाषाएं"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["synonyms"]           = "समानार्थी"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["examples"]           = "उदाहरण"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["see-also"]           = "यह भी देखें"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["iso"]                = "hin"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["glotto"]             = "hind1269"
							 | 
						|||
| 
								 | 
							
								Locale["hi"]["script"]             = "Deva"
							 | 
						|||
| 
								 | 
							
								Locale["hmn"]["name"]              = "Hmong"
							 | 
						|||
| 
								 | 
							
								Locale["hmn"]["endonym"]           = "Hmoob"
							 | 
						|||
| 
								 | 
							
								Locale["hmn"]["translations-of"]   = "Lus txhais: %s"
							 | 
						|||
| 
								 | 
							
								Locale["hmn"]["family"]            = "Hmong-Mien"
							 | 
						|||
| 
								 | 
							
								Locale["hmn"]["iso"]               = "hmn"
							 | 
						|||
| 
								 | 
							
								Locale["hmn"]["glotto"]            = "firs1234"
							 | 
						|||
| 
								 | 
							
								Locale["hmn"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["name"]               = "Hungarian"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["endonym"]            = "Magyar"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["translations-of"]    = "%s fordításai"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["definitions-of"]     = "%s jelentései"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["synonyms"]           = "Szinonimák"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["examples"]           = "Példák"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["see-also"]           = "Lásd még"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["family"]             = "Uralic"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["iso"]                = "hun"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["glotto"]             = "hung1274"
							 | 
						|||
| 
								 | 
							
								Locale["hu"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["name"]               = "Icelandic"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["endonym"]            = "Íslenska"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["translations-of"]    = "Þýðingar á %s"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["definitions-of"]     = "Skilgreiningar á"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["synonyms"]           = "Samheiti"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["examples"]           = "Dæmi"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["see-also"]           = "Sjá einnig"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["iso"]                = "isl"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["glotto"]             = "icel1247"
							 | 
						|||
| 
								 | 
							
								Locale["is"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["name"]               = "Igbo"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["endonym"]            = "Igbo"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["translations-of"]    = "Ntụgharị asụsụ nke %s"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["definitions-of"]     = "Nkọwapụta nke %s"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["synonyms"]           = "Okwu oyiri"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["examples"]           = "Ọmụmaatụ"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["see-also"]           = "Hụkwuo"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["iso"]                = "ibo"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["glotto"]             = "nucl1417"
							 | 
						|||
| 
								 | 
							
								Locale["ig"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["name"]               = "Indonesian"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["endonym"]            = "Bahasa Indonesia"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["translations-of"]    = "Terjemahan dari %s"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["definitions-of"]     = "Definisi %s"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["synonyms"]           = "Sinonim"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["examples"]           = "Contoh"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["see-also"]           = "Lihat juga"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["family"]             = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["iso"]                = "ind"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["glotto"]             = "indo1316"
							 | 
						|||
| 
								 | 
							
								Locale["id"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["name"]               = "Irish"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["endonym"]            = "Gaeilge"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["translations-of"]    = "Aistriúcháin ar %s"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["definitions-of"]     = "Sainmhínithe ar %s"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["synonyms"]           = "Comhchiallaigh"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["examples"]           = "Samplaí"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["see-also"]           = "féach freisin"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["iso"]                = "gle"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["glotto"]             = "iris1253"
							 | 
						|||
| 
								 | 
							
								Locale["ga"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["name"]               = "Italian"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["endonym"]            = "Italiano"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["translations-of"]    = "Traduzioni di %s"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["definitions-of"]     = "Definizioni di %s"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["synonyms"]           = "Sinonimi"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["examples"]           = "Esempi"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["see-also"]           = "Vedi anche"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["iso"]                = "ita"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["glotto"]             = "ital1282"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["it"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["name"]               = "Japanese"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["endonym"]            = "日本語"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["translations-of"]    = "「%s」の翻訳"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["definitions-of"]     = "%s の定義"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["synonyms"]           = "同義語"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["examples"]           = "例"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["see-also"]           = "関連項目"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["family"]             = "Japonic"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["iso"]                = "jpn"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["glotto"]             = "nucl1643"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["script"]             = "Jpan"
							 | 
						|||
| 
								 | 
							
								Locale["ja"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["name"]               = "Javanese"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["endonym"]            = "Basa Jawa"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["translations-of"]    = "Terjemahan %s"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["definitions-of"]     = "Arti %s"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["synonyms"]           = "Sinonim"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["examples"]           = "Conto"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["see-also"]           = "Deleng uga"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["family"]             = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["iso"]                = "jav"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["glotto"]             = "java1254"
							 | 
						|||
| 
								 | 
							
								Locale["jv"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["name"]               = "Kannada"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["endonym"]            = "ಕನ್ನಡ"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["translations-of"]    = "%s ನ ಅನುವಾದಗಳು"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["definitions-of"]     = "%s ನ ವ್ಯಾಖ್ಯಾನಗಳು"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["synonyms"]           = "ಸಮಾನಾರ್ಥಕಗಳು"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["examples"]           = "ಉದಾಹರಣೆಗಳು"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["see-also"]           = "ಇದನ್ನೂ ಗಮನಿಸಿ"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["family"]             = "Dravidian"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["iso"]                = "kan"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["glotto"]             = "nucl1305"
							 | 
						|||
| 
								 | 
							
								Locale["kn"]["script"]             = "Knda"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["name"]               = "Kazakh"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["endonym"]            = "Қазақ тілі"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["translations-of"]    = "%s аудармалары"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["definitions-of"]     = "%s анықтамалары"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["synonyms"]           = "Синонимдер"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["examples"]           = "Мысалдар"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["see-also"]           = "Келесі тізімді де көріңіз:"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["family"]             = "Turkic"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["iso"]                = "kaz"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["glotto"]             = "kaza1248"
							 | 
						|||
| 
								 | 
							
								Locale["kk"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["name"]               = "Khmer"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["endonym"]            = "ភាសាខ្មែរ"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["translations-of"]    = "ការបកប្រែនៃ %s"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["definitions-of"]     = "និយមន័យនៃ %s"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["synonyms"]           = "សទិសន័យ"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["examples"]           = "ឧទាហរណ៍"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["see-also"]           = "មើលផងដែរ"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["family"]             = "Austroasiatic"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["iso"]                = "khm"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["glotto"]             = "cent1989"
							 | 
						|||
| 
								 | 
							
								Locale["km"]["script"]             = "Khmr"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["name"]               = "Korean"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["endonym"]            = "한국어"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["translations-of"]    = "%s의 번역"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["definitions-of"]     = "%s의 정의"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["synonyms"]           = "동의어"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["examples"]           = "예문"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["see-also"]           = "참조"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["family"]             = "Koreanic"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["iso"]                = "kor"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["glotto"]             = "kore1280"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["script"]             = "Kore"
							 | 
						|||
| 
								 | 
							
								Locale["ko"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["ku"]["name"]               = "Kurdish"
							 | 
						|||
| 
								 | 
							
								Locale["ku"]["endonym"]            = "Kurdî"
							 | 
						|||
| 
								 | 
							
								Locale["ku"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["ku"]["iso"]                = "kur"
							 | 
						|||
| 
								 | 
							
								Locale["ku"]["glotto"]             = "kurd1259"
							 | 
						|||
| 
								 | 
							
								Locale["ku"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["name"]               = "Kyrgyz"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["endonym"]            = "Кыргызча"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["translations-of"]    = "%s котормосу"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["definitions-of"]     = "%s аныктамасы"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["synonyms"]           = "Синонимдер"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["examples"]           = "Мисалдар"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["see-also"]           = "Дагы караңыз"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["family"]             = "Turkic"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["iso"]                = "kir"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["glotto"]             = "kirg1245"
							 | 
						|||
| 
								 | 
							
								Locale["ky"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["name"]               = "Lao"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["endonym"]            = "ລາວ"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["translations-of"]    = "ຄຳແປສຳລັບ %s"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["definitions-of"]     = "ຄວາມໝາຍຂອງ %s"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["synonyms"]           = "ຄຳທີ່ຄ້າຍກັນ %s"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["examples"]           = "ຕົວຢ່າງ"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["see-also"]           = "ເບິ່ງເພີ່ມເຕີມ"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["family"]             = "Tai-Kadai"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["iso"]                = "lao"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["glotto"]             = "laoo1244"
							 | 
						|||
| 
								 | 
							
								Locale["lo"]["script"]             = "Laoo"
							 | 
						|||
| 
								 | 
							
								Locale["la"]["name"]               = "Latin"
							 | 
						|||
| 
								 | 
							
								Locale["la"]["endonym"]            = "Latina"
							 | 
						|||
| 
								 | 
							
								Locale["la"]["translations-of"]    = "Versio de %s"
							 | 
						|||
| 
								 | 
							
								Locale["la"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["la"]["iso"]                = "lat"
							 | 
						|||
| 
								 | 
							
								Locale["la"]["glotto"]             = "lati1261"
							 | 
						|||
| 
								 | 
							
								Locale["la"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["name"]               = "Latvian"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["endonym"]            = "Latviešu"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["translations-of"]    = "%s tulkojumi"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["definitions-of"]     = "%s definīcijas"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["synonyms"]           = "Sinonīmi"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["examples"]           = "Piemēri"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["see-also"]           = "Skatiet arī"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["iso"]                = "lav"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["glotto"]             = "latv1249"
							 | 
						|||
| 
								 | 
							
								Locale["lv"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["name"]               = "Lithuanian"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["endonym"]            = "Lietuvių"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["translations-of"]    = "„%s“ vertimai"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["definitions-of"]     = "„%s“ apibrėžimai"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["synonyms"]           = "Sinonimai"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["examples"]           = "Pavyzdžiai"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["see-also"]           = "Taip pat žiūrėkite"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["iso"]                = "lit"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["glotto"]             = "lith1251"
							 | 
						|||
| 
								 | 
							
								Locale["lt"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["lb"]["name"]               = "Luxembourgish"
							 | 
						|||
| 
								 | 
							
								Locale["lb"]["endonym"]            = "Lëtzebuergesch"
							 | 
						|||
| 
								 | 
							
								Locale["lb"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["lb"]["iso"]                = "ltz"
							 | 
						|||
| 
								 | 
							
								Locale["lb"]["glotto"]             = "luxe1241"
							 | 
						|||
| 
								 | 
							
								Locale["lb"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["name"]               = "Macedonian"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["endonym"]            = "Македонски"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["translations-of"]    = "Преводи на %s"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["definitions-of"]     = "Дефиниции на %s"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["synonyms"]           = "Синоними"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["examples"]           = "Примери"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["see-also"]           = "Види и"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["iso"]                = "mkd"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["glotto"]             = "mace1250"
							 | 
						|||
| 
								 | 
							
								Locale["mk"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["name"]               = "Malagasy"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["endonym"]            = "Malagasy"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["translations-of"]    = "Dikan'ny %s"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["definitions-of"]     = "Famaritana ny %s"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["synonyms"]           = "Mitovy hevitra"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["examples"]           = "Ohatra"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["see-also"]           = "Jereo ihany koa"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["family"]             = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["iso"]                = "mlg"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["glotto"]             = "plat1254"
							 | 
						|||
| 
								 | 
							
								Locale["mg"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["name"]               = "Malay"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["endonym"]            = "Bahasa Melayu"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["translations-of"]    = "Terjemahan %s"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["definitions-of"]     = "Takrif %s"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["synonyms"]           = "Sinonim"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["examples"]           = "Contoh"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["see-also"]           = "Lihat juga"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["family"]             = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["iso"]                = "msa"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["glotto"]             = "stan1306"
							 | 
						|||
| 
								 | 
							
								Locale["ms"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["name"]               = "Malayalam"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["endonym"]            = "മലയാളം"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["translations-of"]    = "%s എന്നതിന്റെ വിവർത്തനങ്ങൾ"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["definitions-of"]     = "%s എന്നതിന്റെ നിർവ്വചനങ്ങൾ"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["synonyms"]           = "പര്യായങ്ങള്"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["examples"]           = "ഉദാഹരണങ്ങള്"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["see-also"]           = "ഇതും കാണുക"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["family"]             = "Dravidian"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["iso"]                = "mal"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["glotto"]             = "mala1464"
							 | 
						|||
| 
								 | 
							
								Locale["ml"]["script"]             = "Mlym"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["name"]               = "Maltese"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["endonym"]            = "Malti"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["translations-of"]    = "Traduzzjonijiet ta' %s"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["definitions-of"]     = "Definizzjonijiet ta' %s"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["synonyms"]           = "Sinonimi"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["examples"]           = "Eżempji"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["see-also"]           = "Ara wkoll"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["family"]             = "Afro-Asiatic"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["iso"]                = "mlt"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["glotto"]             = "malt1254"
							 | 
						|||
| 
								 | 
							
								Locale["mt"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["name"]               = "Maori"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["endonym"]            = "Māori"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["translations-of"]    = "Ngā whakamāoritanga o %s"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["definitions-of"]     = "Ngā whakamārama o %s"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["synonyms"]           = "Ngā Kupu Taurite"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["examples"]           = "Ngā Tauira:"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["see-also"]           = "Tiro hoki:"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["family"]             = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["iso"]                = "mri"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["glotto"]             = "maor1246"
							 | 
						|||
| 
								 | 
							
								Locale["mi"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["name"]               = "Marathi"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["endonym"]            = "मराठी"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["translations-of"]    = "%s ची भाषांतरे"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["definitions-of"]     = "%s च्या व्याख्या"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["synonyms"]           = "समानार्थी शब्द"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["examples"]           = "उदाहरणे"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["see-also"]           = "हे देखील पहा"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["iso"]                = "mar"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["glotto"]             = "mara1378"
							 | 
						|||
| 
								 | 
							
								Locale["mr"]["script"]             = "Deva"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["name"]               = "Mongolian"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["endonym"]            = "Монгол"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["translations-of"]    = "%s-н орчуулга"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["definitions-of"]     = "%s үгийн тодорхойлолт"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["synonyms"]           = "Ойролцоо утгатай"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["examples"]           = "Жишээнүүд"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["see-also"]           = "Мөн харах"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["family"]             = "Mongolic"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["iso"]                = "mon"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["glotto"]             = "mong1331"
							 | 
						|||
| 
								 | 
							
								Locale["mn"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["name"]               = "Myanmar"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["endonym"]            = "မြန်မာစာ"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["translations-of"]    = "%s၏ ဘာသာပြန်ဆိုချက်များ"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["definitions-of"]     = "%s၏ အနက်ဖွင့်ဆိုချက်များ"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["synonyms"]           = "ကြောင်းတူသံကွဲများ"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["examples"]           = "ဥပမာ"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["see-also"]           = "ဖော်ပြပါများကိုလဲ ကြည့်ပါ"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["family"]             = "Sino-Tibetan"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["iso"]                = "mya"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["glotto"]             = "nucl1310"
							 | 
						|||
| 
								 | 
							
								Locale["my"]["script"]             = "Mymr"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["name"]               = "Nepali"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["endonym"]            = "नेपाली"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["translations-of"]    = "%sका अनुवाद"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["definitions-of"]     = "%sको परिभाषा"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["synonyms"]           = "समानार्थीहरू"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["examples"]           = "उदाहरणहरु"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["see-also"]           = "यो पनि हेर्नुहोस्"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["iso"]                = "nep"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["glotto"]             = "nepa1254"
							 | 
						|||
| 
								 | 
							
								Locale["ne"]["script"]             = "Deva"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["name"]               = "Norwegian"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["endonym"]            = "Norsk"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["translations-of"]    = "Oversettelser av %s"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["definitions-of"]     = "Definisjoner av %s"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["synonyms"]           = "Synonymer"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["examples"]           = "Eksempler"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["see-also"]           = "Se også"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["iso"]                = "nor"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["glotto"]             = "norw1258"
							 | 
						|||
| 
								 | 
							
								Locale["no"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["name"]               = "Pashto"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["endonym"]            = "پښتو"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["translations-of"]    = "د %sژباړې"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["definitions-of"]     = "د%s تعریفونه"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["synonyms"]           = "مترادف لغتونه"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["examples"]           = "بېلګې"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["see-also"]           = "دا هم ووینئ"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["iso"]                = "pus"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["glotto"]             = "pash1269"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["script"]             = "Arab"
							 | 
						|||
| 
								 | 
							
								Locale["ps"]["rtl"]                = "true"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["name"]               = "Persian"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["endonym"]            = "فارسی"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["translations-of"]    = "ترجمههای %s"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["definitions-of"]     = "تعریفهای %s"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["synonyms"]           = "مترادفها"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["examples"]           = "مثالها"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["see-also"]           = "همچنین مراجعه کنید به"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["iso"]                = "fas"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["glotto"]             = "west2369"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["script"]             = "Arab"
							 | 
						|||
| 
								 | 
							
								Locale["fa"]["rtl"]                = "true"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["name"]               = "Polish"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["endonym"]            = "Polski"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["translations-of"]    = "Tłumaczenia %s"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["definitions-of"]     = "%s – definicje"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["synonyms"]           = "Synonimy"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["examples"]           = "Przykłady"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["see-also"]           = "Zobacz też"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["iso"]                = "pol"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["glotto"]             = "poli1260"
							 | 
						|||
| 
								 | 
							
								Locale["pl"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["name"]               = "Portuguese"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["endonym"]            = "Português"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["translations-of"]    = "Traduções de %s"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["definitions-of"]     = "Definições de %s"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["synonyms"]           = "Sinônimos"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["examples"]           = "Exemplos"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["see-also"]           = "Veja também"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["iso"]                = "por"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["glotto"]             = "port1283"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["pt"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["name"]               = "Punjabi"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["endonym"]            = "ਪੰਜਾਬੀ"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["translations-of"]    = "ਦੇ ਅਨੁਵਾਦ%s"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["definitions-of"]     = "ਦੀਆਂ ਪਰਿਭਾਸ਼ਾ %s"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["synonyms"]           = "ਸਮਾਨਾਰਥਕ ਸ਼ਬਦ"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["examples"]           = "ਉਦਾਹਰਣਾਂ"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["see-also"]           = "ਇਹ ਵੀ ਵੇਖੋ"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["iso"]                = "pan"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["glotto"]             = "panj1256"
							 | 
						|||
| 
								 | 
							
								Locale["pa"]["script"]             = "Guru"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["name"]               = "Romanian"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["endonym"]            = "Română"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["translations-of"]    = "Traduceri pentru %s"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["definitions-of"]     = "Definiții pentru %s"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["synonyms"]           = "Sinonime"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["examples"]           = "Exemple"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["see-also"]           = "Vedeți și"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["iso"]                = "ron"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["glotto"]             = "roma1327"
							 | 
						|||
| 
								 | 
							
								Locale["ro"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["name"]               = "Russian"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["endonym"]            = "Русский"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["translations-of"]    = "%s: варианты перевода"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["definitions-of"]     = "%s – определения"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["synonyms"]           = "Синонимы"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["examples"]           = "Примеры"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["see-also"]           = "Похожие слова"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["iso"]                = "rus"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["glotto"]             = "russ1263"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["ru"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["sm"]["name"]               = "Samoan"
							 | 
						|||
| 
								 | 
							
								Locale["sm"]["endonym"]            = "Gagana Sāmoa"
							 | 
						|||
| 
								 | 
							
								Locale["sm"]["family"]             = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["sm"]["iso"]                = "smo"
							 | 
						|||
| 
								 | 
							
								Locale["sm"]["glotto"]             = "samo1305"
							 | 
						|||
| 
								 | 
							
								Locale["sm"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["name"]               = "Scots Gaelic"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["endonym"]            = "Gàidhlig"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["translations-of"]    = "Eadar-theangachadh airson %s"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["definitions-of"]     = "Deifiniseanan airson %s"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["synonyms"]           = "Co-fhaclan"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["examples"]           = "Buill-eisimpleir"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["see-also"]           = "Faic na leanas cuideachd"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["iso"]                = "gla"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["glotto"]             = "scot1245"
							 | 
						|||
| 
								 | 
							
								Locale["gd"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["name"]          = "Serbian (Cyrillic)"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["endonym"]       = "српски"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["translations-of"] = "Преводи за „%s“"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["definitions-of"]  = "Дефиниције за %s"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["synonyms"]      = "Синоними"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["examples"]      = "Примери"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["see-also"]      = "Погледајте такође"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["family"]        = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["iso"]           = "srp-Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["glotto"]        = "serb1264"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Cyrl"]["script"]        = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["name"]          = "Serbian (Latin)"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["endonym"]       = "srpski"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["translations-of"] = "Prevodi za „%s“"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["definitions-of"]  = "Definicije za %s"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["synonyms"]      = "Sinonimi"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["examples"]      = "Primeri"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["see-also"]      = "Pogledajte takođe"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["family"]        = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["iso"]           = "srp-Latn"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["glotto"]        = "serb1264"
							 | 
						|||
| 
								 | 
							
								Locale["sr-Latn"]["script"]        = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["name"]               = "Sesotho"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["endonym"]            = "Sesotho"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["translations-of"]    = "Liphetolelo tsa %s"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["definitions-of"]     = "Meelelo ea %s"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["synonyms"]           = "Mantsoe a tšoanang ka moelelo"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["examples"]           = "Mehlala"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["see-also"]           = "Bona hape"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["iso"]                = "sot"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["glotto"]             = "sout2807"
							 | 
						|||
| 
								 | 
							
								Locale["st"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["name"]               = "Shona"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["endonym"]            = "chiShona"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["translations-of"]    = "Shanduro dze %s"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["definitions-of"]     = "Zvinoreva %s"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["synonyms"]           = "Mashoko anoreva zvakafana nemamwe"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["examples"]           = "Mienzaniso"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["see-also"]           = "Onawo"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["iso"]                = "sna"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["glotto"]             = "core1255"
							 | 
						|||
| 
								 | 
							
								Locale["sn"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["name"]               = "Sindhi"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["endonym"]            = "سنڌي"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["translations-of"]    = "%s جو ترجمو"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["definitions-of"]     = "%s جون وصفون"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["synonyms"]           = "هم معني"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["examples"]           = "مثالون"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["see-also"]           = "به ڏسو"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["iso"]                = "snd"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["glotto"]             = "sind1272"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["script"]             = "Arab"
							 | 
						|||
| 
								 | 
							
								Locale["sd"]["rtl"]                = "true"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["name"]               = "Sinhala"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["endonym"]            = "සිංහල"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["translations-of"]    = "%s හි පරිවර්තන"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["definitions-of"]     = "%s හි නිර්වචන"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["synonyms"]           = "සමානාර්ථ පද"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["examples"]           = "උදාහරණ"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["see-also"]           = "මෙයත් බලන්න"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["iso"]                = "sin"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["glotto"]             = "sinh1246"
							 | 
						|||
| 
								 | 
							
								Locale["si"]["script"]             = "Sinh"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["name"]               = "Slovak"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["endonym"]            = "Slovenčina"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["translations-of"]    = "Preklady výrazu: %s"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["definitions-of"]     = "Definície výrazu %s"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["synonyms"]           = "Synonymá"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["examples"]           = "Príklady"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["see-also"]           = "Pozrite tiež"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["iso"]                = "slk"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["glotto"]             = "slov1269"
							 | 
						|||
| 
								 | 
							
								Locale["sk"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["name"]               = "Slovenian"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["endonym"]            = "Slovenščina"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["translations-of"]    = "Prevodi za %s"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["definitions-of"]     = "Razlage za %s"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["synonyms"]           = "Sopomenke"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["examples"]           = "Primeri"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["see-also"]           = "Glejte tudi"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["iso"]                = "slv"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["glotto"]             = "slov1268"
							 | 
						|||
| 
								 | 
							
								Locale["sl"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["name"]               = "Somali"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["endonym"]            = "Soomaali"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["translations-of"]    = "Turjumaada %s"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["definitions-of"]     = "Qeexitaannada %s"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["synonyms"]           = "La micne ah"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["examples"]           = "Tusaalooyin"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["see-also"]           = "Sidoo kale eeg"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["family"]             = "Afro-Asiatic"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["iso"]                = "som"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["glotto"]             = "soma1255"
							 | 
						|||
| 
								 | 
							
								Locale["so"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["name"]               = "Spanish"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["endonym"]            = "Español"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["translations-of"]    = "Traducciones de %s"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["definitions-of"]     = "Definiciones de %s"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["synonyms"]           = "Sinónimos"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["examples"]           = "Ejemplos"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["see-also"]           = "Ver también"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["iso"]                = "spa"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["glotto"]             = "stan1288"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["es"]["dictionary"]         = "true"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["name"]               = "Sundanese"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["endonym"]            = "Basa Sunda"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["translations-of"]    = "Tarjamahan tina %s"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["definitions-of"]     = "Panjelasan tina %s"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["synonyms"]           = "Sinonim"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["examples"]           = "Conto"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["see-also"]           = "Tingali ogé"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["family"]             = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["iso"]                = "sun"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["glotto"]             = "sund1252"
							 | 
						|||
| 
								 | 
							
								Locale["su"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["name"]               = "Swahili"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["endonym"]            = "Kiswahili"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["translations-of"]    = "Tafsiri ya %s"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["definitions-of"]     = "Ufafanuzi wa %s"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["synonyms"]           = "Visawe"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["examples"]           = "Mifano"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["see-also"]           = "Angalia pia"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["iso"]                = "swa"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["glotto"]             = "swah1253"
							 | 
						|||
| 
								 | 
							
								Locale["sw"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["name"]               = "Swedish"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["endonym"]            = "Svenska"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["translations-of"]    = "Översättningar av %s"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["definitions-of"]     = "Definitioner av %s"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["synonyms"]           = "Synonymer"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["examples"]           = "Exempel"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["see-also"]           = "Se även"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["iso"]                = "swe"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["glotto"]             = "swed1254"
							 | 
						|||
| 
								 | 
							
								Locale["sv"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["name"]               = "Tajik"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["endonym"]            = "Тоҷикӣ"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["translations-of"]    = "Тарҷумаҳои %s"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["definitions-of"]     = "Таърифҳои %s"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["synonyms"]           = "Муродифҳо"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["examples"]           = "Намунаҳо:"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["see-also"]           = "Ҳамчунин Бинед"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["iso"]                = "tgk"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["glotto"]             = "taji1245"
							 | 
						|||
| 
								 | 
							
								Locale["tg"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["name"]               = "Tamil"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["endonym"]            = "தமிழ்"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["translations-of"]    = "%s இன் மொழிபெயர்ப்புகள்"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["definitions-of"]     = "%s இன் வரையறைகள்"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["synonyms"]           = "இணைச்சொற்கள்"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["examples"]           = "எடுத்துக்காட்டுகள்"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["see-also"]           = "இதையும் காண்க"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["family"]             = "Dravidian"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["iso"]                = "tam"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["glotto"]             = "tami1289"
							 | 
						|||
| 
								 | 
							
								Locale["ta"]["script"]             = "Taml"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["name"]               = "Telugu"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["endonym"]            = "తెలుగు"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["translations-of"]    = "%s యొక్క అనువాదాలు"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["definitions-of"]     = "%s యొక్క నిర్వచనాలు"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["synonyms"]           = "పర్యాయపదాలు"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["examples"]           = "ఉదాహరణలు"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["see-also"]           = "వీటిని కూడా చూడండి"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["family"]             = "Dravidian"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["iso"]                = "tel"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["glotto"]             = "telu1262"
							 | 
						|||
| 
								 | 
							
								Locale["te"]["script"]             = "Telu"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["name"]               = "Thai"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["endonym"]            = "ไทย"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["translations-of"]    = "คำแปลของ %s"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["definitions-of"]     = "คำจำกัดความของ %s"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["synonyms"]           = "คำพ้องความหมาย"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["examples"]           = "ตัวอย่าง"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["see-also"]           = "ดูเพิ่มเติม"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["family"]             = "Tai-Kadai"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["iso"]                = "tha"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["glotto"]             = "thai1261"
							 | 
						|||
| 
								 | 
							
								Locale["th"]["script"]             = "Thai"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["name"]               = "Turkish"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["endonym"]            = "Türkçe"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["translations-of"]    = "%s çevirileri"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["definitions-of"]     = "%s için tanımlar"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["synonyms"]           = "Eş anlamlılar"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["examples"]           = "Örnekler"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["see-also"]           = "Ayrıca bkz."
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["family"]             = "Turkic"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["iso"]                = "tur"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["glotto"]             = "nucl1301"
							 | 
						|||
| 
								 | 
							
								Locale["tr"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["name"]               = "Ukrainian"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["endonym"]            = "Українська"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["translations-of"]    = "Переклади слова або виразу \"%s\""
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["definitions-of"]     = "\"%s\" – визначення"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["synonyms"]           = "Синоніми"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["examples"]           = "Приклади"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["see-also"]           = "Дивіться також"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["iso"]                = "ukr"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["glotto"]             = "ukra1253"
							 | 
						|||
| 
								 | 
							
								Locale["uk"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["name"]               = "Urdu"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["endonym"]            = "اُردُو"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["translations-of"]    = "کے ترجمے %s"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["definitions-of"]     = "کی تعریفات %s"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["synonyms"]           = "مترادفات"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["examples"]           = "مثالیں"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["see-also"]           = "نیز دیکھیں"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["iso"]                = "urd"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["glotto"]             = "urdu1245"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["script"]             = "Arab"
							 | 
						|||
| 
								 | 
							
								Locale["ur"]["rtl"]                = "true"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["name"]               = "Uzbek"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["endonym"]            = "Oʻzbek tili"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["translations-of"]    = "%s: tarjima variantlari"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["definitions-of"]     = "%s – ta’riflar"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["synonyms"]           = "Sinonimlar"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["examples"]           = "Namunalar"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["see-also"]           = "O‘xshash so‘zlar"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["family"]             = "Turkic"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["iso"]                = "uzb"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["glotto"]             = "uzbe1247"
							 | 
						|||
| 
								 | 
							
								Locale["uz"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["name"]               = "Vietnamese"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["endonym"]            = "Tiếng Việt"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["translations-of"]    = "Bản dịch của %s"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["definitions-of"]     = "Nghĩa của %s"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["synonyms"]           = "Từ đồng nghĩa"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["examples"]           = "Ví dụ"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["see-also"]           = "Xem thêm"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["family"]             = "Austroasiatic"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["iso"]                = "vie"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["glotto"]             = "viet1252"
							 | 
						|||
| 
								 | 
							
								Locale["vi"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["name"]               = "Welsh"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["endonym"]            = "Cymraeg"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["translations-of"]    = "Cyfieithiadau %s"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["definitions-of"]     = "Diffiniadau %s"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["synonyms"]           = "Cyfystyron"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["examples"]           = "Enghreifftiau"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["see-also"]           = "Gweler hefyd"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["iso"]                = "cym"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["glotto"]             = "wels1247"
							 | 
						|||
| 
								 | 
							
								Locale["cy"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["name"]               = "Frisian"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["endonym"]            = "Frysk"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["translations-of"]    = "Oersettings fan %s"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["definitions-of"]     = "Definysjes fan %s"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["synonyms"]           = "Synonimen"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["examples"]           = "Foarbylden"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["see-also"]           = "Sjoch ek"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["iso"]                = "fry"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["glotto"]             = "west2354"
							 | 
						|||
| 
								 | 
							
								Locale["fy"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["name"]               = "Xhosa"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["endonym"]            = "isiXhosa"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["translations-of"]    = "Iinguqulelo zika-%s"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["definitions-of"]     = "Iingcaciso zika-%s"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["synonyms"]           = "Izithethantonye"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["examples"]           = "Imizekelo"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["see-also"]           = "Kwakhona bona"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["iso"]                = "xho"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["glotto"]             = "xhos1239"
							 | 
						|||
| 
								 | 
							
								Locale["xh"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["name"]               = "Yiddish"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["endonym"]            = "ייִדיש"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["translations-of"]    = "איבערזעצונגען פון %s"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["definitions-of"]     = "דפיניציונען %s"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["synonyms"]           = "סינאָנימען"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["examples"]           = "ביישפילע"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["see-also"]           = "זייען אויך"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["iso"]                = "yid"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["glotto"]             = "yidd1255"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["script"]             = "Hebr"
							 | 
						|||
| 
								 | 
							
								Locale["yi"]["rtl"]                = "true"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["name"]               = "Yoruba"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["endonym"]            = "Yorùbá"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["translations-of"]    = "Awọn itumọ ti %s"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["definitions-of"]     = "Awọn itumọ ti %s"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["synonyms"]           = "Awọn ọrọ onitumọ"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["examples"]           = "Awọn apẹrẹ"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["see-also"]           = "Tun wo"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["iso"]                = "yor"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["glotto"]             = "yoru1245"
							 | 
						|||
| 
								 | 
							
								Locale["yo"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["name"]               = "Zulu"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["endonym"]            = "isiZulu"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["translations-of"]    = "Ukuhumusha i-%s"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["definitions-of"]     = "Izincazelo ze-%s"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["synonyms"]           = "Amagama afanayo"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["examples"]           = "Izibonelo"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["see-also"]           = "Bheka futhi"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["iso"]                = "zul"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["glotto"]             = "zulu1248"
							 | 
						|||
| 
								 | 
							
								Locale["zu"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["yue"]["support"]           = "bing-only"
							 | 
						|||
| 
								 | 
							
								Locale["yue"]["name"]              = "Cantonese"
							 | 
						|||
| 
								 | 
							
								Locale["yue"]["endonym"]           = "粵語"
							 | 
						|||
| 
								 | 
							
								Locale["yue"]["family"]            = "Sino-Tibetan"
							 | 
						|||
| 
								 | 
							
								Locale["yue"]["iso"]               = "yue"
							 | 
						|||
| 
								 | 
							
								Locale["yue"]["glotto"]            = "cant1236"
							 | 
						|||
| 
								 | 
							
								Locale["yue"]["script"]            = "Hant"
							 | 
						|||
| 
								 | 
							
								Locale["fj"]["support"]           = "bing-only"
							 | 
						|||
| 
								 | 
							
								Locale["fj"]["name"]              = "Fijian"
							 | 
						|||
| 
								 | 
							
								Locale["fj"]["endonym"]           = "Vosa Vakaviti"
							 | 
						|||
| 
								 | 
							
								Locale["fj"]["family"]            = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["fj"]["iso"]               = "fij"
							 | 
						|||
| 
								 | 
							
								Locale["fj"]["glotto"]            = "fiji1243"
							 | 
						|||
| 
								 | 
							
								Locale["fj"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["mww"]["support"]           = "bing-only"
							 | 
						|||
| 
								 | 
							
								Locale["mww"]["name"]              = "Hmong Daw"
							 | 
						|||
| 
								 | 
							
								Locale["mww"]["endonym"]           = "Hmoob Daw"
							 | 
						|||
| 
								 | 
							
								Locale["mww"]["family"]            = "Hmong-Mien"
							 | 
						|||
| 
								 | 
							
								Locale["mww"]["iso"]               = "mww"
							 | 
						|||
| 
								 | 
							
								Locale["mww"]["glotto"]            = "hmon1333"
							 | 
						|||
| 
								 | 
							
								Locale["mww"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["otq"]["support"]           = "bing-only"
							 | 
						|||
| 
								 | 
							
								Locale["otq"]["name"]              = "Querétaro Otomi"
							 | 
						|||
| 
								 | 
							
								Locale["otq"]["endonym"]           = "Hñąñho"
							 | 
						|||
| 
								 | 
							
								Locale["otq"]["family"]            = "Oto-Manguean"
							 | 
						|||
| 
								 | 
							
								Locale["otq"]["iso"]               = "otq"
							 | 
						|||
| 
								 | 
							
								Locale["otq"]["glotto"]            = "quer1236"
							 | 
						|||
| 
								 | 
							
								Locale["otq"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ty"]["support"]           = "bing-only"
							 | 
						|||
| 
								 | 
							
								Locale["ty"]["name"]              = "Tahitian"
							 | 
						|||
| 
								 | 
							
								Locale["ty"]["endonym"]           = "Reo Tahiti"
							 | 
						|||
| 
								 | 
							
								Locale["ty"]["family"]            = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["ty"]["iso"]               = "tah"
							 | 
						|||
| 
								 | 
							
								Locale["ty"]["glotto"]            = "tahi1242"
							 | 
						|||
| 
								 | 
							
								Locale["ty"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["to"]["support"]           = "bing-only"
							 | 
						|||
| 
								 | 
							
								Locale["to"]["name"]              = "Tongan"
							 | 
						|||
| 
								 | 
							
								Locale["to"]["endonym"]           = "Lea faka-Tonga"
							 | 
						|||
| 
								 | 
							
								Locale["to"]["family"]            = "Austronesian"
							 | 
						|||
| 
								 | 
							
								Locale["to"]["iso"]               = "ton"
							 | 
						|||
| 
								 | 
							
								Locale["to"]["glotto"]            = "tong1325"
							 | 
						|||
| 
								 | 
							
								Locale["to"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["yua"]["support"]           = "bing-only"
							 | 
						|||
| 
								 | 
							
								Locale["yua"]["name"]              = "Yucatec Maya"
							 | 
						|||
| 
								 | 
							
								Locale["yua"]["endonym"]           = "Màaya T'àan"
							 | 
						|||
| 
								 | 
							
								Locale["yua"]["family"]            = "Mayan"
							 | 
						|||
| 
								 | 
							
								Locale["yua"]["iso"]               = "yua"
							 | 
						|||
| 
								 | 
							
								Locale["yua"]["glotto"]            = "yuca1254"
							 | 
						|||
| 
								 | 
							
								Locale["yua"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["tlh"]["support"]           = "bing-only"
							 | 
						|||
| 
								 | 
							
								Locale["tlh"]["name"]              = "Klingon"
							 | 
						|||
| 
								 | 
							
								Locale["tlh"]["endonym"]           = "tlhIngan Hol"
							 | 
						|||
| 
								 | 
							
								Locale["tlh"]["family"]            = "Artificial Language"
							 | 
						|||
| 
								 | 
							
								Locale["tlh"]["iso"]               = "tlh"
							 | 
						|||
| 
								 | 
							
								Locale["tlh"]["script"]            = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["tlh-Qaak"]["support"]      = "bing-only"
							 | 
						|||
| 
								 | 
							
								Locale["tlh-Qaak"]["name"]         = "Klingon (pIqaD)"
							 | 
						|||
| 
								 | 
							
								Locale["tlh-Qaak"]["endonym"]      = " "
							 | 
						|||
| 
								 | 
							
								Locale["tlh-Qaak"]["family"]       = "Artificial Language"
							 | 
						|||
| 
								 | 
							
								Locale["tlh-Qaak"]["iso"]          = "tlh"
							 | 
						|||
| 
								 | 
							
								Locale["tlh-Qaak"]["script"]       = "Piqd"
							 | 
						|||
| 
								 | 
							
								Locale["as"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["as"]["name"]               = "Assamese"
							 | 
						|||
| 
								 | 
							
								Locale["as"]["endonym"]            = "অসমীয়া"
							 | 
						|||
| 
								 | 
							
								Locale["as"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["as"]["iso"]                = "asm"
							 | 
						|||
| 
								 | 
							
								Locale["as"]["glotto"]             = "assa1263"
							 | 
						|||
| 
								 | 
							
								Locale["as"]["script"]             = "Beng"
							 | 
						|||
| 
								 | 
							
								Locale["ba"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["ba"]["name"]               = "Bashkir"
							 | 
						|||
| 
								 | 
							
								Locale["ba"]["endonym"]            = "башҡорт теле"
							 | 
						|||
| 
								 | 
							
								Locale["ba"]["family"]             = "Turkic"
							 | 
						|||
| 
								 | 
							
								Locale["ba"]["iso"]                = "bak"
							 | 
						|||
| 
								 | 
							
								Locale["ba"]["glotto"]             = "bash1264"
							 | 
						|||
| 
								 | 
							
								Locale["ba"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["br"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["br"]["name"]               = "Breton"
							 | 
						|||
| 
								 | 
							
								Locale["br"]["endonym"]            = "Brezhoneg"
							 | 
						|||
| 
								 | 
							
								Locale["br"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["br"]["iso"]                = "bre"
							 | 
						|||
| 
								 | 
							
								Locale["br"]["glotto"]             = "bret1244"
							 | 
						|||
| 
								 | 
							
								Locale["br"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["dz"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["dz"]["name"]               = "Dzongkha"
							 | 
						|||
| 
								 | 
							
								Locale["dz"]["endonym"]            = "རྫོང་ཁ"
							 | 
						|||
| 
								 | 
							
								Locale["dz"]["family"]             = "Sino-Tibetan"
							 | 
						|||
| 
								 | 
							
								Locale["dz"]["iso"]                = "dzo"
							 | 
						|||
| 
								 | 
							
								Locale["dz"]["glotto"]             = "nucl1307"
							 | 
						|||
| 
								 | 
							
								Locale["dz"]["script"]             = "Tibt"
							 | 
						|||
| 
								 | 
							
								Locale["fo"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["fo"]["name"]               = "Faroese"
							 | 
						|||
| 
								 | 
							
								Locale["fo"]["endonym"]            = "Føroyskt"
							 | 
						|||
| 
								 | 
							
								Locale["fo"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["fo"]["iso"]                = "fao"
							 | 
						|||
| 
								 | 
							
								Locale["fo"]["glotto"]             = "faro1244"
							 | 
						|||
| 
								 | 
							
								Locale["fo"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["gn"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["gn"]["name"]               = "Guarani"
							 | 
						|||
| 
								 | 
							
								Locale["gn"]["endonym"]            = "Avañe'ẽ"
							 | 
						|||
| 
								 | 
							
								Locale["gn"]["family"]             = "Tupian"
							 | 
						|||
| 
								 | 
							
								Locale["gn"]["iso"]                = "grn"
							 | 
						|||
| 
								 | 
							
								Locale["gn"]["glotto"]             = "para1311"
							 | 
						|||
| 
								 | 
							
								Locale["gn"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ie"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["ie"]["name"]               = "Interlingue"
							 | 
						|||
| 
								 | 
							
								Locale["ie"]["endonym"]            = "Interlingue"
							 | 
						|||
| 
								 | 
							
								Locale["ie"]["family"]             = "Artificial Language"
							 | 
						|||
| 
								 | 
							
								Locale["ie"]["iso"]                = "ile"
							 | 
						|||
| 
								 | 
							
								Locale["ie"]["glotto"]             = "occi1241"
							 | 
						|||
| 
								 | 
							
								Locale["ie"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["rw"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["rw"]["name"]               = "Kinyarwanda"
							 | 
						|||
| 
								 | 
							
								Locale["rw"]["endonym"]            = "Ikinyarwanda"
							 | 
						|||
| 
								 | 
							
								Locale["rw"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["rw"]["iso"]                = "kin"
							 | 
						|||
| 
								 | 
							
								Locale["rw"]["glotto"]             = "kiny1244"
							 | 
						|||
| 
								 | 
							
								Locale["rw"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["oc"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["oc"]["name"]               = "Occitan"
							 | 
						|||
| 
								 | 
							
								Locale["oc"]["endonym"]            = "Occitan"
							 | 
						|||
| 
								 | 
							
								Locale["oc"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["oc"]["iso"]                = "oci"
							 | 
						|||
| 
								 | 
							
								Locale["oc"]["glotto"]             = "occi1239"
							 | 
						|||
| 
								 | 
							
								Locale["oc"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["om"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["om"]["name"]               = "Oromo"
							 | 
						|||
| 
								 | 
							
								Locale["om"]["endonym"]            = "Afaan Oromoo"
							 | 
						|||
| 
								 | 
							
								Locale["om"]["family"]             = "Afro-Asiatic"
							 | 
						|||
| 
								 | 
							
								Locale["om"]["iso"]                = "orm"
							 | 
						|||
| 
								 | 
							
								Locale["om"]["glotto"]             = "nucl1736"
							 | 
						|||
| 
								 | 
							
								Locale["om"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["or"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["or"]["name"]               = "Oriya"
							 | 
						|||
| 
								 | 
							
								Locale["or"]["endonym"]            = "ଓଡ଼ିଆ"
							 | 
						|||
| 
								 | 
							
								Locale["or"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["or"]["iso"]                = "ori"
							 | 
						|||
| 
								 | 
							
								Locale["or"]["glotto"]             = "macr1269"
							 | 
						|||
| 
								 | 
							
								Locale["or"]["script"]             = "Orya"
							 | 
						|||
| 
								 | 
							
								Locale["rm"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["rm"]["name"]               = "Romansh"
							 | 
						|||
| 
								 | 
							
								Locale["rm"]["endonym"]            = "Rumantsch"
							 | 
						|||
| 
								 | 
							
								Locale["rm"]["family"]             = "Indo-European"
							 | 
						|||
| 
								 | 
							
								Locale["rm"]["iso"]                = "roh"
							 | 
						|||
| 
								 | 
							
								Locale["rm"]["glotto"]             = "roma1326"
							 | 
						|||
| 
								 | 
							
								Locale["rm"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["ti"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["ti"]["name"]               = "Tigrinya"
							 | 
						|||
| 
								 | 
							
								Locale["ti"]["endonym"]            = "ትግርኛ"
							 | 
						|||
| 
								 | 
							
								Locale["ti"]["family"]             = "Afro-Asiatic"
							 | 
						|||
| 
								 | 
							
								Locale["ti"]["iso"]                = "tir"
							 | 
						|||
| 
								 | 
							
								Locale["ti"]["glotto"]             = "tigr1271"
							 | 
						|||
| 
								 | 
							
								Locale["ti"]["script"]             = "Ethi"
							 | 
						|||
| 
								 | 
							
								Locale["bo"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["bo"]["name"]               = "Tibetan"
							 | 
						|||
| 
								 | 
							
								Locale["bo"]["endonym"]            = "བོད་ཡིག"
							 | 
						|||
| 
								 | 
							
								Locale["bo"]["family"]             = "Sino-Tibetan"
							 | 
						|||
| 
								 | 
							
								Locale["bo"]["iso"]                = "bod"
							 | 
						|||
| 
								 | 
							
								Locale["bo"]["glotto"]             = "tibe1272"
							 | 
						|||
| 
								 | 
							
								Locale["bo"]["script"]             = "Tibt"
							 | 
						|||
| 
								 | 
							
								Locale["tk"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["tk"]["name"]               = "Turkmen"
							 | 
						|||
| 
								 | 
							
								Locale["tk"]["endonym"]            = "Türkmen"
							 | 
						|||
| 
								 | 
							
								Locale["tk"]["family"]             = "Turkic"
							 | 
						|||
| 
								 | 
							
								Locale["tk"]["iso"]                = "tuk"
							 | 
						|||
| 
								 | 
							
								Locale["tk"]["glotto"]             = "turk1304"
							 | 
						|||
| 
								 | 
							
								Locale["tk"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["tt"]["support"]            = "yandex-only"
							 | 
						|||
| 
								 | 
							
								Locale["tt"]["name"]               = "Tatar"
							 | 
						|||
| 
								 | 
							
								Locale["tt"]["endonym"]            = "татарча"
							 | 
						|||
| 
								 | 
							
								Locale["tt"]["family"]             = "Turkic"
							 | 
						|||
| 
								 | 
							
								Locale["tt"]["iso"]                = "tat"
							 | 
						|||
| 
								 | 
							
								Locale["tt"]["glotto"]             = "tata1255"
							 | 
						|||
| 
								 | 
							
								Locale["tt"]["script"]             = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["udm"]["support"]           = "yandex-only"
							 | 
						|||
| 
								 | 
							
								Locale["udm"]["name"]              = "Udmurt"
							 | 
						|||
| 
								 | 
							
								Locale["udm"]["endonym"]           = "удмурт"
							 | 
						|||
| 
								 | 
							
								Locale["udm"]["family"]            = "Uralic"
							 | 
						|||
| 
								 | 
							
								Locale["udm"]["iso"]               = "udm"
							 | 
						|||
| 
								 | 
							
								Locale["udm"]["glotto"]            = "udmu1245"
							 | 
						|||
| 
								 | 
							
								Locale["udm"]["script"]            = "Cyrl"
							 | 
						|||
| 
								 | 
							
								Locale["ug"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["ug"]["name"]               = "Uyghur"
							 | 
						|||
| 
								 | 
							
								Locale["ug"]["endonym"]            = "ئۇيغۇر تىلى"
							 | 
						|||
| 
								 | 
							
								Locale["ug"]["family"]             = "Turkic"
							 | 
						|||
| 
								 | 
							
								Locale["ug"]["iso"]                = "uig"
							 | 
						|||
| 
								 | 
							
								Locale["ug"]["glotto"]             = "uigh1240"
							 | 
						|||
| 
								 | 
							
								Locale["ug"]["script"]             = "Arab"
							 | 
						|||
| 
								 | 
							
								Locale["ug"]["rtl"]                = "true"
							 | 
						|||
| 
								 | 
							
								Locale["vo"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["vo"]["name"]               = "Volapük"
							 | 
						|||
| 
								 | 
							
								Locale["vo"]["endonym"]            = "Volapük"
							 | 
						|||
| 
								 | 
							
								Locale["vo"]["family"]             = "Artificial Language"
							 | 
						|||
| 
								 | 
							
								Locale["vo"]["iso"]                = "vol"
							 | 
						|||
| 
								 | 
							
								Locale["vo"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["wo"]["support"]            = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["wo"]["name"]               = "Wolof"
							 | 
						|||
| 
								 | 
							
								Locale["wo"]["endonym"]            = "Wollof"
							 | 
						|||
| 
								 | 
							
								Locale["wo"]["family"]             = "Atlantic-Congo"
							 | 
						|||
| 
								 | 
							
								Locale["wo"]["iso"]                = "wol"
							 | 
						|||
| 
								 | 
							
								Locale["wo"]["glotto"]             = "wolo1247"
							 | 
						|||
| 
								 | 
							
								Locale["wo"]["script"]             = "Latn"
							 | 
						|||
| 
								 | 
							
								Locale["chr"]["support"]           = "unstable"
							 | 
						|||
| 
								 | 
							
								Locale["chr"]["name"]              = "Cherokee"
							 | 
						|||
| 
								 | 
							
								Locale["chr"]["endonym"]           = "ᏣᎳᎩ"
							 | 
						|||
| 
								 | 
							
								Locale["chr"]["family"]            = "Iroquoian"
							 | 
						|||
| 
								 | 
							
								Locale["chr"]["iso"]               = "chr"
							 | 
						|||
| 
								 | 
							
								Locale["chr"]["glotto"]            = "cher1273"
							 | 
						|||
| 
								 | 
							
								Locale["chr"]["script"]            = "Cher"
							 | 
						|||
| 
								 | 
							
								for (i in Locale) {
							 | 
						|||
| 
								 | 
							
								Locale[i]["display"] = show(Locale[i]["endonym"], i)
							 | 
						|||
| 
								 | 
							
								LocaleAlias[Locale[i]["iso"]] = i
							 | 
						|||
| 
								 | 
							
								LocaleAlias[tolower(Locale[i]["name"])] = i
							 | 
						|||
| 
								 | 
							
								LocaleAlias[tolower(Locale[i]["endonym"])] = i
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								LocaleAlias["in"] = "id"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["iw"] = "he"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["ji"] = "yi"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["jw"] = "jv"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["mo"] = "ro"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["nb"] = "no"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["nn"] = "no"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["sh"]      = "sr-Cyrl"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["sr"]      = "sr-Cyrl"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["srp"]     = "sr-Cyrl"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["serbian"] = "sr-Cyrl"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["zh"]      = "zh-CN"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["zh-CHS"]  = "zh-CN"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["zh-CHT"]  = "zh-TW"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["zho"]     = "zh-CN"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["chinese"] = "zh-CN"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["tlh-Latn"] = "tlh"
							 | 
						|||
| 
								 | 
							
								LocaleAlias["tlh-Piqd"] = "tlh-Qaak"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getCode(code,    group) {
							 | 
						|||
| 
								 | 
							
								if (code == "auto" || code in Locale)
							 | 
						|||
| 
								 | 
							
								return code
							 | 
						|||
| 
								 | 
							
								else if (code in LocaleAlias)
							 | 
						|||
| 
								 | 
							
								return LocaleAlias[code]
							 | 
						|||
| 
								 | 
							
								else if (tolower(code) in LocaleAlias)
							 | 
						|||
| 
								 | 
							
								return LocaleAlias[tolower(code)]
							 | 
						|||
| 
								 | 
							
								match(code, /^([[:alpha:]][[:alpha:]][[:alpha:]]?)-(.*)$/, group)
							 | 
						|||
| 
								 | 
							
								if (group[1])
							 | 
						|||
| 
								 | 
							
								return group[1]
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getName(code) {
							 | 
						|||
| 
								 | 
							
								return Locale[getCode(code)]["name"]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getEndonym(code) {
							 | 
						|||
| 
								 | 
							
								return Locale[getCode(code)]["endonym"]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getDisplay(code) {
							 | 
						|||
| 
								 | 
							
								return Locale[getCode(code)]["display"]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function showTranslationsOf(code, text,    fmt) {
							 | 
						|||
| 
								 | 
							
								fmt = Locale[getCode(code)]["translations-of"]
							 | 
						|||
| 
								 | 
							
								if (!fmt) fmt = Locale["en"]["translations-of"]
							 | 
						|||
| 
								 | 
							
								return sprintf(fmt, text)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function showDefinitionsOf(code, text,    fmt) {
							 | 
						|||
| 
								 | 
							
								fmt = Locale[getCode(code)]["definitions-of"]
							 | 
						|||
| 
								 | 
							
								if (!fmt) fmt = Locale["en"]["definitions-of"]
							 | 
						|||
| 
								 | 
							
								return sprintf(fmt, text)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function showSynonyms(code,    tmp) {
							 | 
						|||
| 
								 | 
							
								tmp = Locale[getCode(code)]["synonyms"]
							 | 
						|||
| 
								 | 
							
								if (!tmp) tmp = Locale["en"]["synonyms"]
							 | 
						|||
| 
								 | 
							
								return tmp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function showExamples(code,    tmp) {
							 | 
						|||
| 
								 | 
							
								tmp = Locale[getCode(code)]["examples"]
							 | 
						|||
| 
								 | 
							
								if (!tmp) tmp = Locale["en"]["examples"]
							 | 
						|||
| 
								 | 
							
								return tmp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function showSeeAlso(code,    tmp) {
							 | 
						|||
| 
								 | 
							
								tmp = Locale[getCode(code)]["see-also"]
							 | 
						|||
| 
								 | 
							
								if (!tmp) tmp = Locale["en"]["see-also"]
							 | 
						|||
| 
								 | 
							
								return tmp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getFamily(code) {
							 | 
						|||
| 
								 | 
							
								return Locale[getCode(code)]["family"]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getISO(code) {
							 | 
						|||
| 
								 | 
							
								return Locale[getCode(code)]["iso"]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getGlotto(code) {
							 | 
						|||
| 
								 | 
							
								return Locale[getCode(code)]["glotto"]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getScript(code) {
							 | 
						|||
| 
								 | 
							
								return Locale[getCode(code)]["script"]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function isRTL(code) {
							 | 
						|||
| 
								 | 
							
								return Locale[getCode(code)]["rtl"] ? 1 : 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function hasDictionary(code) {
							 | 
						|||
| 
								 | 
							
								return Locale[getCode(code)]["dictionary"] ? 1 : 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function compName(i1, v1, i2, v2) {
							 | 
						|||
| 
								 | 
							
								if (getName(i1) < getName(i2))
							 | 
						|||
| 
								 | 
							
								return -1
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								return (getName(i1) != getName(i2))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function scriptName(code) {
							 | 
						|||
| 
								 | 
							
								switch (code) {
							 | 
						|||
| 
								 | 
							
								case "Arab": return "Arabic"
							 | 
						|||
| 
								 | 
							
								case "Armn": return "Armenian"
							 | 
						|||
| 
								 | 
							
								case "Beng": return "Bengali"
							 | 
						|||
| 
								 | 
							
								case "Cher": return "Cherokee"
							 | 
						|||
| 
								 | 
							
								case "Cyrl": return "Cyrillic"
							 | 
						|||
| 
								 | 
							
								case "Deva": return "Devanagari"
							 | 
						|||
| 
								 | 
							
								case "Ethi": return "Ethiopic (Geʻez)"
							 | 
						|||
| 
								 | 
							
								case "Geor": return "Georgian (Mkhedruli)"
							 | 
						|||
| 
								 | 
							
								case "Grek": return "Greek"
							 | 
						|||
| 
								 | 
							
								case "Gujr": return "Gujarati"
							 | 
						|||
| 
								 | 
							
								case "Guru": return "Gurmukhi"
							 | 
						|||
| 
								 | 
							
								case "Hani": return "Han"
							 | 
						|||
| 
								 | 
							
								case "Hans": return "Han (Simplified)"
							 | 
						|||
| 
								 | 
							
								case "Hant": return "Han (Traditional)"
							 | 
						|||
| 
								 | 
							
								case "Hebr": return "Hebrew"
							 | 
						|||
| 
								 | 
							
								case "Jpan": return "Japanese (Han + Hiragana + Katakana)"
							 | 
						|||
| 
								 | 
							
								case "Khmr": return "Khmer"
							 | 
						|||
| 
								 | 
							
								case "Knda": return "Kannada"
							 | 
						|||
| 
								 | 
							
								case "Kore": return "Korean (Hangul + Han)"
							 | 
						|||
| 
								 | 
							
								case "Laoo": return "Lao"
							 | 
						|||
| 
								 | 
							
								case "Latn": return "Latin"
							 | 
						|||
| 
								 | 
							
								case "Mlym": return "Malayalam"
							 | 
						|||
| 
								 | 
							
								case "Mymr": return "Myanmar"
							 | 
						|||
| 
								 | 
							
								case "Orya": return "Oriya"
							 | 
						|||
| 
								 | 
							
								case "Piqd": return "Klingon (pIqaD)"
							 | 
						|||
| 
								 | 
							
								case "Sinh": return "Sinhala"
							 | 
						|||
| 
								 | 
							
								case "Taml": return "Tamil"
							 | 
						|||
| 
								 | 
							
								case "Telu": return "Telugu"
							 | 
						|||
| 
								 | 
							
								case "Thai": return "Thai"
							 | 
						|||
| 
								 | 
							
								case "Tibt": return "Tibetan"
							 | 
						|||
| 
								 | 
							
								default: return "Unknown"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getDetails(code,    group, iso, language, script) {
							 | 
						|||
| 
								 | 
							
								if (code == "auto" || !getCode(code)) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Language not found: " code "\n"\
							 | 
						|||
| 
								 | 
							
								"        Run '-reference / -R' to see a list of available languages.")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								script = scriptName(getScript(code))
							 | 
						|||
| 
								 | 
							
								if (isRTL(code)) script = script " (R-to-L)"
							 | 
						|||
| 
								 | 
							
								split(getISO(code), group, "-")
							 | 
						|||
| 
								 | 
							
								iso = group[1]
							 | 
						|||
| 
								 | 
							
								split(getName(code), group, " ")
							 | 
						|||
| 
								 | 
							
								language = length(group) == 1 ? group[1] "_language" :
							 | 
						|||
| 
								 | 
							
								group[2] ~ /^\(.*\)$/ ? group[1] "_language" : join(group, "_")
							 | 
						|||
| 
								 | 
							
								return ansi("bold", sprintf("%s\n", getDisplay(code)))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "Name", ansi("bold", getName(code)))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "Family", ansi("bold", getFamily(code)))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "Writing system", ansi("bold", script))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "Code", ansi("bold", getCode(code)))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "ISO 639-3", ansi("bold", iso))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "SIL", ansi("bold", "http://www-01.sil.org/iso639-3/documentation.asp?id=" iso))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "Glottolog", getGlotto(code) ?
							 | 
						|||
| 
								 | 
							
								ansi("bold", "http://glottolog.org/resource/languoid/id/" getGlotto(code)) : "")\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s", "Wikipedia", ansi("bold", "http://en.wikipedia.org/wiki/" language))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function showPhonetics(phonetics, code) {
							 | 
						|||
| 
								 | 
							
								if (code && getCode(code) == "en")
							 | 
						|||
| 
								 | 
							
								return "/" phonetics "/"
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								return "(" phonetics ")"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function show(text, code,    temp) {
							 | 
						|||
| 
								 | 
							
								if (!code || isRTL(code)) {
							 | 
						|||
| 
								 | 
							
								if (Cache[text][0])
							 | 
						|||
| 
								 | 
							
								return Cache[text][0]
							 | 
						|||
| 
								 | 
							
								else {
							 | 
						|||
| 
								 | 
							
								if ((FriBidi || (code && isRTL(code))) && BiDiNoPad)
							 | 
						|||
| 
								 | 
							
								("echo " parameterize(text) PIPE BiDiNoPad) | getline temp
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								temp = text
							 | 
						|||
| 
								 | 
							
								return Cache[text][0] = temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								return text
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function s(text, code, width,    temp) {
							 | 
						|||
| 
								 | 
							
								if (!code || isRTL(code)) {
							 | 
						|||
| 
								 | 
							
								if (!width) width = Option["width"]
							 | 
						|||
| 
								 | 
							
								if (Cache[text][width])
							 | 
						|||
| 
								 | 
							
								return Cache[text][width]
							 | 
						|||
| 
								 | 
							
								else {
							 | 
						|||
| 
								 | 
							
								if ((FriBidi || (code && isRTL(code))) && BiDi)
							 | 
						|||
| 
								 | 
							
								("echo " parameterize(text) PIPE sprintf(BiDi, width)) | getline temp
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								temp = text
							 | 
						|||
| 
								 | 
							
								return Cache[text][width] = temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								return text
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function ins(level, text, code, width,    i, temp) {
							 | 
						|||
| 
								 | 
							
								if (code && isRTL(code)) {
							 | 
						|||
| 
								 | 
							
								if (!width) width = Option["width"]
							 | 
						|||
| 
								 | 
							
								return s(text, code, width - Option["indent"] * level)
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								return replicate(" ", Option["indent"] * level) text
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function parseLang(lang,    code, group) {
							 | 
						|||
| 
								 | 
							
								match(lang, /^([a-z][a-z][a-z]?)(_|$)/, group)
							 | 
						|||
| 
								 | 
							
								code = getCode(group[1])
							 | 
						|||
| 
								 | 
							
								if (lang ~ /^zh_(CN|SG)/) code = "zh-CN"
							 | 
						|||
| 
								 | 
							
								else if (lang ~ /^zh_(TW|HK)/) code = "zh-TW"
							 | 
						|||
| 
								 | 
							
								if (!code) code = "en"
							 | 
						|||
| 
								 | 
							
								return code
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initUserLang(    lang, utf) {
							 | 
						|||
| 
								 | 
							
								if (lang = ENVIRON["LANGUAGE"]) {
							 | 
						|||
| 
								 | 
							
								if (!UserLocale) UserLocale = lang
							 | 
						|||
| 
								 | 
							
								utf = utf || tolower(lang) ~ /utf-?8$/
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (lang = ENVIRON["LC_ALL"]) {
							 | 
						|||
| 
								 | 
							
								if (!UserLocale) UserLocale = lang
							 | 
						|||
| 
								 | 
							
								utf = utf || tolower(lang) ~ /utf-?8$/
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (lang = ENVIRON["LANG"]) {
							 | 
						|||
| 
								 | 
							
								if (!UserLocale) UserLocale = lang
							 | 
						|||
| 
								 | 
							
								utf = utf || tolower(lang) ~ /utf-?8$/
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!UserLocale) {
							 | 
						|||
| 
								 | 
							
								UserLocale = "en_US.UTF-8"
							 | 
						|||
| 
								 | 
							
								utf = 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!utf)
							 | 
						|||
| 
								 | 
							
								w("[WARNING] Your locale codeset (" UserLocale ") is not UTF-8.")
							 | 
						|||
| 
								 | 
							
								UserLang = parseLang(UserLocale)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getVersion(    build, gitHead, platform) {
							 | 
						|||
| 
								 | 
							
								initAudioPlayer()
							 | 
						|||
| 
								 | 
							
								initPager()
							 | 
						|||
| 
								 | 
							
								platform = detectProgram("uname", "-s", 1)
							 | 
						|||
| 
								 | 
							
								if (ENVIRON["TRANS_BUILD"])
							 | 
						|||
| 
								 | 
							
								build = "-" ENVIRON["TRANS_BUILD"]
							 | 
						|||
| 
								 | 
							
								else {
							 | 
						|||
| 
								 | 
							
								gitHead = getGitHead()
							 | 
						|||
| 
								 | 
							
								build = gitHead ? "-git:" gitHead : ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return ansi("bold", sprintf("%-22s%s%s\n\n", Name, Version, build))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "platform", platform)\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "gawk (GNU Awk)", PROCINFO["version"])\
							 | 
						|||
| 
								 | 
							
								sprintf("%s\n", FriBidi ? FriBidi :
							 | 
						|||
| 
								 | 
							
								"fribidi (GNU FriBidi) [NOT INSTALLED]")\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "audio player", AudioPlayer ? AudioPlayer :
							 | 
						|||
| 
								 | 
							
								"[NOT INSTALLED]")\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "terminal pager", Pager ? Pager :
							 | 
						|||
| 
								 | 
							
								"[NOT INSTALLED]")\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "terminal type", ENVIRON["TERM"])\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s (%s)\n", "user locale", UserLocale, getName(UserLang))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "home language", Option["hl"])\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "source language", Option["sl"])\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "target language", join(Option["tl"], "+"))\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "translation engine", Option["engine"])\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "proxy", Option["proxy"] ? Option["proxy"] :
							 | 
						|||
| 
								 | 
							
								"[NONE]")\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "user-agent", Option["user-agent"] ? Option["user-agent"] :
							 | 
						|||
| 
								 | 
							
								"[NONE]")\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "theme", Option["theme"])\
							 | 
						|||
| 
								 | 
							
								sprintf("%-22s%s\n", "init file", InitScript ? InitScript : "[NONE]")\
							 | 
						|||
| 
								 | 
							
								sprintf("\n%-22s%s", "Report bugs to:", "https://github.com/soimort/translate-shell/issues")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getHelp() {
							 | 
						|||
| 
								 | 
							
								return "Usage:  " ansi("bold", Command)\
							 | 
						|||
| 
								 | 
							
								" [" ansi("underline", "OPTIONS") "]"\
							 | 
						|||
| 
								 | 
							
								" [" ansi("underline", "SOURCE") "]"\
							 | 
						|||
| 
								 | 
							
								":[" ansi("underline", "TARGETS") "]"\
							 | 
						|||
| 
								 | 
							
								" [" ansi("underline", "TEXT") "]..." RS\
							 | 
						|||
| 
								 | 
							
								RS "Information options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-V") ", " ansi("bold", "-version")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Print version and exit.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-H") ", " ansi("bold", "-help")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Print help message and exit.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-M") ", " ansi("bold", "-man")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show man page and exit.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-T") ", " ansi("bold", "-reference")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Print reference table of languages and exit.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-R") ", " ansi("bold", "-reference-english")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Print reference table of languages (in English names) and exit.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-L ") ansi("underline", "CODES")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-list ") ansi("underline", "CODES")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Print details of languages and exit.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-S") ", " ansi("bold", "-list-engines")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "List available translation engines and exit.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-U") ", " ansi("bold", "-upgrade")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Check for upgrade of this program.") RS\
							 | 
						|||
| 
								 | 
							
								RS "Translator options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-e ") ansi("underline", "ENGINE")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-engine ") ansi("underline", "ENGINE")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the translation engine to use.") RS\
							 | 
						|||
| 
								 | 
							
								RS "Display options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-verbose")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Verbose mode. (default)") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-b") ", " ansi("bold", "-brief")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Brief mode.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-d") ", " ansi("bold", "-dictionary")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Dictionary mode.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-identify")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Language identification.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-show-original ") ansi("underline", "Y/n")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show original text or not.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-show-original-phonetics ") ansi("underline", "Y/n")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show phonetic notation of original text or not.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-show-translation ") ansi("underline", "Y/n")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show translation or not.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-show-translation-phonetics ") ansi("underline", "Y/n")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show phonetic notation of translation or not.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-show-prompt-message ") ansi("underline", "Y/n")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show prompt message or not.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-show-languages ") ansi("underline", "Y/n")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show source and target languages or not.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-show-original-dictionary ") ansi("underline", "y/N")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show dictionary entry of original text or not.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-show-dictionary ") ansi("underline", "Y/n")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show dictionary entry of translation or not.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-show-alternatives ") ansi("underline", "Y/n")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Show alternative translations or not.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-w ") ansi("underline", "NUM")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-width ") ansi("underline", "NUM")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the screen width for padding.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-indent ") ansi("underline", "NUM")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the size of indent (number of spaces).") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-theme ") ansi("underline", "FILENAME")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the theme to use.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-theme")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not use any other theme than default.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-ansi")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not use ANSI escape codes.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-autocorrect")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not autocorrect. (if defaulted by the translation engine)") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-bidi")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not convert bidirectional texts.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-warn")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not write warning messages to stderr.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-dump")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Print raw API response instead.") RS\
							 | 
						|||
| 
								 | 
							
								RS "Audio options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-p, -play")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Listen to the translation.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-speak")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Listen to the original text.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-n ") ansi("underline", "VOICE")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-narrator ") ansi("underline", "VOICE")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the narrator, and listen to the translation.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-player ") ansi("underline", "PROGRAM")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the audio player to use, and listen to the translation.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-play")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not listen to the translation.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-translate")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not translate anything when using -speak.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-download-audio")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Download the audio to the current directory.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-download-audio-as ") ansi("underline", "FILENAME")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Download the audio to the specified file.") RS\
							 | 
						|||
| 
								 | 
							
								RS "Terminal paging and browsing options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-v") ", " ansi("bold", "-view")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "View the translation in a terminal pager.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-pager ") ansi("underline", "PROGRAM")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the terminal pager to use, and view the translation.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-view")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not view the translation in a terminal pager.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-browser ") ansi("underline", "PROGRAM")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the web browser to use.") RS\
							 | 
						|||
| 
								 | 
							
								RS "Networking options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-x ") ansi("underline", "HOST:PORT")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-proxy ") ansi("underline", "HOST:PORT")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Use HTTP proxy on given port.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-u ") ansi("underline", "STRING")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-user-agent ") ansi("underline", "STRING")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the User-Agent to identify as.") RS\
							 | 
						|||
| 
								 | 
							
								RS "Interactive shell options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-I") ", " ansi("bold", "-interactive") ", " ansi("bold", "-shell")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Start an interactive shell.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-E") ", " ansi("bold", "-emacs")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Start the GNU Emacs front-end for an interactive shell.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-rlwrap")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not invoke rlwrap when starting an interactive shell.") RS\
							 | 
						|||
| 
								 | 
							
								RS "I/O options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-i ") ansi("underline", "FILENAME")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-input ") ansi("underline", "FILENAME")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the input file.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-o ") ansi("underline", "FILENAME")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-output ") ansi("underline", "FILENAME")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the output file.") RS\
							 | 
						|||
| 
								 | 
							
								RS "Language preference options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-l ") ansi("underline", "CODE")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-hl ") ansi("underline", "CODE")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-lang ") ansi("underline", "CODE")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify your home language.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-s ") ansi("underline", "CODE")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-sl ") ansi("underline", "CODE")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-source ") ansi("underline", "CODE")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-from ") ansi("underline", "CODE")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the source language.") RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-t ") ansi("underline", "CODES")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-tl ") ansi("underline", "CODE")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-target ") ansi("underline", "CODES")\
							 | 
						|||
| 
								 | 
							
								", " ansi("bold", "-to ") ansi("underline", "CODES")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Specify the target language(s), joined by '+'.") RS\
							 | 
						|||
| 
								 | 
							
								RS "Other options:" RS\
							 | 
						|||
| 
								 | 
							
								ins(1, ansi("bold", "-no-init")) RS\
							 | 
						|||
| 
								 | 
							
								ins(2, "Do not load any initialization script.") RS\
							 | 
						|||
| 
								 | 
							
								RS "See the man page " Command "(1) for more information."
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function showMan(    temp) {
							 | 
						|||
| 
								 | 
							
								if (ENVIRON["TRANS_MANPAGE"]) {
							 | 
						|||
| 
								 | 
							
								initPager()
							 | 
						|||
| 
								 | 
							
								Groff = detectProgram("groff", "--version")
							 | 
						|||
| 
								 | 
							
								if (Pager && Groff) {
							 | 
						|||
| 
								 | 
							
								temp = "echo -E \"${TRANS_MANPAGE}\""
							 | 
						|||
| 
								 | 
							
								temp = temp PIPE\
							 | 
						|||
| 
								 | 
							
								Groff " -Wall -mtty-char -mandoc -Tutf8 "\
							 | 
						|||
| 
								 | 
							
								"-rLL=" Option["width"] "n -rLT=" Option["width"] "n"
							 | 
						|||
| 
								 | 
							
								switch (Pager) {
							 | 
						|||
| 
								 | 
							
								case "less":
							 | 
						|||
| 
								 | 
							
								temp = temp PIPE\
							 | 
						|||
| 
								 | 
							
								Pager " -s -P\"\\ \\Manual page " Command "(1) line %lt (press h for help or q to quit)\""
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case "most":
							 | 
						|||
| 
								 | 
							
								temp = temp PIPE Pager " -Cs"
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								default:
							 | 
						|||
| 
								 | 
							
								temp = temp PIPE Pager
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								system(temp)
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (fileExists("man/" Command ".1"))
							 | 
						|||
| 
								 | 
							
								system("man man/" Command ".1" SUPERR)
							 | 
						|||
| 
								 | 
							
								else if (system("man " Command SUPERR))
							 | 
						|||
| 
								 | 
							
								print getHelp()
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getReference(displayName,
							 | 
						|||
| 
								 | 
							
								code, col, cols, i, j, name, num, r, rows, saveSortedIn,
							 | 
						|||
| 
								 | 
							
								t1, t2) {
							 | 
						|||
| 
								 | 
							
								num = 0
							 | 
						|||
| 
								 | 
							
								for (code in Locale)
							 | 
						|||
| 
								 | 
							
								if (Locale[code]["support"] != "unstable")
							 | 
						|||
| 
								 | 
							
								num++
							 | 
						|||
| 
								 | 
							
								rows = int(num / 3) + (num % 3 ? 1 : 0)
							 | 
						|||
| 
								 | 
							
								cols[0][0] = cols[1][0] = cols[2][0] = NULLSTR
							 | 
						|||
| 
								 | 
							
								i = 0
							 | 
						|||
| 
								 | 
							
								saveSortedIn = PROCINFO["sorted_in"]
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = displayName == "endonym" ? "@ind_num_asc" :
							 | 
						|||
| 
								 | 
							
								"compName"
							 | 
						|||
| 
								 | 
							
								for (code in Locale) {
							 | 
						|||
| 
								 | 
							
								if (Locale[code]["support"] != "unstable") {
							 | 
						|||
| 
								 | 
							
								col = int(i / rows)
							 | 
						|||
| 
								 | 
							
								append(cols[col], code)
							 | 
						|||
| 
								 | 
							
								i++
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = saveSortedIn
							 | 
						|||
| 
								 | 
							
								if (displayName == "endonym") {
							 | 
						|||
| 
								 | 
							
								r = "┌" replicate("─", 23) "┬" replicate("─", 23) "┬" replicate("─", 23) "┐" RS
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < rows; i++) {
							 | 
						|||
| 
								 | 
							
								r = r "│"
							 | 
						|||
| 
								 | 
							
								for (j = 0; j < 3; j++) {
							 | 
						|||
| 
								 | 
							
								if (cols[j][i]) {
							 | 
						|||
| 
								 | 
							
								t1 = getDisplay(cols[j][i])
							 | 
						|||
| 
								 | 
							
								switch (cols[j][i]) {
							 | 
						|||
| 
								 | 
							
								case "he":
							 | 
						|||
| 
								 | 
							
								t1 = sprintf(" %-18s", t1)
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case "ur":
							 | 
						|||
| 
								 | 
							
								t1 = sprintf(" %-17s", t1)
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case "hi": case "gu": case "km": case "kn":
							 | 
						|||
| 
								 | 
							
								case "my": case "ne": case "pa": case "si":
							 | 
						|||
| 
								 | 
							
								case "ta": case "te": case "yi":
							 | 
						|||
| 
								 | 
							
								t1 = sprintf(" %-16s", t1)
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case "yue":
							 | 
						|||
| 
								 | 
							
								t1 = sprintf(" %-13s", t1)
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case "ja": case "ko":
							 | 
						|||
| 
								 | 
							
								t1 = sprintf(" %-12s", t1)
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case "zh-CN": case "zh-TW":
							 | 
						|||
| 
								 | 
							
								t1 = sprintf(" %-11s", t1)
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								default:
							 | 
						|||
| 
								 | 
							
								if (length(t1) <= 15)
							 | 
						|||
| 
								 | 
							
								t1 = sprintf(" %-15s", t1)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								switch (length(cols[j][i])) {
							 | 
						|||
| 
								 | 
							
								case 1: case 2: case 3: case 4:
							 | 
						|||
| 
								 | 
							
								t2 = sprintf("- %s │", ansi("bold", sprintf("%4s", cols[j][i])))
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case 5:
							 | 
						|||
| 
								 | 
							
								t2 = sprintf("- %s│", ansi("bold", cols[j][i]))
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case 6:
							 | 
						|||
| 
								 | 
							
								t2 = sprintf("-%s│", ansi("bold", cols[j][i]))
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case 7:
							 | 
						|||
| 
								 | 
							
								t2 = sprintf("-%s", ansi("bold", cols[j][i]))
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								default:
							 | 
						|||
| 
								 | 
							
								t2 = ansi("bold", cols[j][i])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								r = r t1 t2
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								r = r sprintf("%23s│", NULLSTR)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								r = r RS
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								r = r "└" replicate("─", 23) "┴" replicate("─", 23) "┴" replicate("─", 23) "┘"
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								r = "┌" replicate("─", 23) "┬" replicate("─", 23) "┬" replicate("─", 23) "┐" RS
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < rows; i++) {
							 | 
						|||
| 
								 | 
							
								r = r "│"
							 | 
						|||
| 
								 | 
							
								for (j = 0; j < 3; j++) {
							 | 
						|||
| 
								 | 
							
								if (cols[j][i]) {
							 | 
						|||
| 
								 | 
							
								t1 = getName(cols[j][i])
							 | 
						|||
| 
								 | 
							
								if (length(t1) > 15)
							 | 
						|||
| 
								 | 
							
								t1 = substr(t1, 1, 12) "..."
							 | 
						|||
| 
								 | 
							
								t1 = sprintf(" %-15s", t1)
							 | 
						|||
| 
								 | 
							
								switch (length(cols[j][i])) {
							 | 
						|||
| 
								 | 
							
								case 1: case 2: case 3: case 4:
							 | 
						|||
| 
								 | 
							
								t2 = sprintf("- %s │", ansi("bold", sprintf("%4s", cols[j][i])))
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case 5:
							 | 
						|||
| 
								 | 
							
								t2 = sprintf("- %s│", ansi("bold", cols[j][i]))
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case 6:
							 | 
						|||
| 
								 | 
							
								t2 = sprintf("-%s│", ansi("bold", cols[j][i]))
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								case 7:
							 | 
						|||
| 
								 | 
							
								t2 = sprintf("-%s", ansi("bold", cols[j][i]))
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								default:
							 | 
						|||
| 
								 | 
							
								t2 = ansi("bold", cols[j][i])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								r = r t1 t2
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								r = r sprintf("%23s│", NULLSTR)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								r = r RS
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								r = r "└" replicate("─", 23) "┴" replicate("─", 23) "┴" replicate("─", 23) "┘"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getList(codes,    code, i, r, saveSortedIn) {
							 | 
						|||
| 
								 | 
							
								r = NULLSTR
							 | 
						|||
| 
								 | 
							
								if (!isarray(codes))
							 | 
						|||
| 
								 | 
							
								r = getDetails(codes)
							 | 
						|||
| 
								 | 
							
								else if (anything(codes)) {
							 | 
						|||
| 
								 | 
							
								saveSortedIn = PROCINFO["sorted_in"]
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = "@ind_num_asc"
							 | 
						|||
| 
								 | 
							
								for (i in codes)
							 | 
						|||
| 
								 | 
							
								r = (r ? r RS prettify("target-seperator", replicate(Option["chr-target-seperator"], Option["width"])) RS\
							 | 
						|||
| 
								 | 
							
								: r) getDetails(codes[i])
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = saveSortedIn
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								r = getDetails(Option["hl"])
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function tokenize(returnTokens, string,
							 | 
						|||
| 
								 | 
							
								delimiters,
							 | 
						|||
| 
								 | 
							
								newlines,
							 | 
						|||
| 
								 | 
							
								quotes,
							 | 
						|||
| 
								 | 
							
								escapeChars,
							 | 
						|||
| 
								 | 
							
								leftBlockComments,
							 | 
						|||
| 
								 | 
							
								rightBlockComments,
							 | 
						|||
| 
								 | 
							
								lineComments,
							 | 
						|||
| 
								 | 
							
								reservedOperators,
							 | 
						|||
| 
								 | 
							
								reservedPatterns,
							 | 
						|||
| 
								 | 
							
								blockCommenting,
							 | 
						|||
| 
								 | 
							
								c,
							 | 
						|||
| 
								 | 
							
								currentToken,
							 | 
						|||
| 
								 | 
							
								escaping,
							 | 
						|||
| 
								 | 
							
								i,
							 | 
						|||
| 
								 | 
							
								lineCommenting,
							 | 
						|||
| 
								 | 
							
								p,
							 | 
						|||
| 
								 | 
							
								quoting,
							 | 
						|||
| 
								 | 
							
								r,
							 | 
						|||
| 
								 | 
							
								s,
							 | 
						|||
| 
								 | 
							
								tempGroup,
							 | 
						|||
| 
								 | 
							
								tempPattern,
							 | 
						|||
| 
								 | 
							
								tempString) {
							 | 
						|||
| 
								 | 
							
								if (!delimiters[0]) {
							 | 
						|||
| 
								 | 
							
								delimiters[0] = " "
							 | 
						|||
| 
								 | 
							
								delimiters[1] = "\t"
							 | 
						|||
| 
								 | 
							
								delimiters[2] = "\v"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!newlines[0]) {
							 | 
						|||
| 
								 | 
							
								newlines[0] = "\n"
							 | 
						|||
| 
								 | 
							
								newlines[1] = "\r"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!quotes[0]) {
							 | 
						|||
| 
								 | 
							
								quotes[0] = "\""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!escapeChars[0]) {
							 | 
						|||
| 
								 | 
							
								escapeChars[0] = "\\"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!leftBlockComments[0]) {
							 | 
						|||
| 
								 | 
							
								leftBlockComments[0] = "#|"
							 | 
						|||
| 
								 | 
							
								leftBlockComments[1] = "/*"
							 | 
						|||
| 
								 | 
							
								leftBlockComments[2] = "(*"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!rightBlockComments[0]) {
							 | 
						|||
| 
								 | 
							
								rightBlockComments[0] = "|#"
							 | 
						|||
| 
								 | 
							
								rightBlockComments[1] = "*/"
							 | 
						|||
| 
								 | 
							
								rightBlockComments[2] = "*)"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!lineComments[0]) {
							 | 
						|||
| 
								 | 
							
								lineComments[0] = ";"
							 | 
						|||
| 
								 | 
							
								lineComments[1] = "//"
							 | 
						|||
| 
								 | 
							
								lineComments[2] = "#"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!reservedOperators[0]) {
							 | 
						|||
| 
								 | 
							
								reservedOperators[0] = "("
							 | 
						|||
| 
								 | 
							
								reservedOperators[1] = ")"
							 | 
						|||
| 
								 | 
							
								reservedOperators[2] = "["
							 | 
						|||
| 
								 | 
							
								reservedOperators[3] = "]"
							 | 
						|||
| 
								 | 
							
								reservedOperators[4] = "{"
							 | 
						|||
| 
								 | 
							
								reservedOperators[5] = "}"
							 | 
						|||
| 
								 | 
							
								reservedOperators[6] = ","
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!reservedPatterns[0]) {
							 | 
						|||
| 
								 | 
							
								reservedPatterns[0] = "[+-]?((0|[1-9][0-9]*)|[.][0-9]*|(0|[1-9][0-9]*)[.][0-9]*)([Ee][+-]?[0-9]+)?"
							 | 
						|||
| 
								 | 
							
								reservedPatterns[1] = "[+-]?0[0-7]+([.][0-7]*)?"
							 | 
						|||
| 
								 | 
							
								reservedPatterns[2] = "[+-]?0[Xx][0-9A-Fa-f]+([.][0-9A-Fa-f]*)?"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								split(string, s, "")
							 | 
						|||
| 
								 | 
							
								currentToken = ""
							 | 
						|||
| 
								 | 
							
								quoting = escaping = blockCommenting = lineCommenting = 0
							 | 
						|||
| 
								 | 
							
								p = 0
							 | 
						|||
| 
								 | 
							
								i = 1
							 | 
						|||
| 
								 | 
							
								while (i <= length(s)) {
							 | 
						|||
| 
								 | 
							
								c = s[i]
							 | 
						|||
| 
								 | 
							
								r = substr(string, i)
							 | 
						|||
| 
								 | 
							
								if (blockCommenting) {
							 | 
						|||
| 
								 | 
							
								if (tempString = startsWithAny(r, rightBlockComments))
							 | 
						|||
| 
								 | 
							
								blockCommenting = 0
							 | 
						|||
| 
								 | 
							
								i++
							 | 
						|||
| 
								 | 
							
								} else if (lineCommenting) {
							 | 
						|||
| 
								 | 
							
								if (belongsTo(c, newlines))
							 | 
						|||
| 
								 | 
							
								lineCommenting = 0
							 | 
						|||
| 
								 | 
							
								i++
							 | 
						|||
| 
								 | 
							
								} else if (quoting) {
							 | 
						|||
| 
								 | 
							
								currentToken = currentToken c
							 | 
						|||
| 
								 | 
							
								if (escaping) {
							 | 
						|||
| 
								 | 
							
								escaping = 0
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								if (belongsTo(c, quotes)) {
							 | 
						|||
| 
								 | 
							
								if (currentToken) {
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = currentToken
							 | 
						|||
| 
								 | 
							
								currentToken = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								quoting = 0
							 | 
						|||
| 
								 | 
							
								} else if (belongsTo(c, escapeChars)) {
							 | 
						|||
| 
								 | 
							
								escaping = 1
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								i++
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								if (belongsTo(c, delimiters) || belongsTo(c, newlines)) {
							 | 
						|||
| 
								 | 
							
								if (currentToken) {
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = currentToken
							 | 
						|||
| 
								 | 
							
								currentToken = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								i++
							 | 
						|||
| 
								 | 
							
								} else if (belongsTo(c, quotes)) {
							 | 
						|||
| 
								 | 
							
								if (currentToken) {
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = currentToken
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								currentToken = c
							 | 
						|||
| 
								 | 
							
								quoting = 1
							 | 
						|||
| 
								 | 
							
								i++
							 | 
						|||
| 
								 | 
							
								} else if (tempString = startsWithAny(r, leftBlockComments)) {
							 | 
						|||
| 
								 | 
							
								if (currentToken) {
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = currentToken
							 | 
						|||
| 
								 | 
							
								currentToken = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								blockCommenting = 1
							 | 
						|||
| 
								 | 
							
								i += length(tempString)
							 | 
						|||
| 
								 | 
							
								} else if (tempString = startsWithAny(r, lineComments)) {
							 | 
						|||
| 
								 | 
							
								if (currentToken) {
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = currentToken
							 | 
						|||
| 
								 | 
							
								currentToken = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								lineCommenting = 1
							 | 
						|||
| 
								 | 
							
								i += length(tempString)
							 | 
						|||
| 
								 | 
							
								} else if (tempString = startsWithAny(r, reservedOperators)) {
							 | 
						|||
| 
								 | 
							
								if (currentToken) {
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = currentToken
							 | 
						|||
| 
								 | 
							
								currentToken = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = tempString
							 | 
						|||
| 
								 | 
							
								i += length(tempString)
							 | 
						|||
| 
								 | 
							
								} else if (tempPattern = matchesAny(r, reservedPatterns)) {
							 | 
						|||
| 
								 | 
							
								if (currentToken) {
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = currentToken
							 | 
						|||
| 
								 | 
							
								currentToken = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(r, "^" tempPattern, tempGroup)
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = tempGroup[0]
							 | 
						|||
| 
								 | 
							
								i += length(tempGroup[0])
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								currentToken = currentToken c
							 | 
						|||
| 
								 | 
							
								i++
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (currentToken)
							 | 
						|||
| 
								 | 
							
								returnTokens[p++] = currentToken
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function parseJsonArray(returnAST, tokens,
							 | 
						|||
| 
								 | 
							
								leftBrackets,
							 | 
						|||
| 
								 | 
							
								rightBrackets,
							 | 
						|||
| 
								 | 
							
								separators,
							 | 
						|||
| 
								 | 
							
								i, j, key, p, stack, token) {
							 | 
						|||
| 
								 | 
							
								if (!leftBrackets[0]) {
							 | 
						|||
| 
								 | 
							
								leftBrackets[0] = "("
							 | 
						|||
| 
								 | 
							
								leftBrackets[1] = "["
							 | 
						|||
| 
								 | 
							
								leftBrackets[2] = "{"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!rightBrackets[0]) {
							 | 
						|||
| 
								 | 
							
								rightBrackets[0] = ")"
							 | 
						|||
| 
								 | 
							
								rightBrackets[1] = "]"
							 | 
						|||
| 
								 | 
							
								rightBrackets[2] = "}"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!separators[0]) {
							 | 
						|||
| 
								 | 
							
								separators[0] = ","
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								stack[p = 0] = 0
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < length(tokens); i++) {
							 | 
						|||
| 
								 | 
							
								token = tokens[i]
							 | 
						|||
| 
								 | 
							
								if (belongsTo(token, leftBrackets))
							 | 
						|||
| 
								 | 
							
								stack[++p] = 0
							 | 
						|||
| 
								 | 
							
								else if (belongsTo(token, rightBrackets))
							 | 
						|||
| 
								 | 
							
								--p
							 | 
						|||
| 
								 | 
							
								else if (belongsTo(token, separators))
							 | 
						|||
| 
								 | 
							
								stack[p]++
							 | 
						|||
| 
								 | 
							
								else {
							 | 
						|||
| 
								 | 
							
								key = stack[0]
							 | 
						|||
| 
								 | 
							
								for (j = 1; j <= p; j++)
							 | 
						|||
| 
								 | 
							
								key = key SUBSEP stack[j]
							 | 
						|||
| 
								 | 
							
								returnAST[key] = token
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function parseJson(returnAST, tokens,
							 | 
						|||
| 
								 | 
							
								arrayStartTokens, arrayEndTokens,
							 | 
						|||
| 
								 | 
							
								objectStartTokens, objectEndTokens,
							 | 
						|||
| 
								 | 
							
								commas, colons,
							 | 
						|||
| 
								 | 
							
								flag, i, j, key, name, p, stack, token) {
							 | 
						|||
| 
								 | 
							
								if (!arrayStartTokens[0])  arrayStartTokens[0]  = "["
							 | 
						|||
| 
								 | 
							
								if (!arrayEndTokens[0])    arrayEndTokens[0]    = "]"
							 | 
						|||
| 
								 | 
							
								if (!objectStartTokens[0]) objectStartTokens[0] = "{"
							 | 
						|||
| 
								 | 
							
								if (!objectEndTokens[0])   objectEndTokens[0]   = "}"
							 | 
						|||
| 
								 | 
							
								if (!commas[0])            commas[0]            = ","
							 | 
						|||
| 
								 | 
							
								if (!colons[0])            colons[0]            = ":"
							 | 
						|||
| 
								 | 
							
								stack[p = 0] = 0
							 | 
						|||
| 
								 | 
							
								flag = 0
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < length(tokens); i++) {
							 | 
						|||
| 
								 | 
							
								token = tokens[i]
							 | 
						|||
| 
								 | 
							
								if (belongsTo(token, arrayStartTokens)) {
							 | 
						|||
| 
								 | 
							
								stack[++p] = 0
							 | 
						|||
| 
								 | 
							
								} else if (belongsTo(token, objectStartTokens)) {
							 | 
						|||
| 
								 | 
							
								stack[++p] = NULLSTR
							 | 
						|||
| 
								 | 
							
								flag = 0
							 | 
						|||
| 
								 | 
							
								} else if (belongsTo(token, objectEndTokens) ||
							 | 
						|||
| 
								 | 
							
								belongsTo(token, arrayEndTokens)) {
							 | 
						|||
| 
								 | 
							
								--p
							 | 
						|||
| 
								 | 
							
								} else if (belongsTo(token, commas)) {
							 | 
						|||
| 
								 | 
							
								if (isnum(stack[p]))
							 | 
						|||
| 
								 | 
							
								stack[p]++
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								flag = 0
							 | 
						|||
| 
								 | 
							
								} else if (belongsTo(token, colons)) {
							 | 
						|||
| 
								 | 
							
								flag = 1
							 | 
						|||
| 
								 | 
							
								} else if (isnum(stack[p]) || flag) {
							 | 
						|||
| 
								 | 
							
								key = stack[0]
							 | 
						|||
| 
								 | 
							
								for (j = 1; j <= p; j++)
							 | 
						|||
| 
								 | 
							
								key = key SUBSEP stack[j]
							 | 
						|||
| 
								 | 
							
								returnAST[key] = token
							 | 
						|||
| 
								 | 
							
								flag = 0
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								stack[p] = unparameterize(token)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function parseList(returnAST, tokens,
							 | 
						|||
| 
								 | 
							
								leftBrackets,
							 | 
						|||
| 
								 | 
							
								rightBrackets,
							 | 
						|||
| 
								 | 
							
								separators,
							 | 
						|||
| 
								 | 
							
								i, j, key, p, stack, token) {
							 | 
						|||
| 
								 | 
							
								if (!leftBrackets[0]) {
							 | 
						|||
| 
								 | 
							
								leftBrackets[0] = "("
							 | 
						|||
| 
								 | 
							
								leftBrackets[1] = "["
							 | 
						|||
| 
								 | 
							
								leftBrackets[2] = "{"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!rightBrackets[0]) {
							 | 
						|||
| 
								 | 
							
								rightBrackets[0] = ")"
							 | 
						|||
| 
								 | 
							
								rightBrackets[1] = "]"
							 | 
						|||
| 
								 | 
							
								rightBrackets[2] = "}"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!separators[0]) {
							 | 
						|||
| 
								 | 
							
								separators[0] = ","
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								stack[p = 0] = 0
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < length(tokens); i++) {
							 | 
						|||
| 
								 | 
							
								token = tokens[i]
							 | 
						|||
| 
								 | 
							
								if (belongsTo(token, leftBrackets)) {
							 | 
						|||
| 
								 | 
							
								stack[++p] = 0
							 | 
						|||
| 
								 | 
							
								} else if (belongsTo(token, rightBrackets)) {
							 | 
						|||
| 
								 | 
							
								stack[--p]++
							 | 
						|||
| 
								 | 
							
								} else if (belongsTo(token, separators)) {
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								key = NULLSTR
							 | 
						|||
| 
								 | 
							
								if (p > 0) {
							 | 
						|||
| 
								 | 
							
								for (j = 0; j < p - 1; j++)
							 | 
						|||
| 
								 | 
							
								key = key SUBSEP stack[j]
							 | 
						|||
| 
								 | 
							
								returnAST[key][stack[p - 1]] = NULLSTR
							 | 
						|||
| 
								 | 
							
								key = key SUBSEP stack[p - 1]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								returnAST[key][stack[p]] = token
							 | 
						|||
| 
								 | 
							
								stack[p]++
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function prettify(name, string,    i, temp) {
							 | 
						|||
| 
								 | 
							
								temp = string
							 | 
						|||
| 
								 | 
							
								if ("sgr-" name in Option)
							 | 
						|||
| 
								 | 
							
								if (isarray(Option["sgr-" name]))
							 | 
						|||
| 
								 | 
							
								for (i in Option["sgr-" name])
							 | 
						|||
| 
								 | 
							
								temp = ansi(Option["sgr-" name][i], temp)
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								temp = ansi(Option["sgr-" name], temp)
							 | 
						|||
| 
								 | 
							
								return temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function randomColor(    i) {
							 | 
						|||
| 
								 | 
							
								i = int(5 * rand())
							 | 
						|||
| 
								 | 
							
								switch (i) {
							 | 
						|||
| 
								 | 
							
								case 0: return "green"
							 | 
						|||
| 
								 | 
							
								case 1: return "yellow"
							 | 
						|||
| 
								 | 
							
								case 2: return "blue"
							 | 
						|||
| 
								 | 
							
								case 3: return "magenta"
							 | 
						|||
| 
								 | 
							
								case 4: return "cyan"
							 | 
						|||
| 
								 | 
							
								default: return "default"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function setRandomTheme(    i, n, temp) {
							 | 
						|||
| 
								 | 
							
								srand(systime())
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < 3; i++) {
							 | 
						|||
| 
								 | 
							
								do temp = randomColor(); while (belongsTo(temp, n))
							 | 
						|||
| 
								 | 
							
								n[i] = temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								Option["sgr-prompt-message"] = Option["sgr-languages"] = n[0]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-word-class"][1] = n[0]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-word-class"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-synonyms"] = n[0]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-synonyms-word-class"][1] = n[0]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-synonyms-word-class"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-examples"] = n[0]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-see-also"] = n[0]
							 | 
						|||
| 
								 | 
							
								Option["sgr-dictionary-word-class"][1] = n[0]
							 | 
						|||
| 
								 | 
							
								Option["sgr-dictionary-word-class"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original"][1] = Option["sgr-original-phonetics"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original"][2] = Option["sgr-original-phonetics"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-prompt-message-original"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-prompt-message-original"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-languages-sl"] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-explanation"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-explanation"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-example"] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-synonyms"] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-synonyms-item"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-synonyms-item"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-synonyms-synonyms"] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-synonyms-synonyms-item"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-synonyms-synonyms-item"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-examples-example"] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-examples-original"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-examples-original"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-examples-original"][3] = "underline"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-see-also-phrases"] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-see-also-phrases-item"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-see-also-phrases-item"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-dictionary-explanation"] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-dictionary-explanation-item"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-dictionary-explanation-item"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-alternatives-original"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-alternatives-original"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-translation"][1] = Option["sgr-translation-phonetics"][1] = n[2]
							 | 
						|||
| 
								 | 
							
								Option["sgr-translation"][2] = Option["sgr-translation-phonetics"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-languages-tl"] = n[2]
							 | 
						|||
| 
								 | 
							
								Option["sgr-dictionary-word"][1] = n[2]
							 | 
						|||
| 
								 | 
							
								Option["sgr-dictionary-word"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-alternatives-translations"] = n[2]
							 | 
						|||
| 
								 | 
							
								Option["sgr-alternatives-translations-item"][1] = n[2]
							 | 
						|||
| 
								 | 
							
								Option["sgr-alternatives-translations-item"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-brief-translation"][1] = Option["sgr-brief-translation-phonetics"][1] = n[2]
							 | 
						|||
| 
								 | 
							
								Option["sgr-brief-translation"][2] = Option["sgr-brief-translation-phonetics"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["fmt-welcome-message"] = Name
							 | 
						|||
| 
								 | 
							
								Option["sgr-welcome-message"][1] = n[0]
							 | 
						|||
| 
								 | 
							
								Option["sgr-welcome-message"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["fmt-welcome-submessage"] = "(:q to quit)"
							 | 
						|||
| 
								 | 
							
								Option["sgr-welcome-submessage"] = n[0]
							 | 
						|||
| 
								 | 
							
								Option["fmt-prompt"] = "%s> "
							 | 
						|||
| 
								 | 
							
								Option["sgr-prompt"][1] = n[1]
							 | 
						|||
| 
								 | 
							
								Option["sgr-prompt"][2] = "bold"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function setDefaultTheme() {
							 | 
						|||
| 
								 | 
							
								Option["sgr-translation"] = Option["sgr-translation-phonetics"] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-prompt-message-original"] = "underline"
							 | 
						|||
| 
								 | 
							
								Option["sgr-languages-sl"] = "underline"
							 | 
						|||
| 
								 | 
							
								Option["sgr-languages-tl"] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-explanation"] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-detailed-synonyms-item"] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-synonyms-synonyms-item"] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-examples-original"][1] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-examples-original"][2] = "underline"
							 | 
						|||
| 
								 | 
							
								Option["sgr-original-dictionary-see-also-phrases-item"] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-dictionary-word"] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["sgr-alternatives-original"] = "underline"
							 | 
						|||
| 
								 | 
							
								Option["sgr-alternatives-translations-item"] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["fmt-welcome-message"] = Name
							 | 
						|||
| 
								 | 
							
								Option["sgr-welcome-message"] = "bold"
							 | 
						|||
| 
								 | 
							
								Option["fmt-welcome-submessage"] = "(:q to quit)"
							 | 
						|||
| 
								 | 
							
								Option["fmt-prompt"] = "%s> "
							 | 
						|||
| 
								 | 
							
								Option["sgr-prompt"] = "bold"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function setTheme(    file, line, script) {
							 | 
						|||
| 
								 | 
							
								if (Option["theme"] && Option["theme"] != "default"\
							 | 
						|||
| 
								 | 
							
								&& Option["theme"] != "none" && Option["theme"] != "random") {
							 | 
						|||
| 
								 | 
							
								file = Option["theme"]
							 | 
						|||
| 
								 | 
							
								if (!fileExists(file)) {
							 | 
						|||
| 
								 | 
							
								file = ENVIRON["HOME"] "/.translate-shell/" Option["theme"]
							 | 
						|||
| 
								 | 
							
								if (!fileExists(file)) {
							 | 
						|||
| 
								 | 
							
								file = ENVIRON["HOME"] "/.config/translate-shell/" Option["theme"]
							 | 
						|||
| 
								 | 
							
								if (!fileExists(file)) return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (file && fileExists(file)) {
							 | 
						|||
| 
								 | 
							
								script = NULLSTR
							 | 
						|||
| 
								 | 
							
								while (getline line < file)
							 | 
						|||
| 
								 | 
							
								script = script "\n" line
							 | 
						|||
| 
								 | 
							
								loadOptions(script)
							 | 
						|||
| 
								 | 
							
								} else if (Option["theme"] == "none")
							 | 
						|||
| 
								 | 
							
								;
							 | 
						|||
| 
								 | 
							
								else if (Option["theme"] == "random")
							 | 
						|||
| 
								 | 
							
								setRandomTheme()
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								setDefaultTheme()
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function provides(engineName) {
							 | 
						|||
| 
								 | 
							
								Translator[tolower(engineName)] = TRUE
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function engineMethod(methodName,    engine, translator) {
							 | 
						|||
| 
								 | 
							
								if (!Translator[Option["engine"]]) {
							 | 
						|||
| 
								 | 
							
								engine = tolower(Option["engine"])
							 | 
						|||
| 
								 | 
							
								if (!Translator[engine])
							 | 
						|||
| 
								 | 
							
								for (translator in Translator)
							 | 
						|||
| 
								 | 
							
								if (Translator[translator] &&
							 | 
						|||
| 
								 | 
							
								translator ~ "^"engine) {
							 | 
						|||
| 
								 | 
							
								engine = translator
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!Translator[engine]) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Translator not found: " Option["engine"] "\n"\
							 | 
						|||
| 
								 | 
							
								"        Run '-list-engines / -S' to see a list of available engines.")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								Option["engine"] = engine
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return Option["engine"] methodName
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initAudioPlayer() {
							 | 
						|||
| 
								 | 
							
								AudioPlayer = !system("mplayer" SUPOUT SUPERR) ?
							 | 
						|||
| 
								 | 
							
								"mplayer" :
							 | 
						|||
| 
								 | 
							
								(!system("mpv" SUPOUT SUPERR) ?
							 | 
						|||
| 
								 | 
							
								"mpv" :
							 | 
						|||
| 
								 | 
							
								(!system("mpg123 --version" SUPOUT SUPERR) ?
							 | 
						|||
| 
								 | 
							
								"mpg123" :
							 | 
						|||
| 
								 | 
							
								""))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initSpeechSynthesizer() {
							 | 
						|||
| 
								 | 
							
								SpeechSynthesizer = !system("say ''" SUPOUT SUPERR) ?
							 | 
						|||
| 
								 | 
							
								"say" :
							 | 
						|||
| 
								 | 
							
								(!system("espeak ''" SUPOUT SUPERR) ?
							 | 
						|||
| 
								 | 
							
								"espeak" :
							 | 
						|||
| 
								 | 
							
								"")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initPager() {
							 | 
						|||
| 
								 | 
							
								Pager = !system("less -V" SUPOUT SUPERR) ?
							 | 
						|||
| 
								 | 
							
								"less" :
							 | 
						|||
| 
								 | 
							
								(!system("more -V" SUPOUT SUPERR) ?
							 | 
						|||
| 
								 | 
							
								"more" :
							 | 
						|||
| 
								 | 
							
								(!system("most" SUPOUT SUPERR) ?
							 | 
						|||
| 
								 | 
							
								"most" :
							 | 
						|||
| 
								 | 
							
								""))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initHttpService() {
							 | 
						|||
| 
								 | 
							
								_Init()
							 | 
						|||
| 
								 | 
							
								if (Option["proxy"]) {
							 | 
						|||
| 
								 | 
							
								match(Option["proxy"], /^(http:\/*)?(([^:]+):([^@]+)@)?([^\/]*):([^\/:]*)/, HttpProxySpec)
							 | 
						|||
| 
								 | 
							
								HttpAuthUser = HttpProxySpec[3]
							 | 
						|||
| 
								 | 
							
								HttpAuthPass = HttpProxySpec[4]
							 | 
						|||
| 
								 | 
							
								HttpAuthCredentials = base64(unquote(HttpAuthUser) ":" HttpAuthPass)
							 | 
						|||
| 
								 | 
							
								HttpService = "/inet/tcp/0/" HttpProxySpec[5] "/" HttpProxySpec[6]
							 | 
						|||
| 
								 | 
							
								HttpPathPrefix = HttpProtocol HttpHost
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								HttpService = "/inet/tcp/0/" HttpHost "/" HttpPort
							 | 
						|||
| 
								 | 
							
								HttpPathPrefix = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function preprocess(text) {
							 | 
						|||
| 
								 | 
							
								return quote(text)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function postprocess(text) {
							 | 
						|||
| 
								 | 
							
								text = gensub(/ ([.,;:?!"])/, "\\1", "g", text)
							 | 
						|||
| 
								 | 
							
								text = gensub(/(["]) /, "\\1", "g", text)
							 | 
						|||
| 
								 | 
							
								return text
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getResponse(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								content, header, isBody, url, group, status, location) {
							 | 
						|||
| 
								 | 
							
								url = _RequestUrl(text, sl, tl, hl)
							 | 
						|||
| 
								 | 
							
								header = "GET " url " HTTP/1.1\n"\
							 | 
						|||
| 
								 | 
							
								"Host: " HttpHost "\n"\
							 | 
						|||
| 
								 | 
							
								"Connection: close\n"
							 | 
						|||
| 
								 | 
							
								if (Option["user-agent"])
							 | 
						|||
| 
								 | 
							
								header = header "User-Agent: " Option["user-agent"] "\n"
							 | 
						|||
| 
								 | 
							
								if (Cookie)
							 | 
						|||
| 
								 | 
							
								header = header "Cookie: " Cookie "\n"
							 | 
						|||
| 
								 | 
							
								if (HttpAuthUser && HttpAuthPass)
							 | 
						|||
| 
								 | 
							
								header = header "Proxy-Authorization: Basic " HttpAuthCredentials "\n"
							 | 
						|||
| 
								 | 
							
								content = NULLSTR; isBody = 0
							 | 
						|||
| 
								 | 
							
								print header |& HttpService
							 | 
						|||
| 
								 | 
							
								while ((HttpService |& getline) > 0) {
							 | 
						|||
| 
								 | 
							
								if (isBody)
							 | 
						|||
| 
								 | 
							
								content = content ? content "\n" $0 : $0
							 | 
						|||
| 
								 | 
							
								else if (length($0) <= 1)
							 | 
						|||
| 
								 | 
							
								isBody = 1
							 | 
						|||
| 
								 | 
							
								else {
							 | 
						|||
| 
								 | 
							
								match($0, /^HTTP[^ ]* ([^ ]*)/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) status = group[1]
							 | 
						|||
| 
								 | 
							
								match($0, /^Location: (.*)/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) location = squeeze(group[1])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								l(sprintf("%4s bytes > %s", length($0), $0))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								close(HttpService)
							 | 
						|||
| 
								 | 
							
								if (status == "301" && location)
							 | 
						|||
| 
								 | 
							
								content = curl(location)
							 | 
						|||
| 
								 | 
							
								return assert(content, "[ERROR] Null response.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function p(string) {
							 | 
						|||
| 
								 | 
							
								if (Option["view"])
							 | 
						|||
| 
								 | 
							
								print string | Option["pager"]
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								print string > Option["output"]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function play(text, tl,    url) {
							 | 
						|||
| 
								 | 
							
								url = _TTSUrl(text, tl)
							 | 
						|||
| 
								 | 
							
								system(Option["player"] " " parameterize(url) SUPOUT SUPERR)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function download_audio(text, tl,    url, output) {
							 | 
						|||
| 
								 | 
							
								url = _TTSUrl(text, tl)
							 | 
						|||
| 
								 | 
							
								if (Option["download-audio-as"])
							 | 
						|||
| 
								 | 
							
								output = Option["download-audio-as"]
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								output = text " [" Option["engine"] "] (" Option["narrator"] ").ts"
							 | 
						|||
| 
								 | 
							
								if (url ~ /^\//)
							 | 
						|||
| 
								 | 
							
								system("mv -- " parameterize(url) " " parameterize(output))
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								curl(url, output)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function getTranslation(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl) {
							 | 
						|||
| 
								 | 
							
								return _Translate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function fileTranslation(uri,    group, temp1, temp2) {
							 | 
						|||
| 
								 | 
							
								temp1 = Option["input"]
							 | 
						|||
| 
								 | 
							
								temp2 = Option["verbose"]
							 | 
						|||
| 
								 | 
							
								match(uri, /^file:\/\/(.*)/, group)
							 | 
						|||
| 
								 | 
							
								Option["input"] = group[1]
							 | 
						|||
| 
								 | 
							
								Option["verbose"] = 0
							 | 
						|||
| 
								 | 
							
								translateMain()
							 | 
						|||
| 
								 | 
							
								Option["input"] = temp1
							 | 
						|||
| 
								 | 
							
								Option["verbose"] = temp2
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function webTranslation(uri, sl, tl, hl) {
							 | 
						|||
| 
								 | 
							
								system(Option["browser"] " "\
							 | 
						|||
| 
								 | 
							
								parameterize(_WebTranslateUrl(uri, sl, tl, hl)) "&")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function translate(text, inline,
							 | 
						|||
| 
								 | 
							
								i, j, playlist, il, saveSortedIn) {
							 | 
						|||
| 
								 | 
							
								if (!getCode(Option["hl"])) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] Unknown language code: " Option["hl"] ", fallback to English: en")
							 | 
						|||
| 
								 | 
							
								Option["hl"] = "en"
							 | 
						|||
| 
								 | 
							
								} else if (isRTL(Option["hl"])) {
							 | 
						|||
| 
								 | 
							
								if (!FriBidi)
							 | 
						|||
| 
								 | 
							
								w("[WARNING] " getName(Option["hl"]) " is a right-to-left language, but FriBidi is not found.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!getCode(Option["sl"])) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] Unknown source language code: " Option["sl"])
							 | 
						|||
| 
								 | 
							
								} else if (isRTL(Option["sl"])) {
							 | 
						|||
| 
								 | 
							
								if (!FriBidi)
							 | 
						|||
| 
								 | 
							
								w("[WARNING] " getName(Option["sl"]) " is a right-to-left language, but FriBidi is not found.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								saveSortedIn = PROCINFO["sorted_in"]
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = "@ind_num_asc"
							 | 
						|||
| 
								 | 
							
								for (i in Option["tl"]) {
							 | 
						|||
| 
								 | 
							
								if (!Option["interactive"])
							 | 
						|||
| 
								 | 
							
								if (Option["verbose"] && i > 1)
							 | 
						|||
| 
								 | 
							
								p(prettify("target-seperator", replicate(Option["chr-target-seperator"], Option["width"])))
							 | 
						|||
| 
								 | 
							
								if (inline &&
							 | 
						|||
| 
								 | 
							
								startsWithAny(text, UriSchemes) == "file://") {
							 | 
						|||
| 
								 | 
							
								fileTranslation(text)
							 | 
						|||
| 
								 | 
							
								} else if (inline &&
							 | 
						|||
| 
								 | 
							
								startsWithAny(text, UriSchemes) == "http://" ||
							 | 
						|||
| 
								 | 
							
								startsWithAny(text, UriSchemes) == "https://") {
							 | 
						|||
| 
								 | 
							
								webTranslation(text, Option["sl"], Option["tl"][i], Option["hl"])
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								if (!Option["no-translate"])
							 | 
						|||
| 
								 | 
							
								p(getTranslation(text, Option["sl"], Option["tl"][i], Option["hl"], Option["verbose"], Option["play"] || Option["download-audio"], playlist, il))
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								il[0] = Option["sl"] == "auto" ? "en" : Option["sl"]
							 | 
						|||
| 
								 | 
							
								if (Option["play"] == 1) {
							 | 
						|||
| 
								 | 
							
								if (Option["player"])
							 | 
						|||
| 
								 | 
							
								for (j in playlist)
							 | 
						|||
| 
								 | 
							
								play(playlist[j]["text"], playlist[j]["tl"])
							 | 
						|||
| 
								 | 
							
								else if (SpeechSynthesizer)
							 | 
						|||
| 
								 | 
							
								for (j in playlist)
							 | 
						|||
| 
								 | 
							
								print playlist[j]["text"] | SpeechSynthesizer
							 | 
						|||
| 
								 | 
							
								} else if (Option["play"] == 2) {
							 | 
						|||
| 
								 | 
							
								if (Option["player"])
							 | 
						|||
| 
								 | 
							
								play(text, il[0])
							 | 
						|||
| 
								 | 
							
								else if (SpeechSynthesizer)
							 | 
						|||
| 
								 | 
							
								print text | SpeechSynthesizer
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (Option["download-audio"] == 1) {
							 | 
						|||
| 
								 | 
							
								if (Option["play"] != 2 && !Option["no-translate"])
							 | 
						|||
| 
								 | 
							
								download_audio(playlist[length(playlist) - 1]["text"],\
							 | 
						|||
| 
								 | 
							
								playlist[length(playlist) - 1]["tl"])
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								download_audio(text, il[0])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = saveSortedIn
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function translateMain(    i, line) {
							 | 
						|||
| 
								 | 
							
								if (Option["interactive"])
							 | 
						|||
| 
								 | 
							
								prompt()
							 | 
						|||
| 
								 | 
							
								if (Option["input"] == STDIN || fileExists(Option["input"])) {
							 | 
						|||
| 
								 | 
							
								i = 0
							 | 
						|||
| 
								 | 
							
								while (getline line < Option["input"])
							 | 
						|||
| 
								 | 
							
								if (line) {
							 | 
						|||
| 
								 | 
							
								if (!Option["interactive"])
							 | 
						|||
| 
								 | 
							
								if (Option["verbose"] && i++ > 0)
							 | 
						|||
| 
								 | 
							
								p(prettify("source-seperator",
							 | 
						|||
| 
								 | 
							
								replicate(Option["chr-source-seperator"],
							 | 
						|||
| 
								 | 
							
								Option["width"])))
							 | 
						|||
| 
								 | 
							
								if (Option["interactive"])
							 | 
						|||
| 
								 | 
							
								repl(line)
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								translate(line)
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								if (!Option["interactive"])
							 | 
						|||
| 
								 | 
							
								if (!Option["verbose"])
							 | 
						|||
| 
								 | 
							
								p(line)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								e("[ERROR] File not found: " Option["input"])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function _Init(    vm) {
							 | 
						|||
| 
								 | 
							
								vm = engineMethod("Init")
							 | 
						|||
| 
								 | 
							
								return @vm()
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function _RequestUrl(text, sl, tl, hl,    vm) {
							 | 
						|||
| 
								 | 
							
								vm = engineMethod("RequestUrl")
							 | 
						|||
| 
								 | 
							
								return @vm(text, sl, tl, hl)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function _TTSUrl(text, tl,    vm) {
							 | 
						|||
| 
								 | 
							
								vm = engineMethod("TTSUrl")
							 | 
						|||
| 
								 | 
							
								return @vm(text, tl)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function _WebTranslateUrl(uri, sl, tl, hl,    vm) {
							 | 
						|||
| 
								 | 
							
								vm = engineMethod("WebTranslateUrl")
							 | 
						|||
| 
								 | 
							
								return @vm(uri, sl, tl, hl)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function _Translate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl,
							 | 
						|||
| 
								 | 
							
								vm) {
							 | 
						|||
| 
								 | 
							
								vm = engineMethod("Translate")
							 | 
						|||
| 
								 | 
							
								return @vm(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								BEGIN { provides("google") }
							 | 
						|||
| 
								 | 
							
								function genRL(a, x,
							 | 
						|||
| 
								 | 
							
								b, c, d, i, y) {
							 | 
						|||
| 
								 | 
							
								tokenize(y, x)
							 | 
						|||
| 
								 | 
							
								parseList(b, y)
							 | 
						|||
| 
								 | 
							
								i = SUBSEP 0
							 | 
						|||
| 
								 | 
							
								for (c = 0; c < length(b[i]) - 2; c += 3) {
							 | 
						|||
| 
								 | 
							
								d = b[i][c + 2]
							 | 
						|||
| 
								 | 
							
								d = d >= 97 ? d - 87 :
							 | 
						|||
| 
								 | 
							
								d - 48
							 | 
						|||
| 
								 | 
							
								d = b[i][c + 1] == 43 ? rshift(a, d) : lshift(a, d)
							 | 
						|||
| 
								 | 
							
								a = b[i][c] == 43 ? and(a + d, 4294967295) : xor(a, d)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return a
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function genTK(text,
							 | 
						|||
| 
								 | 
							
								a, d, dLen, e, tkk, ub, vb) {
							 | 
						|||
| 
								 | 
							
								if (TK[text]) return TK[text]
							 | 
						|||
| 
								 | 
							
								tkk = systime() / 3600
							 | 
						|||
| 
								 | 
							
								ub = "[43,45,51,94,43,98,43,45,102]"
							 | 
						|||
| 
								 | 
							
								vb = "[43,45,97,94,43,54]"
							 | 
						|||
| 
								 | 
							
								dLen = dump(text, d)
							 | 
						|||
| 
								 | 
							
								a = tkk
							 | 
						|||
| 
								 | 
							
								for (e = 1; e <= dLen; e++)
							 | 
						|||
| 
								 | 
							
								a = genRL(a + d[e], vb)
							 | 
						|||
| 
								 | 
							
								a = genRL(a, ub)
							 | 
						|||
| 
								 | 
							
								0 > a && (a = and(a, 2147483647) + 2147483648)
							 | 
						|||
| 
								 | 
							
								a %= 1e6
							 | 
						|||
| 
								 | 
							
								TK[text] = a "." xor(a, tkk)
							 | 
						|||
| 
								 | 
							
								l(text, "text")
							 | 
						|||
| 
								 | 
							
								l(tkk, "tkk")
							 | 
						|||
| 
								 | 
							
								l(TK[text], "tk")
							 | 
						|||
| 
								 | 
							
								return TK[text]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function googleInit() {
							 | 
						|||
| 
								 | 
							
								HttpProtocol = "http://"
							 | 
						|||
| 
								 | 
							
								HttpHost = "translate.googleapis.com"
							 | 
						|||
| 
								 | 
							
								HttpPort = 80
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function googleRequestUrl(text, sl, tl, hl,    qc) {
							 | 
						|||
| 
								 | 
							
								qc = Option["no-autocorrect"] ? "qc" : "qca";
							 | 
						|||
| 
								 | 
							
								return HttpPathPrefix "/translate_a/single?client=gtx"\
							 | 
						|||
| 
								 | 
							
								"&ie=UTF-8&oe=UTF-8"\
							 | 
						|||
| 
								 | 
							
								"&dt=bd&dt=ex&dt=ld&dt=md&dt=rw&dt=rm&dt=ss&dt=t&dt=at"\
							 | 
						|||
| 
								 | 
							
								"&dt=" qc "&sl=" sl "&tl=" tl "&hl=" hl\
							 | 
						|||
| 
								 | 
							
								"&q=" preprocess(text)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function googleTTSUrl(text, tl) {
							 | 
						|||
| 
								 | 
							
								return HttpProtocol HttpHost "/translate_tts?ie=UTF-8&client=gtx"\
							 | 
						|||
| 
								 | 
							
								"&tl=" tl "&q=" preprocess(text)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function googleWebTranslateUrl(uri, sl, tl, hl) {
							 | 
						|||
| 
								 | 
							
								return "https://translate.google.com/translate?"\
							 | 
						|||
| 
								 | 
							
								"hl=" hl "&sl=" sl "&tl=" tl "&u=" uri
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function googleTranslate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl,
							 | 
						|||
| 
								 | 
							
								r,
							 | 
						|||
| 
								 | 
							
								content, tokens, ast,
							 | 
						|||
| 
								 | 
							
								_sl, _tl, _hl, il, ils, isPhonetic,
							 | 
						|||
| 
								 | 
							
								article, example, explanation, ref, word,
							 | 
						|||
| 
								 | 
							
								translation, translations, phonetics,
							 | 
						|||
| 
								 | 
							
								wordClasses, words, segments, altTranslations,
							 | 
						|||
| 
								 | 
							
								original, oPhonetics, oWordClasses, oWords,
							 | 
						|||
| 
								 | 
							
								oRefs, oSynonymClasses, oSynonyms,
							 | 
						|||
| 
								 | 
							
								oExamples, oSeeAlso,
							 | 
						|||
| 
								 | 
							
								wShowOriginal, wShowOriginalPhonetics,
							 | 
						|||
| 
								 | 
							
								wShowTranslation, wShowTranslationPhonetics,
							 | 
						|||
| 
								 | 
							
								wShowPromptMessage, wShowLanguages,
							 | 
						|||
| 
								 | 
							
								wShowOriginalDictionary, wShowDictionary,
							 | 
						|||
| 
								 | 
							
								wShowAlternatives,
							 | 
						|||
| 
								 | 
							
								hasWordClasses, hasAltTranslations,
							 | 
						|||
| 
								 | 
							
								i, j, k, group, temp, saveSortedIn) {
							 | 
						|||
| 
								 | 
							
								isPhonetic = match(tl, /^@/)
							 | 
						|||
| 
								 | 
							
								tl = substr(tl, 1 + isPhonetic)
							 | 
						|||
| 
								 | 
							
								if (!getCode(tl)) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] Unknown target language code: " tl)
							 | 
						|||
| 
								 | 
							
								} else if (isRTL(tl)) {
							 | 
						|||
| 
								 | 
							
								if (!FriBidi)
							 | 
						|||
| 
								 | 
							
								w("[WARNING] " getName(tl) " is a right-to-left language, but FriBidi is not found.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								_sl = getCode(sl); if (!_sl) _sl = sl
							 | 
						|||
| 
								 | 
							
								_tl = getCode(tl); if (!_tl) _tl = tl
							 | 
						|||
| 
								 | 
							
								_hl = getCode(hl); if (!_hl) _hl = hl
							 | 
						|||
| 
								 | 
							
								content = getResponse(text, _sl, _tl, _hl)
							 | 
						|||
| 
								 | 
							
								if (Option["dump"])
							 | 
						|||
| 
								 | 
							
								return content
							 | 
						|||
| 
								 | 
							
								tokenize(tokens, content)
							 | 
						|||
| 
								 | 
							
								parseJsonArray(ast, tokens)
							 | 
						|||
| 
								 | 
							
								l(content, "content", 1, 1)
							 | 
						|||
| 
								 | 
							
								l(tokens, "tokens", 1, 0, 1)
							 | 
						|||
| 
								 | 
							
								l(ast, "ast")
							 | 
						|||
| 
								 | 
							
								if (!isarray(ast) || !anything(ast)) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Oops! Something went wrong and I can't translate it for you :(")
							 | 
						|||
| 
								 | 
							
								ExitCode = 1
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								saveSortedIn = PROCINFO["sorted_in"]
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = "compareByIndexFields"
							 | 
						|||
| 
								 | 
							
								for (i in ast) {
							 | 
						|||
| 
								 | 
							
								if (ast[i] == "null") continue
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "0" SUBSEP "[[:digit:]]+" SUBSEP "0$")
							 | 
						|||
| 
								 | 
							
								append(translations, literal(ast[i]))
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "0" SUBSEP "[[:digit:]]+" SUBSEP "1$")
							 | 
						|||
| 
								 | 
							
								append(original, literal(ast[i]))
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "0" SUBSEP "[[:digit:]]+" SUBSEP "2$")
							 | 
						|||
| 
								 | 
							
								append(phonetics, literal(ast[i]))
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "0" SUBSEP "[[:digit:]]+" SUBSEP "3$")
							 | 
						|||
| 
								 | 
							
								append(oPhonetics, literal(ast[i]))
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group))
							 | 
						|||
| 
								 | 
							
								wordClasses[group[1]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "2" SUBSEP "([[:digit:]]+)" SUBSEP "([[:digit:]]+)$", group))
							 | 
						|||
| 
								 | 
							
								words[group[1]][group[2]][group[3]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "2" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)$", group))
							 | 
						|||
| 
								 | 
							
								words[group[1]][group[2]]["1"][group[3]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "5" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group)) {
							 | 
						|||
| 
								 | 
							
								segments[group[1]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								altTranslations[group[1]][0] = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "5" SUBSEP "([[:digit:]]+)" SUBSEP "2" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group))
							 | 
						|||
| 
								 | 
							
								altTranslations[group[1]][group[2]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "7" SUBSEP "5$") {
							 | 
						|||
| 
								 | 
							
								if (ast[i] == "true")
							 | 
						|||
| 
								 | 
							
								w("Showing translation for:  (use -no-auto to disable autocorrect)")
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								w("Did you mean: "\
							 | 
						|||
| 
								 | 
							
								ansi("bold", unparameterize(ast["0" SUBSEP "7" SUBSEP "1"])))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "8" SUBSEP "0" SUBSEP "[[:digit:]]+$" ||
							 | 
						|||
| 
								 | 
							
								i ~ "^0" SUBSEP "2$")
							 | 
						|||
| 
								 | 
							
								append(ils, literal(ast[i]))
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "11" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group))
							 | 
						|||
| 
								 | 
							
								oSynonymClasses[group[1]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "11" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "1$", group))
							 | 
						|||
| 
								 | 
							
								if (ast[i]) {
							 | 
						|||
| 
								 | 
							
								oRefs[literal(ast[i])][1] = group[1]
							 | 
						|||
| 
								 | 
							
								oRefs[literal(ast[i])][2] = group[2]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "11" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "0" SUBSEP "([[:digit:]]+)$", group))
							 | 
						|||
| 
								 | 
							
								oSynonyms[group[1]][group[2]][group[3]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "12" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group))
							 | 
						|||
| 
								 | 
							
								oWordClasses[group[1]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "12" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group))
							 | 
						|||
| 
								 | 
							
								oWords[group[1]][group[2]][0] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "12" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "1$", group))
							 | 
						|||
| 
								 | 
							
								oWords[group[1]][group[2]][1] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "12" SUBSEP "([[:digit:]]+)" SUBSEP "1" SUBSEP "([[:digit:]]+)" SUBSEP "2$", group))
							 | 
						|||
| 
								 | 
							
								oWords[group[1]][group[2]][2] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "13" SUBSEP "0" SUBSEP "([[:digit:]]+)" SUBSEP "0$", group))
							 | 
						|||
| 
								 | 
							
								oExamples[group[1]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								if (match(i, "^0" SUBSEP "14" SUBSEP "0" SUBSEP "([[:digit:]]+)$", group))
							 | 
						|||
| 
								 | 
							
								oSeeAlso[group[1]] = literal(ast[i])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = saveSortedIn
							 | 
						|||
| 
								 | 
							
								translation = join(translations)
							 | 
						|||
| 
								 | 
							
								returnIl[0] = il = !anything(ils) || belongsTo(sl, ils) ? sl : ils[0]
							 | 
						|||
| 
								 | 
							
								if (Option["verbose"] < 0)
							 | 
						|||
| 
								 | 
							
								return getList(il)
							 | 
						|||
| 
								 | 
							
								if (!isVerbose) {
							 | 
						|||
| 
								 | 
							
								r = isPhonetic && anything(phonetics) ?
							 | 
						|||
| 
								 | 
							
								prettify("brief-translation-phonetics", join(phonetics, " ")) :
							 | 
						|||
| 
								 | 
							
								prettify("brief-translation", s(translation, tl))
							 | 
						|||
| 
								 | 
							
								if (toSpeech) {
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["text"] = translation
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["tl"] = tl
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								wShowOriginal = Option["show-original"]
							 | 
						|||
| 
								 | 
							
								wShowOriginalPhonetics = Option["show-original-phonetics"]
							 | 
						|||
| 
								 | 
							
								wShowTranslation = Option["show-translation"]
							 | 
						|||
| 
								 | 
							
								wShowTranslationPhonetics = Option["show-translation-phonetics"]
							 | 
						|||
| 
								 | 
							
								wShowPromptMessage = Option["show-prompt-message"]
							 | 
						|||
| 
								 | 
							
								wShowLanguages = Option["show-languages"]
							 | 
						|||
| 
								 | 
							
								wShowOriginalDictionary = Option["show-original-dictionary"]
							 | 
						|||
| 
								 | 
							
								wShowDictionary = Option["show-dictionary"]
							 | 
						|||
| 
								 | 
							
								wShowAlternatives = Option["show-alternatives"]
							 | 
						|||
| 
								 | 
							
								if (!anything(oPhonetics)) wShowOriginalPhonetics = 0
							 | 
						|||
| 
								 | 
							
								if (!anything(phonetics)) wShowTranslationPhonetics = 0
							 | 
						|||
| 
								 | 
							
								if (getCode(il) == getCode(tl) &&\
							 | 
						|||
| 
								 | 
							
								(isarray(oWordClasses) || isarray(oSynonymClasses) ||\
							 | 
						|||
| 
								 | 
							
								isarray(oExamples) || isarray(oSeeAlso))) {
							 | 
						|||
| 
								 | 
							
								wShowOriginalDictionary = 1
							 | 
						|||
| 
								 | 
							
								wShowTranslation = 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								hasWordClasses = exists(wordClasses)
							 | 
						|||
| 
								 | 
							
								hasAltTranslations = exists(altTranslations[0])
							 | 
						|||
| 
								 | 
							
								if (!hasWordClasses && !hasAltTranslations)
							 | 
						|||
| 
								 | 
							
								wShowPromptMessage = wShowLanguages = 0
							 | 
						|||
| 
								 | 
							
								if (!hasWordClasses) wShowDictionary = 0
							 | 
						|||
| 
								 | 
							
								if (!hasAltTranslations) wShowAlternatives = 0
							 | 
						|||
| 
								 | 
							
								if (wShowOriginal) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display original text & phonetics")
							 | 
						|||
| 
								 | 
							
								r = r prettify("original", s(join(original, " "), il))
							 | 
						|||
| 
								 | 
							
								if (wShowOriginalPhonetics)
							 | 
						|||
| 
								 | 
							
								r = r RS prettify("original-phonetics", showPhonetics(join(oPhonetics, " "), il))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowTranslation) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display major translation & phonetics")
							 | 
						|||
| 
								 | 
							
								r = r prettify("translation", s(translation, tl))
							 | 
						|||
| 
								 | 
							
								if (wShowTranslationPhonetics)
							 | 
						|||
| 
								 | 
							
								r = r RS prettify("translation-phonetics", showPhonetics(join(phonetics, " "), tl))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowPromptMessage || wShowLanguages)
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS
							 | 
						|||
| 
								 | 
							
								if (wShowPromptMessage) {
							 | 
						|||
| 
								 | 
							
								if (hasWordClasses) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display prompt message (Definitions of ...)")
							 | 
						|||
| 
								 | 
							
								if (isRTL(hl))
							 | 
						|||
| 
								 | 
							
								r = r prettify("prompt-message", s(showDefinitionsOf(hl, join(original, " "))))
							 | 
						|||
| 
								 | 
							
								else {
							 | 
						|||
| 
								 | 
							
								split(showDefinitionsOf(hl, "\0%s\0"), group, "\0")
							 | 
						|||
| 
								 | 
							
								for (i = 1; i <= length(group); i++) {
							 | 
						|||
| 
								 | 
							
								if (group[i] == "%s")
							 | 
						|||
| 
								 | 
							
								r = r prettify("prompt-message-original", show(join(original, " "), il))
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								r = r prettify("prompt-message", group[i])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else if (hasAltTranslations) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display prompt message (Translations of ...)")
							 | 
						|||
| 
								 | 
							
								if (isRTL(hl))
							 | 
						|||
| 
								 | 
							
								r = r prettify("prompt-message", s(showTranslationsOf(hl, join(original, " "))))
							 | 
						|||
| 
								 | 
							
								else {
							 | 
						|||
| 
								 | 
							
								split(showTranslationsOf(hl, "\0%s\0"), group, "\0")
							 | 
						|||
| 
								 | 
							
								for (i = 1; i <= length(group); i++) {
							 | 
						|||
| 
								 | 
							
								if (group[i] == "%s")
							 | 
						|||
| 
								 | 
							
								r = r prettify("prompt-message-original", show(join(original, " "), il))
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								r = r prettify("prompt-message", group[i])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowLanguages) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display source language -> target language")
							 | 
						|||
| 
								 | 
							
								temp = Option["fmt-languages"]
							 | 
						|||
| 
								 | 
							
								if (!temp) temp = "[ %s -> %t ]"
							 | 
						|||
| 
								 | 
							
								split(temp, group, /(%s|%S|%t|%T)/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[1])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%s/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getDisplay(il))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%S/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getName(il))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[2])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%t/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getDisplay(tl))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%T/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getName(tl))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[3])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowOriginalDictionary) {
							 | 
						|||
| 
								 | 
							
								if (exists(oWordClasses)) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display original dictionary (detailed explanations)")
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < length(oWordClasses); i++) {
							 | 
						|||
| 
								 | 
							
								r = (i > 0 ? r RS : r) RS prettify("original-dictionary-detailed-word-class", s(oWordClasses[i], hl))
							 | 
						|||
| 
								 | 
							
								for (j = 0; j < length(oWords[i]); j++) {
							 | 
						|||
| 
								 | 
							
								explanation = oWords[i][j][0]
							 | 
						|||
| 
								 | 
							
								ref = oWords[i][j][1]
							 | 
						|||
| 
								 | 
							
								example = oWords[i][j][2]
							 | 
						|||
| 
								 | 
							
								r = (j > 0 ? r RS : r) RS prettify("original-dictionary-detailed-explanation", ins(1, explanation, il))
							 | 
						|||
| 
								 | 
							
								if (example)
							 | 
						|||
| 
								 | 
							
								r = r RS prettify("original-dictionary-detailed-example", ins(2, "- \"" example "\"", il))
							 | 
						|||
| 
								 | 
							
								if (ref && isarray(oRefs[ref])) {
							 | 
						|||
| 
								 | 
							
								temp = prettify("original-dictionary-detailed-synonyms", ins(1, show(showSynonyms(hl), hl) ": "))
							 | 
						|||
| 
								 | 
							
								temp = temp prettify("original-dictionary-detailed-synonyms-item", show(oSynonyms[oRefs[ref][1]][oRefs[ref][2]][0], il))
							 | 
						|||
| 
								 | 
							
								for (k = 1; k < length(oSynonyms[oRefs[ref][1]][oRefs[ref][2]]); k++)
							 | 
						|||
| 
								 | 
							
								temp = temp prettify("original-dictionary-detailed-synonyms", ", ")\
							 | 
						|||
| 
								 | 
							
								prettify("original-dictionary-detailed-synonyms-item", show(oSynonyms[oRefs[ref][1]][oRefs[ref][2]][k], il))
							 | 
						|||
| 
								 | 
							
								r = r RS temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (exists(oSynonymClasses)) {
							 | 
						|||
| 
								 | 
							
								r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display original dictionary (synonyms)")
							 | 
						|||
| 
								 | 
							
								r = r prettify("original-dictionary-synonyms", s(showSynonyms(hl), hl))
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < length(oSynonymClasses); i++) {
							 | 
						|||
| 
								 | 
							
								r = (i > 0 ? r RS : r) RS prettify("original-dictionary-synonyms-word-class", ins(1, oSynonymClasses[i], hl))
							 | 
						|||
| 
								 | 
							
								for (j = 0; j < length(oSynonyms[i]); j++) {
							 | 
						|||
| 
								 | 
							
								temp = prettify("original-dictionary-synonyms-synonyms", ins(2, "- "))
							 | 
						|||
| 
								 | 
							
								temp = temp prettify("original-dictionary-synonyms-synonyms-item", show(oSynonyms[i][j][0], il))
							 | 
						|||
| 
								 | 
							
								for (k = 1; k < length(oSynonyms[i][j]); k++)
							 | 
						|||
| 
								 | 
							
								temp = temp prettify("original-dictionary-synonyms-synonyms", ", ")\
							 | 
						|||
| 
								 | 
							
								prettify("original-dictionary-synonyms-synonyms-item", show(oSynonyms[i][j][k], il))
							 | 
						|||
| 
								 | 
							
								r = r RS temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (exists(oExamples)) {
							 | 
						|||
| 
								 | 
							
								r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display original dictionary (examples)")
							 | 
						|||
| 
								 | 
							
								r = r prettify("original-dictionary-examples", s(showExamples(hl), hl))
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < length(oExamples); i++) {
							 | 
						|||
| 
								 | 
							
								example = oExamples[i]
							 | 
						|||
| 
								 | 
							
								temp = prettify("original-dictionary-examples-example", ins(1, "- "))
							 | 
						|||
| 
								 | 
							
								split(example, group, /(<b>|<\/b>)/)
							 | 
						|||
| 
								 | 
							
								if (isRTL(il))
							 | 
						|||
| 
								 | 
							
								temp = temp show(group[1] group[2] group[3], il)
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								temp = temp prettify("original-dictionary-examples-example", group[1])\
							 | 
						|||
| 
								 | 
							
								prettify("original-dictionary-examples-original", group[2])\
							 | 
						|||
| 
								 | 
							
								prettify("original-dictionary-examples-example", group[3])
							 | 
						|||
| 
								 | 
							
								r = (i > 0 ? r RS : r) RS temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (exists(oSeeAlso)) {
							 | 
						|||
| 
								 | 
							
								r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display original dictionary (see also)")
							 | 
						|||
| 
								 | 
							
								r = r prettify("original-dictionary-see-also", s(showSeeAlso(hl), hl))
							 | 
						|||
| 
								 | 
							
								temp = ins(1, prettify("original-dictionary-see-also-phrases-item", show(oSeeAlso[0], il)))
							 | 
						|||
| 
								 | 
							
								for (k = 1; k < length(oSeeAlso); k++)
							 | 
						|||
| 
								 | 
							
								temp = temp prettify("original-dictionary-see-also-phrases", ", ")\
							 | 
						|||
| 
								 | 
							
								prettify("original-dictionary-see-also-phrases-item", show(oSeeAlso[k], il))
							 | 
						|||
| 
								 | 
							
								r = r RS temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowDictionary) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display dictionary entries")
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < length(wordClasses); i++) {
							 | 
						|||
| 
								 | 
							
								r = (i > 0 ? r RS : r) RS prettify("dictionary-word-class", s(wordClasses[i], hl))
							 | 
						|||
| 
								 | 
							
								for (j = 0; j < length(words[i]); j++) {
							 | 
						|||
| 
								 | 
							
								word = words[i][j][0]
							 | 
						|||
| 
								 | 
							
								article = words[i][j][4]
							 | 
						|||
| 
								 | 
							
								if (isRTL(il))
							 | 
						|||
| 
								 | 
							
								explanation = join(words[i][j][1], ", ")
							 | 
						|||
| 
								 | 
							
								else {
							 | 
						|||
| 
								 | 
							
								explanation = prettify("dictionary-explanation-item", words[i][j][1][0])
							 | 
						|||
| 
								 | 
							
								for (k = 1; k < length(words[i][j][1]); k++)
							 | 
						|||
| 
								 | 
							
								explanation = explanation prettify("dictionary-explanation", ", ")\
							 | 
						|||
| 
								 | 
							
								prettify("dictionary-explanation-item", words[i][j][1][k])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								r = r RS prettify("dictionary-word", ins(1, (article ? "(" article ") " : "") word, tl))
							 | 
						|||
| 
								 | 
							
								if (isRTL(il))
							 | 
						|||
| 
								 | 
							
								r = r RS prettify("dictionary-explanation-item", ins(2, explanation, il))
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								r = r RS ins(2, explanation)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowAlternatives) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display alternative translations")
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < length(altTranslations); i++) {
							 | 
						|||
| 
								 | 
							
								r = (i > 0 ? r RS : r) prettify("alternatives-original", show(segments[i], il))
							 | 
						|||
| 
								 | 
							
								if (isRTL(tl)) {
							 | 
						|||
| 
								 | 
							
								temp = join(altTranslations[i], ", ")
							 | 
						|||
| 
								 | 
							
								r = r RS prettify("alternatives-translations-item", ins(1, temp, tl))
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								temp = prettify("alternatives-translations-item", altTranslations[i][0])
							 | 
						|||
| 
								 | 
							
								for (j = 1; j < length(altTranslations[i]); j++)
							 | 
						|||
| 
								 | 
							
								temp = temp prettify("alternatives-translations", ", ")\
							 | 
						|||
| 
								 | 
							
								prettify("alternatives-translations-item", altTranslations[i][j])
							 | 
						|||
| 
								 | 
							
								r = r RS ins(1, temp)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (toSpeech) {
							 | 
						|||
| 
								 | 
							
								if (index(showTranslationsOf(hl, "%s"), "%s") > 2) {
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["text"] = showTranslationsOf(hl)
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["tl"] = hl
							 | 
						|||
| 
								 | 
							
								returnPlaylist[1]["text"] = join(original)
							 | 
						|||
| 
								 | 
							
								returnPlaylist[1]["tl"] = il
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["text"] = join(original)
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["tl"] = il
							 | 
						|||
| 
								 | 
							
								returnPlaylist[1]["text"] = showTranslationsOf(hl)
							 | 
						|||
| 
								 | 
							
								returnPlaylist[1]["tl"] = hl
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								returnPlaylist[2]["text"] = translation
							 | 
						|||
| 
								 | 
							
								returnPlaylist[2]["tl"] = tl
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								BEGIN { provides("bing") }
							 | 
						|||
| 
								 | 
							
								function bingInit() {
							 | 
						|||
| 
								 | 
							
								HttpProtocol = "http://"
							 | 
						|||
| 
								 | 
							
								HttpHost = "www.bing.com"
							 | 
						|||
| 
								 | 
							
								HttpPort = 80
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function bingSetCookie(    cookie, group, header, url) {
							 | 
						|||
| 
								 | 
							
								url = HttpPathPrefix "/translator"
							 | 
						|||
| 
								 | 
							
								header = "GET " url " HTTP/1.1\n"\
							 | 
						|||
| 
								 | 
							
								"Host: " HttpHost "\n"\
							 | 
						|||
| 
								 | 
							
								"Connection: close\n"
							 | 
						|||
| 
								 | 
							
								if (Option["user-agent"])
							 | 
						|||
| 
								 | 
							
								header = header "User-Agent: " Option["user-agent"] "\n"
							 | 
						|||
| 
								 | 
							
								cookie = NULLSTR
							 | 
						|||
| 
								 | 
							
								print header |& HttpService
							 | 
						|||
| 
								 | 
							
								while ((HttpService |& getline) > 0 && length($0) > 1) {
							 | 
						|||
| 
								 | 
							
								match($0, /Set-Cookie: ([^;]*);/, group)
							 | 
						|||
| 
								 | 
							
								if (group[1]) {
							 | 
						|||
| 
								 | 
							
								cookie = cookie (cookie ?  "; " : NULLSTR) group[1]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								l(sprintf("%4s bytes > %s", length($0), length($0) < 1024 ? $0 : "..."))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								close(HttpService)
							 | 
						|||
| 
								 | 
							
								Cookie = cookie
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function bingTTSUrl(text, tl,
							 | 
						|||
| 
								 | 
							
								country, gender, i, group,
							 | 
						|||
| 
								 | 
							
								header, content, isBody) {
							 | 
						|||
| 
								 | 
							
								gender = "female"
							 | 
						|||
| 
								 | 
							
								country = NULLSTR
							 | 
						|||
| 
								 | 
							
								split(Option["narrator"], group, ",")
							 | 
						|||
| 
								 | 
							
								for (i in group) {
							 | 
						|||
| 
								 | 
							
								if (group[i] ~ /^(f(emale)?|w(oman)?)$/)
							 | 
						|||
| 
								 | 
							
								gender = "female"
							 | 
						|||
| 
								 | 
							
								else if (group[i] ~ /^m(ale|an)?$/)
							 | 
						|||
| 
								 | 
							
								gender = "male"
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								country = group[i]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (country) tl = tl "-" country
							 | 
						|||
| 
								 | 
							
								else if (tl == "ar") tl = tl "-EG"
							 | 
						|||
| 
								 | 
							
								else if (tl == "da") tl = tl "-DK"
							 | 
						|||
| 
								 | 
							
								else if (tl == "de") tl = tl "-DE"
							 | 
						|||
| 
								 | 
							
								else if (tl == "en") tl = tl "-US"
							 | 
						|||
| 
								 | 
							
								else if (tl == "es") tl = tl "-ES"
							 | 
						|||
| 
								 | 
							
								else if (tl == "fi") tl = tl "-FI"
							 | 
						|||
| 
								 | 
							
								else if (tl == "fr") tl = tl "-FR"
							 | 
						|||
| 
								 | 
							
								else if (tl == "it") tl = tl "-IT"
							 | 
						|||
| 
								 | 
							
								else if (tl == "ja") tl = tl "-JP"
							 | 
						|||
| 
								 | 
							
								else if (tl == "ko") tl = tl "-KR"
							 | 
						|||
| 
								 | 
							
								else if (tl == "nl") tl = tl "-NL"
							 | 
						|||
| 
								 | 
							
								else if (tl == "nb") tl = tl "-NO"
							 | 
						|||
| 
								 | 
							
								else if (tl == "pl") tl = tl "-PL"
							 | 
						|||
| 
								 | 
							
								else if (tl == "pt") tl = tl "-PT"
							 | 
						|||
| 
								 | 
							
								else if (tl == "ru") tl = tl "-RU"
							 | 
						|||
| 
								 | 
							
								else if (tl == "sv") tl = tl "-SE"
							 | 
						|||
| 
								 | 
							
								else if (tl == "yue") ;
							 | 
						|||
| 
								 | 
							
								else if (tl == "zh") tl = tl "-CN"
							 | 
						|||
| 
								 | 
							
								header = "GET " "/translator/api/language/Speak?"\
							 | 
						|||
| 
								 | 
							
								"locale=" tl "&text=" preprocess(text)\
							 | 
						|||
| 
								 | 
							
								"&gender=" gender "&media=audio/mp3" " HTTP/1.1\n"\
							 | 
						|||
| 
								 | 
							
								"Host: " HttpHost "\n"\
							 | 
						|||
| 
								 | 
							
								"Connection: close\n"
							 | 
						|||
| 
								 | 
							
								if (Option["user-agent"])
							 | 
						|||
| 
								 | 
							
								header = header "User-Agent: " Option["user-agent"] "\n"
							 | 
						|||
| 
								 | 
							
								if (Cookie)
							 | 
						|||
| 
								 | 
							
								header = header "Cookie: " Cookie "\n"
							 | 
						|||
| 
								 | 
							
								content = NULLSTR; isBody = 0
							 | 
						|||
| 
								 | 
							
								print header |& HttpService
							 | 
						|||
| 
								 | 
							
								while ((HttpService |& getline) > 0) {
							 | 
						|||
| 
								 | 
							
								if (isBody)
							 | 
						|||
| 
								 | 
							
								content = content ? content "\n" $0 : $0
							 | 
						|||
| 
								 | 
							
								else if (length($0) <= 1)
							 | 
						|||
| 
								 | 
							
								isBody = 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								close(HttpService)
							 | 
						|||
| 
								 | 
							
								if (!TempFile)
							 | 
						|||
| 
								 | 
							
								TempFile = getOutput("mktemp")
							 | 
						|||
| 
								 | 
							
								printf("%s", content) > TempFile
							 | 
						|||
| 
								 | 
							
								close(TempFile)
							 | 
						|||
| 
								 | 
							
								return TempFile
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function bingWebTranslateUrl(uri, sl, tl, hl) {
							 | 
						|||
| 
								 | 
							
								return "http://www.microsofttranslator.com/bv.aspx?"\
							 | 
						|||
| 
								 | 
							
								"from=" sl "&to=" tl "&a=" uri
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function bingPost(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								content, contentLength, group,
							 | 
						|||
| 
								 | 
							
								header, isBody, reqBody, url) {
							 | 
						|||
| 
								 | 
							
								reqBody = "[{" parameterize("text") ":" parameterize(text, "\"") "}]"
							 | 
						|||
| 
								 | 
							
								if (DumpContentengths[reqBody])
							 | 
						|||
| 
								 | 
							
								contentLength = DumpContentengths[reqBody]
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								contentLength = DumpContentengths[reqBody] = dump(reqBody, group)
							 | 
						|||
| 
								 | 
							
								url = HttpPathPrefix "/translator/api/Translate/TranslateArray?"\
							 | 
						|||
| 
								 | 
							
								"from=" sl "&to=" tl
							 | 
						|||
| 
								 | 
							
								header = "POST " url " HTTP/1.1\n"\
							 | 
						|||
| 
								 | 
							
								"Host: " HttpHost "\n"\
							 | 
						|||
| 
								 | 
							
								"Connection: close\n"\
							 | 
						|||
| 
								 | 
							
								"Content-Length: " contentLength "\n"\
							 | 
						|||
| 
								 | 
							
								"Content-Type: application/json\n"
							 | 
						|||
| 
								 | 
							
								if (Option["user-agent"])
							 | 
						|||
| 
								 | 
							
								header = header "User-Agent: " Option["user-agent"] "\n"
							 | 
						|||
| 
								 | 
							
								if (Cookie)
							 | 
						|||
| 
								 | 
							
								header = header "Cookie: " Cookie "\n"
							 | 
						|||
| 
								 | 
							
								content = NULLSTR; isBody = 0
							 | 
						|||
| 
								 | 
							
								print (header "\n" reqBody) |& HttpService
							 | 
						|||
| 
								 | 
							
								while ((HttpService |& getline) > 0) {
							 | 
						|||
| 
								 | 
							
								if (isBody)
							 | 
						|||
| 
								 | 
							
								content = content ? content "\n" $0 : $0
							 | 
						|||
| 
								 | 
							
								else if (length($0) <= 1)
							 | 
						|||
| 
								 | 
							
								isBody = 1
							 | 
						|||
| 
								 | 
							
								l(sprintf("%4s bytes > %s", length($0), $0))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								close(HttpService)
							 | 
						|||
| 
								 | 
							
								return assert(content, "[ERROR] Null response.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function bingRequestUrl(text, sl, tl, hl) {
							 | 
						|||
| 
								 | 
							
								return HttpPathPrefix "/translator/api/Dictionary/Lookup?"\
							 | 
						|||
| 
								 | 
							
								"from=" sl "&to=" tl "&text=" preprocess(text)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function bingTranslate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl,
							 | 
						|||
| 
								 | 
							
								r,
							 | 
						|||
| 
								 | 
							
								content, tokens, ast,
							 | 
						|||
| 
								 | 
							
								_sl, _tl, _hl, il,
							 | 
						|||
| 
								 | 
							
								translation,
							 | 
						|||
| 
								 | 
							
								wShowOriginal, wShowTranslation, wShowLanguages,
							 | 
						|||
| 
								 | 
							
								group, temp) {
							 | 
						|||
| 
								 | 
							
								if (!getCode(tl)) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] Unknown target language code: " tl)
							 | 
						|||
| 
								 | 
							
								} else if (isRTL(tl)) {
							 | 
						|||
| 
								 | 
							
								if (!FriBidi)
							 | 
						|||
| 
								 | 
							
								w("[WARNING] " getName(tl) " is a right-to-left language, but FriBidi is not found.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								_sl = getCode(sl); if (!_sl) _sl = sl
							 | 
						|||
| 
								 | 
							
								_tl = getCode(tl); if (!_tl) _tl = tl
							 | 
						|||
| 
								 | 
							
								_hl = getCode(hl); if (!_hl) _hl = hl
							 | 
						|||
| 
								 | 
							
								if (_sl == "auto")  _sl = "-"
							 | 
						|||
| 
								 | 
							
								if (_sl == "bs")    _sl = "bs-Latn"
							 | 
						|||
| 
								 | 
							
								if (_sl == "zh-CN") _sl = "zh-CHS"
							 | 
						|||
| 
								 | 
							
								if (_sl == "zh-TW") _sl = "zh-CHT"
							 | 
						|||
| 
								 | 
							
								if (_tl == "bs")    _tl = "bs-Latn"
							 | 
						|||
| 
								 | 
							
								if (_tl == "zh-CN") _tl = "zh-CHS"
							 | 
						|||
| 
								 | 
							
								if (_tl == "zh-TW") _tl = "zh-CHT"
							 | 
						|||
| 
								 | 
							
								bingSetCookie()
							 | 
						|||
| 
								 | 
							
								content = bingPost(text, _sl, _tl, _hl)
							 | 
						|||
| 
								 | 
							
								if (Option["dump"])
							 | 
						|||
| 
								 | 
							
								return content
							 | 
						|||
| 
								 | 
							
								tokenize(tokens, content)
							 | 
						|||
| 
								 | 
							
								parseJson(ast, tokens)
							 | 
						|||
| 
								 | 
							
								l(content, "content", 1, 1)
							 | 
						|||
| 
								 | 
							
								l(tokens, "tokens", 1, 0, 1)
							 | 
						|||
| 
								 | 
							
								l(ast, "ast")
							 | 
						|||
| 
								 | 
							
								if (!isarray(ast) || !anything(ast)) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Oops! Something went wrong and I can't translate it for you :(")
							 | 
						|||
| 
								 | 
							
								ExitCode = 1
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								} else if (ast[0 SUBSEP "Message"]) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] " unparameterize(ast[0 SUBSEP "Message"]))
							 | 
						|||
| 
								 | 
							
								e("[ERROR] " unparameterize(ast[0 SUBSEP "Details" SUBSEP 0]))
							 | 
						|||
| 
								 | 
							
								ExitCode = 1
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								translation = unparameterize(ast[0 SUBSEP "items" SUBSEP 0 SUBSEP "text"])
							 | 
						|||
| 
								 | 
							
								returnIl[0] = il = unparameterize(ast[0 SUBSEP "from"])
							 | 
						|||
| 
								 | 
							
								if (Option["verbose"] < 0)
							 | 
						|||
| 
								 | 
							
								return getList(il)
							 | 
						|||
| 
								 | 
							
								if (!isVerbose) {
							 | 
						|||
| 
								 | 
							
								r = translation
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								wShowOriginal = Option["show-original"]
							 | 
						|||
| 
								 | 
							
								wShowTranslation = Option["show-translation"]
							 | 
						|||
| 
								 | 
							
								wShowLanguages = Option["show-languages"]
							 | 
						|||
| 
								 | 
							
								wShowDictionary = Option["show-dictionary"]
							 | 
						|||
| 
								 | 
							
								if (wShowOriginal) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display original text")
							 | 
						|||
| 
								 | 
							
								r = r prettify("original", s(text, il))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowTranslation) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display major translation")
							 | 
						|||
| 
								 | 
							
								r = r prettify("translation", s(translation, tl))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowLanguages) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display source language -> target language")
							 | 
						|||
| 
								 | 
							
								temp = Option["fmt-languages"]
							 | 
						|||
| 
								 | 
							
								if (!temp) temp = "[ %s -> %t ]"
							 | 
						|||
| 
								 | 
							
								split(temp, group, /(%s|%S|%t|%T)/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[1])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%s/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getDisplay(il))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%S/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getName(il))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[2])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%t/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getDisplay(tl))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%T/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getName(tl))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[3])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowDictionary && false) {
							 | 
						|||
| 
								 | 
							
								dicContent = getResponse(text, il, _tl, _hl)
							 | 
						|||
| 
								 | 
							
								tokenize(dicTokens, dicContent)
							 | 
						|||
| 
								 | 
							
								parseJson(dicAst, dicTokens)
							 | 
						|||
| 
								 | 
							
								if (anything(dicAst)) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display dictionary entries")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (toSpeech) {
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["text"] = translation
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["tl"] = tl
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								BEGIN { provides("yandex") }
							 | 
						|||
| 
								 | 
							
								function genSID(    content, group, temp) {
							 | 
						|||
| 
								 | 
							
								content = curl("http://translate.yandex.com")
							 | 
						|||
| 
								 | 
							
								match(content, /SID:[[:space:]]*'([^']+)'/, group)
							 | 
						|||
| 
								 | 
							
								if (group[1]) {
							 | 
						|||
| 
								 | 
							
								split(group[1], temp, ".")
							 | 
						|||
| 
								 | 
							
								SID = reverse(temp[1]) "." reverse(temp[2]) "." reverse(temp[3])
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Oops! Something went wrong and I can't translate it for you :(")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function yandexInit() {
							 | 
						|||
| 
								 | 
							
								genSID()
							 | 
						|||
| 
								 | 
							
								YandexWebTranslate = "z5h64q92x9.net"
							 | 
						|||
| 
								 | 
							
								HttpProtocol = "http://"
							 | 
						|||
| 
								 | 
							
								HttpHost = "translate.yandex.net"
							 | 
						|||
| 
								 | 
							
								HttpPort = 80
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function yandexRequestUrl(text, sl, tl, hl,    group) {
							 | 
						|||
| 
								 | 
							
								split(sl, group, "-"); sl = group[1]
							 | 
						|||
| 
								 | 
							
								split(tl, group, "-"); tl = group[1]
							 | 
						|||
| 
								 | 
							
								return HttpPathPrefix "/api/v1/tr.json/translate?"\
							 | 
						|||
| 
								 | 
							
								"id=" SID "-0-0&srv=tr-text"\
							 | 
						|||
| 
								 | 
							
								"&text=" preprocess(text) "&lang=" (sl == "auto" ? tl : sl "-" tl)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function yandexGetDictionaryResponse(text, sl, tl, hl,    content, header, isBody, url) {
							 | 
						|||
| 
								 | 
							
								split(sl, group, "-"); sl = group[1]
							 | 
						|||
| 
								 | 
							
								split(tl, group, "-"); tl = group[1]
							 | 
						|||
| 
								 | 
							
								url = HttpPathPrefix "/dicservice.json/lookup?"\
							 | 
						|||
| 
								 | 
							
								"sid=" SID\
							 | 
						|||
| 
								 | 
							
								"&text=" preprocess(text) "&lang=" (sl == "auto" ? tl : sl "-" tl)
							 | 
						|||
| 
								 | 
							
								header = "GET " url " HTTP/1.1\n"\
							 | 
						|||
| 
								 | 
							
								"Host: " "dictionary.yandex.net" "\n"\
							 | 
						|||
| 
								 | 
							
								"Connection: close\n"
							 | 
						|||
| 
								 | 
							
								if (Option["user-agent"])
							 | 
						|||
| 
								 | 
							
								header = header "User-Agent: " Option["user-agent"] "\n"
							 | 
						|||
| 
								 | 
							
								content = NULLSTR; isBody = 0
							 | 
						|||
| 
								 | 
							
								print header |& HttpService
							 | 
						|||
| 
								 | 
							
								while ((HttpService |& getline) > 0) {
							 | 
						|||
| 
								 | 
							
								if (isBody)
							 | 
						|||
| 
								 | 
							
								content = content ? content "\n" $0 : $0
							 | 
						|||
| 
								 | 
							
								else if (length($0) <= 1)
							 | 
						|||
| 
								 | 
							
								isBody = 1
							 | 
						|||
| 
								 | 
							
								l(sprintf("%4s bytes > %s", length($0), $0))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								close(HttpService)
							 | 
						|||
| 
								 | 
							
								return assert(content, "[ERROR] Null response.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function yandexTTSUrl(text, tl,
							 | 
						|||
| 
								 | 
							
								speaker, emotion, i, group) {
							 | 
						|||
| 
								 | 
							
								speaker = NULLSTR
							 | 
						|||
| 
								 | 
							
								emotion = NULLSTR
							 | 
						|||
| 
								 | 
							
								split(Option["narrator"], group, ",")
							 | 
						|||
| 
								 | 
							
								for (i in group) {
							 | 
						|||
| 
								 | 
							
								if (group[i] ~ /^(g(ood)?|n(eutral)?|e(vil)?)$/)
							 | 
						|||
| 
								 | 
							
								emotion = group[i]
							 | 
						|||
| 
								 | 
							
								else if (group[i] ~ /^(f(emale)?|w(oman)?)$/)
							 | 
						|||
| 
								 | 
							
								speaker = "alyss"
							 | 
						|||
| 
								 | 
							
								else if (group[i] ~ /^m(ale|an)?$/)
							 | 
						|||
| 
								 | 
							
								speaker = "zahar"
							 | 
						|||
| 
								 | 
							
								else
							 | 
						|||
| 
								 | 
							
								speaker = group[i]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								switch (tl) {
							 | 
						|||
| 
								 | 
							
								case "ar": tl = "ar_AE"; break
							 | 
						|||
| 
								 | 
							
								case "cs": tl = "cs_CZ"; break
							 | 
						|||
| 
								 | 
							
								case "da": tl = "da_DK"; break
							 | 
						|||
| 
								 | 
							
								case "de": tl = "de_DE"; break
							 | 
						|||
| 
								 | 
							
								case "el": tl = "el_GR"; break
							 | 
						|||
| 
								 | 
							
								case "en": tl = "en_GB"; break
							 | 
						|||
| 
								 | 
							
								case "es": tl = "es_ES"; break
							 | 
						|||
| 
								 | 
							
								case "fi": tl = "fi_FI"; break
							 | 
						|||
| 
								 | 
							
								case "fr": tl = "fr_FR"; break
							 | 
						|||
| 
								 | 
							
								case "it": tl = "it_IT"; break
							 | 
						|||
| 
								 | 
							
								case "nl": tl = "nl_NL"; break
							 | 
						|||
| 
								 | 
							
								case "no": tl = "no_NO"; break
							 | 
						|||
| 
								 | 
							
								case "pl": tl = "pl_PL"; break
							 | 
						|||
| 
								 | 
							
								case "pt": tl = "pt_PT"; break
							 | 
						|||
| 
								 | 
							
								case "ru": tl = "ru_RU"; break
							 | 
						|||
| 
								 | 
							
								case "sv": tl = "sv_SE"; break
							 | 
						|||
| 
								 | 
							
								case "tr": tl = "tr_TR"; break
							 | 
						|||
| 
								 | 
							
								default: tl = NULLSTR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return HttpProtocol "tts.voicetech.yandex.net" "/tts?"\
							 | 
						|||
| 
								 | 
							
								"text=" preprocess(text) (tl ? "&lang=" tl : tl)\
							 | 
						|||
| 
								 | 
							
								(speaker ? "&speaker=" speaker : speaker)\
							 | 
						|||
| 
								 | 
							
								(emotion ? "&emotion=" emotion : emotion)\
							 | 
						|||
| 
								 | 
							
								"&format=mp3" "&quality=hi"
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function yandexWebTranslateUrl(uri, sl, tl, hl) {
							 | 
						|||
| 
								 | 
							
								gsub(/:\/\//, "/", uri)
							 | 
						|||
| 
								 | 
							
								return HttpProtocol YandexWebTranslate "/proxy_u/"\
							 | 
						|||
| 
								 | 
							
								(sl == "auto" ? tl : sl "-" tl)"/" uri
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function yandexTranslate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl,
							 | 
						|||
| 
								 | 
							
								r,
							 | 
						|||
| 
								 | 
							
								content, tokens, ast,
							 | 
						|||
| 
								 | 
							
								_sl, _tl, _hl, il,
							 | 
						|||
| 
								 | 
							
								translation,
							 | 
						|||
| 
								 | 
							
								wShowOriginal, wShowTranslation, wShowLanguages,
							 | 
						|||
| 
								 | 
							
								wShowDictionary, dicContent, dicTokens, dicAst,
							 | 
						|||
| 
								 | 
							
								i, syn, mean,
							 | 
						|||
| 
								 | 
							
								group, temp) {
							 | 
						|||
| 
								 | 
							
								if (!getCode(tl)) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] Unknown target language code: " tl)
							 | 
						|||
| 
								 | 
							
								} else if (isRTL(tl)) {
							 | 
						|||
| 
								 | 
							
								if (!FriBidi)
							 | 
						|||
| 
								 | 
							
								w("[WARNING] " getName(tl) " is a right-to-left language, but FriBidi is not found.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								_sl = getCode(sl); if (!_sl) _sl = sl
							 | 
						|||
| 
								 | 
							
								_tl = getCode(tl); if (!_tl) _tl = tl
							 | 
						|||
| 
								 | 
							
								_hl = getCode(hl); if (!_hl) _hl = hl
							 | 
						|||
| 
								 | 
							
								content = getResponse(text, _sl, _tl, _hl)
							 | 
						|||
| 
								 | 
							
								if (Option["dump"])
							 | 
						|||
| 
								 | 
							
								return content
							 | 
						|||
| 
								 | 
							
								tokenize(tokens, content)
							 | 
						|||
| 
								 | 
							
								parseJson(ast, tokens)
							 | 
						|||
| 
								 | 
							
								l(content, "content", 1, 1)
							 | 
						|||
| 
								 | 
							
								l(tokens, "tokens", 1, 0, 1)
							 | 
						|||
| 
								 | 
							
								l(ast, "ast")
							 | 
						|||
| 
								 | 
							
								if (!isarray(ast) || !anything(ast)) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Oops! Something went wrong and I can't translate it for you :(")
							 | 
						|||
| 
								 | 
							
								ExitCode = 1
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (ast[0 SUBSEP "code"] != "200") {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] " unparameterize(ast[0 SUBSEP "message"]))
							 | 
						|||
| 
								 | 
							
								ExitCode = 1
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								translation = unparameterize(ast[0 SUBSEP "text" SUBSEP 0])
							 | 
						|||
| 
								 | 
							
								split(unparameterize(ast[0 SUBSEP "lang"]), group, "-")
							 | 
						|||
| 
								 | 
							
								returnIl[0] = il = group[1]
							 | 
						|||
| 
								 | 
							
								if (Option["verbose"] < 0)
							 | 
						|||
| 
								 | 
							
								return getList(il)
							 | 
						|||
| 
								 | 
							
								if (!isVerbose) {
							 | 
						|||
| 
								 | 
							
								r = translation
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								wShowOriginal = Option["show-original"]
							 | 
						|||
| 
								 | 
							
								wShowTranslation = Option["show-translation"]
							 | 
						|||
| 
								 | 
							
								wShowLanguages = Option["show-languages"]
							 | 
						|||
| 
								 | 
							
								wShowDictionary = Option["show-dictionary"]
							 | 
						|||
| 
								 | 
							
								if (wShowOriginal) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display original text")
							 | 
						|||
| 
								 | 
							
								r = r prettify("original", s(text, il))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowTranslation) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display major translation")
							 | 
						|||
| 
								 | 
							
								r = r prettify("translation", s(translation, tl))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowLanguages) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display source language -> target language")
							 | 
						|||
| 
								 | 
							
								temp = Option["fmt-languages"]
							 | 
						|||
| 
								 | 
							
								if (!temp) temp = "[ %s -> %t ]"
							 | 
						|||
| 
								 | 
							
								split(temp, group, /(%s|%S|%t|%T)/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[1])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%s/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getDisplay(il))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%S/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getName(il))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[2])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%t/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getDisplay(tl))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%T/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getName(tl))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[3])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowDictionary) {
							 | 
						|||
| 
								 | 
							
								dicContent = yandexGetDictionaryResponse(text, _sl, _tl, _hl)
							 | 
						|||
| 
								 | 
							
								tokenize(dicTokens, dicContent)
							 | 
						|||
| 
								 | 
							
								parseJson(dicAst, dicTokens)
							 | 
						|||
| 
								 | 
							
								if (anything(dicAst)) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display dictionary entries")
							 | 
						|||
| 
								 | 
							
								saveSortedIn = PROCINFO["sorted_in"]
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = "@ind_num_asc"
							 | 
						|||
| 
								 | 
							
								for (i in dicAst) {
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "def" SUBSEP "[[:digit:]]+" SUBSEP\
							 | 
						|||
| 
								 | 
							
								"pos$") {
							 | 
						|||
| 
								 | 
							
								r = r RS prettify("dictionary-word-class", s((literal(dicAst[i])), hl))
							 | 
						|||
| 
								 | 
							
								syn = mean = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "def" SUBSEP "[[:digit:]]+" SUBSEP\
							 | 
						|||
| 
								 | 
							
								"tr" SUBSEP "[[:digit:]]+" SUBSEP\
							 | 
						|||
| 
								 | 
							
								"mean" SUBSEP "[[:digit:]]+" SUBSEP "text") {
							 | 
						|||
| 
								 | 
							
								if (mean) {
							 | 
						|||
| 
								 | 
							
								mean = mean prettify("dictionary-explanation", ", ")\
							 | 
						|||
| 
								 | 
							
								prettify("dictionary-explanation-item", s((literal(dicAst[i])), sl))
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								mean = prettify("dictionary-explanation-item", s((literal(dicAst[i])), sl))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "def" SUBSEP "[[:digit:]]+" SUBSEP\
							 | 
						|||
| 
								 | 
							
								"tr" SUBSEP "[[:digit:]]+" SUBSEP\
							 | 
						|||
| 
								 | 
							
								"syn" SUBSEP "[[:digit:]]+" SUBSEP "text") {
							 | 
						|||
| 
								 | 
							
								if (syn) {
							 | 
						|||
| 
								 | 
							
								syn = syn prettify("dictionary-explanation", ", ")\
							 | 
						|||
| 
								 | 
							
								prettify("dictionary-word", s((literal(dicAst[i])), il))
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								syn = prettify("dictionary-word", s((literal(dicAst[i])), il))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "def" SUBSEP "[[:digit:]]+" SUBSEP\
							 | 
						|||
| 
								 | 
							
								"tr" SUBSEP "[[:digit:]]+" SUBSEP "text$") {
							 | 
						|||
| 
								 | 
							
								text = prettify("dictionary-word", s((literal(dicAst[i])), il))
							 | 
						|||
| 
								 | 
							
								if (syn) {
							 | 
						|||
| 
								 | 
							
								r = r RS ins(1, text prettify("dictionary-explanation", ", ") syn)
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								r = r RS ins(1, text)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								r = r RS ins(2, mean)
							 | 
						|||
| 
								 | 
							
								syn = mean = ""
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = saveSortedIn
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (toSpeech) {
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["text"] = translation
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["tl"] = tl
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								BEGIN { provides("apertium") }
							 | 
						|||
| 
								 | 
							
								function apertiumInit() {
							 | 
						|||
| 
								 | 
							
								HttpProtocol = "http://"
							 | 
						|||
| 
								 | 
							
								HttpHost = "www.apertium.org"
							 | 
						|||
| 
								 | 
							
								HttpPort = 80
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function apertiumRequestUrl(text, sl, tl, hl) {
							 | 
						|||
| 
								 | 
							
								return HttpPathPrefix "/apy/translate?"\
							 | 
						|||
| 
								 | 
							
								"langpair=" preprocess(sl) "|" preprocess(tl)\
							 | 
						|||
| 
								 | 
							
								"&q=" preprocess(text)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function apertiumTTSUrl(text, tl,    narrator) {
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function apertiumWebTranslateUrl(uri, sl, tl, hl) {
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function apertiumTranslate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl,
							 | 
						|||
| 
								 | 
							
								r,
							 | 
						|||
| 
								 | 
							
								content, tokens, ast,
							 | 
						|||
| 
								 | 
							
								_sl, _tl, _hl, il,
							 | 
						|||
| 
								 | 
							
								translation,
							 | 
						|||
| 
								 | 
							
								wShowOriginal, wShowTranslation, wShowLanguages,
							 | 
						|||
| 
								 | 
							
								group, temp) {
							 | 
						|||
| 
								 | 
							
								if (!getCode(tl)) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] Unknown target language code: " tl)
							 | 
						|||
| 
								 | 
							
								} else if (isRTL(tl)) {
							 | 
						|||
| 
								 | 
							
								if (!FriBidi)
							 | 
						|||
| 
								 | 
							
								w("[WARNING] " getName(tl) " is a right-to-left language, but FriBidi is not found.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								_sl = getCode(sl); if (!_sl) _sl = sl
							 | 
						|||
| 
								 | 
							
								_tl = getCode(tl); if (!_tl) _tl = tl
							 | 
						|||
| 
								 | 
							
								_hl = getCode(hl); if (!_hl) _hl = hl
							 | 
						|||
| 
								 | 
							
								_sl = "auto" == _sl ? "en" : _sl
							 | 
						|||
| 
								 | 
							
								content = getResponse(text, _sl, _tl, _hl)
							 | 
						|||
| 
								 | 
							
								if (Option["dump"])
							 | 
						|||
| 
								 | 
							
								return content
							 | 
						|||
| 
								 | 
							
								tokenize(tokens, content)
							 | 
						|||
| 
								 | 
							
								parseJson(ast, tokens)
							 | 
						|||
| 
								 | 
							
								l(content, "content", 1, 1)
							 | 
						|||
| 
								 | 
							
								l(tokens, "tokens", 1, 0, 1)
							 | 
						|||
| 
								 | 
							
								l(ast, "ast")
							 | 
						|||
| 
								 | 
							
								if (!isarray(ast) || !anything(ast)) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Oops! Something went wrong and I can't translate it for you :(")
							 | 
						|||
| 
								 | 
							
								ExitCode = 1
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								translation = uprintf(unquote(unparameterize(ast[0 SUBSEP "responseData" SUBSEP "translatedText"])))
							 | 
						|||
| 
								 | 
							
								returnIl[0] = il = _sl
							 | 
						|||
| 
								 | 
							
								if (Option["verbose"] < 0)
							 | 
						|||
| 
								 | 
							
								return getList(il)
							 | 
						|||
| 
								 | 
							
								if (!isVerbose) {
							 | 
						|||
| 
								 | 
							
								r = translation
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								wShowOriginal = Option["show-original"]
							 | 
						|||
| 
								 | 
							
								wShowTranslation = Option["show-translation"]
							 | 
						|||
| 
								 | 
							
								wShowLanguages = Option["show-languages"]
							 | 
						|||
| 
								 | 
							
								if (wShowOriginal) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display original text")
							 | 
						|||
| 
								 | 
							
								r = r prettify("original", s(text, il))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowTranslation) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display major translation")
							 | 
						|||
| 
								 | 
							
								r = r prettify("translation", s(translation, tl))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowLanguages) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display source language -> target language")
							 | 
						|||
| 
								 | 
							
								temp = Option["fmt-languages"]
							 | 
						|||
| 
								 | 
							
								if (!temp) temp = "[ %s -> %t ]"
							 | 
						|||
| 
								 | 
							
								split(temp, group, /(%s|%S|%t|%T)/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[1])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%s/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getDisplay(il))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%S/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getName(il))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[2])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%t/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getDisplay(tl))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%T/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getName(tl))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[3])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (toSpeech) {
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["text"] = translation
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["tl"] = tl
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								BEGIN {
							 | 
						|||
| 
								 | 
							
								provides("spell")
							 | 
						|||
| 
								 | 
							
								provides("aspell")
							 | 
						|||
| 
								 | 
							
								provides("hunspell")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function spellInit() {
							 | 
						|||
| 
								 | 
							
								Ispell = detectProgram("aspell", "--version") ? "aspell" :
							 | 
						|||
| 
								 | 
							
								(detectProgram("hunspell", "--version") ? "hunspell" : "")
							 | 
						|||
| 
								 | 
							
								if (!Ispell) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Spell checker (aspell or hunspell) not found.")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function aspellInit() {
							 | 
						|||
| 
								 | 
							
								if (!(Ispell = detectProgram("aspell", "--version") ? "aspell" : "")) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Spell checker (aspell) not found.")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function hunspellInit() {
							 | 
						|||
| 
								 | 
							
								if (!(Ispell = detectProgram("hunspell", "--version") ? "hunspell" : "")) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Spell checker (hunspell) not found.")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function spellTranslate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl,
							 | 
						|||
| 
								 | 
							
								args, i, j, r, line, group, word, sug) {
							 | 
						|||
| 
								 | 
							
								args = " -a" (sl != "auto" ? " -d " sl : "")
							 | 
						|||
| 
								 | 
							
								if (system("echo" PIPE Ispell args SUPOUT SUPERR)) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] No dictionary for language: " sl)
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								i = 1
							 | 
						|||
| 
								 | 
							
								r = ""
							 | 
						|||
| 
								 | 
							
								while ((("echo " parameterize(text) PIPE Ispell args SUPERR) |& getline line) > 0) {
							 | 
						|||
| 
								 | 
							
								match(line,
							 | 
						|||
| 
								 | 
							
								/^& (.*) [[:digit:]]+ [[:digit:]]+: ([^,]+)(, ([^,]+))?(, ([^,]+))?/,
							 | 
						|||
| 
								 | 
							
								group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								ExitCode = 1
							 | 
						|||
| 
								 | 
							
								word = group[1]
							 | 
						|||
| 
								 | 
							
								sug = "[" group[2]
							 | 
						|||
| 
								 | 
							
								if (group[4]) sug = sug "|" group[4]
							 | 
						|||
| 
								 | 
							
								if (group[6]) sug = sug "|" group[6]
							 | 
						|||
| 
								 | 
							
								sug = sug "]"
							 | 
						|||
| 
								 | 
							
								j = i + index(substr(text, i), word) - 1
							 | 
						|||
| 
								 | 
							
								r = r substr(text, i, j - i)
							 | 
						|||
| 
								 | 
							
								r = r ansi("bold", ansi("red", word)) ansi("yellow", sug)
							 | 
						|||
| 
								 | 
							
								i = j + length(word)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								r = r substr(text, i)
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function aspellTranslate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl) {
							 | 
						|||
| 
								 | 
							
								return spellTranslate(text, sl, tl, hl)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function hunspellTranslate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl) {
							 | 
						|||
| 
								 | 
							
								return spellTranslate(text, sl, tl, hl)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								BEGIN { provides("deepl") }
							 | 
						|||
| 
								 | 
							
								function deeplInit() {
							 | 
						|||
| 
								 | 
							
								HttpProtocol = "http://"
							 | 
						|||
| 
								 | 
							
								HttpHost = "www.deepl.com"
							 | 
						|||
| 
								 | 
							
								HttpPort = 80
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function deeplRequestUrl(text, sl, tl, hl) {
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function deeplTTSUrl(text, tl,    narrator) {
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function deeplWebTranslateUrl(uri, sl, tl, hl) {
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function deeplPost(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								content, data, url) {
							 | 
						|||
| 
								 | 
							
								data = "{\"jsonrpc\":\"2.0\",\"method\":\"LMT_handle_jobs\","
							 | 
						|||
| 
								 | 
							
								data = data "\"params\":{\"jobs\":[{\"kind\":\"default\","
							 | 
						|||
| 
								 | 
							
								data = data "\"raw_en_sentence\":" parameterize(text, "\"") "}],"
							 | 
						|||
| 
								 | 
							
								data = data "\"lang\":{\"user_preferred_langs\":[\"" hl "\"],"
							 | 
						|||
| 
								 | 
							
								data = data "\"source_lang_user_selected\":\"" sl "\","
							 | 
						|||
| 
								 | 
							
								data = data "\"target_lang\":\"" tl "\"},"
							 | 
						|||
| 
								 | 
							
								data = data "\"priority\":1},\"id\":1}"
							 | 
						|||
| 
								 | 
							
								l(data)
							 | 
						|||
| 
								 | 
							
								url = "https://www.deepl.com/jsonrpc"
							 | 
						|||
| 
								 | 
							
								content = curlPost(url, data)
							 | 
						|||
| 
								 | 
							
								return assert(content, "[ERROR] Null response.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function deeplTranslate(text, sl, tl, hl,
							 | 
						|||
| 
								 | 
							
								isVerbose, toSpeech, returnPlaylist, returnIl,
							 | 
						|||
| 
								 | 
							
								r,
							 | 
						|||
| 
								 | 
							
								content, tokens, ast,
							 | 
						|||
| 
								 | 
							
								_sl, _tl, _hl, il,
							 | 
						|||
| 
								 | 
							
								translation, translations,
							 | 
						|||
| 
								 | 
							
								wShowOriginal, wShowTranslation,
							 | 
						|||
| 
								 | 
							
								wShowLanguages, wShowAlternatives,
							 | 
						|||
| 
								 | 
							
								group, temp) {
							 | 
						|||
| 
								 | 
							
								if (!getCode(tl)) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] Unknown target language code: " tl)
							 | 
						|||
| 
								 | 
							
								} else if (isRTL(tl)) {
							 | 
						|||
| 
								 | 
							
								if (!FriBidi)
							 | 
						|||
| 
								 | 
							
								w("[WARNING] " getName(tl) " is a right-to-left language, but FriBidi is not found.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								_sl = getCode(sl); if (!_sl) _sl = sl
							 | 
						|||
| 
								 | 
							
								_tl = getCode(tl); if (!_tl) _tl = tl
							 | 
						|||
| 
								 | 
							
								_hl = getCode(hl); if (!_hl) _hl = hl
							 | 
						|||
| 
								 | 
							
								if (_sl != "auto") _sl = toupper(_sl)
							 | 
						|||
| 
								 | 
							
								if (_tl != "auto") _tl = toupper(_tl)
							 | 
						|||
| 
								 | 
							
								if (_hl != "auto") _hl = toupper(_hl)
							 | 
						|||
| 
								 | 
							
								content = deeplPost(text, _sl, _tl, _hl)
							 | 
						|||
| 
								 | 
							
								if (Option["dump"])
							 | 
						|||
| 
								 | 
							
								return content
							 | 
						|||
| 
								 | 
							
								tokenize(tokens, content)
							 | 
						|||
| 
								 | 
							
								parseJson(ast, tokens)
							 | 
						|||
| 
								 | 
							
								l(content, "content", 1, 1)
							 | 
						|||
| 
								 | 
							
								l(tokens, "tokens", 1, 0, 1)
							 | 
						|||
| 
								 | 
							
								l(ast, "ast")
							 | 
						|||
| 
								 | 
							
								if (!isarray(ast) || !anything(ast)) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Oops! Something went wrong and I can't translate it for you :(")
							 | 
						|||
| 
								 | 
							
								ExitCode = 1
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								saveSortedIn = PROCINFO["sorted_in"]
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = "compareByIndexFields"
							 | 
						|||
| 
								 | 
							
								for (i in ast) {
							 | 
						|||
| 
								 | 
							
								if (i ~ "^0" SUBSEP "result" SUBSEP "translations" SUBSEP 0 SUBSEP "beams" SUBSEP "[[:digit:]]+" SUBSEP "postprocessed_sentence$") {
							 | 
						|||
| 
								 | 
							
								append(translations, uprintf(unquote(unparameterize(ast[i]))))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								PROCINFO["sorted_in"] = saveSortedIn
							 | 
						|||
| 
								 | 
							
								translation = translations[0]
							 | 
						|||
| 
								 | 
							
								returnIl[0] = il = tolower(unparameterize(ast[0 SUBSEP "result" SUBSEP "source_lang"]))
							 | 
						|||
| 
								 | 
							
								if (Option["verbose"] < 0)
							 | 
						|||
| 
								 | 
							
								return getList(il)
							 | 
						|||
| 
								 | 
							
								if (!isVerbose) {
							 | 
						|||
| 
								 | 
							
								r = translation
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								wShowOriginal = Option["show-original"]
							 | 
						|||
| 
								 | 
							
								wShowTranslation = Option["show-translation"]
							 | 
						|||
| 
								 | 
							
								wShowLanguages = Option["show-languages"]
							 | 
						|||
| 
								 | 
							
								wShowAlternatives = Option["show-alternatives"]
							 | 
						|||
| 
								 | 
							
								if (length(translations) <= 1) wShowAlternatives = 0
							 | 
						|||
| 
								 | 
							
								if (wShowOriginal) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display original text")
							 | 
						|||
| 
								 | 
							
								r = r prettify("original", s(text, il))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowTranslation) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display major translation")
							 | 
						|||
| 
								 | 
							
								r = r prettify("translation", s(translation, tl))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowLanguages) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display source language -> target language")
							 | 
						|||
| 
								 | 
							
								temp = Option["fmt-languages"]
							 | 
						|||
| 
								 | 
							
								if (!temp) temp = "[ %s -> %t ]"
							 | 
						|||
| 
								 | 
							
								split(temp, group, /(%s|%S|%t|%T)/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[1])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%s/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getDisplay(il))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%S/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-sl", getName(il))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[2])
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%t/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getDisplay(tl))
							 | 
						|||
| 
								 | 
							
								if (temp ~ /%T/)
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages-tl", getName(tl))
							 | 
						|||
| 
								 | 
							
								r = r prettify("languages", group[3])
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (wShowAlternatives) {
							 | 
						|||
| 
								 | 
							
								if (r) r = r RS
							 | 
						|||
| 
								 | 
							
								r = r m("-- display alternative translations")
							 | 
						|||
| 
								 | 
							
								r = r RS ins(1, prettify("alternatives-translations-item", translations[1]))
							 | 
						|||
| 
								 | 
							
								for (i = 2; i < length(translations); i++)
							 | 
						|||
| 
								 | 
							
								r = r RS ins(1, prettify("alternatives-translations-item", translations[i]))
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (toSpeech) {
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["text"] = translation
							 | 
						|||
| 
								 | 
							
								returnPlaylist[0]["tl"] = tl
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								return r
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function loadOptions(script,    i, j, tokens, name, value) {
							 | 
						|||
| 
								 | 
							
								tokenize(tokens, script)
							 | 
						|||
| 
								 | 
							
								for (i in tokens) {
							 | 
						|||
| 
								 | 
							
								if (tokens[i] ~ /^:/) {
							 | 
						|||
| 
								 | 
							
								name = substr(tokens[i], 2)
							 | 
						|||
| 
								 | 
							
								value = tokens[i + 1]
							 | 
						|||
| 
								 | 
							
								if (value ~ /^[+-]?((0|[1-9][0-9]*)|[.][0-9]*|(0|[1-9][0-9]*)[.][0-9]*)([Ee][+-]?[0-9]+)?$/) {
							 | 
						|||
| 
								 | 
							
								delete Option[name]
							 | 
						|||
| 
								 | 
							
								Option[name] = value
							 | 
						|||
| 
								 | 
							
								} else if (value == "false" || value == "true") {
							 | 
						|||
| 
								 | 
							
								delete Option[name]
							 | 
						|||
| 
								 | 
							
								Option[name] = yn(value)
							 | 
						|||
| 
								 | 
							
								} else if (value ~ /^".*"$/) {
							 | 
						|||
| 
								 | 
							
								delete Option[name]
							 | 
						|||
| 
								 | 
							
								Option[name] = literal(value)
							 | 
						|||
| 
								 | 
							
								} else if (value == "[") {
							 | 
						|||
| 
								 | 
							
								delete Option[name]
							 | 
						|||
| 
								 | 
							
								for (j = 1; tokens[i + j + 1] && tokens[i + j + 1] != "]"; j++) {
							 | 
						|||
| 
								 | 
							
								if (tokens[i + j + 1] ~ /^".*"$/)
							 | 
						|||
| 
								 | 
							
								Option[name][j] = literal(tokens[i + j + 1])
							 | 
						|||
| 
								 | 
							
								else {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Malformed configuration.")
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Malformed configuration.")
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function upgrade(    i, newVersion, registry, tokens) {
							 | 
						|||
| 
								 | 
							
								RegistryIndex = "https://raw.githubusercontent.com/soimort/translate-shell/registry/index.trans"
							 | 
						|||
| 
								 | 
							
								registry = curl(RegistryIndex)
							 | 
						|||
| 
								 | 
							
								if (!registry) {
							 | 
						|||
| 
								 | 
							
								e("[ERROR] Failed to check for upgrade.")
							 | 
						|||
| 
								 | 
							
								ExitCode = 1
							 | 
						|||
| 
								 | 
							
								return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								tokenize(tokens, registry)
							 | 
						|||
| 
								 | 
							
								for (i in tokens)
							 | 
						|||
| 
								 | 
							
								if (tokens[i] == ":translate-shell")
							 | 
						|||
| 
								 | 
							
								newVersion = literal(tokens[i + 1])
							 | 
						|||
| 
								 | 
							
								if (newerVersion(newVersion, Version)) {
							 | 
						|||
| 
								 | 
							
								w("Current version: \t" Version)
							 | 
						|||
| 
								 | 
							
								w("New version available: \t" newVersion)
							 | 
						|||
| 
								 | 
							
								w("Download from: \t" "https://www.soimort.org/translate-shell/trans")
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								w("Current version: \t" Version)
							 | 
						|||
| 
								 | 
							
								w("Already up-to-date.")
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function welcome() {
							 | 
						|||
| 
								 | 
							
								if (Option["fmt-welcome-message"])
							 | 
						|||
| 
								 | 
							
								print prettify("welcome-message", Option["fmt-welcome-message"]) > STDERR
							 | 
						|||
| 
								 | 
							
								if (Option["fmt-welcome-submessage"])
							 | 
						|||
| 
								 | 
							
								print prettify("welcome-submessage", Option["fmt-welcome-submessage"]) > STDERR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function prompt(    i, p, temp) {
							 | 
						|||
| 
								 | 
							
								p = Option["fmt-prompt"]
							 | 
						|||
| 
								 | 
							
								if (p ~ /%a/) gsub(/%a/, strftime("%a"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%A/) gsub(/%A/, strftime("%A"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%b/) gsub(/%b/, strftime("%b"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%B/) gsub(/%B/, strftime("%B"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%c/) gsub(/%c/, strftime("%c"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%C/) gsub(/%C/, strftime("%C"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%d/) gsub(/%d/, strftime("%d"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%D/) gsub(/%D/, strftime("%D"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%e/) gsub(/%e/, strftime("%e"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%F/) gsub(/%F/, strftime("%F"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%g/) gsub(/%g/, strftime("%g"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%G/) gsub(/%G/, strftime("%G"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%h/) gsub(/%h/, strftime("%h"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%H/) gsub(/%H/, strftime("%H"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%I/) gsub(/%I/, strftime("%I"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%j/) gsub(/%j/, strftime("%j"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%m/) gsub(/%m/, strftime("%m"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%M/) gsub(/%M/, strftime("%M"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%n/) gsub(/%n/, strftime("%n"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%p/) gsub(/%p/, strftime("%p"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%r/) gsub(/%r/, strftime("%r"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%R/) gsub(/%R/, strftime("%R"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%u/) gsub(/%u/, strftime("%u"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%U/) gsub(/%U/, strftime("%U"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%V/) gsub(/%V/, strftime("%V"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%w/) gsub(/%w/, strftime("%w"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%W/) gsub(/%W/, strftime("%W"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%x/) gsub(/%x/, strftime("%x"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%X/) gsub(/%X/, strftime("%X"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%y/) gsub(/%y/, strftime("%y"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%Y/) gsub(/%Y/, strftime("%Y"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%z/) gsub(/%z/, strftime("%z"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%Z/) gsub(/%Z/, strftime("%Z"), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%_/)
							 | 
						|||
| 
								 | 
							
								gsub(/%_/, showTranslationsOf(Option["hl"]), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%l/)
							 | 
						|||
| 
								 | 
							
								gsub(/%l/, getDisplay(Option["hl"]), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%L/)
							 | 
						|||
| 
								 | 
							
								gsub(/%L/, getName(Option["hl"]), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%S/)
							 | 
						|||
| 
								 | 
							
								gsub(/%S/, getName(Option["sl"]), p)
							 | 
						|||
| 
								 | 
							
								if (p ~ /%t/) {
							 | 
						|||
| 
								 | 
							
								temp = getDisplay(Option["tl"][1])
							 | 
						|||
| 
								 | 
							
								for (i = 2; i <= length(Option["tl"]); i++)
							 | 
						|||
| 
								 | 
							
								temp = temp "+" getDisplay(Option["tl"][i])
							 | 
						|||
| 
								 | 
							
								gsub(/%t/, temp, p)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (p ~ /%T/) {
							 | 
						|||
| 
								 | 
							
								temp = getName(Option["tl"][1])
							 | 
						|||
| 
								 | 
							
								for (i = 2; i <= length(Option["tl"]); i++)
							 | 
						|||
| 
								 | 
							
								temp = temp "+" getName(Option["tl"][i])
							 | 
						|||
| 
								 | 
							
								gsub(/%T/, temp, p)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (p ~ /%,/) {
							 | 
						|||
| 
								 | 
							
								temp = getDisplay(Option["tl"][1])
							 | 
						|||
| 
								 | 
							
								for (i = 2; i <= length(Option["tl"]); i++)
							 | 
						|||
| 
								 | 
							
								temp = temp "," getDisplay(Option["tl"][i])
							 | 
						|||
| 
								 | 
							
								gsub(/%,/, temp, p)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (p ~ /%</) {
							 | 
						|||
| 
								 | 
							
								temp = getName(Option["tl"][1])
							 | 
						|||
| 
								 | 
							
								for (i = 2; i <= length(Option["tl"]); i++)
							 | 
						|||
| 
								 | 
							
								temp = temp "," getName(Option["tl"][i])
							 | 
						|||
| 
								 | 
							
								gsub(/%</, temp, p)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (p ~ /%\//) {
							 | 
						|||
| 
								 | 
							
								temp = getDisplay(Option["tl"][1])
							 | 
						|||
| 
								 | 
							
								for (i = 2; i <= length(Option["tl"]); i++)
							 | 
						|||
| 
								 | 
							
								temp = temp "/" getDisplay(Option["tl"][i])
							 | 
						|||
| 
								 | 
							
								gsub(/%\//, temp, p)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (p ~ /%\?/) {
							 | 
						|||
| 
								 | 
							
								temp = getName(Option["tl"][1])
							 | 
						|||
| 
								 | 
							
								for (i = 2; i <= length(Option["tl"]); i++)
							 | 
						|||
| 
								 | 
							
								temp = temp "/" getName(Option["tl"][i])
							 | 
						|||
| 
								 | 
							
								gsub(/%\?/, temp, p)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								printf(prettify("prompt", p), getDisplay(Option["sl"])) > STDERR
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function repl(line,    command, group, name, i, value, words) {
							 | 
						|||
| 
								 | 
							
								split(line, words, " ")
							 | 
						|||
| 
								 | 
							
								command = words[1]
							 | 
						|||
| 
								 | 
							
								if (command ~ /^:(q|quit)$/) {
							 | 
						|||
| 
								 | 
							
								exit
							 | 
						|||
| 
								 | 
							
								} else if (command ~ /^:set$/) {
							 | 
						|||
| 
								 | 
							
								name = words[2]
							 | 
						|||
| 
								 | 
							
								value = words[3]
							 | 
						|||
| 
								 | 
							
								Option[name] = value
							 | 
						|||
| 
								 | 
							
								} else if (command ~ /^:show$/) {
							 | 
						|||
| 
								 | 
							
								name = words[2]
							 | 
						|||
| 
								 | 
							
								print prettify("welcome-submessage", toString(Option[name], 1, 0, 1))
							 | 
						|||
| 
								 | 
							
								} else if (command ~ /^:engine$/) {
							 | 
						|||
| 
								 | 
							
								value = words[2]
							 | 
						|||
| 
								 | 
							
								Option["engine"] = value
							 | 
						|||
| 
								 | 
							
								initHttpService()
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								match(command, /^[{(\[]?([[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?)?(:|=)((@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?\+)*(@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?)?)[})\]]?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								if (group[1]) Option["sl"] = group[1]
							 | 
						|||
| 
								 | 
							
								if (group[4]) split(group[4], Option["tl"], "+")
							 | 
						|||
| 
								 | 
							
								line = words[2]
							 | 
						|||
| 
								 | 
							
								for (i = 3; i <= length(words); i++)
							 | 
						|||
| 
								 | 
							
								line = line " " words[i]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (line) {
							 | 
						|||
| 
								 | 
							
								translate(line)
							 | 
						|||
| 
								 | 
							
								if (Option["verbose"]) printf RS
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								prompt()
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function init() {
							 | 
						|||
| 
								 | 
							
								initGawk()
							 | 
						|||
| 
								 | 
							
								initBiDi()
							 | 
						|||
| 
								 | 
							
								initLocale()
							 | 
						|||
| 
								 | 
							
								initUserLang()
							 | 
						|||
| 
								 | 
							
								RS = "\n"
							 | 
						|||
| 
								 | 
							
								ExitCode = 0
							 | 
						|||
| 
								 | 
							
								Option["debug"] = 0
							 | 
						|||
| 
								 | 
							
								Option["engine"] = "google"
							 | 
						|||
| 
								 | 
							
								Option["verbose"] = 1
							 | 
						|||
| 
								 | 
							
								Option["show-original"] = 1
							 | 
						|||
| 
								 | 
							
								Option["show-original-phonetics"] = 1
							 | 
						|||
| 
								 | 
							
								Option["show-translation"] = 1
							 | 
						|||
| 
								 | 
							
								Option["show-translation-phonetics"] = 1
							 | 
						|||
| 
								 | 
							
								Option["show-prompt-message"] = 1
							 | 
						|||
| 
								 | 
							
								Option["show-languages"] = 1
							 | 
						|||
| 
								 | 
							
								Option["show-original-dictionary"] = 0
							 | 
						|||
| 
								 | 
							
								Option["show-dictionary"] = 1
							 | 
						|||
| 
								 | 
							
								Option["show-alternatives"] = 1
							 | 
						|||
| 
								 | 
							
								Option["width"] = ENVIRON["COLUMNS"] ? ENVIRON["COLUMNS"] - 2 : 0
							 | 
						|||
| 
								 | 
							
								Option["indent"] = 4
							 | 
						|||
| 
								 | 
							
								Option["no-ansi"] = 0
							 | 
						|||
| 
								 | 
							
								Option["no-autocorrect"] = 0
							 | 
						|||
| 
								 | 
							
								Option["no-bidi"] = 0
							 | 
						|||
| 
								 | 
							
								Option["no-warn"] = 0
							 | 
						|||
| 
								 | 
							
								Option["theme"] = "default"
							 | 
						|||
| 
								 | 
							
								Option["dump"] = 0
							 | 
						|||
| 
								 | 
							
								Option["play"] = 0
							 | 
						|||
| 
								 | 
							
								Option["narrator"] = "female"
							 | 
						|||
| 
								 | 
							
								Option["player"] = ENVIRON["PLAYER"]
							 | 
						|||
| 
								 | 
							
								Option["no-translate"] = 0
							 | 
						|||
| 
								 | 
							
								Option["download-audio"] = 0
							 | 
						|||
| 
								 | 
							
								Option["download-audio-as"] = NULLSTR
							 | 
						|||
| 
								 | 
							
								Option["view"] = 0
							 | 
						|||
| 
								 | 
							
								Option["pager"] = ENVIRON["PAGER"]
							 | 
						|||
| 
								 | 
							
								Option["browser"] = ENVIRON["BROWSER"]
							 | 
						|||
| 
								 | 
							
								Option["proxy"] = ENVIRON["HTTP_PROXY"] ? ENVIRON["HTTP_PROXY"] : ENVIRON["http_proxy"]
							 | 
						|||
| 
								 | 
							
								Option["user-agent"] = ENVIRON["USER_AGENT"] ? ENVIRON["USER_AGENT"] :
							 | 
						|||
| 
								 | 
							
								"Mozilla/5.0 (X11; Linux x86_64) "\
							 | 
						|||
| 
								 | 
							
								"AppleWebKit/602.1 (KHTML, like Gecko) Version/8.0 "\
							 | 
						|||
| 
								 | 
							
								"Safari/602.1 Epiphany/3.18.2"
							 | 
						|||
| 
								 | 
							
								Option["no-rlwrap"] = 0
							 | 
						|||
| 
								 | 
							
								Option["interactive"] = 0
							 | 
						|||
| 
								 | 
							
								Option["emacs"] = 0
							 | 
						|||
| 
								 | 
							
								Option["input"] = NULLSTR
							 | 
						|||
| 
								 | 
							
								Option["output"] = STDOUT
							 | 
						|||
| 
								 | 
							
								Option["hl"] = ENVIRON["HOME_LANG"] ? ENVIRON["HOME_LANG"] : UserLang
							 | 
						|||
| 
								 | 
							
								Option["sl"] = ENVIRON["SOURCE_LANG"] ? ENVIRON["SOURCE_LANG"] : "auto"
							 | 
						|||
| 
								 | 
							
								Option["tl"][1] = ENVIRON["TARGET_LANG"] ? ENVIRON["TARGET_LANG"] : UserLang
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initScript(    file, line, script, temp) {
							 | 
						|||
| 
								 | 
							
								file = ".trans"
							 | 
						|||
| 
								 | 
							
								if (!fileExists(file)) {
							 | 
						|||
| 
								 | 
							
								file = ENVIRON["HOME"] "/.translate-shell/init.trans"
							 | 
						|||
| 
								 | 
							
								if (!fileExists(file)) {
							 | 
						|||
| 
								 | 
							
								file = ENVIRON["XDG_CONFIG_HOME"] "/translate-shell/init.trans"
							 | 
						|||
| 
								 | 
							
								if (!fileExists(file)) {
							 | 
						|||
| 
								 | 
							
								file = ENVIRON["HOME"] "/.config/translate-shell/init.trans"
							 | 
						|||
| 
								 | 
							
								if (!fileExists(file)) {
							 | 
						|||
| 
								 | 
							
								file = "/etc/translate-shell"
							 | 
						|||
| 
								 | 
							
								if (!fileExists(file)) return
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								InitScript = file
							 | 
						|||
| 
								 | 
							
								script = NULLSTR
							 | 
						|||
| 
								 | 
							
								while (getline line < InitScript)
							 | 
						|||
| 
								 | 
							
								script = script "\n" line
							 | 
						|||
| 
								 | 
							
								loadOptions(script)
							 | 
						|||
| 
								 | 
							
								if (!isarray(Option["tl"])) {
							 | 
						|||
| 
								 | 
							
								temp = Option["tl"]
							 | 
						|||
| 
								 | 
							
								delete Option["tl"]
							 | 
						|||
| 
								 | 
							
								Option["tl"][1] = temp
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function initMisc(    group, temp) {
							 | 
						|||
| 
								 | 
							
								initHttpService()
							 | 
						|||
| 
								 | 
							
								if (!Option["width"] && detectProgram("tput", "-V")) {
							 | 
						|||
| 
								 | 
							
								"tput cols" SUPERR | getline temp
							 | 
						|||
| 
								 | 
							
								Option["width"] = temp ? temp - 2 : 64
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (Option["no-ansi"])
							 | 
						|||
| 
								 | 
							
								delete AnsiCode
							 | 
						|||
| 
								 | 
							
								if (Option["no-bidi"])
							 | 
						|||
| 
								 | 
							
								BiDi = BiDiNoPad = NULLSTR
							 | 
						|||
| 
								 | 
							
								if (Option["no-warn"])
							 | 
						|||
| 
								 | 
							
								STDERR = "/dev/null"
							 | 
						|||
| 
								 | 
							
								if (Option["play"]) {
							 | 
						|||
| 
								 | 
							
								if (!Option["player"]) {
							 | 
						|||
| 
								 | 
							
								initAudioPlayer()
							 | 
						|||
| 
								 | 
							
								Option["player"] = AudioPlayer ? AudioPlayer : Option["player"]
							 | 
						|||
| 
								 | 
							
								if (!Option["player"])
							 | 
						|||
| 
								 | 
							
								initSpeechSynthesizer()
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!Option["player"] && !SpeechSynthesizer) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] No available audio player or speech synthesizer.")
							 | 
						|||
| 
								 | 
							
								Option["play"] = 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (Option["view"]) {
							 | 
						|||
| 
								 | 
							
								if (!Option["pager"]) {
							 | 
						|||
| 
								 | 
							
								initPager()
							 | 
						|||
| 
								 | 
							
								Option["pager"] = Pager
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!Option["pager"]) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] No available terminal pager.")
							 | 
						|||
| 
								 | 
							
								Option["view"] = 0
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (!Option["browser"]) {
							 | 
						|||
| 
								 | 
							
								"xdg-mime query default text/html" SUPERR | getline Option["browser"]
							 | 
						|||
| 
								 | 
							
								match(Option["browser"], "(.*).desktop$", group)
							 | 
						|||
| 
								 | 
							
								Option["browser"] = group[1]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								BEGIN {
							 | 
						|||
| 
								 | 
							
								init()
							 | 
						|||
| 
								 | 
							
								if (!(belongsTo("-no-init", ARGV) || belongsTo("--no-init", ARGV)))
							 | 
						|||
| 
								 | 
							
								initScript()
							 | 
						|||
| 
								 | 
							
								pos = 0
							 | 
						|||
| 
								 | 
							
								noargc = 0
							 | 
						|||
| 
								 | 
							
								while (ARGV[++pos]) {
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(V|vers(i(on?)?)?)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								InfoOnly = "version"
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(H|h(e(lp?)?)?)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								InfoOnly = "help"
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(M|m(a(n(u(al?)?)?)?)?)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								InfoOnly = "manual"
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(T|ref(e(r(e(n(ce?)?)?)?)?)?)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								InfoOnly = "reference"
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?r$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								w("[WARNING] Option '-r' has been deprecated since version 0.9.\n"\
							 | 
						|||
| 
								 | 
							
								"          Use option '-T' or '-reference' instead.")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(R|reference-e(n(g(l(i(sh?)?)?)?)?)?)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								InfoOnly = "reference-english"
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(L|list)(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								InfoOnly = "list"
							 | 
						|||
| 
								 | 
							
								if (group[2]) {
							 | 
						|||
| 
								 | 
							
								if (group[3]) split(group[3], Option["tl"], "+")
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								split(ARGV[++pos], Option["tl"], "+")
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(S|list-e(n(g(i(n(es?)?)?)?)?)?)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								InfoOnly = "list-engines"
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(U|upgrade)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								InfoOnly = "upgrade"
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(N|nothing)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								InfoOnly = "nothing"
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(e|engine)(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["engine"] = group[2] ?
							 | 
						|||
| 
								 | 
							
								(group[3] ? group[3] : Option["engine"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^\/(.*)$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["engine"] = group[1]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?verbose$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["verbose"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?b(r(i(ef?)?)?)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["verbose"] = 0
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?d(i(c(t(i(o(n(a(ry?)?)?)?)?)?)?)?)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-original-dictionary"] = 1
							 | 
						|||
| 
								 | 
							
								Option["show-dictionary"] = 0
							 | 
						|||
| 
								 | 
							
								Option["show-alternatives"] = 0
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?id(e(n(t(i(fy?)?)?)?)?)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["verbose"] = -1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?show-original(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-original"] = yn(group[1] ? group[2] : ARGV[++pos])
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?show-original-phonetics(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-original-phonetics"] = yn(group[1] ? group[2] : ARGV[++pos])
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?show-translation(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-translation"] = yn(group[1] ? group[2] : ARGV[++pos])
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?show-translation-phonetics(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-translation-phonetics"] = yn(group[1] ? group[2] : ARGV[++pos])
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?show-prompt-message(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-prompt-message"] = yn(group[1] ? group[2] : ARGV[++pos])
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?show-languages(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-languages"] = yn(group[1] ? group[2] : ARGV[++pos])
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?show-original-dictionary(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-original-dictionary"] = yn(group[1] ? group[2] : ARGV[++pos])
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?show-dictionary(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-dictionary"] = yn(group[1] ? group[2] : ARGV[++pos])
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?show-alternatives(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["show-alternatives"] = yn(group[1] ? group[2] : ARGV[++pos])
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?w(i(d(th?)?)?)?(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["width"] = group[4] ?
							 | 
						|||
| 
								 | 
							
								(group[5] ? group[5] : Option["width"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?indent(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["indent"] = group[1] ?
							 | 
						|||
| 
								 | 
							
								(group[2] ? group[2] : Option["indent"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?theme(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["theme"] = group[1] ?
							 | 
						|||
| 
								 | 
							
								(group[2] ? group[2] : Option["theme"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-theme$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["theme"] = NULLSTR
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-ansi$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["no-ansi"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-auto(correct)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["no-autocorrect"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-bidi/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["no-bidi"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-warn/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["no-warn"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?dump/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["dump"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?p(l(ay?)?)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["play"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?sp(e(ak?)?)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["play"] = 2
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(n|narrator)(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								if (!Option["play"]) Option["play"] = 1
							 | 
						|||
| 
								 | 
							
								Option["narrator"] = group[2] ?
							 | 
						|||
| 
								 | 
							
								(group[3] ? group[3] : Option["narrator"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?player(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								if (!Option["play"]) Option["play"] = 1
							 | 
						|||
| 
								 | 
							
								Option["player"] = group[1] ?
							 | 
						|||
| 
								 | 
							
								(group[2] ? group[2] : Option["player"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-play$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["play"] = 0
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-tran(s(l(a(te?)?)?)?)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["no-translate"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?download-a(u(d(io?)?)?)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["download-audio"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?download-audio-as(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								if (!Option["download-audio"]) Option["download-audio"] = 1
							 | 
						|||
| 
								 | 
							
								Option["download-audio-as"] = group[1] ?
							 | 
						|||
| 
								 | 
							
								(group[2] ? group[2] : Option["download-audio-as"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?v(i(ew?)?)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["view"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?pager(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["view"] = 1
							 | 
						|||
| 
								 | 
							
								Option["pager"] = group[1] ?
							 | 
						|||
| 
								 | 
							
								(group[2] ? group[2] : Option["pager"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-view$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["view"] = 0
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?browser(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["browser"] = group[1] ?
							 | 
						|||
| 
								 | 
							
								(group[2] ? group[2] : Option["browser"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(x|proxy)(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["proxy"] = group[2] ?
							 | 
						|||
| 
								 | 
							
								(group[3] ? group[3] : Option["proxy"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(u|user-agent)(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["user-agent"] = group[2] ?
							 | 
						|||
| 
								 | 
							
								(group[3] ? group[3] : Option["user-agent"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(I|int(e(r(a(c(t(i(ve?)?)?)?)?)?)?)?|shell)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["interactive"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(E|emacs)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["emacs"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-rlwrap$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["no-rlwrap"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?prompt(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								w("[ERROR] Option '-prompt' has been deprecated since version 0.9.\n"\
							 | 
						|||
| 
								 | 
							
								"        Use configuration variable 'fmt-prompt' instead.")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?prompt-color(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								w("[ERROR] Option '-prompt-color' has been deprecated since version 0.9.\n"\
							 | 
						|||
| 
								 | 
							
								"        Use configuration variable 'sgr-prompt' instead.")
							 | 
						|||
| 
								 | 
							
								exit 1
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?i(n(p(ut?)?)?)?(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["input"] = group[4] ?
							 | 
						|||
| 
								 | 
							
								(group[5] ? group[5] : Option["input"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?o(u(t(p(ut?)?)?)?)?(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["output"] = group[5] ?
							 | 
						|||
| 
								 | 
							
								(group[6] ? group[6] : Option["output"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(l(a(ng?)?)?|hl)(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["hl"] = group[4] ?
							 | 
						|||
| 
								 | 
							
								(group[5] ? group[5] : Option["hl"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(s(o(u(r(ce?)?)?)?|l)?|f|from)(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["sl"] = group[6] ?
							 | 
						|||
| 
								 | 
							
								(group[7] ? group[7] : Option["sl"]) :
							 | 
						|||
| 
								 | 
							
								ARGV[++pos]
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?t(a(r(g(et?)?)?)?|l|o)?(=(.*)?)?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								if (group[5]) {
							 | 
						|||
| 
								 | 
							
								if (group[6]) split(group[6], Option["tl"], "+")
							 | 
						|||
| 
								 | 
							
								} else
							 | 
						|||
| 
								 | 
							
								split(ARGV[++pos], Option["tl"], "+")
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^[{(\[]?([[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?)?(:|=)((@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?\+)*(@?[[:alpha:]][[:alpha:]][[:alpha:]]?(-[[:alpha:]][[:alpha:]][[:alpha:]]?[[:alpha:]]?)?)?)[})\]]?$/, group)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								if (group[1]) Option["sl"] = group[1]
							 | 
						|||
| 
								 | 
							
								if (group[4]) split(group[4], Option["tl"], "+")
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?(D|debug)$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								Option["debug"] = 1
							 | 
						|||
| 
								 | 
							
								continue
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--?no-init/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) continue
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^-(-?no-op)?$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) continue
							 | 
						|||
| 
								 | 
							
								match(ARGV[pos], /^--$/)
							 | 
						|||
| 
								 | 
							
								if (RSTART) {
							 | 
						|||
| 
								 | 
							
								++pos
							 | 
						|||
| 
								 | 
							
								break
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								noargv[noargc++] = ARGV[pos]
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (Option["interactive"] && !Option["no-rlwrap"])
							 | 
						|||
| 
								 | 
							
								rlwrapMe()
							 | 
						|||
| 
								 | 
							
								else if (Option["emacs"] && !Option["interactive"] && !Option["no-rlwrap"])
							 | 
						|||
| 
								 | 
							
								if (emacsMe())
							 | 
						|||
| 
								 | 
							
								Option["interactive"] = 1
							 | 
						|||
| 
								 | 
							
								initMisc()
							 | 
						|||
| 
								 | 
							
								switch (InfoOnly) {
							 | 
						|||
| 
								 | 
							
								case "version":
							 | 
						|||
| 
								 | 
							
								print getVersion()
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								case "help":
							 | 
						|||
| 
								 | 
							
								print getHelp()
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								case "manual":
							 | 
						|||
| 
								 | 
							
								showMan()
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								case "reference":
							 | 
						|||
| 
								 | 
							
								print getReference("endonym")
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								case "reference-english":
							 | 
						|||
| 
								 | 
							
								print getReference("name")
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								case "list":
							 | 
						|||
| 
								 | 
							
								print getList(Option["tl"])
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								case "list-engines":
							 | 
						|||
| 
								 | 
							
								for (translator in Translator)
							 | 
						|||
| 
								 | 
							
								print (Option["engine"] == translator ? "* " : "  ") translator
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								case "upgrade":
							 | 
						|||
| 
								 | 
							
								upgrade()
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								case "nothing":
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								setTheme()
							 | 
						|||
| 
								 | 
							
								if (Option["interactive"])
							 | 
						|||
| 
								 | 
							
								welcome()
							 | 
						|||
| 
								 | 
							
								if (pos < ARGC)
							 | 
						|||
| 
								 | 
							
								for (i = pos; i < ARGC; i++)
							 | 
						|||
| 
								 | 
							
								noargv[noargc++] = ARGV[i]
							 | 
						|||
| 
								 | 
							
								if (noargc) {
							 | 
						|||
| 
								 | 
							
								for (i = 0; i < noargc; i++) {
							 | 
						|||
| 
								 | 
							
								if (Option["verbose"] && i > pos)
							 | 
						|||
| 
								 | 
							
								p(prettify("source-seperator", replicate(Option["chr-source-seperator"], Option["width"])))
							 | 
						|||
| 
								 | 
							
								translate(noargv[i], 1)
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								if (!Option["input"]) Option["input"] = STDIN
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if (Option["input"])
							 | 
						|||
| 
								 | 
							
								translateMain()
							 | 
						|||
| 
								 | 
							
								exit ExitCode
							 | 
						|||
| 
								 | 
							
								}
							 |