From 451df8305f31db1de9f270982510f21027e66e3c Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Fri, 14 Mar 2025 17:43:32 -0300
Subject: [PATCH 01/24] mid-WIP based on en lang

---
 locale/es-419/meta.lua    |  763 +++++++++++++++++++++
 locale/es-419/script.lua  | 1315 +++++++++++++++++++++++++++++++++++++
 locale/es-419/setting.lua |  460 +++++++++++++
 3 files changed, 2538 insertions(+)
 create mode 100644 locale/es-419/meta.lua
 create mode 100644 locale/es-419/script.lua
 create mode 100644 locale/es-419/setting.lua

diff --git a/locale/es-419/meta.lua b/locale/es-419/meta.lua
new file mode 100644
index 000000000..e56886333
--- /dev/null
+++ b/locale/es-419/meta.lua
@@ -0,0 +1,763 @@
+---@diagnostic disable: undefined-global, lowercase-global
+
+arg                 =
+'Argumentos de línea de comandos para Lua Standalone.'
+
+assert              =
+'Alsa un error si el valor de sus argumentos es falso. (ej: `nil` ó `falso`); de lo contrario, retorna todos sus argumentos. En caso de error, `message` es el mensaje de error; cuando se omite, el valor predeterminado es `"assertion failed!"`'
+
+cgopt.collect       =
+'Realiza un ciclo completo de recolección de basura.'
+cgopt.stop          =
+'Detiene la ejecución automática.'
+cgopt.restart       =
+'Reinicia la ejecución automática.'
+cgopt.count         =
+'Retorna el total de memoria en Kbytes.'
+cgopt.step          =
+'Realiza un paso de recolección de basura.'
+cgopt.setpause      =
+'Establece la pausa.'
+cgopt.setstepmul    =
+'Establece el multiplicador para el paso de recolección de basura.'
+cgopt.incremental   =
+'Cambia el modo de recolección a incremental.'
+cgopt.generational  =
+'Cambia el modo de recolección a generacional.'
+cgopt.isrunning     =
+'Retorna si el recolector está corriendo.'
+
+collectgarbage      =
+'Esta función es una interfaz genérica al recolector de basura. Realiza diferentes funcionalidades según su primer argumento `opt`'
+
+dofile              =
+'Abre el archivo mencionado y ejecuta su contenido como un bloque Lua. Cuando es llamada sin argumentos, `dofile` ejecuta el contenido de la entrada estándar (`stdin`). Retorna todos los valores retornado por el bloque. En caso de error `dofile` propaga el error a la función que la llama. (Eso sí, `dofile` no corre en modo protegido.)'
+
+error               =
+[[
+Termina la última función llamada y retorna el mensaje como el objecto de error.
+Normalmente `error` tiene información extra acerca la posición del error al inicio del mensaje, si es que éste es un string.
+]]
+
+_G                  =
+'Una variable global (no una función) que tiene el ambiente global (vea §2.2). Esta variable no se ocupa en Lua mismo; el cambiar su valor no afecta a ningún ambiente y vice-versa.'
+
+getfenv             =
+'Retorna el ambiente que usa la función actualmente. `f` puede ser una función de Lua o un número que especifica la función en ese nivel de la pila de llamadas.'
+
+getmetatable        =
+'Si el objecto no tiene una metatabla, returna nil. Si no, si la metatabla del objeto tiene un campo __metatable, retorna el valor asociado. Si tampoco es así, retorna la metatabla del objeto dado.'
+
+ipairs              =
+[[
+Retorna tres valores (una función de iterador, la tabla `t` y `0`) cosa que la estructura
+```lua
+    for i,v in ipairs(t) do body end
+```
+itera sobre los pares clave-valor `(1,t[1]), (2,t[2]), ...`, hasta el primer índice ausente.
+]]
+
+loadmode.b          =
+'Solo bloques binarios.'
+loadmode.t          =
+'Solo bloques de texto.'
+loadmode.bt         =
+'Bloques binarios y de texto.'
+
+load['<5.1']        =
+'Carga un bloque usando la función `func` para obtener sus partes. Cada llamada a `func` debe retornar un string que se concatena con los resultados anteriores.'
+load['>5.2']        =
+[[
+Carga un bloque.
+
+Si `chunk` es un string, el bloque es este string. Si `chunk` es una función, entonces `load` la llama repetidas veces para obtener las partes del bloque. Cada llamada a `chunk` debe retornar un string que se concatena con los resultados anteriores. El retornar un string vacío, `nil` ó ningún valor señala el fin del bloque.
+]]
+
+loadfile            =
+'Carga un bloque del archivo `filename` o de la entrada estándar, si es que no se provee un nombre de archivo.'
+
+loadstring          =
+'Carga un bloque del string dado.'
+
+module              =
+'Crea un módulo.'
+
+next                =
+[[
+Le permite a un programa recorrer todos los campos de una tabla. El primer argumento es una tabla y el segundo es un índice de ésta. Un llamado a `next` retorna el siguiente índice de la tabla y su valor asociado. Cuando se llama con `nil` como segundo argumento, `next` retorna un índicie inicial y su valor asociado. Cuando se llama con el último índice, o con `nil` en una tabla vacía, `next` retorna `nil`. Si se omite el segundo argumento, entonces se le interpreta como `nil`. En particular, se puede llamara a `next(t)` para chequear si la tabla está vacía.
+
+El orden en el cual los índices son enumerados no está especificado, *incluso para índices numéricos*. (Para recorrer una tabla en orden numérico, se debe usar un `for` numérico.)
+
+El comportamiento de `next` no está definido si, durante un recorrido, se le asigna algún valor a un campo no existente de la tabla. Sin embargo, sí se pueden modificar los campos existentes. En particular, se pueden asignar campos existentes a `nil`.
+]]
+
+pairs               =
+[[
+Si `t` tiene un metamétodo `__pairs`, la llama con t como argumento y retorna los primeros tres resultados de la llamada.
+
+Caso contrario, retorna tres valores: la función $next, la tabla `t`, y `nil` para que el bloque
+```lua
+    for k,v in pairs(t) do body end
+```
+itere sobre todos los pares clave-valor de la tabla `t`.
+
+Vea la función $next para más detalles acerca de las limitaciones al modificar la tabla mientras se le recorre.
+]]
+
+pcall               =
+[[
+Llama a la función `f` con los argumentos provistos en *modo protegido*. Esto significa que cualquier error que ocurra dentro de `f` no es propagado; en vez de eso, `pcall` atrapa el error y retorna un código de estado. El primer resultado es el código de estado (verdadero/falso), si éste es verdadero, entonces la llamada fue completada sin errores. En tal caso, `pcall` también retorna todos los resultados de la llamada, después de este primer resultado. En caso de error, `pcall` retorna `false` junto al objeto de error.
+]]
+
+print               =
+[[
+Recibe cualquier número de argumentos e imprime sus valores a la salida estándar `stdout`, convirtiendo cada argumento a texto siguiendo las mismas reglas de $tostring.
+La función `print` no está hecha para una salida formateada, si no que solo como una manera rápida de mostrar un valor, por ejemplo, para depurar. Para un control completo sobre la salida use $string.format e $io.write.
+]]
+
+rawequal            =
+'Revisa que v1 sea igual a v2, sin llamar al metamétodo `__eq`.'
+
+rawget              =
+'Obtiene el valor real de `table[index]`, sin llamar al metamétodo `__index`.'
+
+rawlen              =
+'Retorna el largo del objeto `v`, sin invocar al metamétodo `__len`.'
+
+rawset              =
+[[
+Asigna el valor real de `table[index]` a `value`, sin usar el metavalor `__newindex`. `table` debe ser una tabla, `index` cualquier valor distinto de `nil` y `NaN`, y `value` cualquier valor de Lua.
+Esta función retorna `table`.
+]]
+
+select              =
+'Si `index` es un número retorna todos los argumentos que siguen al `index`-ésimo argumento; un número negativo indiza desde el final (`-1` es el último argumento). Caso contrario, `index` debe ser el texto `"#"` y `select` retorna el número total de argumentos extra recibidos.'
+
+setfenv             =
+'Asigna el ambiente para ser usado para la función provista.'
+
+setmetatable        =
+[[
+Asigna la metatabla para la tabla provista. Si `metatable` is `nil`, remueve la metatabla de tabla provista. Si la tabla original tiene un campo `__metatable`, alza un error.
+
+Esta función retorna `table`.
+
+Para cambiar la metatabla de otros tipos desde código Lua, se debe usar la biblioteca de depuración (§6.10).
+]]
+
+tonumber            =
+[[
+Cuando se llama sin `base`, `toNumber` intenta convertir el argumento a un número. Si el argumento ya es un número o un texto convertible a un número, entonces `tonumber` retorna este número; si no es el caso, retorna `fail`
+
+La conversión de strings puede resultar en enteros o flotantes, de acuerdo a las convenciones léxicas de Lua (vea §3.1). El string puede tener espacios al principio, al final y tener un signo.
+]]
+
+tostring            =
+[[
+Recibe un valor de cualquier tipo y lo convierte en un string en un formato legible.
+
+Si la metatabla de `v` tiene un campo `__tostring`, entonces `tostring` llama al valor correspondiente con `v` como argumento y usa el resultado de la llamada como su resultado. Si no lo tiene y si la metatabla de `v` tiene un campo `__name` con un valor de tipo string, `tostring` podría ocupar este valor en su resultado final.
+
+Para un control completo de cómo se convierten los números, use $string.format.
+]]
+
+type                =
+[[
+Retorna el tipo de su único argumento, codificado como string. Los resultados posibles de esta función son `"nil"` (un string, no el valor `nil`), `"number"`, `"string"`, `"boolean"`, `"table"`, `"function"`, `"thread"`, y `"userdata"`.
+]]
+
+_VERSION            =
+'Una variable global (no una función) que contiene un string con la versión de Lua en ejecución.'
+
+warn                =
+'Emite una advertencia con un mensaje compuesto por la concatenación de todos sus argumentos (todos estos deben ser strings).'
+
+xpcall['=5.1']      =
+'Llama a la función `f` con los argumentos provistos en modo protegido con un nuevo manejador de mensaje.'
+xpcall['>5.2']      =
+'Llama a la función `f` con los argumentos provistos en modo protegido con un nuevo manejador de mensaje.'
+
+unpack              =
+[[
+Retorna los elementos de la lista provista. Esta función es equivalente a
+```lua
+    return list[i], list[i+1], ···, list[j]
+```
+]]
+
+bit32               =
+''
+bit32.arshift       =
+[[
+Retorna el número `x` desplazado `disp` bits a la derecha. Los desplazamientos negativos lo hacen a la izquierda.
+
+Esta operación de desplazamiento es lo que se llama desplazamiento aritmético. Los bits vacantes del lado izquierdo se llenan con copias del bit más alto de `x`; los bits vacantes del lado derecho se llenan con ceros.
+]]
+bit32.band          =
+'Retorna la operación lógica *and* de sus operandos.'
+bit32.bnot          =
+[[
+Retorna la negación lógica de `x` a nivel de bits.
+
+```lua
+assert(bit32.bnot(x) ==
+(-1 - x) % 2^32)
+```
+]]
+bit32.bor           =
+'Retorna la operación lógica *or* de sus operandos.'
+bit32.btest         =
+'Retorna un booleano señalando si la operación lógica *and* a nivel de bits de sus operandos es diferente de cero.'
+bit32.bxor          =
+'Retorna la operación lógica *xor* de sus operandos.'
+bit32.extract       =
+'Retorna el número sin signo formado por los bits `field` hasta `field + width - 1` desde `n`.'
+bit32.replace       =
+'Retorna una copia de `n` con los bits `field` a `field + width - 1` remplazados por el valor `v` .'
+bit32.lrotate       =
+'Retorna el número `x` rotado `disp` bits a la izquierda. Las rotaciones negativas lo hacen a la derecha.'
+bit32.lshift        =
+[[
+Returns the number `x` shifted `disp` bits to the left. Negative displacements shift to the right. In any direction, vacant bits are filled with zeros.
+
+```lua
+assert(bit32.lshift(b, disp) ==
+(b * 2^disp) % 2^32)
+```
+]]
+bit32.rrotate       =
+'Returns the number `x` rotated `disp` bits to the right. Negative displacements rotate to the left.'
+bit32.rshift        =
+[[
+Returns the number `x` shifted `disp` bits to the right. Negative displacements shift to the left. In any direction, vacant bits are filled with zeros.
+
+```lua
+assert(bit32.rshift(b, disp) ==
+math.floor(b % 2^32 / 2^disp))
+```
+]]
+
+coroutine                   =
+''
+coroutine.create            =
+'Creates a new coroutine, with body `f`. `f` must be a function. Returns this new coroutine, an object with type `"thread"`.'
+coroutine.isyieldable       =
+'Returns true when the running coroutine can yield.'
+coroutine.isyieldable['>5.4']=
+'Returns true when the coroutine `co` can yield. The default for `co` is the running coroutine.'
+coroutine.close             =
+'Closes coroutine `co` , closing all its pending to-be-closed variables and putting the coroutine in a dead state.'
+coroutine.resume            =
+'Starts or continues the execution of coroutine `co`.'
+coroutine.running           =
+'Returns the running coroutine plus a boolean, true when the running coroutine is the main one.'
+coroutine.status            =
+'Returns the status of coroutine `co`.'
+coroutine.wrap              =
+'Creates a new coroutine, with body `f`; `f` must be a function. Returns a function that resumes the coroutine each time it is called.'
+coroutine.yield             =
+'Suspends the execution of the calling coroutine.'
+
+costatus.running            =
+'Is running.'
+costatus.suspended          =
+'Is suspended or not started.'
+costatus.normal             =
+'Is active but not running.'
+costatus.dead               =
+'Has finished or stopped with an error.'
+
+debug                       =
+''
+debug.debug                 =
+'Enters an interactive mode with the user, running each string that the user enters.'
+debug.getfenv               =
+'Returns the environment of object `o` .'
+debug.gethook               =
+'Returns the current hook settings of the thread.'
+debug.getinfo               =
+'Returns a table with information about a function.'
+debug.getlocal['<5.1']      =
+'Returns the name and the value of the local variable with index `local` of the function at level `level` of the stack.'
+debug.getlocal['>5.2']      =
+'Returns the name and the value of the local variable with index `local` of the function at level `f` of the stack.'
+debug.getmetatable          =
+'Returns the metatable of the given value.'
+debug.getregistry           =
+'Returns the registry table.'
+debug.getupvalue            =
+'Returns the name and the value of the upvalue with index `up` of the function.'
+debug.getuservalue['<5.3']  =
+'Returns the Lua value associated to u.'
+debug.getuservalue['>5.4']  =
+[[
+Returns the `n`-th user value associated
+to the userdata `u` plus a boolean,
+`false` if the userdata does not have that value.
+]]
+debug.setcstacklimit        =
+[[
+### **Deprecated in `Lua 5.4.2`**
+
+Sets a new limit for the C stack. This limit controls how deeply nested calls can go in Lua, with the intent of avoiding a stack overflow.
+
+In case of success, this function returns the old limit. In case of error, it returns `false`.
+]]
+debug.setfenv               =
+'Sets the environment of the given `object` to the given `table` .'
+debug.sethook               =
+'Sets the given function as a hook.'
+debug.setlocal              =
+'Assigns the `value` to the local variable with index `local` of the function at `level` of the stack.'
+debug.setmetatable          =
+'Sets the metatable for the given value to the given table (which can be `nil`).'
+debug.setupvalue            =
+'Assigns the `value` to the upvalue with index `up` of the function.'
+debug.setuservalue['<5.3']  =
+'Sets the given value as the Lua value associated to the given udata.'
+debug.setuservalue['>5.4']  =
+[[
+Sets the given `value` as
+the `n`-th user value associated to the given `udata`.
+`udata` must be a full userdata.
+]]
+debug.traceback             =
+'Returns a string with a traceback of the call stack. The optional message string is appended at the beginning of the traceback.'
+debug.upvalueid             =
+'Returns a unique identifier (as a light userdata) for the upvalue numbered `n` from the given function.'
+debug.upvaluejoin           =
+'Make the `n1`-th upvalue of the Lua closure `f1` refer to the `n2`-th upvalue of the Lua closure `f2`.'
+
+infowhat.n                  =
+'`name` and `namewhat`'
+infowhat.S                  =
+'`source`, `short_src`, `linedefined`, `lastlinedefined`, and `what`'
+infowhat.l                  =
+'`currentline`'
+infowhat.t                  =
+'`istailcall`'
+infowhat.u['<5.1']          =
+'`nups`'
+infowhat.u['>5.2']          =
+'`nups`, `nparams`, and `isvararg`'
+infowhat.f                  =
+'`func`'
+infowhat.r                  =
+'`ftransfer` and `ntransfer`'
+infowhat.L                  =
+'`activelines`'
+
+hookmask.c                  =
+'Calls hook when Lua calls a function.'
+hookmask.r                  =
+'Calls hook when Lua returns from a function.'
+hookmask.l                  =
+'Calls hook when Lua enters a new line of code.'
+
+file                        =
+''
+file[':close']              =
+'Close `file`.'
+file[':flush']              =
+'Saves any written data to `file`.'
+file[':lines']              =
+[[
+------
+```lua
+for c in file:lines(...) do
+    body
+end
+```
+]]
+file[':read']               =
+'Reads the `file`, according to the given formats, which specify what to read.'
+file[':seek']               =
+'Sets and gets the file position, measured from the beginning of the file.'
+file[':setvbuf']            =
+'Sets the buffering mode for an output file.'
+file[':write']              =
+'Writes the value of each of its arguments to `file`.'
+
+readmode.n                  =
+'Reads a numeral and returns it as number.'
+readmode.a                  =
+'Reads the whole file.'
+readmode.l                  =
+'Reads the next line skipping the end of line.'
+readmode.L                  =
+'Reads the next line keeping the end of line.'
+
+seekwhence.set              =
+'Base is beginning of the file.'
+seekwhence.cur              =
+'Base is current position.'
+seekwhence['.end']          =
+'Base is end of file.'
+
+vbuf.no                     =
+'Output operation appears immediately.'
+vbuf.full                   =
+'Performed only when the buffer is full.'
+vbuf.line                   =
+'Buffered until a newline is output.'
+
+io                          =
+''
+io.stdin                    =
+'standard input.'
+io.stdout                   =
+'standard output.'
+io.stderr                   =
+'standard error.'
+io.close                    =
+'Close `file` or default output file.'
+io.flush                    =
+'Saves any written data to default output file.'
+io.input                    =
+'Sets `file` as the default input file.'
+io.lines                    =
+[[
+------
+```lua
+for c in io.lines(filename, ...) do
+    body
+end
+```
+]]
+io.open                     =
+'Opens a file, in the mode specified in the string `mode`.'
+io.output                   =
+'Sets `file` as the default output file.'
+io.popen                    =
+'Starts program prog in a separated process.'
+io.read                     =
+'Reads the `file`, according to the given formats, which specify what to read.'
+io.tmpfile                  =
+'In case of success, returns a handle for a temporary file.'
+io.type                     =
+'Checks whether `obj` is a valid file handle.'
+io.write                    =
+'Writes the value of each of its arguments to default output file.'
+
+openmode.r                  =
+'Read mode.'
+openmode.w                  =
+'Write mode.'
+openmode.a                  =
+'Append mode.'
+openmode['.r+']             =
+'Update mode, all previous data is preserved.'
+openmode['.w+']             =
+'Update mode, all previous data is erased.'
+openmode['.a+']             =
+'Append update mode, previous data is preserved, writing is only allowed at the end of file.'
+openmode.rb                 =
+'Read mode. (in binary mode.)'
+openmode.wb                 =
+'Write mode. (in binary mode.)'
+openmode.ab                 =
+'Append mode. (in binary mode.)'
+openmode['.r+b']            =
+'Update mode, all previous data is preserved. (in binary mode.)'
+openmode['.w+b']            =
+'Update mode, all previous data is erased. (in binary mode.)'
+openmode['.a+b']            =
+'Append update mode, previous data is preserved, writing is only allowed at the end of file. (in binary mode.)'
+
+popenmode.r                 =
+'Read data from this program by `file`.'
+popenmode.w                 =
+'Write data to this program by `file`.'
+
+filetype.file               =
+'Is an open file handle.'
+filetype['.closed file']    =
+'Is a closed file handle.'
+filetype['.nil']            =
+'Is not a file handle.'
+
+math                        =
+''
+math.abs                    =
+'Returns the absolute value of `x`.'
+math.acos                   =
+'Returns the arc cosine of `x` (in radians).'
+math.asin                   =
+'Returns the arc sine of `x` (in radians).'
+math.atan['<5.2']           =
+'Returns the arc tangent of `x` (in radians).'
+math.atan['>5.3']           =
+'Returns the arc tangent of `y/x` (in radians).'
+math.atan2                  =
+'Returns the arc tangent of `y/x` (in radians).'
+math.ceil                   =
+'Returns the smallest integral value larger than or equal to `x`.'
+math.cos                    =
+'Returns the cosine of `x` (assumed to be in radians).'
+math.cosh                   =
+'Returns the hyperbolic cosine of `x` (assumed to be in radians).'
+math.deg                    =
+'Converts the angle `x` from radians to degrees.'
+math.exp                    =
+'Returns the value `e^x` (where `e` is the base of natural logarithms).'
+math.floor                  =
+'Returns the largest integral value smaller than or equal to `x`.'
+math.fmod                   =
+'Returns the remainder of the division of `x` by `y` that rounds the quotient towards zero.'
+math.frexp                  =
+'Decompose `x` into tails and exponents. Returns `m` and `e` such that `x = m * (2 ^ e)`, `e` is an integer and the absolute value of `m` is in the range [0.5, 1) (or zero when `x` is zero).'
+math.huge                   =
+'A value larger than any other numeric value.'
+math.ldexp                  =
+'Returns `m * (2 ^ e)` .'
+math.log['<5.1']            =
+'Returns the natural logarithm of `x` .'
+math.log['>5.2']            =
+'Returns the logarithm of `x` in the given base.'
+math.log10                  =
+'Returns the base-10 logarithm of x.'
+math.max                    =
+'Returns the argument with the maximum value, according to the Lua operator `<`.'
+math.maxinteger['>5.3']     =
+'An integer with the maximum value for an integer.'
+math.min                    =
+'Returns the argument with the minimum value, according to the Lua operator `<`.'
+math.mininteger['>5.3']     =
+'An integer with the minimum value for an integer.'
+math.modf                   =
+'Returns the integral part of `x` and the fractional part of `x`.'
+math.pi                     =
+'The value of *π*.'
+math.pow                    =
+'Returns `x ^ y` .'
+math.rad                    =
+'Converts the angle `x` from degrees to radians.'
+math.random                 =
+[[
+* `math.random()`: Returns a float in the range [0,1).
+* `math.random(n)`: Returns a integer in the range [1, n].
+* `math.random(m, n)`: Returns a integer in the range [m, n].
+]]
+math.randomseed['<5.3']     =
+'Sets `x` as the "seed" for the pseudo-random generator.'
+math.randomseed['>5.4']     =
+[[
+* `math.randomseed(x, y)`: Concatenate `x` and `y` into a 128-bit `seed` to reinitialize the pseudo-random generator.
+* `math.randomseed(x)`: Equate to `math.randomseed(x, 0)` .
+* `math.randomseed()`: Generates a seed with a weak attempt for randomness.
+]]
+math.sin                    =
+'Returns the sine of `x` (assumed to be in radians).'
+math.sinh                   =
+'Returns the hyperbolic sine of `x` (assumed to be in radians).'
+math.sqrt                   =
+'Returns the square root of `x`.'
+math.tan                    =
+'Returns the tangent of `x` (assumed to be in radians).'
+math.tanh                   =
+'Returns the hyperbolic tangent of `x` (assumed to be in radians).'
+math.tointeger['>5.3']      =
+'If the value `x` is convertible to an integer, returns that integer.'
+math.type['>5.3']           =
+'Returns `"integer"` if `x` is an integer, `"float"` if it is a float, or `nil` if `x` is not a number.'
+math.ult['>5.3']            =
+'Returns `true` if and only if `m` is below `n` when they are compared as unsigned integers.'
+
+os                          =
+''
+os.clock                    =
+'Returns an approximation of the amount in seconds of CPU time used by the program.'
+os.date                     =
+'Returns a string or a table containing date and time, formatted according to the given string `format`.'
+os.difftime                 =
+'Returns the difference, in seconds, from time `t1` to time `t2`.'
+os.execute                  =
+'Passes `command` to be executed by an operating system shell.'
+os.exit['<5.1']             =
+'Calls the C function `exit` to terminate the host program.'
+os.exit['>5.2']             =
+'Calls the ISO C function `exit` to terminate the host program.'
+os.getenv                   =
+'Returns the value of the process environment variable `varname`.'
+os.remove                   =
+'Deletes the file with the given name.'
+os.rename                   =
+'Renames the file or directory named `oldname` to `newname`.'
+os.setlocale                =
+'Sets the current locale of the program.'
+os.time                     =
+'Returns the current time when called without arguments, or a time representing the local date and time specified by the given table.'
+os.tmpname                  =
+'Returns a string with a file name that can be used for a temporary file.'
+
+osdate.year                 =
+'four digits'
+osdate.month                =
+'1-12'
+osdate.day                  =
+'1-31'
+osdate.hour                 =
+'0-23'
+osdate.min                  =
+'0-59'
+osdate.sec                  =
+'0-61'
+osdate.wday                 =
+'weekday, 1–7, Sunday is 1'
+osdate.yday                 =
+'day of the year, 1–366'
+osdate.isdst                =
+'daylight saving flag, a boolean'
+
+package                     =
+''
+
+require['<5.3']             =
+'Loads the given module, returns any value returned by the given module(`true` when `nil`).'
+require['>5.4']             =
+'Loads the given module, returns any value returned by the searcher(`true` when `nil`). Besides that value, also returns as a second result the loader data returned by the searcher, which indicates how `require` found the module. (For instance, if the module came from a file, this loader data is the file path.)'
+
+package.config              =
+'A string describing some compile-time configurations for packages.'
+package.cpath               =
+'The path used by `require` to search for a C loader.'
+package.loaded              =
+'A table used by `require` to control which modules are already loaded.'
+package.loaders             =
+'A table used by `require` to control how to load modules.'
+package.loadlib             =
+'Dynamically links the host program with the C library `libname`.'
+package.path                =
+'The path used by `require` to search for a Lua loader.'
+package.preload             =
+'A table to store loaders for specific modules.'
+package.searchers           =
+'A table used by `require` to control how to load modules.'
+package.searchpath          =
+'Searches for the given `name` in the given `path`.'
+package.seeall              =
+'Sets a metatable for `module` with its `__index` field referring to the global environment, so that this module inherits values from the global environment. To be used as an option to function `module` .'
+
+string                      =
+''
+string.byte                 =
+'Returns the internal numeric codes of the characters `s[i], s[i+1], ..., s[j]`.'
+string.char                 =
+'Returns a string with length equal to the number of arguments, in which each character has the internal numeric code equal to its corresponding argument.'
+string.dump                 =
+'Returns a string containing a binary representation (a *binary chunk*) of the given function.'
+string.find                 =
+'Looks for the first match of `pattern` (see §6.4.1) in the string.'
+string.format               =
+'Returns a formatted version of its variable number of arguments following the description given in its first argument.'
+string.gmatch               =
+[[
+Returns an iterator function that, each time it is called, returns the next captures from `pattern` (see §6.4.1) over the string s.
+
+As an example, the following loop will iterate over all the words from string s, printing one per line:
+```lua
+    s =
+"hello world from Lua"
+    for w in string.gmatch(s, "%a+") do
+        print(w)
+    end
+```
+]]
+string.gsub                 =
+'Returns a copy of s in which all (or the first `n`, if given) occurrences of the `pattern` (see §6.4.1) have been replaced by a replacement string specified by `repl`.'
+string.len                  =
+'Returns its length.'
+string.lower                =
+'Returns a copy of this string with all uppercase letters changed to lowercase.'
+string.match                =
+'Looks for the first match of `pattern` (see §6.4.1) in the string.'
+string.pack                 =
+'Returns a binary string containing the values `v1`, `v2`, etc. packed (that is, serialized in binary form) according to the format string `fmt` (see §6.4.2) .'
+string.packsize             =
+'Returns the size of a string resulting from `string.pack` with the given format string `fmt` (see §6.4.2) .'
+string.rep['>5.2']          =
+'Returns a string that is the concatenation of `n` copies of the string `s` separated by the string `sep`.'
+string.rep['<5.1']          =
+'Returns a string that is the concatenation of `n` copies of the string `s` .'
+string.reverse              =
+'Returns a string that is the string `s` reversed.'
+string.sub                  =
+'Returns the substring of the string that starts at `i` and continues until `j`.'
+string.unpack               =
+'Returns the values packed in string according to the format string `fmt` (see §6.4.2) .'
+string.upper                =
+'Returns a copy of this string with all lowercase letters changed to uppercase.'
+
+table                       =
+''
+table.concat                =
+'Given a list where all elements are strings or numbers, returns the string `list[i]..sep..list[i+1] ··· sep..list[j]`.'
+table.insert                =
+'Inserts element `value` at position `pos` in `list`.'
+table.maxn                  =
+'Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices.'
+table.move                  =
+[[
+Moves elements from table `a1` to table `a2`.
+```lua
+a2[t],··· =
+a1[f],···,a1[e]
+return a2
+```
+]]
+table.pack                  =
+'Returns a new table with all arguments stored into keys `1`, `2`, etc. and with a field `"n"` with the total number of arguments.'
+table.remove                =
+'Removes from `list` the element at position `pos`, returning the value of the removed element.'
+table.sort                  =
+'Sorts list elements in a given order, *in-place*, from `list[1]` to `list[#list]`.'
+table.unpack                =
+[[
+Returns the elements from the given list. This function is equivalent to
+```lua
+    return list[i], list[i+1], ···, list[j]
+```
+By default, `i` is `1` and `j` is `#list`.
+]]
+table.foreach               =
+'Executes the given f over all elements of table. For each element, f is called with the index and respective value as arguments. If f returns a non-nil value, then the loop is broken, and this value is returned as the final value of foreach.'
+table.foreachi              =
+'Executes the given f over the numerical indices of table. For each index, f is called with the index and respective value as arguments. Indices are visited in sequential order, from 1 to n, where n is the size of the table. If f returns a non-nil value, then the loop is broken and this value is returned as the result of foreachi.'
+table.getn                  =
+'Returns the number of elements in the table. This function is equivalent to `#list`.'
+table.new                   =
+[[This creates a pre-sized table, just like the C API equivalent `lua_createtable()`. This is useful for big tables if the final table size is known and automatic table resizing is too expensive. `narray` parameter specifies the number of array-like items, and `nhash` parameter specifies the number of hash-like items. The function needs to be required before use.
+```lua
+    require("table.new")
+```
+]]
+table.clear                 =
+[[This clears all keys and values from a table, but preserves the allocated array/hash sizes. This is useful when a table, which is linked from multiple places, needs to be cleared and/or when recycling a table for use by the same context. This avoids managing backlinks, saves an allocation and the overhead of incremental array/hash part growth. The function needs to be required before use.
+```lua
+    require("table.clear").
+```
+Please note this function is meant for very specific situations. In most cases it's better to replace the (usually single) link with a new table and let the GC do its work.
+]]
+
+utf8                        =
+''
+utf8.char                   =
+'Receives zero or more integers, converts each one to its corresponding UTF-8 byte sequence and returns a string with the concatenation of all these sequences.'
+utf8.charpattern            =
+'The pattern which matches exactly one UTF-8 byte sequence, assuming that the subject is a valid UTF-8 string.'
+utf8.codes                  =
+[[
+Returns values so that the construction
+```lua
+for p, c in utf8.codes(s) do
+    body
+end
+```
+will iterate over all UTF-8 characters in string s, with p being the position (in bytes) and c the code point of each character. It raises an error if it meets any invalid byte sequence.
+]]
+utf8.codepoint              =
+'Returns the codepoints (as integers) from all characters in `s` that start between byte position `i` and `j` (both included).'
+utf8.len                    =
+'Returns the number of UTF-8 characters in string `s` that start between positions `i` and `j` (both inclusive).'
+utf8.offset                 =
+'Returns the position (in bytes) where the encoding of the `n`-th character of `s` (counting from position `i`) starts.'
diff --git a/locale/es-419/script.lua b/locale/es-419/script.lua
new file mode 100644
index 000000000..9c9163ae4
--- /dev/null
+++ b/locale/es-419/script.lua
@@ -0,0 +1,1315 @@
+DIAG_LINE_ONLY_SPACE    =
+'Line with spaces only.'
+DIAG_LINE_POST_SPACE    =
+'Line with trailing space.'
+DIAG_UNUSED_LOCAL       =
+'Unused local `{}`.'
+DIAG_UNDEF_GLOBAL       =
+'Undefined global `{}`.'
+DIAG_UNDEF_FIELD        =
+'Undefined field `{}`.'
+DIAG_UNDEF_ENV_CHILD    =
+'Undefined variable `{}` (overloaded `_ENV` ).'
+DIAG_UNDEF_FENV_CHILD   =
+'Undefined variable `{}` (inside module).'
+DIAG_GLOBAL_IN_NIL_ENV  =
+'Invalid global (`_ENV` is `nil`).'
+DIAG_GLOBAL_IN_NIL_FENV =
+'Invalid global (module environment is `nil`).'
+DIAG_UNUSED_LABEL       =
+'Unused label `{}`.'
+DIAG_UNUSED_FUNCTION    =
+'Unused functions.'
+DIAG_UNUSED_VARARG      =
+'Unused vararg.'
+DIAG_REDEFINED_LOCAL    =
+'Redefined local `{}`.'
+DIAG_DUPLICATE_INDEX    =
+'Duplicate index `{}`.'
+DIAG_DUPLICATE_METHOD   =
+'Duplicate method `{}`.'
+DIAG_PREVIOUS_CALL      =
+'Will be interpreted as `{}{}`. It may be necessary to add a `,`.'
+DIAG_PREFIELD_CALL      =
+'Will be interpreted as `{}{}`. It may be necessary to add a `,` or `;`.'
+DIAG_OVER_MAX_ARGS      =
+'This function expects a maximum of {:d} argument(s) but instead it is receiving {:d}.'
+DIAG_MISS_ARGS          =
+'This function requires {:d} argument(s) but instead it is receiving {:d}.'
+DIAG_OVER_MAX_VALUES    =
+'Only has {} variables, but you set {} values.'
+DIAG_AMBIGUITY_1        =
+'Compute `{}` first. You may need to add brackets.'
+DIAG_LOWERCASE_GLOBAL   =
+'Global variable in lowercase initial, Did you miss `local` or misspell it?'
+DIAG_EMPTY_BLOCK        =
+'Empty block.'
+DIAG_DIAGNOSTICS        =
+'Lua Diagnostics.'
+DIAG_SYNTAX_CHECK       =
+'Lua Syntax Check.'
+DIAG_NEED_VERSION       =
+'Supported in {}, current is {}.'
+DIAG_DEFINED_VERSION    =
+'Defined in {}, current is {}.'
+DIAG_DEFINED_CUSTOM     =
+'Defined in {}.'
+DIAG_DUPLICATE_CLASS    =
+'Duplicate Class `{}`.'
+DIAG_UNDEFINED_CLASS    =
+'Undefined Class `{}`.'
+DIAG_CYCLIC_EXTENDS     =
+'Cyclic extends.'
+DIAG_INEXISTENT_PARAM   =
+'Inexistent param.'
+DIAG_DUPLICATE_PARAM    =
+'Duplicate param.'
+DIAG_NEED_CLASS         =
+'Class needs to be defined first.'
+DIAG_DUPLICATE_SET_FIELD=
+'Duplicate field `{}`.'
+DIAG_SET_CONST          =
+'Assignment to const variable.'
+DIAG_SET_FOR_STATE      =
+'Assignment to for-state variable.'
+DIAG_CODE_AFTER_BREAK   =
+'Unable to execute code after `break`.'
+DIAG_UNBALANCED_ASSIGNMENTS =
+'The value is assigned as `nil` because the number of values is not enough. In Lua, `x, y = 1 ` is equivalent to `x, y = 1, nil` .'
+DIAG_REQUIRE_LIKE       =
+'You can treat `{}` as `require` by setting.'
+DIAG_COSE_NON_OBJECT    =
+'Cannot close a value of this type. (Unless set `__close` meta method)'
+DIAG_COUNT_DOWN_LOOP    =
+'Do you mean `{}` ?'
+DIAG_UNKNOWN            =
+'Can not infer type.'
+DIAG_DEPRECATED         =
+'Deprecated.'
+DIAG_DIFFERENT_REQUIRES =
+'The same file is required with different names.'
+DIAG_REDUNDANT_RETURN   =
+'Redundant return.'
+DIAG_AWAIT_IN_SYNC      =
+'Async function can only be called in async function.'
+DIAG_NOT_YIELDABLE      =
+'The {}th parameter of this function was not marked as yieldable, but an async function was passed in. (Use `---@param name async fun()` to mark as yieldable)'
+DIAG_DISCARD_RETURNS    =
+'The return values of this function cannot be discarded.'
+DIAG_NEED_CHECK_NIL     =
+'Need check nil.'
+DIAG_CIRCLE_DOC_CLASS                 =
+'Circularly inherited classes.'
+DIAG_DOC_FIELD_NO_CLASS               =
+'The field must be defined after the class.'
+DIAG_DUPLICATE_DOC_ALIAS              =
+'Duplicate defined alias `{}`.'
+DIAG_DUPLICATE_DOC_FIELD              =
+'Duplicate defined fields `{}`.'
+DIAG_DUPLICATE_DOC_PARAM              =
+'Duplicate params `{}`.'
+DIAG_UNDEFINED_DOC_CLASS              =
+'Undefined class `{}`.'
+DIAG_UNDEFINED_DOC_NAME               =
+'Undefined type or alias `{}`.'
+DIAG_UNDEFINED_DOC_PARAM              =
+'Undefined param `{}`.'
+DIAG_MISSING_GLOBAL_DOC_COMMENT       =
+'Missing comment for global function `{}`.'
+DIAG_MISSING_GLOBAL_DOC_PARAM         =
+'Missing @param annotation for parameter `{}` in global function `{}`.'
+DIAG_MISSING_GLOBAL_DOC_RETURN        =
+'Missing @return annotation at index `{}` in global function `{}`.'
+DIAG_MISSING_LOCAL_EXPORT_DOC_COMMENT  =
+'Missing comment for exported local function `{}`.'
+DIAG_MISSING_LOCAL_EXPORT_DOC_PARAM    =
+'Missing @param annotation for parameter `{}` in exported local function `{}`.'
+DIAG_MISSING_LOCAL_EXPORT_DOC_RETURN   =
+'Missing @return annotation at index `{}` in exported local function `{}`.'
+DIAG_INCOMPLETE_SIGNATURE_DOC_PARAM   =
+'Incomplete signature. Missing @param annotation for parameter `{}`.'
+DIAG_INCOMPLETE_SIGNATURE_DOC_RETURN  =
+'Incomplete signature. Missing @return annotation at index `{}`.'
+DIAG_UNKNOWN_DIAG_CODE                =
+'Unknown diagnostic code `{}`.'
+DIAG_CAST_LOCAL_TYPE                  =
+'This variable is defined as type `{def}`. Cannot convert its type to `{ref}`.'
+DIAG_CAST_FIELD_TYPE                  =
+'This field is defined as type `{def}`. Cannot convert its type to `{ref}`.'
+DIAG_ASSIGN_TYPE_MISMATCH             =
+'Cannot assign `{ref}` to `{def}`.'
+DIAG_PARAM_TYPE_MISMATCH              =
+'Cannot assign `{ref}` to parameter `{def}`.'
+DIAG_UNKNOWN_CAST_VARIABLE            =
+'Unknown type conversion variable `{}`.'
+DIAG_CAST_TYPE_MISMATCH               =
+'Cannot convert `{def}` to `{ref}`。'
+DIAG_MISSING_RETURN_VALUE             =
+'Annotations specify that at least {min} return value(s) are required, found {rmax} returned here instead.'
+DIAG_MISSING_RETURN_VALUE_RANGE       =
+'Annotations specify that at least {min} return value(s) are required, found {rmin} to {rmax} returned here instead.'
+DIAG_REDUNDANT_RETURN_VALUE           =
+'Annotations specify that at most {max} return value(s) are required, found {rmax} returned here instead.'
+DIAG_REDUNDANT_RETURN_VALUE_RANGE     =
+'Annotations specify that at most {max} return value(s) are required, found {rmin} to {rmax} returned here instead.'
+DIAG_MISSING_RETURN                   =
+'Annotations specify that a return value is required here.'
+DIAG_RETURN_TYPE_MISMATCH             =
+'Annotations specify that return value #{index} has a type of `{def}`, returning value of type `{ref}` here instead.'
+DIAG_UNKNOWN_OPERATOR                 =
+'Unknown operator `{}`.'
+DIAG_UNREACHABLE_CODE                 =
+'Unreachable code.'
+DIAG_INVISIBLE_PRIVATE                =
+'Field `{field}` is private, it can only be accessed in class `{class}`.'
+DIAG_INVISIBLE_PROTECTED              =
+'Field `{field}` is protected, it can only be accessed in class `{class}` and its subclasses.'
+DIAG_INVISIBLE_PACKAGE                =
+'Field `{field}` can only be accessed in same file `{uri}`.'
+DIAG_GLOBAL_ELEMENT                   =
+'Element is global.'
+DIAG_MISSING_FIELDS                   =
+'Missing required fields in type `{1}`: {2}'
+DIAG_INJECT_FIELD                     =
+'Fields cannot be injected into the reference of `{class}` for `{field}`. {fix}'
+DIAG_INJECT_FIELD_FIX_CLASS           =
+'To do so, use `---@class` for `{node}`.'
+DIAG_INJECT_FIELD_FIX_TABLE           =
+'To allow injection, add `{fix}` to the definition.'
+
+MWS_NOT_SUPPORT         =
+'{} does not support multi workspace for now, I may need to restart to support the new workspace ...'
+MWS_RESTART             =
+'Restart'
+MWS_NOT_COMPLETE        =
+'Workspace is not complete yet. You may try again later...'
+MWS_COMPLETE            =
+'Workspace is complete now. You may try again...'
+MWS_MAX_PRELOAD         =
+'Preloaded files has reached the upper limit ({}), you need to manually open the files that need to be loaded.'
+MWS_UCONFIG_FAILED      =
+'Saving user setting failed.'
+MWS_UCONFIG_UPDATED     =
+'User setting updated.'
+MWS_WCONFIG_UPDATED     =
+'Workspace setting updated.'
+
+WORKSPACE_SKIP_LARGE_FILE =
+'Too large file: {} skipped. The currently set size limit is: {} KB, and the file size is: {} KB.'
+WORKSPACE_LOADING         =
+'Loading workspace'
+WORKSPACE_DIAGNOSTIC      =
+'Diagnosing workspace'
+WORKSPACE_SKIP_HUGE_FILE  =
+'For performance reasons, the parsing of this file has been stopped: {}'
+WORKSPACE_NOT_ALLOWED     =
+'Your workspace is set to `{}`. Lua language server refused to load this directory. Please check your configuration.[learn more here](https://luals.github.io/wiki/faq#why-is-the-server-scanning-the-wrong-folder)'
+WORKSPACE_SCAN_TOO_MUCH   =
+'More than {} files have been scanned. The current scanned directory is `{}`. Please see the [FAQ](https://luals.github.io/wiki/faq/#how-can-i-improve-startup-speeds) to see how you can include fewer files. It is also possible that your [configuration is incorrect](https://luals.github.io/wiki/faq#why-is-the-server-scanning-the-wrong-folder).'
+
+PARSER_CRASH            =
+'Parser crashed! Last words:{}'
+PARSER_UNKNOWN          =
+'Unknown syntax error...'
+PARSER_MISS_NAME        =
+'<name> expected.'
+PARSER_UNKNOWN_SYMBOL   =
+'Unexpected symbol `{symbol}`.'
+PARSER_MISS_SYMBOL      =
+'Missed symbol `{symbol}`.'
+PARSER_MISS_ESC_X       =
+'Should be 2 hexadecimal digits.'
+PARSER_UTF8_SMALL       =
+'At least 1 hexadecimal digit.'
+PARSER_UTF8_MAX         =
+'Should be between {min} and {max} .'
+PARSER_ERR_ESC          =
+'Invalid escape sequence.'
+PARSER_MUST_X16         =
+'Should be hexadecimal digits.'
+PARSER_MISS_EXPONENT    =
+'Missed digits for the exponent.'
+PARSER_MISS_EXP         =
+'<exp> expected.'
+PARSER_MISS_FIELD       =
+'<field> expected.'
+PARSER_MISS_METHOD      =
+'<method> expected.'
+PARSER_ARGS_AFTER_DOTS  =
+'`...` should be the last arg.'
+PARSER_KEYWORD          =
+'<keyword> cannot be used as name.'
+PARSER_EXP_IN_ACTION    =
+'Unexpected <exp> .'
+PARSER_BREAK_OUTSIDE    =
+'<break> not inside a loop.'
+PARSER_MALFORMED_NUMBER =
+'Malformed number.'
+PARSER_ACTION_AFTER_RETURN =
+'<eof> expected after `return`.'
+PARSER_ACTION_AFTER_BREAK =
+'<eof> expected after `break`.'
+PARSER_NO_VISIBLE_LABEL =
+'No visible label `{label}` .'
+PARSER_REDEFINE_LABEL   =
+'Label `{label}` already defined.'
+PARSER_UNSUPPORT_SYMBOL =
+'{version} does not support this grammar.'
+PARSER_UNEXPECT_DOTS    =
+'Cannot use `...` outside a vararg function.'
+PARSER_UNEXPECT_SYMBOL  =
+'Unexpected symbol `{symbol}` .'
+PARSER_UNKNOWN_TAG      =
+'Unknown attribute.'
+PARSER_MULTI_TAG        =
+'Does not support multi attributes.'
+PARSER_UNEXPECT_LFUNC_NAME =
+'Local function can only use identifiers as name.'
+PARSER_UNEXPECT_EFUNC_NAME =
+'Function as expression cannot be named.'
+PARSER_ERR_LCOMMENT_END =
+'Multi-line annotations should be closed by `{symbol}` .'
+PARSER_ERR_C_LONG_COMMENT =
+'Lua should use `--[[ ]]` for multi-line annotations.'
+PARSER_ERR_LSTRING_END  =
+'Long string should be closed by `{symbol}` .'
+PARSER_ERR_ASSIGN_AS_EQ =
+'Should use `=` for assignment.'
+PARSER_ERR_EQ_AS_ASSIGN =
+'Should use `==` for equal.'
+PARSER_ERR_UEQ          =
+'Should use `~=` for not equal.'
+PARSER_ERR_THEN_AS_DO   =
+'Should use `then` .'
+PARSER_ERR_DO_AS_THEN   =
+'Should use `do` .'
+PARSER_MISS_END         =
+'Miss corresponding `end` .'
+PARSER_ERR_COMMENT_PREFIX =
+'Lua should use `--` for annotations.'
+PARSER_MISS_SEP_IN_TABLE =
+'Miss symbol `,` or `;` .'
+PARSER_SET_CONST         =
+'Assignment to const variable.'
+PARSER_UNICODE_NAME      =
+'Contains Unicode characters.'
+PARSER_ERR_NONSTANDARD_SYMBOL =
+'Lua should use `{symbol}` .'
+PARSER_MISS_SPACE_BETWEEN =
+'Spaces must be left between symbols.'
+PARSER_INDEX_IN_FUNC_NAME =
+'The `[name]` form cannot be used in the name of a named function.'
+PARSER_UNKNOWN_ATTRIBUTE  =
+'Local attribute should be `const` or `close`'
+PARSER_AMBIGUOUS_SYNTAX   =
+'In Lua 5.1, the left brackets called by the function must be in the same line as the function.'
+PARSER_NEED_PAREN         =
+'Need to add a pair of parentheses.'
+PARSER_NESTING_LONG_MARK  =
+'Nesting of `[[...]]` is not allowed in Lua 5.1 .'
+PARSER_LOCAL_LIMIT        =
+'Only 200 active local variables and upvalues can be existed at the same time.'
+PARSER_LUADOC_MISS_CLASS_NAME           =
+'<class name> expected.'
+PARSER_LUADOC_MISS_EXTENDS_SYMBOL       =
+'`:` expected.'
+PARSER_LUADOC_MISS_CLASS_EXTENDS_NAME   =
+'<class extends name> expected.'
+PARSER_LUADOC_MISS_SYMBOL               =
+'`{symbol}` expected.'
+PARSER_LUADOC_MISS_ARG_NAME             =
+'<arg name> expected.'
+PARSER_LUADOC_MISS_TYPE_NAME            =
+'<type name> expected.'
+PARSER_LUADOC_MISS_ALIAS_NAME           =
+'<alias name> expected.'
+PARSER_LUADOC_MISS_ALIAS_EXTENDS        =
+'<alias extends> expected.'
+PARSER_LUADOC_MISS_PARAM_NAME           =
+'<param name> expected.'
+PARSER_LUADOC_MISS_PARAM_EXTENDS        =
+'<param extends> expected.'
+PARSER_LUADOC_MISS_FIELD_NAME           =
+'<field name> expected.'
+PARSER_LUADOC_MISS_FIELD_EXTENDS        =
+'<field extends> expected.'
+PARSER_LUADOC_MISS_GENERIC_NAME         =
+'<generic name> expected.'
+PARSER_LUADOC_MISS_GENERIC_EXTENDS_NAME =
+'<generic extends name> expected.'
+PARSER_LUADOC_MISS_VARARG_TYPE          =
+'<vararg type> expected.'
+PARSER_LUADOC_MISS_FUN_AFTER_OVERLOAD   =
+'`fun` expected.'
+PARSER_LUADOC_MISS_CATE_NAME            =
+'<doc name> expected.'
+PARSER_LUADOC_MISS_DIAG_MODE            =
+'<diagnostic mode> expected.'
+PARSER_LUADOC_ERROR_DIAG_MODE           =
+'<diagnostic mode> incorrect.'
+PARSER_LUADOC_MISS_LOCAL_NAME           =
+'<local name> expected.'
+
+SYMBOL_ANONYMOUS        =
+'<Anonymous>'
+
+HOVER_VIEW_DOCUMENTS    =
+'View documents'
+HOVER_DOCUMENT_LUA51    =
+'http://www.lua.org/manual/5.1/manual.html#{}'
+HOVER_DOCUMENT_LUA52    =
+'http://www.lua.org/manual/5.2/manual.html#{}'
+HOVER_DOCUMENT_LUA53    =
+'http://www.lua.org/manual/5.3/manual.html#{}'
+HOVER_DOCUMENT_LUA54    =
+'http://www.lua.org/manual/5.4/manual.html#{}'
+HOVER_DOCUMENT_LUAJIT   =
+'http://www.lua.org/manual/5.1/manual.html#{}'
+HOVER_NATIVE_DOCUMENT_LUA51     =
+'command:extension.lua.doc?["en-us/51/manual.html/{}"]'
+HOVER_NATIVE_DOCUMENT_LUA52     =
+'command:extension.lua.doc?["en-us/52/manual.html/{}"]'
+HOVER_NATIVE_DOCUMENT_LUA53     =
+'command:extension.lua.doc?["en-us/53/manual.html/{}"]'
+HOVER_NATIVE_DOCUMENT_LUA54     =
+'command:extension.lua.doc?["en-us/54/manual.html/{}"]'
+HOVER_NATIVE_DOCUMENT_LUAJIT    =
+'command:extension.lua.doc?["en-us/51/manual.html/{}"]'
+HOVER_MULTI_PROTOTYPE      =
+'({} prototypes)'
+HOVER_STRING_BYTES         =
+'{} bytes'
+HOVER_STRING_CHARACTERS    =
+'{} bytes, {} characters'
+HOVER_MULTI_DEF_PROTO      =
+'({} definitions, {} prototypes)'
+HOVER_MULTI_PROTO_NOT_FUNC =
+'({} non functional definition)'
+HOVER_USE_LUA_PATH      =
+'(Search path: `{}`)'
+HOVER_EXTENDS           =
+'Expand to {}'
+HOVER_TABLE_TIME_UP     =
+'Partial type inference has been disabled for performance reasons.'
+HOVER_WS_LOADING        =
+'Workspace loading: {} / {}'
+HOVER_AWAIT_TOOLTIP     =
+'Calling async function, current thread may be yielded.'
+
+ACTION_DISABLE_DIAG     =
+'Disable diagnostics in the workspace ({}).'
+ACTION_MARK_GLOBAL      =
+'Mark `{}` as defined global.'
+ACTION_REMOVE_SPACE     =
+'Clear all postemptive spaces.'
+ACTION_ADD_SEMICOLON    =
+'Add `;` .'
+ACTION_ADD_BRACKETS     =
+'Add brackets.'
+ACTION_RUNTIME_VERSION  =
+'Change runtime version to {} .'
+ACTION_OPEN_LIBRARY     =
+'Load globals from {} .'
+ACTION_ADD_DO_END       =
+'Add `do ... end` .'
+ACTION_FIX_LCOMMENT_END =
+'Modify to the correct multi-line annotations closing symbol.'
+ACTION_ADD_LCOMMENT_END =
+'Close multi-line annotations.'
+ACTION_FIX_C_LONG_COMMENT =
+'Modify to Lua multi-line annotations format.'
+ACTION_FIX_LSTRING_END  =
+'Modify to the correct long string closing symbol.'
+ACTION_ADD_LSTRING_END  =
+'Close long string.'
+ACTION_FIX_ASSIGN_AS_EQ =
+'Modify to `=` .'
+ACTION_FIX_EQ_AS_ASSIGN =
+'Modify to `==` .'
+ACTION_FIX_UEQ          =
+'Modify to `~=` .'
+ACTION_FIX_THEN_AS_DO   =
+'Modify to `then` .'
+ACTION_FIX_DO_AS_THEN   =
+'Modify to `do` .'
+ACTION_ADD_END          =
+'Add `end` (infer the addition location ny indentations).'
+ACTION_FIX_COMMENT_PREFIX =
+'Modify to `--` .'
+ACTION_FIX_NONSTANDARD_SYMBOL =
+'Modify to `{symbol}` .'
+ACTION_RUNTIME_UNICODE_NAME =
+'Allow Unicode characters.'
+ACTION_SWAP_PARAMS      =
+'Change to parameter {index} of `{node}`'
+ACTION_FIX_INSERT_SPACE =
+'Insert space.'
+ACTION_JSON_TO_LUA      =
+'Convert JSON to Lua'
+ACTION_DISABLE_DIAG_LINE=
+'Disable diagnostics on this line ({}).'
+ACTION_DISABLE_DIAG_FILE=
+'Disable diagnostics in this file ({}).'
+ACTION_MARK_ASYNC       =
+'Mark current function as async.'
+ACTION_ADD_DICT         =
+'Add \'{}\' to workspace dict'
+ACTION_FIX_ADD_PAREN    =
+'Add parentheses.'
+ACTION_AUTOREQUIRE      =
+"Import '{}' as {}"
+
+COMMAND_DISABLE_DIAG       =
+'Disable diagnostics'
+COMMAND_MARK_GLOBAL        =
+'Mark defined global'
+COMMAND_REMOVE_SPACE       =
+'Clear all postemptive spaces'
+COMMAND_ADD_BRACKETS       =
+'Add brackets'
+COMMAND_RUNTIME_VERSION    =
+'Change runtime version'
+COMMAND_OPEN_LIBRARY       =
+'Load globals from 3rd library'
+COMMAND_UNICODE_NAME       =
+'Allow Unicode characters.'
+COMMAND_JSON_TO_LUA        =
+'Convert JSON to Lua'
+COMMAND_JSON_TO_LUA_FAILED =
+'Convert JSON to Lua failed: {}'
+COMMAND_ADD_DICT           =
+'Add Word to dictionary'
+COMMAND_REFERENCE_COUNT    =
+'{} references'
+
+COMPLETION_IMPORT_FROM           =
+'Import from {}'
+COMPLETION_DISABLE_AUTO_REQUIRE  =
+'Disable auto require'
+COMPLETION_ASK_AUTO_REQUIRE      =
+'Add the code at the top of the file to require this file?'
+
+DEBUG_MEMORY_LEAK       =
+"{} I'm sorry for the serious memory leak. The language service will be restarted soon."
+DEBUG_RESTART_NOW       =
+'Restart now'
+
+WINDOW_COMPILING                 =
+'Compiling'
+WINDOW_DIAGNOSING                =
+'Diagnosing'
+WINDOW_INITIALIZING              =
+'Initializing...'
+WINDOW_PROCESSING_HOVER          =
+'Processing hover...'
+WINDOW_PROCESSING_DEFINITION     =
+'Processing definition...'
+WINDOW_PROCESSING_REFERENCE      =
+'Processing reference...'
+WINDOW_PROCESSING_RENAME         =
+'Processing rename...'
+WINDOW_PROCESSING_COMPLETION     =
+'Processing completion...'
+WINDOW_PROCESSING_SIGNATURE      =
+'Processing signature help...'
+WINDOW_PROCESSING_SYMBOL         =
+'Processing file symbols...'
+WINDOW_PROCESSING_WS_SYMBOL      =
+'Processing workspace symbols...'
+WINDOW_PROCESSING_SEMANTIC_FULL  =
+'Processing full semantic tokens...'
+WINDOW_PROCESSING_SEMANTIC_RANGE =
+'Processing incremental semantic tokens...'
+WINDOW_PROCESSING_HINT           =
+'Processing inline hint...'
+WINDOW_PROCESSING_BUILD_META     =
+'Processing build meta...'
+WINDOW_INCREASE_UPPER_LIMIT      =
+'Increase upper limit'
+WINDOW_CLOSE                     =
+'Close'
+WINDOW_SETTING_WS_DIAGNOSTIC     =
+'You can delay or disable workspace diagnostics in settings'
+WINDOW_DONT_SHOW_AGAIN           =
+"Don't show again"
+WINDOW_DELAY_WS_DIAGNOSTIC       =
+'Idle time diagnosis (delay {} seconds)'
+WINDOW_DISABLE_DIAGNOSTIC        =
+'Disable workspace diagnostics'
+WINDOW_LUA_STATUS_WORKSPACE      =
+'Workspace   : {}'
+WINDOW_LUA_STATUS_CACHED_FILES   =
+'Cached files: {ast}/{max}'
+WINDOW_LUA_STATUS_MEMORY_COUNT   =
+'Memory usage: {mem:.f}M'
+WINDOW_LUA_STATUS_TIP            =
+[[
+
+This icon is a cat,
+Not a dog nor a fox!
+             ↓↓↓
+]]
+WINDOW_LUA_STATUS_DIAGNOSIS_TITLE=
+'Perform workspace diagnosis'
+WINDOW_LUA_STATUS_DIAGNOSIS_MSG  =
+'Do you want to perform workspace diagnosis?'
+WINDOW_APPLY_SETTING             =
+'Apply setting'
+WINDOW_CHECK_SEMANTIC            =
+'If you are using the color theme in the market, you may need to modify `editor.semanticHighlighting.enabled` to `true` to make semantic tokens take effect.'
+WINDOW_TELEMETRY_HINT            =
+'Please allow sending anonymous usage data and error reports to help us further improve this extension. Read our privacy policy [here](https://luals.github.io/privacy#language-server) .'
+WINDOW_TELEMETRY_ENABLE          =
+'Allow'
+WINDOW_TELEMETRY_DISABLE         =
+'Prohibit'
+WINDOW_CLIENT_NOT_SUPPORT_CONFIG =
+'Your client does not support modifying settings from the server side, please manually modify the following settings:'
+WINDOW_LCONFIG_NOT_SUPPORT_CONFIG=
+'Automatic modification of local settings is not currently supported, please manually modify the following settings:'
+WINDOW_MANUAL_CONFIG_ADD         =
+'`{key}`: add element `{value:q}` ;'
+WINDOW_MANUAL_CONFIG_SET         =
+'`{key}`: set to `{value:q}` ;'
+WINDOW_MANUAL_CONFIG_PROP        =
+'`{key}`: set the property `{prop}` to `{value:q}`;'
+WINDOW_APPLY_WHIT_SETTING        =
+'Apply and modify settings'
+WINDOW_APPLY_WHITOUT_SETTING     =
+'Apply but do not modify settings'
+WINDOW_ASK_APPLY_LIBRARY         =
+'Do you need to configure your work environment as `{}`?'
+WINDOW_SEARCHING_IN_FILES        =
+'Searching in files...'
+WINDOW_CONFIG_LUA_DEPRECATED     =
+'`config.lua` is deprecated, please use `config.json` instead.'
+WINDOW_CONVERT_CONFIG_LUA        =
+'Convert to `config.json`'
+WINDOW_MODIFY_REQUIRE_PATH       =
+'Do you want to modify the require path?'
+WINDOW_MODIFY_REQUIRE_OK         =
+'Modify'
+
+CONFIG_LOAD_FAILED               =
+'Unable to read the settings file: {}'
+CONFIG_LOAD_ERROR                =
+'Setting file loading error: {}'
+CONFIG_TYPE_ERROR                =
+'The setting file must be in lua or json format: {}'
+CONFIG_MODIFY_FAIL_SYNTAX_ERROR  =
+'Failed to modify settings, there are syntax errors in the settings file: {}'
+CONFIG_MODIFY_FAIL_NO_WORKSPACE  =
+[[
+Failed to modify settings:
+* The current mode is single-file mode, server cannot create `.luarc.json` without workspace.
+* The language client dose not support modifying settings from the server side.
+
+Please modify following settings manually:
+{}
+]]
+CONFIG_MODIFY_FAIL               =
+[[
+Failed to modify settings
+
+Please modify following settings manually:
+{}
+]]
+
+PLUGIN_RUNTIME_ERROR             =
+[[
+An error occurred in the plugin, please report it to the plugin author.
+Please check the details in the output or log.
+Plugin path: {}
+]]
+PLUGIN_TRUST_LOAD                =
+[[
+The current settings try to load the plugin at this location:{}
+
+Note that malicious plugin may harm your computer
+]]
+PLUGIN_TRUST_YES                 =
+[[
+Trust and load this plugin
+]]
+PLUGIN_TRUST_NO                  =
+[[
+Don't load this plugin
+]]
+
+CLI_CHECK_ERROR_TYPE =
+'The argument of CHECK must be a string, but got {}'
+CLI_CHECK_ERROR_URI =
+'The argument of CHECK must be a valid uri, but got {}'
+CLI_CHECK_ERROR_LEVEL =
+'Checklevel must be one of: {}'
+CLI_CHECK_INITING =
+'Initializing ...'
+CLI_CHECK_SUCCESS =
+'Diagnosis completed, no problems found'
+CLI_CHECK_PROGRESS =
+'Found {} problems in {} files'
+CLI_CHECK_RESULTS =
+'Diagnosis complete, {} problems found, see {}'
+CLI_CHECK_MULTIPLE_WORKERS =
+'Starting {} worker tasks, progress output will be disabled. This may take a few minutes.'
+CLI_DOC_INITING   =
+'Loading documents ...'
+CLI_DOC_DONE      =
+[[
+Documentation exported:
+]]
+CLI_DOC_WORKING   =
+'Building docs...'
+
+TYPE_ERROR_ENUM_GLOBAL_DISMATCH =
+'Type `{child}` cannot match enumeration type of `{parent}`'
+TYPE_ERROR_ENUM_GENERIC_UNSUPPORTED =
+'Cannot use generic `{child}` in enumeration'
+TYPE_ERROR_ENUM_LITERAL_DISMATCH =
+'Literal `{child}` cannot match the enumeration value of `{parent}`'
+TYPE_ERROR_ENUM_OBJECT_DISMATCH =
+'The object `{child}` cannot match the enumeration value of `{parent}`. They must be the same object'
+TYPE_ERROR_ENUM_NO_OBJECT =
+'The passed in enumeration value `{child}` is not recognized'
+TYPE_ERROR_INTEGER_DISMATCH =
+'Literal `{child}` cannot match integer `{parent}`'
+TYPE_ERROR_STRING_DISMATCH =
+'Literal `{child}` cannot match string `{parent}`'
+TYPE_ERROR_BOOLEAN_DISMATCH =
+'Literal `{child}` cannot match boolean `{parent}`'
+TYPE_ERROR_TABLE_NO_FIELD =
+'Field `{key}` does not exist in the table'
+TYPE_ERROR_TABLE_FIELD_DISMATCH =
+'The type of field `{key}` is `{child}`, which cannot match `{parent}`'
+TYPE_ERROR_CHILD_ALL_DISMATCH =
+'All subtypes in `{child}` cannot match `{parent}`'
+TYPE_ERROR_PARENT_ALL_DISMATCH =
+'`{child}` cannot match any subtypes in `{parent}`'
+TYPE_ERROR_UNION_DISMATCH =
+'`{child}` cannot match `{parent}`'
+TYPE_ERROR_OPTIONAL_DISMATCH =
+'Optional type cannot match `{parent}`'
+TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER =
+'The number `{child}` cannot be converted to an integer'
+TYPE_ERROR_NUMBER_TYPE_TO_INTEGER =
+'Cannot convert number type to integer type'
+TYPE_ERROR_DISMATCH =
+'Type `{child}` cannot match `{parent}`'
+
+LUADOC_DESC_CLASS =
+[=[
+Defines a class/table structure
+## Syntax
+`---@class <name> [: <parent>[, <parent>]...]`
+## Usage
+```
+---@class Manager: Person, Human
+Manager = {}
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#class)
+]=]
+LUADOC_DESC_TYPE =
+[=[
+Specify the type of a certain variable
+
+Default types: `nil`, `any`, `boolean`, `string`, `number`, `integer`,
+`function`, `table`, `thread`, `userdata`, `lightuserdata`
+
+(Custom types can be provided using `@alias`)
+
+## Syntax
+`---@type <type>[| [type]...`
+
+## Usage
+### General
+```
+---@type nil|table|myClass
+local Example = nil
+```
+
+### Arrays
+```
+---@type number[]
+local phoneNumbers = {}
+```
+
+### Enums
+```
+---@type "red"|"green"|"blue"
+local color = ""
+```
+
+### Tables
+```
+---@type table<string, boolean>
+local settings = {
+    disableLogging = true,
+    preventShutdown = false,
+}
+
+---@type { [string]: true }
+local x --x[""] is true
+```
+
+### Functions
+```
+---@type fun(mode?: "r"|"w"): string
+local myFunction
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#type)
+]=]
+LUADOC_DESC_ALIAS =
+[=[
+Create your own custom type that can be used with `@param`, `@type`, etc.
+
+## Syntax
+`---@alias <name> <type> [description]`\
+or
+```
+---@alias <name>
+---| 'value' [# comment]
+---| 'value2' [# comment]
+...
+```
+
+## Usage
+### Expand to other type
+```
+---@alias filepath string Path to a file
+
+---@param path filepath Path to the file to search in
+function find(path, pattern) end
+```
+
+### Enums
+```
+---@alias font-style
+---| '"underlined"' # Underline the text
+---| '"bold"' # Bolden the text
+---| '"italic"' # Make the text italicized
+
+---@param style font-style Style to apply
+function setFontStyle(style) end
+```
+
+### Literal Enum
+```
+local enums = {
+    READ = 0,
+    WRITE = 1,
+    CLOSED = 2
+}
+
+---@alias FileStates
+---| `enums.READ`
+---| `enums.WRITE`
+---| `enums.CLOSE`
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#alias)
+]=]
+LUADOC_DESC_PARAM =
+[=[
+Declare a function parameter
+
+## Syntax
+`@param <name>[?] <type> [comment]`
+
+## Usage
+### General
+```
+---@param url string The url to request
+---@param headers? table<string, string> HTTP headers to send
+---@param timeout? number Timeout in seconds
+function get(url, headers, timeout) end
+```
+
+### Variable Arguments
+```
+---@param base string The base to concat to
+---@param ... string The values to concat
+function concat(base, ...) end
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#param)
+]=]
+LUADOC_DESC_RETURN =
+[=[
+Declare a return value
+
+## Syntax
+`@return <type> [name] [description]`\
+or\
+`@return <type> [# description]`
+
+## Usage
+### General
+```
+---@return number
+---@return number # The green component
+---@return number b The blue component
+function hexToRGB(hex) end
+```
+
+### Type & name only
+```
+---@return number x, number y
+function getCoords() end
+```
+
+### Type only
+```
+---@return string, string
+function getFirstLast() end
+```
+
+### Return variable values
+```
+---@return string ... The tags of the item
+function getTags(item) end
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#return)
+]=]
+LUADOC_DESC_FIELD =
+[=[
+Declare a field in a class/table. This allows you to provide more in-depth
+documentation for a table. As of `v3.6.0`, you can mark a field as `private`,
+`protected`, `public`, or `package`.
+
+## Syntax
+`---@field [scope] <name> <type> [description]`
+
+## Usage
+```
+---@class HTTP_RESPONSE
+---@field status HTTP_STATUS
+---@field headers table<string, string> The headers of the response
+
+---@class HTTP_STATUS
+---@field code number The status code of the response
+---@field message string A message reporting the status
+
+---@return HTTP_RESPONSE response The response from the server
+function get(url) end
+
+--This response variable has all of the fields defined above
+response = get("localhost")
+
+--Extension provided intellisense for the below assignment
+statusCode = response.status.code
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#field)
+]=]
+LUADOC_DESC_GENERIC =
+[=[
+Simulates generics. Generics can allow types to be re-used as they help define
+a "generic shape" that can be used with different types.
+
+## Syntax
+`---@generic <name> [:parent_type] [, <name> [:parent_type]]`
+
+## Usage
+### General
+```
+---@generic T
+---@param value T The value to return
+---@return T value The exact same value
+function echo(value)
+    return value
+end
+
+-- Type is string
+s = echo("e")
+
+-- Type is number
+n = echo(10)
+
+-- Type is boolean
+b = echo(true)
+
+-- We got all of this info from just using
+-- @generic rather than manually specifying
+-- each allowed type
+```
+
+### Capture name of generic type
+```
+---@class Foo
+local Foo = {}
+function Foo:Bar() end
+
+---@generic T
+---@param name `T` # the name generic type is captured here
+---@return T       # generic type is returned
+function Generic(name) end
+
+local v = Generic("Foo") -- v is an object of Foo
+```
+
+### How Lua tables use generics
+```
+---@class table<K, V>: { [K]: V }
+
+-- This is what allows us to create a table
+-- and intellisense keeps track of any type
+-- we give for key (K) or value (V)
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations/#generic)
+]=]
+LUADOC_DESC_VARARG =
+[=[
+Primarily for legacy support for EmmyLua annotations. `@vararg` does not
+provide typing or allow descriptions.
+
+**You should instead use `@param` when documenting parameters (variable or not).**
+
+## Syntax
+`@vararg <type>`
+
+## Usage
+```
+---Concat strings together
+---@vararg string
+function concat(...) end
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations/#vararg)
+]=]
+LUADOC_DESC_OVERLOAD =
+[=[
+Allows defining of multiple function signatures.
+
+## Syntax
+`---@overload fun(<name>[: <type>] [, <name>[: <type>]]...)[: <type>[, <type>]...]`
+
+## Usage
+```
+---@overload fun(t: table, value: any): number
+function table.insert(t, position, value) end
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#overload)
+]=]
+LUADOC_DESC_DEPRECATED =
+[=[
+Marks a function as deprecated. This results in any deprecated function calls
+being ~~struck through~~.
+
+## Syntax
+`---@deprecated`
+
+---
+[View Wiki](https://luals.github.io/wiki/annotations#deprecated)
+]=]
+LUADOC_DESC_META =
+[=[
+Indicates that this is a meta file and should be used for definitions and intellisense only.
+
+There are 3 main distinctions to note with meta files:
+1. There won't be any context-based intellisense in a meta file
+2. Hovering a `require` filepath in a meta file shows `[meta]` instead of an absolute path
+3. The `Find Reference` function will ignore meta files
+
+## Syntax
+`---@meta`
+
+---
+[View Wiki](https://luals.github.io/wiki/annotations#meta)
+]=]
+LUADOC_DESC_VERSION =
+[=[
+Specifies Lua versions that this function is exclusive to.
+
+Lua versions: `5.1`, `5.2`, `5.3`, `5.4`, `JIT`.
+
+Requires configuring the `Diagnostics: Needed File Status` setting.
+
+## Syntax
+`---@version <version>[, <version>]...`
+
+## Usage
+### General
+```
+---@version JIT
+function onlyWorksInJIT() end
+```
+### Specify multiple versions
+```
+---@version <5.2,JIT
+function oldLuaOnly() end
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#version)
+]=]
+LUADOC_DESC_SEE =
+[=[
+Define something that can be viewed for more information
+
+## Syntax
+`---@see <text>`
+
+---
+[View Wiki](https://luals.github.io/wiki/annotations#see)
+]=]
+LUADOC_DESC_DIAGNOSTIC =
+[=[
+Enable/disable diagnostics for error/warnings/etc.
+
+Actions: `disable`, `enable`, `disable-line`, `disable-next-line`
+
+[Names](https://github.com/LuaLS/lua-language-server/blob/cbb6e6224094c4eb874ea192c5f85a6cba099588/script/proto/define.lua#L54)
+
+## Syntax
+`---@diagnostic <action>[: <name>]`
+
+## Usage
+### Disable next line
+```
+---@diagnostic disable-next-line: undefined-global
+```
+
+### Manually toggle
+```
+---@diagnostic disable: unused-local
+local unused = "hello world"
+---@diagnostic enable: unused-local
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#diagnostic)
+]=]
+LUADOC_DESC_MODULE =
+[=[
+Provides the semantics of `require`.
+
+## Syntax
+`---@module <'module_name'>`
+
+## Usage
+```
+---@module 'string.utils'
+local stringUtils
+-- This is functionally the same as:
+local module = require('string.utils')
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#module)
+]=]
+LUADOC_DESC_ASYNC =
+[=[
+Marks a function as asynchronous.
+
+## Syntax
+`---@async`
+
+---
+[View Wiki](https://luals.github.io/wiki/annotations#async)
+]=]
+LUADOC_DESC_NODISCARD =
+[=[
+Prevents this function's return values from being discarded/ignored.
+This will raise the `discard-returns` warning should the return values
+be ignored.
+
+## Syntax
+`---@nodiscard`
+
+---
+[View Wiki](https://luals.github.io/wiki/annotations#nodiscard)
+]=]
+LUADOC_DESC_CAST =
+[=[
+Allows type casting (type conversion).
+
+## Syntax
+`@cast <variable> <[+|-]type>[, <[+|-]type>]...`
+
+## Usage
+### Overwrite type
+```
+---@type integer
+local x --> integer
+
+---@cast x string
+print(x) --> string
+```
+### Add Type
+```
+---@type string
+local x --> string
+
+---@cast x +boolean, +number
+print(x) --> string|boolean|number
+```
+### Remove Type
+```
+---@type string|table
+local x --> string|table
+
+---@cast x -string
+print(x) --> table
+```
+---
+[View Wiki](https://luals.github.io/wiki/annotations#cast)
+]=]
+LUADOC_DESC_OPERATOR =
+[=[
+Provide type declaration for [operator metamethods](http://lua-users.org/wiki/MetatableEvents).
+
+## Syntax
+`@operator <operation>[(input_type)]:<resulting_type>`
+
+## Usage
+### Vector Add Metamethod
+```
+---@class Vector
+---@operator add(Vector):Vector
+
+vA = Vector.new(1, 2, 3)
+vB = Vector.new(10, 20, 30)
+
+vC = vA + vB
+--> Vector
+```
+### Unary Minus
+```
+---@class Passcode
+---@operator unm:integer
+
+pA = Passcode.new(1234)
+pB = -pA
+--> integer
+```
+[View Request](https://github.com/LuaLS/lua-language-server/issues/599)
+]=]
+LUADOC_DESC_ENUM =
+[=[
+Mark a table as an enum. If you want an enum but can't define it as a Lua
+table, take a look at the [`@alias`](https://luals.github.io/wiki/annotations#alias)
+tag.
+
+## Syntax
+`@enum <name>`
+
+## Usage
+```
+---@enum colors
+local colors = {
+	white = 0,
+	orange = 2,
+	yellow = 4,
+	green = 8,
+	black = 16,
+}
+
+---@param color colors
+local function setColor(color) end
+
+-- Completion and hover is provided for the below param
+setColor(colors.green)
+```
+]=]
+LUADOC_DESC_SOURCE =
+[=[
+Provide a reference to some source code which lives in another file. When
+searching for the definition of an item, its `@source` will be used.
+
+## Syntax
+`@source <path>`
+
+## Usage
+```
+---You can use absolute paths
+---@source C:/Users/me/Documents/program/myFile.c
+local a
+
+---Or URIs
+---@source file:///C:/Users/me/Documents/program/myFile.c:10
+local b
+
+---Or relative paths
+---@source local/file.c
+local c
+
+---You can also include line and char numbers
+---@source local/file.c:10:8
+local d
+```
+]=]
+LUADOC_DESC_PACKAGE =
+[=[
+Mark a function as private to the file it is defined in. A packaged function
+cannot be accessed from another file.
+
+## Syntax
+`@package`
+
+## Usage
+```
+---@class Animal
+---@field private eyes integer
+local Animal = {}
+
+---@package
+---This cannot be accessed in another file
+function Animal:eyesCount()
+    return self.eyes
+end
+```
+]=]
+LUADOC_DESC_PRIVATE =
+[=[
+Mark a function as private to a @class. Private functions can be accessed only
+from within their class and are not accessible from child classes.
+
+## Syntax
+`@private`
+
+## Usage
+```
+---@class Animal
+---@field private eyes integer
+local Animal = {}
+
+---@private
+function Animal:eyesCount()
+    return self.eyes
+end
+
+---@class Dog:Animal
+local myDog = {}
+
+---NOT PERMITTED!
+myDog:eyesCount();
+```
+]=]
+LUADOC_DESC_PROTECTED =
+[=[
+Mark a function as protected within a @class. Protected functions can be
+accessed only from within their class or from child classes.
+
+## Syntax
+`@protected`
+
+## Usage
+```
+---@class Animal
+---@field private eyes integer
+local Animal = {}
+
+---@protected
+function Animal:eyesCount()
+    return self.eyes
+end
+
+---@class Dog:Animal
+local myDog = {}
+
+---Permitted because function is protected, not private.
+myDog:eyesCount();
+```
+]=]
diff --git a/locale/es-419/setting.lua b/locale/es-419/setting.lua
new file mode 100644
index 000000000..da103ac18
--- /dev/null
+++ b/locale/es-419/setting.lua
@@ -0,0 +1,460 @@
+---@diagnostic disable: undefined-global
+
+config.addonManager.enable        =
+"Whether the addon manager is enabled or not."
+config.addonManager.repositoryBranch =
+"Specifies the git branch used by the addon manager."
+config.addonManager.repositoryPath =
+"Specifies the git path used by the addon manager."
+config.runtime.version            =
+"Lua runtime version."
+config.runtime.path               =
+[[
+When using `require`, how to find the file based on the input name.
+Setting this config to `?/init.lua` means that when you enter `require 'myfile'`, `${workspace}/myfile/init.lua` will be searched from the loaded files.
+if `runtime.pathStrict` is `false`, `${workspace}/**/myfile/init.lua` will also be searched.
+If you want to load files outside the workspace, you need to set `Lua.workspace.library` first.
+]]
+config.runtime.pathStrict         =
+'When enabled, `runtime.path` will only search the first level of directories, see the description of `runtime.path`.'
+config.runtime.special            =
+[[The custom global variables are regarded as some special built-in variables, and the language server will provide special support
+The following example shows that 'include' is treated as' require '.
+```json
+"Lua.runtime.special" : {
+    "include" : "require"
+}
+```
+]]
+config.runtime.unicodeName        =
+"Allows Unicode characters in name."
+config.runtime.nonstandardSymbol  =
+"Supports non-standard symbols. Make sure that your runtime environment supports these symbols."
+config.runtime.plugin             =
+"Plugin path. Please read [wiki](https://luals.github.io/wiki/plugins) to learn more."
+config.runtime.pluginArgs         =
+"Additional arguments for the plugin."
+config.runtime.fileEncoding       =
+"File encoding. The `ansi` option is only available under the `Windows` platform."
+config.runtime.builtin            =
+[[
+Adjust the enabled state of the built-in library. You can disable (or redefine) the non-existent library according to the actual runtime environment.
+
+* `default`: Indicates that the library will be enabled or disabled according to the runtime version
+* `enable`: always enable
+* `disable`: always disable
+]]
+config.runtime.meta               =
+'Format of the directory name of the meta files.'
+config.diagnostics.enable         =
+"Enable diagnostics."
+config.diagnostics.disable        =
+"Disabled diagnostic (Use code in hover brackets)."
+config.diagnostics.globals        =
+"Defined global variables."
+config.diagnostics.globalsRegex   =
+"Find defined global variables using regex."
+config.diagnostics.severity       =
+[[
+Modify the diagnostic severity.
+
+End with `!` means override the group setting `diagnostics.groupSeverity`.
+]]
+config.diagnostics.neededFileStatus =
+[[
+* Opened:  only diagnose opened files
+* Any:     diagnose all files
+* None:    disable this diagnostic
+
+End with `!` means override the group setting `diagnostics.groupFileStatus`.
+]]
+config.diagnostics.groupSeverity  =
+[[
+Modify the diagnostic severity in a group.
+`Fallback` means that diagnostics in this group are controlled by `diagnostics.severity` separately.
+Other settings will override individual settings without end of `!`.
+]]
+config.diagnostics.groupFileStatus =
+[[
+Modify the diagnostic needed file status in a group.
+
+* Opened:  only diagnose opened files
+* Any:     diagnose all files
+* None:    disable this diagnostic
+
+`Fallback` means that diagnostics in this group are controlled by `diagnostics.neededFileStatus` separately.
+Other settings will override individual settings without end of `!`.
+]]
+config.diagnostics.workspaceEvent =
+"Set the time to trigger workspace diagnostics."
+config.diagnostics.workspaceEvent.OnChange =
+"Trigger workspace diagnostics when the file is changed."
+config.diagnostics.workspaceEvent.OnSave =
+"Trigger workspace diagnostics when the file is saved."
+config.diagnostics.workspaceEvent.None =
+"Disable workspace diagnostics."
+config.diagnostics.workspaceDelay =
+"Latency (milliseconds) for workspace diagnostics."
+config.diagnostics.workspaceRate  =
+"Workspace diagnostics run rate (%). Decreasing this value reduces CPU usage, but also reduces the speed of workspace diagnostics. The diagnosis of the file you are currently editing is always done at full speed and is not affected by this setting."
+config.diagnostics.libraryFiles   =
+"How to diagnose files loaded via `Lua.workspace.library`."
+config.diagnostics.libraryFiles.Enable   =
+"Always diagnose these files."
+config.diagnostics.libraryFiles.Opened   =
+"Only when these files are opened will it be diagnosed."
+config.diagnostics.libraryFiles.Disable  =
+"These files are not diagnosed."
+config.diagnostics.ignoredFiles   =
+"How to diagnose ignored files."
+config.diagnostics.ignoredFiles.Enable   =
+"Always diagnose these files."
+config.diagnostics.ignoredFiles.Opened   =
+"Only when these files are opened will it be diagnosed."
+config.diagnostics.ignoredFiles.Disable  =
+"These files are not diagnosed."
+config.diagnostics.disableScheme  =
+'Do not diagnose Lua files that use the following scheme.'
+config.diagnostics.unusedLocalExclude =
+'Do not diagnose `unused-local` when the variable name matches the following pattern.'
+config.workspace.ignoreDir        =
+"Ignored files and directories (Use `.gitignore` grammar)."-- .. example.ignoreDir,
+config.workspace.ignoreSubmodules =
+"Ignore submodules."
+config.workspace.useGitIgnore     =
+"Ignore files list in `.gitignore` ."
+config.workspace.maxPreload       =
+"Max preloaded files."
+config.workspace.preloadFileSize  =
+"Skip files larger than this value (KB) when preloading."
+config.workspace.library          =
+"In addition to the current workspace, which directories will load files from. The files in these directories will be treated as externally provided code libraries, and some features (such as renaming fields) will not modify these files."
+config.workspace.checkThirdParty  =
+[[
+Automatic detection and adaptation of third-party libraries, currently supported libraries are:
+
+* OpenResty
+* Cocos4.0
+* LÖVE
+* LÖVR
+* skynet
+* Jass
+]]
+config.workspace.userThirdParty          =
+'Add private third-party library configuration file paths here, please refer to the built-in [configuration file path](https://github.com/LuaLS/lua-language-server/tree/master/meta/3rd)'
+config.workspace.supportScheme           =
+'Provide language server for the Lua files of the following scheme.'
+config.completion.enable                 =
+'Enable completion.'
+config.completion.callSnippet            =
+'Shows function call snippets.'
+config.completion.callSnippet.Disable    =
+"Only shows `function name`."
+config.completion.callSnippet.Both       =
+"Shows `function name` and `call snippet`."
+config.completion.callSnippet.Replace    =
+"Only shows `call snippet.`"
+config.completion.keywordSnippet         =
+'Shows keyword syntax snippets.'
+config.completion.keywordSnippet.Disable =
+"Only shows `keyword`."
+config.completion.keywordSnippet.Both    =
+"Shows `keyword` and `syntax snippet`."
+config.completion.keywordSnippet.Replace =
+"Only shows `syntax snippet`."
+config.completion.displayContext         =
+"Previewing the relevant code snippet of the suggestion may help you understand the usage of the suggestion. The number set indicates the number of intercepted lines in the code fragment. If it is set to `0`, this feature can be disabled."
+config.completion.workspaceWord          =
+"Whether the displayed context word contains the content of other files in the workspace."
+config.completion.showWord               =
+"Show contextual words in suggestions."
+config.completion.showWord.Enable        =
+"Always show context words in suggestions."
+config.completion.showWord.Fallback      =
+"Contextual words are only displayed when suggestions based on semantics cannot be provided."
+config.completion.showWord.Disable       =
+"Do not display context words."
+config.completion.autoRequire            =
+"When the input looks like a file name, automatically `require` this file."
+config.completion.showParams             =
+"Display parameters in completion list. When the function has multiple definitions, they will be displayed separately."
+config.completion.requireSeparator       =
+"The separator used when `require`."
+config.completion.postfix                =
+"The symbol used to trigger the postfix suggestion."
+config.color.mode                        =
+"Color mode."
+config.color.mode.Semantic               =
+"Semantic color. You may need to set `editor.semanticHighlighting.enabled` to `true` to take effect."
+config.color.mode.SemanticEnhanced       =
+"Enhanced semantic color. Like `Semantic`, but with additional analysis which might be more computationally expensive."
+config.color.mode.Grammar                =
+"Grammar color."
+config.semantic.enable                   =
+"Enable semantic color. You may need to set `editor.semanticHighlighting.enabled` to `true` to take effect."
+config.semantic.variable                 =
+"Semantic coloring of variables/fields/parameters."
+config.semantic.annotation               =
+"Semantic coloring of type annotations."
+config.semantic.keyword                  =
+"Semantic coloring of keywords/literals/operators. You only need to enable this feature if your editor cannot do syntax coloring."
+config.signatureHelp.enable              =
+"Enable signature help."
+config.hover.enable                      =
+"Enable hover."
+config.hover.viewString                  =
+"Hover to view the contents of a string (only if the literal contains an escape character)."
+config.hover.viewStringMax               =
+"The maximum length of a hover to view the contents of a string."
+config.hover.viewNumber                  =
+"Hover to view numeric content (only if literal is not decimal)."
+config.hover.fieldInfer                  =
+"When hovering to view a table, type infer will be performed for each field. When the accumulated time of type infer reaches the set value (MS), the type infer of subsequent fields will be skipped."
+config.hover.previewFields               =
+"When hovering to view a table, limits the maximum number of previews for fields."
+config.hover.enumsLimit                  =
+"When the value corresponds to multiple types, limit the number of types displaying."
+config.hover.expandAlias                 =
+[[
+Whether to expand the alias. For example, expands `---@alias myType boolean|number` appears as `boolean|number`, otherwise it appears as `myType'.
+]]
+config.develop.enable                    =
+'Developer mode. Do not enable, performance will be affected.'
+config.develop.debuggerPort              =
+'Listen port of debugger.'
+config.develop.debuggerWait              =
+'Suspend before debugger connects.'
+config.intelliSense.searchDepth          =
+'Set the search depth for IntelliSense. Increasing this value increases accuracy, but decreases performance. Different workspace have different tolerance for this setting. Please adjust it to the appropriate value.'
+config.intelliSense.fastGlobal           =
+'In the global variable completion, and view `_G` suspension prompt. This will slightly reduce the accuracy of type speculation, but it will have a significant performance improvement for projects that use a lot of global variables.'
+config.window.statusBar                  =
+'Show extension status in status bar.'
+config.window.progressBar                =
+'Show progress bar in status bar.'
+config.hint.enable                       =
+'Enable inlay hint.'
+config.hint.paramType                    =
+'Show type hints at the parameter of the function.'
+config.hint.setType                      =
+'Show hints of type at assignment operation.'
+config.hint.paramName                    =
+'Show hints of parameter name at the function call.'
+config.hint.paramName.All                =
+'All types of parameters are shown.'
+config.hint.paramName.Literal            =
+'Only literal type parameters are shown.'
+config.hint.paramName.Disable            =
+'Disable parameter hints.'
+config.hint.arrayIndex                   =
+'Show hints of array index when constructing a table.'
+config.hint.arrayIndex.Enable            =
+'Show hints in all tables.'
+config.hint.arrayIndex.Auto              =
+'Show hints only when the table is greater than 3 items, or the table is a mixed table.'
+config.hint.arrayIndex.Disable           =
+'Disable hints of array index.'
+config.hint.await                        =
+'If the called function is marked `---@async`, prompt `await` at the call.'
+config.hint.semicolon                    =
+'If there is no semicolon at the end of the statement, display a virtual semicolon.'
+config.hint.semicolon.All                =
+'All statements display virtual semicolons.'
+config.hint.semicolon.SameLine            =
+'When two statements are on the same line, display a semicolon between them.'
+config.hint.semicolon.Disable            =
+'Disable virtual semicolons.'
+config.codeLens.enable                   =
+'Enable code lens.'
+config.format.enable                     =
+'Enable code formatter.'
+config.format.defaultConfig              =
+[[
+The default format configuration. Has a lower priority than `.editorconfig` file in the workspace.
+Read [formatter docs](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs) to learn usage.
+]]
+config.spell.dict                        =
+'Custom words for spell checking.'
+config.nameStyle.config                  =
+'Set name style config'
+config.telemetry.enable                  =
+[[
+Enable telemetry to send your editor information and error logs over the network. Read our privacy policy [here](https://luals.github.io/privacy/#language-server).
+]]
+config.misc.parameters                   =
+'[Command line parameters](https://github.com/LuaLS/lua-telemetry-server/tree/master/method) when starting the language server in VSCode.'
+config.misc.executablePath               =
+'Specify the executable path in VSCode.'
+config.language.fixIndent                =
+'(VSCode only) Fix incorrect auto-indentation, such as incorrect indentation when line breaks occur within a string containing the word "function."'
+config.language.completeAnnotation       =
+'(VSCode only) Automatically insert "---@ " after a line break following a annotation.'
+config.type.castNumberToInteger          =
+'Allowed to assign the `number` type to the `integer` type.'
+config.type.weakUnionCheck               =
+[[
+Once one subtype of a union type meets the condition, the union type also meets the condition.
+
+When this setting is `false`, the `number|boolean` type cannot be assigned to the `number` type. It can be with `true`.
+]]
+config.type.weakNilCheck                 =
+[[
+When checking the type of union type, ignore the `nil` in it.
+
+When this setting is `false`, the `number|nil` type cannot be assigned to the `number` type. It can be with `true`.
+]]
+config.type.inferParamType               =
+[[
+When a parameter type is not annotated, it is inferred from the function's call sites.
+
+When this setting is `false`, the type of the parameter is `any` when it is not annotated.
+]]
+config.type.checkTableShape              =
+[[
+Strictly check the shape of the table.
+]]
+config.doc.privateName                   =
+'Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.'
+config.doc.protectedName                 =
+'Treat specific field names as protected, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are protected, witch can only be accessed in the class where the definition is located and its subclasses.'
+config.doc.packageName                   =
+'Treat specific field names as package, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are package, witch can only be accessed in the file where the definition is located.'
+config.diagnostics['unused-local']          =
+'Enable unused local variable diagnostics.'
+config.diagnostics['unused-function']       =
+'Enable unused function diagnostics.'
+config.diagnostics['undefined-global']      =
+'Enable undefined global variable diagnostics.'
+config.diagnostics['global-in-nil-env']     =
+'Enable cannot use global variables （ `_ENV` is set to `nil`） diagnostics.'
+config.diagnostics['unused-label']          =
+'Enable unused label diagnostics.'
+config.diagnostics['unused-vararg']         =
+'Enable unused vararg diagnostics.'
+config.diagnostics['trailing-space']        =
+'Enable trailing space diagnostics.'
+config.diagnostics['redefined-local']       =
+'Enable redefined local variable diagnostics.'
+config.diagnostics['newline-call']          =
+'Enable newline call diagnostics. Is\'s raised when a line starting with `(` is encountered, which is syntactically parsed as a function call on the previous line.'
+config.diagnostics['newfield-call']         =
+'Enable newfield call diagnostics. It is raised when the parenthesis of a function call appear on the following line when defining a field in a table.'
+config.diagnostics['redundant-parameter']   =
+'Enable redundant function parameter diagnostics.'
+config.diagnostics['ambiguity-1']           =
+'Enable ambiguous operator precedence diagnostics. For example, the `num or 0 + 1` expression will be suggested `(num or 0) + 1` instead.'
+config.diagnostics['lowercase-global']      =
+'Enable lowercase global variable definition diagnostics.'
+config.diagnostics['undefined-env-child']   =
+'Enable undefined environment variable diagnostics. It\'s raised when `_ENV` table is set to a new literal table, but the used global variable is no longer present in the global environment.'
+config.diagnostics['duplicate-index']       =
+'Enable duplicate table index diagnostics.'
+config.diagnostics['empty-block']           =
+'Enable empty code block diagnostics.'
+config.diagnostics['redundant-value']       =
+'Enable the redundant values assigned diagnostics. It\'s raised during assignment operation, when the number of values is higher than the number of objects being assigned.'
+config.diagnostics['assign-type-mismatch']  =
+'Enable diagnostics for assignments in which the value\'s type does not match the type of the assigned variable.'
+config.diagnostics['await-in-sync']         =
+'Enable diagnostics for calls of asynchronous functions within a synchronous function.'
+config.diagnostics['cast-local-type']    =
+'Enable diagnostics for casts of local variables where the target type does not match the defined type.'
+config.diagnostics['cast-type-mismatch']    =
+'Enable diagnostics for casts where the target type does not match the initial type.'
+config.diagnostics['circular-doc-class']    =
+'Enable diagnostics for two classes inheriting from each other introducing a circular relation.'
+config.diagnostics['close-non-object']      =
+'Enable diagnostics for attempts to close a variable with a non-object.'
+config.diagnostics['code-after-break']      =
+'Enable diagnostics for code placed after a break statement in a loop.'
+config.diagnostics['codestyle-check']       =
+'Enable diagnostics for incorrectly styled lines.'
+config.diagnostics['count-down-loop']       =
+'Enable diagnostics for `for` loops which will never reach their max/limit because the loop is incrementing instead of decrementing.'
+config.diagnostics['deprecated']            =
+'Enable diagnostics to highlight deprecated API.'
+config.diagnostics['different-requires']    =
+'Enable diagnostics for files which are required by two different paths.'
+config.diagnostics['discard-returns']       =
+'Enable diagnostics for calls of functions annotated with `---@nodiscard` where the return values are ignored.'
+config.diagnostics['doc-field-no-class']    =
+'Enable diagnostics to highlight a field annotation without a defining class annotation.'
+config.diagnostics['duplicate-doc-alias']   =
+'Enable diagnostics for a duplicated alias annotation name.'
+config.diagnostics['duplicate-doc-field']   =
+'Enable diagnostics for a duplicated field annotation name.'
+config.diagnostics['duplicate-doc-param']   =
+'Enable diagnostics for a duplicated param annotation name.'
+config.diagnostics['duplicate-set-field']   =
+'Enable diagnostics for setting the same field in a class more than once.'
+config.diagnostics['incomplete-signature-doc']    =
+'Incomplete @param or @return annotations for functions.'
+config.diagnostics['invisible']             =
+'Enable diagnostics for accesses to fields which are invisible.'
+config.diagnostics['missing-global-doc']    =
+'Missing annotations for globals! Global functions must have a comment and annotations for all parameters and return values.'
+config.diagnostics['missing-local-export-doc'] =
+'Missing annotations for exported locals! Exported local functions must have a comment and annotations for all parameters and return values.'
+config.diagnostics['missing-parameter']     =
+'Enable diagnostics for function calls where the number of arguments is less than the number of annotated function parameters.'
+config.diagnostics['missing-return']        =
+'Enable diagnostics for functions with return annotations which have no return statement.'
+config.diagnostics['missing-return-value']  =
+'Enable diagnostics for return statements without values although the containing function declares returns.'
+config.diagnostics['need-check-nil']        =
+'Enable diagnostics for variable usages if `nil` or an optional (potentially `nil`) value was assigned to the variable before.'
+config.diagnostics['no-unknown']            =
+'Enable diagnostics for cases in which the type cannot be inferred.'
+config.diagnostics['not-yieldable']         =
+'Enable diagnostics for calls to `coroutine.yield()` when it is not permitted.'
+config.diagnostics['param-type-mismatch']   =
+'Enable diagnostics for function calls where the type of a provided parameter does not match the type of the annotated function definition.'
+config.diagnostics['redundant-return']      =
+'Enable diagnostics for return statements which are not needed because the function would exit on its own.'
+config.diagnostics['redundant-return-value']=
+'Enable diagnostics for return statements which return an extra value which is not specified by a return annotation.'
+config.diagnostics['return-type-mismatch']  =
+'Enable diagnostics for return values whose type does not match the type declared in the corresponding return annotation.'
+config.diagnostics['spell-check']           =
+'Enable diagnostics for typos in strings.'
+config.diagnostics['name-style-check']      =
+'Enable diagnostics for name style.'
+config.diagnostics['unbalanced-assignments']=
+'Enable diagnostics on multiple assignments if not all variables obtain a value (e.g., `local x,y = 1`).'
+config.diagnostics['undefined-doc-class']   =
+'Enable diagnostics for class annotations in which an undefined class is referenced.'
+config.diagnostics['undefined-doc-name']    =
+'Enable diagnostics for type annotations referencing an undefined type or alias.'
+config.diagnostics['undefined-doc-param']   =
+'Enable diagnostics for cases in which a parameter annotation is given without declaring the parameter in the function definition.'
+config.diagnostics['undefined-field']       =
+'Enable diagnostics for cases in which an undefined field of a variable is read.'
+config.diagnostics['unknown-cast-variable'] =
+'Enable diagnostics for casts of undefined variables.'
+config.diagnostics['unknown-diag-code']     =
+'Enable diagnostics in cases in which an unknown diagnostics code is entered.'
+config.diagnostics['unknown-operator']      =
+'Enable diagnostics for unknown operators.'
+config.diagnostics['unreachable-code']      =
+'Enable diagnostics for unreachable code.'
+config.diagnostics['global-element']       =
+'Enable diagnostics to warn about global elements.'
+config.typeFormat.config                    =
+'Configures the formatting behavior while typing Lua code.'
+config.typeFormat.config.auto_complete_end  =
+'Controls if `end` is automatically completed at suitable positions.'
+config.typeFormat.config.auto_complete_table_sep =
+'Controls if a separator is automatically appended at the end of a table declaration.'
+config.typeFormat.config.format_line        =
+'Controls if a line is formatted at all.'
+
+command.exportDocument =
+'Lua: Export Document ...'
+command.addon_manager.open =
+'Lua: Open Addon Manager ...'
+command.reloadFFIMeta =
+'Lua: Reload luajit ffi meta'
+command.startServer =
+'Lua: (debug) Start Language Server'
+command.stopServer =
+'Lua: (debug) Stop Language Server'

From b97bb300d246024daa6ce9bea758f9baeafd3742 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Mon, 17 Mar 2025 14:53:21 -0300
Subject: [PATCH 02/24] bit, coroutine, debug

---
 locale/es-419/meta.lua | 90 +++++++++++++++++++++---------------------
 1 file changed, 45 insertions(+), 45 deletions(-)

diff --git a/locale/es-419/meta.lua b/locale/es-419/meta.lua
index e56886333..712c50ba0 100644
--- a/locale/es-419/meta.lua
+++ b/locale/es-419/meta.lua
@@ -191,7 +191,7 @@ bit32.arshift       =
 [[
 Retorna el número `x` desplazado `disp` bits a la derecha. Los desplazamientos negativos lo hacen a la izquierda.
 
-Esta operación de desplazamiento es lo que se llama desplazamiento aritmético. Los bits vacantes del lado izquierdo se llenan con copias del bit más alto de `x`; los bits vacantes del lado derecho se llenan con ceros.
+Esta operación de desplazamiento es lo que se llama desplazamiento aritmético. Los bits vacíos del lado izquierdo se llenan con copias del bit más alto de `x`; los bits vacíos del lado derecho se llenan con ceros.
 ]]
 bit32.band          =
 'Retorna la operación lógica *and* de sus operandos.'
@@ -218,7 +218,7 @@ bit32.lrotate       =
 'Retorna el número `x` rotado `disp` bits a la izquierda. Las rotaciones negativas lo hacen a la derecha.'
 bit32.lshift        =
 [[
-Returns the number `x` shifted `disp` bits to the left. Negative displacements shift to the right. In any direction, vacant bits are filled with zeros.
+Retorna el número `x` desplazado `disp` bits a la izquierda. Los desplazamientos negativos lo hacen a la derecha. En cualquier dirección, los bits vacíos se llenan con ceros.
 
 ```lua
 assert(bit32.lshift(b, disp) ==
@@ -226,10 +226,10 @@ assert(bit32.lshift(b, disp) ==
 ```
 ]]
 bit32.rrotate       =
-'Returns the number `x` rotated `disp` bits to the right. Negative displacements rotate to the left.'
+'Retorna el número `x` rotado `disp` bits a la derecha. Las rotaciones negativas lo hacen a la izquierda.'
 bit32.rshift        =
 [[
-Returns the number `x` shifted `disp` bits to the right. Negative displacements shift to the left. In any direction, vacant bits are filled with zeros.
+Retorna el número `x` desplazado `disp` bits a la derecha. Los desplazamientos negativos lo hacen a la izquierda. En cualquier dirección, los bits vacíos se llenan con ceros.
 
 ```lua
 assert(bit32.rshift(b, disp) ==
@@ -240,93 +240,93 @@ math.floor(b % 2^32 / 2^disp))
 coroutine                   =
 ''
 coroutine.create            =
-'Creates a new coroutine, with body `f`. `f` must be a function. Returns this new coroutine, an object with type `"thread"`.'
+'Crea una co-rutina nueva con cuerpo `f`. `f` debe ser una función. Retorna esta nueva co-rutina, un objeto con tipo `thread`.'
 coroutine.isyieldable       =
-'Returns true when the running coroutine can yield.'
+'Retorna verdadero cuando la co-rutina en ejecución puede suspenderse cediendo el control.'
 coroutine.isyieldable['>5.4']=
-'Returns true when the coroutine `co` can yield. The default for `co` is the running coroutine.'
+'Retorna verdadero cuando la co-rutina `co` puede suspenderse cediendo el control. El valor por omisión para `co` es la co-rutina actualmente en ejecución.' 
 coroutine.close             =
-'Closes coroutine `co` , closing all its pending to-be-closed variables and putting the coroutine in a dead state.'
+'Cierra la co-rutina `co`, cerrando todas sus variables prontas a cerrarse, dejando la co-rutina en un estado muerto.'
 coroutine.resume            =
-'Starts or continues the execution of coroutine `co`.'
+'Empieza o continua la ejecución de la co-rutina `co`.'
 coroutine.running           =
-'Returns the running coroutine plus a boolean, true when the running coroutine is the main one.'
+'Retorna la co-rutina en ejecución con un booleano adicional, señalando si la co-rutina en ejecución es la principal.'
 coroutine.status            =
-'Returns the status of coroutine `co`.'
+'Retorna el estado de la co-rutina `co`.'
 coroutine.wrap              =
-'Creates a new coroutine, with body `f`; `f` must be a function. Returns a function that resumes the coroutine each time it is called.'
+'Crea una co-rutina nueva con cuerpo `f`; `f` debe ser una función. Retorna una función que resume la co-rutina cada vez que se le llama.'
 coroutine.yield             =
-'Suspends the execution of the calling coroutine.'
+'Suspende la ejecución de la co-rutina que le llama, cediendo el control.'
 
 costatus.running            =
-'Is running.'
+'Está corriendo.'
 costatus.suspended          =
-'Is suspended or not started.'
+'Está suspendida o no ha empezado.'
 costatus.normal             =
-'Is active but not running.'
+'Está activa, pero no en ejecución.'
 costatus.dead               =
-'Has finished or stopped with an error.'
+'Ha terminado o se detuvo con un error.'
 
 debug                       =
 ''
 debug.debug                 =
-'Enters an interactive mode with the user, running each string that the user enters.'
+'Entra a un modo interactivo con el usuario, ejecutando cada string que el usuario ingrese.'
 debug.getfenv               =
-'Returns the environment of object `o` .'
+'Retorna el ambiente del objeto `o` .'
 debug.gethook               =
-'Returns the current hook settings of the thread.'
+'Retorna las configuraciones `hook` de la hebra.'
 debug.getinfo               =
-'Returns a table with information about a function.'
+'Retorna una tabla con información acerca de una función.'
 debug.getlocal['<5.1']      =
-'Returns the name and the value of the local variable with index `local` of the function at level `level` of the stack.'
+'Retorna el nombre y el valor de la variable local con índice `local` de la función en el nivel `level` de la pila.'
 debug.getlocal['>5.2']      =
-'Returns the name and the value of the local variable with index `local` of the function at level `f` of the stack.'
+'Retorna el nombre y el valor de la variable local con índice `local` de la función en el nivel `f` de la pila.'
 debug.getmetatable          =
-'Returns the metatable of the given value.'
+'Retorna la metatabla del valor provisto.'
 debug.getregistry           =
-'Returns the registry table.'
+'Retorna la tabla de registro.'
 debug.getupvalue            =
-'Returns the name and the value of the upvalue with index `up` of the function.'
+'Retorna el nombre y el valor de la variable anterior con índice `up` de la función.'
 debug.getuservalue['<5.3']  =
-'Returns the Lua value associated to u.'
+'Retorna el valor de Lua asociado a u.'
 debug.getuservalue['>5.4']  =
 [[
-Returns the `n`-th user value associated
-to the userdata `u` plus a boolean,
-`false` if the userdata does not have that value.
+Retorna el `n`-ésimo valor asociado
+a la data de usuario `u` con un booleano adicional,
+`false` si la data de usuario no tiene ese valor.
 ]]
 debug.setcstacklimit        =
 [[
-### **Deprecated in `Lua 5.4.2`**
+### **Obsoleto desde `Lua 5.4.2`**
 
-Sets a new limit for the C stack. This limit controls how deeply nested calls can go in Lua, with the intent of avoiding a stack overflow.
+Asigna un límite nuevo para la pila C. Este límite controla qué tan profundo pueden llegar las llamadas anidadas en Lua con la intención de evitar un desbordamiento de la pila (stack overflow).
 
-In case of success, this function returns the old limit. In case of error, it returns `false`.
+En caso de éxito, esta función retorna el límite anterior. En caso de error, retorna `false`.
 ]]
 debug.setfenv               =
-'Sets the environment of the given `object` to the given `table` .'
+'Asigna el ambiente del objeto `object` provisto a la tabla `table` provista.'
 debug.sethook               =
-'Sets the given function as a hook.'
+'Asigna la función provista como un `hook`.'
 debug.setlocal              =
-'Assigns the `value` to the local variable with index `local` of the function at `level` of the stack.'
+'Asigna el valor `value` a la variable local con índice `local` de la función en el nivel `level` de la pila.'
 debug.setmetatable          =
-'Sets the metatable for the given value to the given table (which can be `nil`).'
+'Asigna la metatabla del valor provisto a la tabla provista (la cual puede ser `nil`).'
 debug.setupvalue            =
-'Assigns the `value` to the upvalue with index `up` of the function.'
+'Asigna el valor `value` al valor anterior con índice `up` de la función.'
 debug.setuservalue['<5.3']  =
-'Sets the given value as the Lua value associated to the given udata.'
+'Asigna el valor provisto como el valor de Lua asociado a la provista data de usuario `udata`.'
 debug.setuservalue['>5.4']  =
 [[
-Sets the given `value` as
-the `n`-th user value associated to the given `udata`.
-`udata` must be a full userdata.
+Asigna el valor `value` como
+el `n`-ésimo valor asociado a la data de usuario `udata` provista.
+`udata` debe ser data de usuario completa.
 ]]
 debug.traceback             =
-'Returns a string with a traceback of the call stack. The optional message string is appended at the beginning of the traceback.'
+'Retorna un string con la traza de la pila de llamadas. El string de mensaje opcional está anexado al principio de la traza.'
 debug.upvalueid             =
-'Returns a unique identifier (as a light userdata) for the upvalue numbered `n` from the given function.'
+'Retorna un identificador único (como data de usuario ligera) para el valor anterior número `n` de la función provista.'
 debug.upvaluejoin           =
-'Make the `n1`-th upvalue of the Lua closure `f1` refer to the `n2`-th upvalue of the Lua closure `f2`.'
+'Hace que el `n1`-ésimo valor anterior de la clausura de Lua `f1` se refiera a el `n2`-ésimo valor anterior de la clausura de Lua `f2`.'
 
 infowhat.n                  =
 '`name` and `namewhat`'

From 64a559a8a9782f0417be1860da17919cdd9e0be1 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Mon, 17 Mar 2025 15:02:56 -0300
Subject: [PATCH 03/24] hook, some file/io

---
 locale/es-419/meta.lua | 41 +++++++++++++++++++++--------------------
 1 file changed, 21 insertions(+), 20 deletions(-)

diff --git a/locale/es-419/meta.lua b/locale/es-419/meta.lua
index 712c50ba0..b77fab306 100644
--- a/locale/es-419/meta.lua
+++ b/locale/es-419/meta.lua
@@ -329,9 +329,9 @@ debug.upvaluejoin           =
 'Hace que el `n1`-ésimo valor anterior de la clausura de Lua `f1` se refiera a el `n2`-ésimo valor anterior de la clausura de Lua `f2`.'
 
 infowhat.n                  =
-'`name` and `namewhat`'
+'`name` y `namewhat`'
 infowhat.S                  =
-'`source`, `short_src`, `linedefined`, `lastlinedefined`, and `what`'
+'`source`, `short_src`, `linedefined`, `lastlinedefined`, y `what`'
 infowhat.l                  =
 '`currentline`'
 infowhat.t                  =
@@ -339,27 +339,27 @@ infowhat.t                  =
 infowhat.u['<5.1']          =
 '`nups`'
 infowhat.u['>5.2']          =
-'`nups`, `nparams`, and `isvararg`'
+'`nups`, `nparams`, y `isvararg`'
 infowhat.f                  =
 '`func`'
 infowhat.r                  =
-'`ftransfer` and `ntransfer`'
+'`ftransfer` y `ntransfer`'
 infowhat.L                  =
 '`activelines`'
 
 hookmask.c                  =
-'Calls hook when Lua calls a function.'
+'Llama al hook cuando se llama a una función desde Lua.'
 hookmask.r                  =
-'Calls hook when Lua returns from a function.'
+'Llama al hook cuand se retorna de una función desde Lua.'
 hookmask.l                  =
-'Calls hook when Lua enters a new line of code.'
+'Llama al hook cuand se entra a una nueva línea de código desde Lua.'
 
 file                        =
 ''
 file[':close']              =
-'Close `file`.'
+'Cierra el archivo `file`.'
 file[':flush']              =
-'Saves any written data to `file`.'
+'Guarda la data escrita al archivo `file`.'
 file[':lines']              =
 [[
 ------
@@ -370,29 +370,30 @@ end
 ```
 ]]
 file[':read']               =
-'Reads the `file`, according to the given formats, which specify what to read.'
+'Lee el archivo `file`, de acuerdo a los formatos provistos, los cuales especifican qué leer.'
 file[':seek']               =
-'Sets and gets the file position, measured from the beginning of the file.'
+'Fija y obtiene la posición del archivo, a contar del principio del archivo.'
 file[':setvbuf']            =
-'Sets the buffering mode for an output file.'
+'Fija el modo de buffer para un archivo de salida.'
 file[':write']              =
-'Writes the value of each of its arguments to `file`.'
+'Escribe el valor de cada uno de sus argumentos al archivo`file`.'
 
 readmode.n                  =
-'Reads a numeral and returns it as number.'
+'Lee un numeral y lo devuelve como un número.'
 readmode.a                  =
-'Reads the whole file.'
+'Lee todo el archivo.'
 readmode.l                  =
-'Reads the next line skipping the end of line.'
+'Lee la siguiente línea, saltándose el fin-de-línea.'
 readmode.L                  =
-'Reads the next line keeping the end of line.'
+'Lee la siguiente línea, manteniendo el fin-de-línea.'
 
 seekwhence.set              =
-'Base is beginning of the file.'
+'Sitúa la posición base está al inicio del archivo.'
 seekwhence.cur              =
-'Base is current position.'
+'Sitúa la posición base en la actual.'
+
 seekwhence['.end']          =
-'Base is end of file.'
+'Sitúa la posición base al final del archivo.'
 
 vbuf.no                     =
 'Output operation appears immediately.'

From dfe327952686014694d7a2ca0f37e24ed2cbe652 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Wed, 19 Mar 2025 13:04:54 -0300
Subject: [PATCH 04/24] finish (cleanup) meta.lua

---
 locale/es-419/meta.lua | 282 ++++++++++++++++++++---------------------
 1 file changed, 141 insertions(+), 141 deletions(-)

diff --git a/locale/es-419/meta.lua b/locale/es-419/meta.lua
index b77fab306..a5077040f 100644
--- a/locale/es-419/meta.lua
+++ b/locale/es-419/meta.lua
@@ -40,7 +40,7 @@ Normalmente `error` tiene información extra acerca la posición del error al in
 ]]
 
 _G                  =
-'Una variable global (no una función) que tiene el ambiente global (vea §2.2). Esta variable no se ocupa en Lua mismo; el cambiar su valor no afecta a ningún ambiente y vice-versa.'
+'Una variable global (no una función) que tiene el ambiente global (véase §2.2). Esta variable no se ocupa en Lua mismo; el cambiar su valor no afecta a ningún ambiente y vice-versa.'
 
 getfenv             =
 'Retorna el ambiente que usa la función actualmente. `f` puede ser una función de Lua o un número que especifica la función en ese nivel de la pila de llamadas.'
@@ -50,7 +50,7 @@ getmetatable        =
 
 ipairs              =
 [[
-Retorna tres valores (una función de iterador, la tabla `t` y `0`) cosa que la estructura
+Retorna tres valores (una función iteradora, la tabla `t` y `0`) cosa que la estructura
 ```lua
     for i,v in ipairs(t) do body end
 ```
@@ -149,7 +149,7 @@ tonumber            =
 [[
 Cuando se llama sin `base`, `toNumber` intenta convertir el argumento a un número. Si el argumento ya es un número o un texto convertible a un número, entonces `tonumber` retorna este número; si no es el caso, retorna `fail`
 
-La conversión de strings puede resultar en enteros o flotantes, de acuerdo a las convenciones léxicas de Lua (vea §3.1). El string puede tener espacios al principio, al final y tener un signo.
+La conversión de strings puede resultar en enteros o flotantes, de acuerdo a las convenciones léxicas de Lua (véase §3.1). El string puede tener espacios al principio, al final y tener un signo.
 ]]
 
 tostring            =
@@ -244,7 +244,7 @@ coroutine.create            =
 coroutine.isyieldable       =
 'Retorna verdadero cuando la co-rutina en ejecución puede suspenderse cediendo el control.'
 coroutine.isyieldable['>5.4']=
-'Retorna verdadero cuando la co-rutina `co` puede suspenderse cediendo el control. El valor por omisión para `co` es la co-rutina actualmente en ejecución.' 
+'Retorna verdadero cuando la co-rutina `co` puede suspenderse cediendo el control. El valor predeterminado para `co` es la co-rutina actualmente en ejecución.'
 coroutine.close             =
 'Cierra la co-rutina `co`, cerrando todas sus variables prontas a cerrarse, dejando la co-rutina en un estado muerto.'
 coroutine.resume            =
@@ -396,26 +396,26 @@ seekwhence['.end']          =
 'Sitúa la posición base al final del archivo.'
 
 vbuf.no                     =
-'Output operation appears immediately.'
+'La salida de la operación aparece de inmediato.'
 vbuf.full                   =
-'Performed only when the buffer is full.'
+'Realizado solo cuando el `buffer` está lleno.'
 vbuf.line                   =
-'Buffered until a newline is output.'
+'Almacenado en el `buffer` hasta que se encuentra un salto de línea en la salida.'
 
 io                          =
 ''
 io.stdin                    =
-'standard input.'
+'Entrada estándar.'
 io.stdout                   =
-'standard output.'
+'Salida estándar.'
 io.stderr                   =
-'standard error.'
+'Salida de error estándar.'
 io.close                    =
-'Close `file` or default output file.'
+'Cierra el archivo `file` o el archivo de salida predeterminado.'
 io.flush                    =
-'Saves any written data to default output file.'
+'Guarda la data escrita al archivo de salida predeterminado.'
 io.input                    =
-'Sets `file` as the default input file.'
+'Asigna `file` como el archivo de entrada predeterminado.'
 io.lines                    =
 [[
 ------
@@ -426,113 +426,113 @@ end
 ```
 ]]
 io.open                     =
-'Opens a file, in the mode specified in the string `mode`.'
+'Abre un archivo en el modo especificado en el string `mode`.'
 io.output                   =
-'Sets `file` as the default output file.'
+'Asigna `file` como el archivo de salida predeterminado.'
 io.popen                    =
-'Starts program prog in a separated process.'
+'Inicia el programa provisto como un proceso separado.'
 io.read                     =
-'Reads the `file`, according to the given formats, which specify what to read.'
+'Lee el archivo de acuerdo a los formatos provistos, los cuales especifican qué leer.'
 io.tmpfile                  =
-'In case of success, returns a handle for a temporary file.'
+'En caso de éxito retorna un descriptor de archvivo a un archivo temporal.'
 io.type                     =
-'Checks whether `obj` is a valid file handle.'
+'Verifica si el objeto `obj` es un descriptor de archivo válido.'
 io.write                    =
-'Writes the value of each of its arguments to default output file.'
+'Escribe el valor de cada uno de sus argumentos al archivo de salida predeterminado.'
 
 openmode.r                  =
-'Read mode.'
+'Modo de lectura.'
 openmode.w                  =
-'Write mode.'
+'Modo de escritura.'
 openmode.a                  =
-'Append mode.'
+'Modo de agregado.'
 openmode['.r+']             =
-'Update mode, all previous data is preserved.'
+'Modo de actualización, toda data existente es preservada.'
 openmode['.w+']             =
-'Update mode, all previous data is erased.'
+'Modo de actualización, toda data existente es borrada.'
 openmode['.a+']             =
-'Append update mode, previous data is preserved, writing is only allowed at the end of file.'
+'Modo de agregado y actualización, toda data existente es preservada, la escritura solo es permitida al final del archivo.'
 openmode.rb                 =
-'Read mode. (in binary mode.)'
+'Modo de lectura. (en modo binario)'
 openmode.wb                 =
-'Write mode. (in binary mode.)'
+'Modo de escritura. (en modo binario)'
 openmode.ab                 =
-'Append mode. (in binary mode.)'
+'Modo de agregado. (en modo binario)'
 openmode['.r+b']            =
-'Update mode, all previous data is preserved. (in binary mode.)'
+'Modo de actualización, toda data existente es preservada. (en modo binario)'
 openmode['.w+b']            =
-'Update mode, all previous data is erased. (in binary mode.)'
+'Modo de actualización, toda data existente es borrada. (en modo binario)'
 openmode['.a+b']            =
-'Append update mode, previous data is preserved, writing is only allowed at the end of file. (in binary mode.)'
+'Modo de agregado y actualización, toda data existente es preservada, la escritura solo es permitida al final del archivo. (en modo binario)'
 
 popenmode.r                 =
-'Read data from this program by `file`.'
+'Lee data the este programa por archivo `file`.'
 popenmode.w                 =
-'Write data to this program by `file`.'
+'Escribe data the este programa por archivo `file`.'
 
 filetype.file               =
-'Is an open file handle.'
+'Es un descriptor de archivo abierto.'
 filetype['.closed file']    =
-'Is a closed file handle.'
+'Es un descriptor de archivo cerrado.'
 filetype['.nil']            =
-'Is not a file handle.'
+'No es un descriptor de archivo.'
 
 math                        =
 ''
 math.abs                    =
-'Returns the absolute value of `x`.'
+'Retorna el valor absoluto de `x`.'
 math.acos                   =
-'Returns the arc cosine of `x` (in radians).'
+'Retorna el arcocoseno de `x` (en radianes).'
 math.asin                   =
-'Returns the arc sine of `x` (in radians).'
+'Retorna el arcoseno de `x` (en radianes).'
 math.atan['<5.2']           =
-'Returns the arc tangent of `x` (in radians).'
+'Retorna el arcotangente de `x` (en radianes).'
 math.atan['>5.3']           =
-'Returns the arc tangent of `y/x` (in radians).'
+'Retorna el arcotangente de `y/x` (en radianes).'
 math.atan2                  =
-'Returns the arc tangent of `y/x` (in radians).'
+'Retorna el arcotangente de `y/x` (en radianes).'
 math.ceil                   =
-'Returns the smallest integral value larger than or equal to `x`.'
+'Retorna el menor valor integral mayor o igual a `x`.'
 math.cos                    =
-'Returns the cosine of `x` (assumed to be in radians).'
+'Retorna el coseno de `x` (se asume que está en radianes).'
 math.cosh                   =
-'Returns the hyperbolic cosine of `x` (assumed to be in radians).'
+'Retorna el coseno hiperbólico de `x` (se asume que está en radianes).'
 math.deg                    =
-'Converts the angle `x` from radians to degrees.'
+'Convierte el ángulo `x` de radianes a grados.'
 math.exp                    =
-'Returns the value `e^x` (where `e` is the base of natural logarithms).'
+'Retorna el valor `e^x` (donde `e` es la base del logaritmo natural).'
 math.floor                  =
-'Returns the largest integral value smaller than or equal to `x`.'
+'Retorna el mayor valor integral más menor o igual a `x`.'
 math.fmod                   =
-'Returns the remainder of the division of `x` by `y` that rounds the quotient towards zero.'
+'Retorna el resto de la división de `x` por `y` que redondea el cuociente hacia cero.'
 math.frexp                  =
-'Decompose `x` into tails and exponents. Returns `m` and `e` such that `x = m * (2 ^ e)`, `e` is an integer and the absolute value of `m` is in the range [0.5, 1) (or zero when `x` is zero).'
+'Descompone `x` en mantisa y exponente. Retorna `m` y `e` tal que  `x = m * (2 ^ e)`, `e` es un entero y el valor absoluto de `m` está en el rango [0.5, 1) (ó cero cuando `x` es cero).'
 math.huge                   =
-'A value larger than any other numeric value.'
+'Un valor mayor que cualquier otro valor numérico.'
 math.ldexp                  =
-'Returns `m * (2 ^ e)` .'
+'Retorna `m * (2 ^ e)` .'
 math.log['<5.1']            =
-'Returns the natural logarithm of `x` .'
+'Retorna el logaritmo natural de `x` .'
 math.log['>5.2']            =
-'Returns the logarithm of `x` in the given base.'
+'Retorna el logaritmo de `x` en la base provista.'
 math.log10                  =
-'Returns the base-10 logarithm of x.'
+'Retorna el logaritmo en base 10 de `x` .'
 math.max                    =
-'Returns the argument with the maximum value, according to the Lua operator `<`.'
+'Retorna el argumento con el valor máximo, de acuerdo al operador de Lua `<`.'
 math.maxinteger['>5.3']     =
-'An integer with the maximum value for an integer.'
+'Un entero con el valor máximo para un entero.'
 math.min                    =
-'Returns the argument with the minimum value, according to the Lua operator `<`.'
+'Retorna el argumento con el valor mínimo, de acuerdo al operador de Lua `<`.'
 math.mininteger['>5.3']     =
-'An integer with the minimum value for an integer.'
+'Un entero con el valor mínimo para un entero.'
 math.modf                   =
-'Returns the integral part of `x` and the fractional part of `x`.'
+'Retorna la parte integral de `x` y la parte fraccional de `x`.'
 math.pi                     =
-'The value of *π*.'
+'El valor de *π*.'
 math.pow                    =
-'Returns `x ^ y` .'
+'Retorna `x ^ y` .'
 math.rad                    =
-'Converts the angle `x` from degrees to radians.'
+'Convierte el ángulo `x` de grados a radianes.'
 math.random                 =
 [[
 * `math.random()`: Returns a float in the range [0,1).
@@ -540,7 +540,7 @@ math.random                 =
 * `math.random(m, n)`: Returns a integer in the range [m, n].
 ]]
 math.randomseed['<5.3']     =
-'Sets `x` as the "seed" for the pseudo-random generator.'
+'Asigna `x` como el valor de semilla para el generador de números pseudo-aleatorios.'
 math.randomseed['>5.4']     =
 [[
 * `math.randomseed(x, y)`: Concatenate `x` and `y` into a 128-bit `seed` to reinitialize the pseudo-random generator.
@@ -548,51 +548,51 @@ math.randomseed['>5.4']     =
 * `math.randomseed()`: Generates a seed with a weak attempt for randomness.
 ]]
 math.sin                    =
-'Returns the sine of `x` (assumed to be in radians).'
+'Retorna el seno de `x` (se asume que está en radianes).'
 math.sinh                   =
-'Returns the hyperbolic sine of `x` (assumed to be in radians).'
+'Retorna el seno hiperbólico de `x` (se asume que está en radianes).'
 math.sqrt                   =
-'Returns the square root of `x`.'
+'Retorna la raíz cuadrada de `x`.'
 math.tan                    =
-'Returns the tangent of `x` (assumed to be in radians).'
+'Retorna la tangente de `x` (se asume que está en radianes).'
 math.tanh                   =
-'Returns the hyperbolic tangent of `x` (assumed to be in radians).'
+'Retorna la tangente hiperbólica de `x` (se asume que está en radianes).'
 math.tointeger['>5.3']      =
-'If the value `x` is convertible to an integer, returns that integer.'
+'Si el valor de `x` se puede convertir a un entero, retorna ese entero.'
 math.type['>5.3']           =
-'Returns `"integer"` if `x` is an integer, `"float"` if it is a float, or `nil` if `x` is not a number.'
+'Retorna `"integer"` si `x` es un entero, `"float"` si es un flotante ó `nil` si `x` no es un número.'
 math.ult['>5.3']            =
-'Returns `true` if and only if `m` is below `n` when they are compared as unsigned integers.'
+'Retorna `true` si y sólo si `m` es menor que `n` cuando son comparados como enteros sin signo.'
 
 os                          =
 ''
 os.clock                    =
-'Returns an approximation of the amount in seconds of CPU time used by the program.'
+'Retorna una aproximación de la cantidad de segundos en tiempo de CPU usado por el programa.'
 os.date                     =
-'Returns a string or a table containing date and time, formatted according to the given string `format`.'
+'Retorna un string o una tabla que contiene la fecha y el tiempo, formateados de acuerdo al string `format` provisto.'
 os.difftime                 =
-'Returns the difference, in seconds, from time `t1` to time `t2`.'
+'Retorna la diferencia, en segundos, desde el tiempo `t1` al tiempo `t2`.'
 os.execute                  =
-'Passes `command` to be executed by an operating system shell.'
+'Pasa el comando `command` para ser ejecutado por una llamada al intérprete *shell* del sistema operativo.'
 os.exit['<5.1']             =
-'Calls the C function `exit` to terminate the host program.'
+'Llama la función de C `exit` para terminar el programa anfitrión.'
 os.exit['>5.2']             =
-'Calls the ISO C function `exit` to terminate the host program.'
+'Llama la función de C ISO `exit` para terminar el programa anfitrión.'
 os.getenv                   =
-'Returns the value of the process environment variable `varname`.'
+'Retorna el valor de la variable `varname` del ambiente del proceso.'
 os.remove                   =
-'Deletes the file with the given name.'
+'Borra el archivo con el nombre provisto.'
 os.rename                   =
-'Renames the file or directory named `oldname` to `newname`.'
+'Renombra el archivo o directorio con nombre `oldname` al nuevo `newname`.'
 os.setlocale                =
-'Sets the current locale of the program.'
+'Fija la localización linguística actual del programa.'
 os.time                     =
-'Returns the current time when called without arguments, or a time representing the local date and time specified by the given table.'
+'Retorna el tiempo actual cuando se le llama sin argumentos o el tiempo que representa la fecha y hora local especificadas por la tabla provista.'
 os.tmpname                  =
-'Returns a string with a file name that can be used for a temporary file.'
+'Retorna un string con un nombre de archivo que puede ser usado como archivo temporal.'
 
 osdate.year                 =
-'four digits'
+'cuatro dígitos'
 osdate.month                =
 '1-12'
 osdate.day                  =
@@ -604,58 +604,58 @@ osdate.min                  =
 osdate.sec                  =
 '0-61'
 osdate.wday                 =
-'weekday, 1–7, Sunday is 1'
+'día de la semana, 1-7, Domingo es 1'
 osdate.yday                 =
-'day of the year, 1–366'
+'día del año, 1–366'
 osdate.isdst                =
-'daylight saving flag, a boolean'
+'indicador de horario de verano, un booleano'
 
 package                     =
 ''
 
 require['<5.3']             =
-'Loads the given module, returns any value returned by the given module(`true` when `nil`).'
+'Carga el módulo provisto, retorna cualquier valor retornado por el módulo provisto (`true` cuando es `nil`).'
 require['>5.4']             =
-'Loads the given module, returns any value returned by the searcher(`true` when `nil`). Besides that value, also returns as a second result the loader data returned by the searcher, which indicates how `require` found the module. (For instance, if the module came from a file, this loader data is the file path.)'
+'Carga el módulo provisto, retorna cualquier valor retornado por el buscador (`true` cuando es `nil`). Aparte de ese valor, también retorna el cargador de datos retornados por el buscador como segundo resultado, lo que indica cómo `require` encontró el módulo. (Por ejemplo, si el módulo viene de un archivo, los datos del cargador son la ruta a dicho archivo.'
 
 package.config              =
-'A string describing some compile-time configurations for packages.'
+'Un string describiendo algunas configuracions en tiempo de compilación para los paquetes.'
 package.cpath               =
-'The path used by `require` to search for a C loader.'
+'La ruta usada por `require` para buscar por un cargador de C.'
 package.loaded              =
-'A table used by `require` to control which modules are already loaded.'
+'Una tabla usada por `require` para controlar qué módulos ya se han cargado.'
 package.loaders             =
-'A table used by `require` to control how to load modules.'
+'Una tabla usada por `require` para controlar cómo cargar los módulos.'
 package.loadlib             =
-'Dynamically links the host program with the C library `libname`.'
+'Enlaza dinámicamente el programa anfitrión con la biblioteca de C `libname`.'
 package.path                =
-'The path used by `require` to search for a Lua loader.'
+'Ruta usada por `require` para buscar por un cargador de Lua.'
 package.preload             =
-'A table to store loaders for specific modules.'
+'Tabla para almacenar cargadores de módulos específicos.'
 package.searchers           =
-'A table used by `require` to control how to load modules.'
+'Una tabla usada por `require` para controlar cómo buscar los módulos.'
 package.searchpath          =
-'Searches for the given `name` in the given `path`.'
+'Busca por el nombre `name` en la ruta `path`.'
 package.seeall              =
-'Sets a metatable for `module` with its `__index` field referring to the global environment, so that this module inherits values from the global environment. To be used as an option to function `module` .'
+'Asigna una metatabla para el `module` con su campo `__index` apuntando al ambiente global, de manera que este módulo hereda los valores del ambiente global. Se usa como opción para la función `module` .'
 
 string                      =
 ''
 string.byte                 =
-'Returns the internal numeric codes of the characters `s[i], s[i+1], ..., s[j]`.'
+'Retorna los códigos numéricos internos de los caracteres `s[i], s[i+1], ..., s[j]`.'
 string.char                 =
-'Returns a string with length equal to the number of arguments, in which each character has the internal numeric code equal to its corresponding argument.'
+'Retorna un string con largo igual al número de argumeentos, en el que cada caracter tiene el código numérico internol igual a su argumento correspondiente.'
 string.dump                 =
-'Returns a string containing a binary representation (a *binary chunk*) of the given function.'
+'Retorna un string que contiene una representación binaria de la función provista.'
 string.find                 =
-'Looks for the first match of `pattern` (see §6.4.1) in the string.'
+'Busca el primer calce del patrón `pattern` (véase §6.4.1) en el string.'
 string.format               =
-'Returns a formatted version of its variable number of arguments following the description given in its first argument.'
+'Retorna una versión formateada de su argumentos (en número variable) siguiendo la descripción dada en su primer argumento.'
 string.gmatch               =
 [[
-Returns an iterator function that, each time it is called, returns the next captures from `pattern` (see §6.4.1) over the string s.
+Retorna una función iteradora que cada vez que es llamada retorna las siguientes capturas del patrón `pattern` (véase §6.4.1) sobre el string s.
 
-As an example, the following loop will iterate over all the words from string s, printing one per line:
+Por ejemplo, el bucle siguiente itera sobre todas las palabras del sstring s, imprimiendo una por línea:
 ```lua
     s =
 "hello world from Lua"
@@ -665,41 +665,41 @@ As an example, the following loop will iterate over all the words from string s,
 ```
 ]]
 string.gsub                 =
-'Returns a copy of s in which all (or the first `n`, if given) occurrences of the `pattern` (see §6.4.1) have been replaced by a replacement string specified by `repl`.'
+'Retorna una copia de s en la cual todos (o los primeras `n`, si es provisto este argumento) ocurrencias del patrón `pattern` (vease §6.4.1) han sido reemplazadas por el string de reemplazo especificado por `repl`.'
 string.len                  =
-'Returns its length.'
+'Retorna el largo.'
 string.lower                =
-'Returns a copy of this string with all uppercase letters changed to lowercase.'
+'Retorna una copia de este string con todas sus letras mayúsculas cambiadas a minúsculas.'
 string.match                =
-'Looks for the first match of `pattern` (see §6.4.1) in the string.'
+'Busca el primer calce del patrón `pattern` (véase §6.4.1) en el string.'
 string.pack                 =
-'Returns a binary string containing the values `v1`, `v2`, etc. packed (that is, serialized in binary form) according to the format string `fmt` (see §6.4.2) .'
+'Retorna el string binario que contiene los valores `v1`, `v2`, etc. empacados (serializados en forma binaria) de acuerdo al string de formato `fmt` (véase §6.4.2) .'
 string.packsize             =
-'Returns the size of a string resulting from `string.pack` with the given format string `fmt` (see §6.4.2) .'
+'Retorna el largo del string que retorna `string.pack` con el formato `fmt` (véase §6.4.2) provisto.'
 string.rep['>5.2']          =
-'Returns a string that is the concatenation of `n` copies of the string `s` separated by the string `sep`.'
+'Retorna el string que es la concatenación de `n` copias del string `s` separado por el string `sep`.'
 string.rep['<5.1']          =
-'Returns a string that is the concatenation of `n` copies of the string `s` .'
+'Retorna el string que es la concatenación de `n` copias del string `s` .'
 string.reverse              =
-'Returns a string that is the string `s` reversed.'
+'Retorna el string que es el string `s` al revés.'
 string.sub                  =
-'Returns the substring of the string that starts at `i` and continues until `j`.'
+'Retorna el substring del string que empieza en `i` y continúa hasta `j`.'
 string.unpack               =
-'Returns the values packed in string according to the format string `fmt` (see §6.4.2) .'
+'Retorna los valores empacados en el string de acuerdo al string de formato `fmt` (véase §6.4.2) .'
 string.upper                =
-'Returns a copy of this string with all lowercase letters changed to uppercase.'
+'Retorna una copia de este string con todas sus letras minúsculas cambiadas a mayúsculas.'
 
 table                       =
 ''
 table.concat                =
-'Given a list where all elements are strings or numbers, returns the string `list[i]..sep..list[i+1] ··· sep..list[j]`.'
+'Dada una lista donde todos los elementos son strings o números, retorna el string `list[i]..sep..list[i+1] ··· sep..list[j]`.'
 table.insert                =
-'Inserts element `value` at position `pos` in `list`.'
+'Inserta el elemento `value` en la posición `pos` en la lista `list`.'
 table.maxn                  =
-'Returns the largest positive numerical index of the given table, or zero if the table has no positive numerical indices.'
+'Retorna el índice numérico positivo más grande de la tabla provista o cero si la tabla no tiene un índice numérico positivo.'
 table.move                  =
 [[
-Moves elements from table `a1` to table `a2`.
+Mueve los elementos de la tabla `a1` a la tabla `a2`.
 ```lua
 a2[t],··· =
 a1[f],···,a1[e]
@@ -707,58 +707,58 @@ return a2
 ```
 ]]
 table.pack                  =
-'Returns a new table with all arguments stored into keys `1`, `2`, etc. and with a field `"n"` with the total number of arguments.'
+'Retorna una nueva tabla con todos los argumentos almacenados en las claves `1`, `2`, etc. y con un campo `"n"` con el número total de argumentos.'
 table.remove                =
-'Removes from `list` the element at position `pos`, returning the value of the removed element.'
+'Remueve de la lista `list`, el elemento en la posición `pos`, retornando el valor del elemento removido.'
 table.sort                  =
-'Sorts list elements in a given order, *in-place*, from `list[1]` to `list[#list]`.'
+'Ordena los elementos de la lista en un orden dado, *modificando la propia lista*, desde `list[1]` hasta `list[#list]`.'
 table.unpack                =
 [[
-Returns the elements from the given list. This function is equivalent to
+Retorna los elementos de la lista provista. Esta función es equivalente a
 ```lua
     return list[i], list[i+1], ···, list[j]
 ```
 By default, `i` is `1` and `j` is `#list`.
 ]]
 table.foreach               =
-'Executes the given f over all elements of table. For each element, f is called with the index and respective value as arguments. If f returns a non-nil value, then the loop is broken, and this value is returned as the final value of foreach.'
+'Llama a la función provista f sobre cada uno de los elementos de la tabla. Por cada elemento, f es llamada con el índice y valor respectivo como argumentos. Si f retorna un valor no-nulo, el bucle se termina forzosamente y este valor es retornado como el valor final de foreach.'
 table.foreachi              =
-'Executes the given f over the numerical indices of table. For each index, f is called with the index and respective value as arguments. Indices are visited in sequential order, from 1 to n, where n is the size of the table. If f returns a non-nil value, then the loop is broken and this value is returned as the result of foreachi.'
+'Ejecuta la f provista sobre los índices numéricos de la tabla. Por cada índice, f es llamada con el índice y valor respectivo como argumentos. Los índices son visitados en orden secuencial, de 1 a n, donde ne es el tamaño de la tabla. Si f retorna un valor no-nulo, el bucle se termina forzosamente y este valor es retornado como el valor final de foreachi.'
 table.getn                  =
-'Returns the number of elements in the table. This function is equivalent to `#list`.'
+'Retorna el número de elmentos en la tabla. Esta función es equivalente a `#list`.'
 table.new                   =
-[[This creates a pre-sized table, just like the C API equivalent `lua_createtable()`. This is useful for big tables if the final table size is known and automatic table resizing is too expensive. `narray` parameter specifies the number of array-like items, and `nhash` parameter specifies the number of hash-like items. The function needs to be required before use.
+[[Esta función crea una tabla con el tamaño provisto, como la API en C equivalente `lua_createtable()`. Esta función es útil para tablas grandes si el tamaño final de la tabla es conocido y el agrandar automáticamente la tabla es muy caro. El parámetro `narray` especifica el número de ítemes de tipo de arreglo y el parámetro `nhash` especifica el número de ítemes de tipo diccionario.
 ```lua
     require("table.new")
 ```
 ]]
 table.clear                 =
-[[This clears all keys and values from a table, but preserves the allocated array/hash sizes. This is useful when a table, which is linked from multiple places, needs to be cleared and/or when recycling a table for use by the same context. This avoids managing backlinks, saves an allocation and the overhead of incremental array/hash part growth. The function needs to be required before use.
+[[Esta función barre con todas las claves y valores de una tabla, pero preserva los tamaños de arreglo/diccionario reservados en memoria. Esta función es útil cuando una tabla que ha sido enlazada desde múltiples otras partes requiere ser vaciada y/o cuando se recicla una tabla para ser usada en el mismo contexto. Esto previene manejar enlaces de vuelta, previene tener que asignar memoria y el costo operativo del crecimiento incremental de la parte arreglo/diccionario.
 ```lua
     require("table.clear").
 ```
-Please note this function is meant for very specific situations. In most cases it's better to replace the (usually single) link with a new table and let the GC do its work.
+Nótese que esta función está hecha para situaciones muy específicas. En la mayoría de los casos es mejor reemplazar el enlace (el cual suele ser simple) con una tabla nueva y permitir que el recolector de basura haga su trabajo.
 ]]
 
 utf8                        =
 ''
 utf8.char                   =
-'Receives zero or more integers, converts each one to its corresponding UTF-8 byte sequence and returns a string with the concatenation of all these sequences.'
+'Recibe cero ó más enteros, convierte a cada uno a su secuencia de bytes en UTF-8 correspondiente y retorna un string con la concatenación de todas estas secuencias.'
 utf8.charpattern            =
-'The pattern which matches exactly one UTF-8 byte sequence, assuming that the subject is a valid UTF-8 string.'
+'El patrón con el que se calza exactamente una secuencia de bytes en UTF-8, asumiendo que el sujeto es un string en UTF-8 válido.'
 utf8.codes                  =
 [[
-Returns values so that the construction
+Retorna valores tal que el constructo
 ```lua
 for p, c in utf8.codes(s) do
     body
 end
 ```
-will iterate over all UTF-8 characters in string s, with p being the position (in bytes) and c the code point of each character. It raises an error if it meets any invalid byte sequence.
+itera sobre todos los caracteres en UTF-8 en el string s, con p siendo la posición en bytes y c el punto de código de cada caracter. Alza un error si se encuentra con alguna secuencia inválida de bytes.
 ]]
 utf8.codepoint              =
-'Returns the codepoints (as integers) from all characters in `s` that start between byte position `i` and `j` (both included).'
+'Retorna los puntos de códigos como enteros de todos los caracteres en `s` que empiezan entre la posición en bytes `i` y `j` (ambos inclusive).'
 utf8.len                    =
-'Returns the number of UTF-8 characters in string `s` that start between positions `i` and `j` (both inclusive).'
+'Retorna el número de caracteres en UTF-8 en el string `s` que empiezan entre las posiciones `i` y `j` (ambos inclusive).'
 utf8.offset                 =
-'Returns the position (in bytes) where the encoding of the `n`-th character of `s` (counting from position `i`) starts.'
+'Retorna la posición en bytes donde la codificación del caracter `n`-ésimo de `s` empieza, contado a partir de la posición `i`.'

From eaa13c2d43d83dbdb9be22d0edfcc3ccbe27d504 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Wed, 19 Mar 2025 14:55:47 -0300
Subject: [PATCH 05/24] script.lua up until line 200-something

---
 locale/es-419/script.lua | 204 +++++++++++++++++++--------------------
 1 file changed, 102 insertions(+), 102 deletions(-)

diff --git a/locale/es-419/script.lua b/locale/es-419/script.lua
index 9c9163ae4..99a4edd94 100644
--- a/locale/es-419/script.lua
+++ b/locale/es-419/script.lua
@@ -1,211 +1,211 @@
 DIAG_LINE_ONLY_SPACE    =
-'Line with spaces only.'
+'Línea con solo espacios.'
 DIAG_LINE_POST_SPACE    =
-'Line with trailing space.'
+'Línea con espacio al final.'
 DIAG_UNUSED_LOCAL       =
-'Unused local `{}`.'
+'Variable sin usar `{}`.'
 DIAG_UNDEF_GLOBAL       =
-'Undefined global `{}`.'
+'Variable global no definida `{}`.'
 DIAG_UNDEF_FIELD        =
-'Undefined field `{}`.'
+'Campo no definido `{}`.'
 DIAG_UNDEF_ENV_CHILD    =
-'Undefined variable `{}` (overloaded `_ENV` ).'
+'Variable no definida `{}` (`_ENV` sobrecargado).'
 DIAG_UNDEF_FENV_CHILD   =
-'Undefined variable `{}` (inside module).'
+'Variable no definida `{}` (dentro del módulo).'
 DIAG_GLOBAL_IN_NIL_ENV  =
-'Invalid global (`_ENV` is `nil`).'
+'Variable global inválida `{}` (`_ENV` es `nil`).'
 DIAG_GLOBAL_IN_NIL_FENV =
-'Invalid global (module environment is `nil`).'
+'Variable global (módulo de ambiente es `nil`).'
 DIAG_UNUSED_LABEL       =
-'Unused label `{}`.'
+'Etiqueta sin uso `{}`.'
 DIAG_UNUSED_FUNCTION    =
-'Unused functions.'
+'Funciones sin uso.'
 DIAG_UNUSED_VARARG      =
-'Unused vararg.'
+'vararg sin uso.'
 DIAG_REDEFINED_LOCAL    =
-'Redefined local `{}`.'
+'Variable re-definida `{}`.'
 DIAG_DUPLICATE_INDEX    =
-'Duplicate index `{}`.'
+'Índice duplicado `{}`.'
 DIAG_DUPLICATE_METHOD   =
-'Duplicate method `{}`.'
+'Método duplicado `{}`.'
 DIAG_PREVIOUS_CALL      =
-'Will be interpreted as `{}{}`. It may be necessary to add a `,`.'
+'Se intrepretará como `{}{}`. Podría ser necesario agregar una `.`.'
 DIAG_PREFIELD_CALL      =
-'Will be interpreted as `{}{}`. It may be necessary to add a `,` or `;`.'
+'Se intrepretará como `{}{}`. Podría ser necesario agregar una `.` ó `;`.'
 DIAG_OVER_MAX_ARGS      =
-'This function expects a maximum of {:d} argument(s) but instead it is receiving {:d}.'
+'Esta función espera un máximo de {:d} argumento(s), pero está recibiendo {:d}.'
 DIAG_MISS_ARGS          =
-'This function requires {:d} argument(s) but instead it is receiving {:d}.'
+'Esta función requiere {:d} argumento(s), pero está recibiendo {:d}.'
 DIAG_OVER_MAX_VALUES    =
-'Only has {} variables, but you set {} values.'
+'Solo tiene {} variables, pero se están asignando {} valores.'
 DIAG_AMBIGUITY_1        =
-'Compute `{}` first. You may need to add brackets.'
+'Se calcula `{}` primero. Agregar corchetes podría ser necesario.'
 DIAG_LOWERCASE_GLOBAL   =
-'Global variable in lowercase initial, Did you miss `local` or misspell it?'
+'Variable global con inicial minúscula, ¿olvidó agregar `local` o está mal escrita?'
 DIAG_EMPTY_BLOCK        =
-'Empty block.'
+'Bloque vacío.'
 DIAG_DIAGNOSTICS        =
-'Lua Diagnostics.'
+'Diagnósticos de Lua.'
 DIAG_SYNTAX_CHECK       =
-'Lua Syntax Check.'
+'Chequeo sintáctico de Lua.'
 DIAG_NEED_VERSION       =
-'Supported in {}, current is {}.'
+'Soportado en {}, actualmente usando {}.'
 DIAG_DEFINED_VERSION    =
-'Defined in {}, current is {}.'
+'Definido en {}, actualmente usando {}.'
 DIAG_DEFINED_CUSTOM     =
-'Defined in {}.'
+'Definido en {}.'
 DIAG_DUPLICATE_CLASS    =
-'Duplicate Class `{}`.'
+'La Clase `{}` está duplicada.'
 DIAG_UNDEFINED_CLASS    =
-'Undefined Class `{}`.'
+'La Clase `{}` no está definida.'
 DIAG_CYCLIC_EXTENDS     =
-'Cyclic extends.'
+'Extensiones cíclicas'
 DIAG_INEXISTENT_PARAM   =
-'Inexistent param.'
+'Parametro inexistente.'
 DIAG_DUPLICATE_PARAM    =
-'Duplicate param.'
+'Parametro duplicado.'
 DIAG_NEED_CLASS         =
-'Class needs to be defined first.'
+'La clase debe ser definida primero.'
 DIAG_DUPLICATE_SET_FIELD=
-'Duplicate field `{}`.'
+'Campo duplicado `{}`.'
 DIAG_SET_CONST          =
-'Assignment to const variable.'
+'Asignación de valor a una variable constante.'
 DIAG_SET_FOR_STATE      =
-'Assignment to for-state variable.'
+'Asignación de valor a una variable de bucle.'
 DIAG_CODE_AFTER_BREAK   =
-'Unable to execute code after `break`.'
+'Código después de `break` nunca se ejecuta.'
 DIAG_UNBALANCED_ASSIGNMENTS =
-'The value is assigned as `nil` because the number of values is not enough. In Lua, `x, y = 1 ` is equivalent to `x, y = 1, nil` .'
+'El valor que se asigna es `nil` debido a que el número de valores no es suficiente. En Lua, `x, y = 1 ` es equivalente a `x, y = 1, nil` .'
 DIAG_REQUIRE_LIKE       =
-'You can treat `{}` as `require` by setting.'
+'Puede tratar `{}` como `require` por configuración.'
 DIAG_COSE_NON_OBJECT    =
-'Cannot close a value of this type. (Unless set `__close` meta method)'
+'No se puede cerrar un valor de este tipo. (A menos que se asigne el método meta `__close`)'
 DIAG_COUNT_DOWN_LOOP    =
-'Do you mean `{}` ?'
+'Quizo decir `{}` ?'
 DIAG_UNKNOWN            =
-'Can not infer type.'
+'No se puede inferir el tipo.'
 DIAG_DEPRECATED         =
-'Deprecated.'
+'Obsoleto.'
 DIAG_DIFFERENT_REQUIRES =
-'The same file is required with different names.'
+'Al mismo archivo se le requiere con `require` con distintos nombres.'
 DIAG_REDUNDANT_RETURN   =
-'Redundant return.'
+'Retorno redundante.'
 DIAG_AWAIT_IN_SYNC      =
-'Async function can only be called in async function.'
+'Una función asíncrona solo puede ser llamada en una función asíncrona.'
 DIAG_NOT_YIELDABLE      =
-'The {}th parameter of this function was not marked as yieldable, but an async function was passed in. (Use `---@param name async fun()` to mark as yieldable)'
+'El parámetro {}-ésimo de esta función no fue marcado como suspendible para ceder el control (`yield`), en vez, una función asíncrona fue provista. (Use `---@param nombre async fun()` para marcarlo como suspendible)'
 DIAG_DISCARD_RETURNS    =
-'The return values of this function cannot be discarded.'
+'No se pueden descartar los valores retornados por esta función.'
 DIAG_NEED_CHECK_NIL     =
-'Need check nil.'
+'Un chequeo de nil es necesario.'
 DIAG_CIRCLE_DOC_CLASS                 =
-'Circularly inherited classes.'
+'Clases con herencia circular.'
 DIAG_DOC_FIELD_NO_CLASS               =
-'The field must be defined after the class.'
+'El campo debe estar definido después que la clase.'
 DIAG_DUPLICATE_DOC_ALIAS              =
-'Duplicate defined alias `{}`.'
+'Alias `{}` fue definido múltiples veces.'
 DIAG_DUPLICATE_DOC_FIELD              =
-'Duplicate defined fields `{}`.'
+'Campos definidos múltiples veces `{}`.'
 DIAG_DUPLICATE_DOC_PARAM              =
-'Duplicate params `{}`.'
+'Parámetros duplicados `{}`.'
 DIAG_UNDEFINED_DOC_CLASS              =
-'Undefined class `{}`.'
+'Clase no definida `{}`.'
 DIAG_UNDEFINED_DOC_NAME               =
-'Undefined type or alias `{}`.'
+'Tipo o alias no definido `{}`.'
 DIAG_UNDEFINED_DOC_PARAM              =
-'Undefined param `{}`.'
+'Parámetro no definido `{}`.'
 DIAG_MISSING_GLOBAL_DOC_COMMENT       =
-'Missing comment for global function `{}`.'
+'Falta un comentario para la función global `{}`.'
 DIAG_MISSING_GLOBAL_DOC_PARAM         =
-'Missing @param annotation for parameter `{}` in global function `{}`.'
+'Falta una anotación @param para el parámetro `{}` en la función global `{}`.'
 DIAG_MISSING_GLOBAL_DOC_RETURN        =
-'Missing @return annotation at index `{}` in global function `{}`.'
+'Falta una anotación @return para el índice `{}` en la función global `{}`.'
 DIAG_MISSING_LOCAL_EXPORT_DOC_COMMENT  =
-'Missing comment for exported local function `{}`.'
+'Falta un un comentario para la función local exportada `{}`.'
 DIAG_MISSING_LOCAL_EXPORT_DOC_PARAM    =
-'Missing @param annotation for parameter `{}` in exported local function `{}`.'
+'Falta una anotación @param para el parámetro `{}` en la función local `{}`.'
 DIAG_MISSING_LOCAL_EXPORT_DOC_RETURN   =
-'Missing @return annotation at index `{}` in exported local function `{}`.'
+'Falta una anotación @return para el índice `{}` en la función local `{}`.'
 DIAG_INCOMPLETE_SIGNATURE_DOC_PARAM   =
-'Incomplete signature. Missing @param annotation for parameter `{}`.'
+'Firma incompleta. Falta una anotación @param para el parámetro `{}`.'
 DIAG_INCOMPLETE_SIGNATURE_DOC_RETURN  =
-'Incomplete signature. Missing @return annotation at index `{}`.'
+'Firma incompleta. Falta una anotación @return para el índice `{}`.'
 DIAG_UNKNOWN_DIAG_CODE                =
-'Unknown diagnostic code `{}`.'
+'Código de diagnóstico desconocido `{}`.'
 DIAG_CAST_LOCAL_TYPE                  =
-'This variable is defined as type `{def}`. Cannot convert its type to `{ref}`.'
+'Esta variable fue definida como tipo `{def}`. No se puede convertir su tipo a `{ref}`.'
 DIAG_CAST_FIELD_TYPE                  =
-'This field is defined as type `{def}`. Cannot convert its type to `{ref}`.'
+'Este campo fue definido como tipo `{def}`. No se puede convertir su tipo a `{ref}`.'
 DIAG_ASSIGN_TYPE_MISMATCH             =
-'Cannot assign `{ref}` to `{def}`.'
+'No se puede asignar `{ref}` a `{def}`'
 DIAG_PARAM_TYPE_MISMATCH              =
 'Cannot assign `{ref}` to parameter `{def}`.'
 DIAG_UNKNOWN_CAST_VARIABLE            =
-'Unknown type conversion variable `{}`.'
+'Variable de conversión de tipo desconocida `{}`.'
 DIAG_CAST_TYPE_MISMATCH               =
-'Cannot convert `{def}` to `{ref}`。'
+'No se puede convertir `{ref}` a `{def}`。'
 DIAG_MISSING_RETURN_VALUE             =
-'Annotations specify that at least {min} return value(s) are required, found {rmax} returned here instead.'
+'Las anotaciones especifican que se requieren al menos {min} valor(es) de retorno, en cambio, se encontró que se retornaron {rmax}.'
 DIAG_MISSING_RETURN_VALUE_RANGE       =
-'Annotations specify that at least {min} return value(s) are required, found {rmin} to {rmax} returned here instead.'
+'Las anotaciones especifican que se requieren al menos {min} valor(es), en cambio, se encontró que se retornaron entre {rmin} y {rmax}.'
 DIAG_REDUNDANT_RETURN_VALUE           =
-'Annotations specify that at most {max} return value(s) are required, found {rmax} returned here instead.'
+'Las anotaciones especifican que se retornan a lo más {max} valor(es), en cambio, se encontró que se retornaron {rmax}.'
 DIAG_REDUNDANT_RETURN_VALUE_RANGE     =
-'Annotations specify that at most {max} return value(s) are required, found {rmin} to {rmax} returned here instead.'
+'Las anotaciones especifican que se retornan a lo más {max} valor(es), en cambio, se encontró que se retornaron entre {rmin} y {rmax}.'
 DIAG_MISSING_RETURN                   =
-'Annotations specify that a return value is required here.'
+'Las anotaciones especifican que se requiere un valor de retorno aquí.'
 DIAG_RETURN_TYPE_MISMATCH             =
-'Annotations specify that return value #{index} has a type of `{def}`, returning value of type `{ref}` here instead.'
+'Las anotaciones especifican que el valor de retorno #{index} tiene `{def}` como tipo, en cambio, se está retornando un valor de tipo `{ref}`.'
 DIAG_UNKNOWN_OPERATOR                 =
-'Unknown operator `{}`.'
+'Operación desconocida `{}`.'
 DIAG_UNREACHABLE_CODE                 =
-'Unreachable code.'
+'Este código nunca es ejecutado.'
 DIAG_INVISIBLE_PRIVATE                =
-'Field `{field}` is private, it can only be accessed in class `{class}`.'
+'El campo `{field}` es privado, solo puede ser accedido desde la clase `{class}`.'
 DIAG_INVISIBLE_PROTECTED              =
-'Field `{field}` is protected, it can only be accessed in class `{class}` and its subclasses.'
+'El campo `{field}` es protegido, solo puede ser accedido desde la clase `{class}` y sus sub-clases.'
 DIAG_INVISIBLE_PACKAGE                =
-'Field `{field}` can only be accessed in same file `{uri}`.'
+'Al campo `{field}` solo se le puede acceder dentro del mismo archivo `{uri}`.'
 DIAG_GLOBAL_ELEMENT                   =
-'Element is global.'
+'El elemento es global.'
 DIAG_MISSING_FIELDS                   =
-'Missing required fields in type `{1}`: {2}'
+'Faltan los campos requeridos en el tipo `{1}`: {2}'
 DIAG_INJECT_FIELD                     =
-'Fields cannot be injected into the reference of `{class}` for `{field}`. {fix}'
+'Los campos no pueden ser inyectados a la referencia de `{class}` para `{field}`. {fix}'
 DIAG_INJECT_FIELD_FIX_CLASS           =
-'To do so, use `---@class` for `{node}`.'
+'Para que sea así, use `---@class` para `{node}`.'
 DIAG_INJECT_FIELD_FIX_TABLE           =
-'To allow injection, add `{fix}` to the definition.'
+'Para permitir la inyección, agregue `{fix}` a la definición.'
 
 MWS_NOT_SUPPORT         =
-'{} does not support multi workspace for now, I may need to restart to support the new workspace ...'
+'{} no soporta múltiples espacios de trabajo por ahora, podría ser necesario que me reinicie para soportar el nuevo espacio de trabajo ...'
 MWS_RESTART             =
-'Restart'
+'Reiniciar'
 MWS_NOT_COMPLETE        =
-'Workspace is not complete yet. You may try again later...'
+'El espacio de trabajo aún no está completo. Puede intentarlo más tarde...'
 MWS_COMPLETE            =
-'Workspace is complete now. You may try again...'
+'El espacio de trabajo está completado. Puede intentarlo de nuevo...'
 MWS_MAX_PRELOAD         =
-'Preloaded files has reached the upper limit ({}), you need to manually open the files that need to be loaded.'
+'El número de archivos pre-cargados ha llegado al límite ({}), es necesario abrir manualmente los archivos que necesiten ser cargados.'
 MWS_UCONFIG_FAILED      =
-'Saving user setting failed.'
+'El guardado de la configuración de usuario falló.'
 MWS_UCONFIG_UPDATED     =
-'User setting updated.'
+'La configuración de usuario fue actualizada.'
 MWS_WCONFIG_UPDATED     =
-'Workspace setting updated.'
+'El espacio de trabajo fue actualizado.'
 
 WORKSPACE_SKIP_LARGE_FILE =
-'Too large file: {} skipped. The currently set size limit is: {} KB, and the file size is: {} KB.'
+'Archivo es muy grande: {} fue omitido. El límite de tamaño actual es: {} KB, y el tamaño de archivo es: {} KB.'
 WORKSPACE_LOADING         =
-'Loading workspace'
+'Cargando el espacio de trabajo.'
 WORKSPACE_DIAGNOSTIC      =
-'Diagnosing workspace'
+'Diagnosticando el espacio de trabajo'
 WORKSPACE_SKIP_HUGE_FILE  =
-'For performance reasons, the parsing of this file has been stopped: {}'
+'Por temas de rendimiento se detuvo la lectura de este archivo: {}'
 WORKSPACE_NOT_ALLOWED     =
-'Your workspace is set to `{}`. Lua language server refused to load this directory. Please check your configuration.[learn more here](https://luals.github.io/wiki/faq#why-is-the-server-scanning-the-wrong-folder)'
+'Su espacio de trabajo está asignado a `{}`. El servidor de lenguage de Lua se rehusó a cargar este directorio. Por favor, revise se configuración. [más info acá (en inglés)](https://luals.github.io/wiki/faq#why-is-the-server-scanning-the-wrong-folder)'
 WORKSPACE_SCAN_TOO_MUCH   =
-'More than {} files have been scanned. The current scanned directory is `{}`. Please see the [FAQ](https://luals.github.io/wiki/faq/#how-can-i-improve-startup-speeds) to see how you can include fewer files. It is also possible that your [configuration is incorrect](https://luals.github.io/wiki/faq#why-is-the-server-scanning-the-wrong-folder).'
+'Se revisaron más de {} archivos. El directorio actual de revisión es `{}`. Por favor, revise [estas preguntas y respuestas frecuentes (en inglés)](https://luals.github.io/wiki/faq/#how-can-i-improve-startup-speeds) para ver cómo se podrían incluir menos archivos. También es posible que su [configuración esté incorrecta (en inglés)](https://luals.github.io/wiki/faq#why-is-the-server-scanning-the-wrong-folder).'
 
 PARSER_CRASH            =
 'Parser crashed! Last words:{}'

From d85e66e56a22be85e74f744db2f928c710a7a88b Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Wed, 19 Mar 2025 15:55:55 -0300
Subject: [PATCH 06/24] 1/3rd of script.lua, add TODOs to file

---
 locale/es-419/script.lua | 554 +++++++++++++++++++--------------------
 1 file changed, 277 insertions(+), 277 deletions(-)

diff --git a/locale/es-419/script.lua b/locale/es-419/script.lua
index 99a4edd94..293789479 100644
--- a/locale/es-419/script.lua
+++ b/locale/es-419/script.lua
@@ -208,33 +208,33 @@ WORKSPACE_SCAN_TOO_MUCH   =
 'Se revisaron más de {} archivos. El directorio actual de revisión es `{}`. Por favor, revise [estas preguntas y respuestas frecuentes (en inglés)](https://luals.github.io/wiki/faq/#how-can-i-improve-startup-speeds) para ver cómo se podrían incluir menos archivos. También es posible que su [configuración esté incorrecta (en inglés)](https://luals.github.io/wiki/faq#why-is-the-server-scanning-the-wrong-folder).'
 
 PARSER_CRASH            =
-'Parser crashed! Last words:{}'
+'¡El lector se cayó! Las últimas palabras fueron:{}'
 PARSER_UNKNOWN          =
-'Unknown syntax error...'
+'Error desconocido de sintaxis...'
 PARSER_MISS_NAME        =
-'<name> expected.'
+'Se esperaba <name>.'
 PARSER_UNKNOWN_SYMBOL   =
-'Unexpected symbol `{symbol}`.'
+'Símbolo inesperado `{symbol}`.'
 PARSER_MISS_SYMBOL      =
-'Missed symbol `{symbol}`.'
+'Símbolo faltante `{symbol}`.'
 PARSER_MISS_ESC_X       =
-'Should be 2 hexadecimal digits.'
+'Deberían ser 2 dígitos hexadecimales.'
 PARSER_UTF8_SMALL       =
-'At least 1 hexadecimal digit.'
+'Al menos 1 dígito hexadecimal.'
 PARSER_UTF8_MAX         =
-'Should be between {min} and {max} .'
+'Deberían ser entre {min} y {max}.'
 PARSER_ERR_ESC          =
-'Invalid escape sequence.'
+'Secuencia inválida de escape.'
 PARSER_MUST_X16         =
-'Should be hexadecimal digits.'
+'Deberían ser dígitos hexadecimales.'
 PARSER_MISS_EXPONENT    =
-'Missed digits for the exponent.'
+'Faltan los dígitos para el exponente.'
 PARSER_MISS_EXP         =
-'<exp> expected.'
+'Se esperaba <exp>.'
 PARSER_MISS_FIELD       =
-'<field> expected.'
+'Se esperaba <field>.'
 PARSER_MISS_METHOD      =
-'<method> expected.'
+'Se esperaba <method>.'
 PARSER_ARGS_AFTER_DOTS  =
 '`...` should be the last arg.'
 PARSER_KEYWORD          =
@@ -246,303 +246,303 @@ PARSER_BREAK_OUTSIDE    =
 PARSER_MALFORMED_NUMBER =
 'Malformed number.'
 PARSER_ACTION_AFTER_RETURN =
-'<eof> expected after `return`.'
+'Se esperaba <eof> después de `return`.'
 PARSER_ACTION_AFTER_BREAK =
-'<eof> expected after `break`.'
+'Se esperaba <eof> después de `break`.'
 PARSER_NO_VISIBLE_LABEL =
-'No visible label `{label}` .'
+'No se ve la etiqueta `{label}` .'
 PARSER_REDEFINE_LABEL   =
-'Label `{label}` already defined.'
+'La etiqueta `{label}` ya fue definida.'
 PARSER_UNSUPPORT_SYMBOL =
-'{version} does not support this grammar.'
+'{version} no soporta esta gramática.'
 PARSER_UNEXPECT_DOTS    =
-'Cannot use `...` outside a vararg function.'
+'No se puede usar `...` fuera de una función de vararg.'
 PARSER_UNEXPECT_SYMBOL  =
-'Unexpected symbol `{symbol}` .'
+'Símbolo inesperado `{symbol}`.'
 PARSER_UNKNOWN_TAG      =
-'Unknown attribute.'
+'Atributo desconocido.'
 PARSER_MULTI_TAG        =
-'Does not support multi attributes.'
+'Los multi-atributos no están soportados.'
 PARSER_UNEXPECT_LFUNC_NAME =
-'Local function can only use identifiers as name.'
+'La función local solo puede ser usar identificadores como nombre.'
 PARSER_UNEXPECT_EFUNC_NAME =
-'Function as expression cannot be named.'
+'La función como expresión no puede ser nombrada.'
 PARSER_ERR_LCOMMENT_END =
-'Multi-line annotations should be closed by `{symbol}` .'
+'Las anotaciones multi-línea deben ser cerradas por `{symbol}` .'
 PARSER_ERR_C_LONG_COMMENT =
-'Lua should use `--[[ ]]` for multi-line annotations.'
+'En Lua debe usarse `--[[ ]]` para anotaciones multi-línea.'
 PARSER_ERR_LSTRING_END  =
-'Long string should be closed by `{symbol}` .'
+'Los strings largos se deben cerrar con `{symbol}` .'
 PARSER_ERR_ASSIGN_AS_EQ =
-'Should use `=` for assignment.'
+'Se debe usar `=` para la asignación.'
 PARSER_ERR_EQ_AS_ASSIGN =
-'Should use `==` for equal.'
+'Se debe usar `==` para la igualdad.'
 PARSER_ERR_UEQ          =
-'Should use `~=` for not equal.'
+'Se debe usar `~=` para la no igualdad.'
 PARSER_ERR_THEN_AS_DO   =
-'Should use `then` .'
+'Debería usar `then` .'
 PARSER_ERR_DO_AS_THEN   =
-'Should use `do` .'
+'Debería usar `do` .'
 PARSER_MISS_END         =
-'Miss corresponding `end` .'
+'Falta el `end` correspondiente.'
 PARSER_ERR_COMMENT_PREFIX =
-'Lua should use `--` for annotations.'
+'En Lua se debe usar `--` para las anotaciones.'
 PARSER_MISS_SEP_IN_TABLE =
-'Miss symbol `,` or `;` .'
+'Falta el símbolo `,` ó `;` .'
 PARSER_SET_CONST         =
-'Assignment to const variable.'
+'Asignación de valor a una variable constante.'
 PARSER_UNICODE_NAME      =
-'Contains Unicode characters.'
+'Contiene caracteres Unicode.'
 PARSER_ERR_NONSTANDARD_SYMBOL =
-'Lua should use `{symbol}` .'
+'En Lua se debe usar `{symbol}` .'
 PARSER_MISS_SPACE_BETWEEN =
-'Spaces must be left between symbols.'
+'Se deben dejar espacios entre símbolos.'
 PARSER_INDEX_IN_FUNC_NAME =
-'The `[name]` form cannot be used in the name of a named function.'
+'La forma `[name]` no puede ser usada en el nombre de una función nombrada.'
 PARSER_UNKNOWN_ATTRIBUTE  =
-'Local attribute should be `const` or `close`'
+'El atributo local debe ser `const` ó `close`'
 PARSER_AMBIGUOUS_SYNTAX   =
-'In Lua 5.1, the left brackets called by the function must be in the same line as the function.'
+'En Lua 5.1, los corchetes izquierdos llamados por la función deben estar en la misma línea que la función.'
 PARSER_NEED_PAREN         =
-'Need to add a pair of parentheses.'
+'Se necesita agregar un par de paréntesis.'
 PARSER_NESTING_LONG_MARK  =
-'Nesting of `[[...]]` is not allowed in Lua 5.1 .'
+'La anidación de `[[...]]` no está permitida en Lua 5.1 .'
 PARSER_LOCAL_LIMIT        =
-'Only 200 active local variables and upvalues can be existed at the same time.'
-PARSER_LUADOC_MISS_CLASS_NAME           =
-'<class name> expected.'
-PARSER_LUADOC_MISS_EXTENDS_SYMBOL       =
-'`:` expected.'
-PARSER_LUADOC_MISS_CLASS_EXTENDS_NAME   =
-'<class extends name> expected.'
-PARSER_LUADOC_MISS_SYMBOL               =
-'`{symbol}` expected.'
-PARSER_LUADOC_MISS_ARG_NAME             =
-'<arg name> expected.'
-PARSER_LUADOC_MISS_TYPE_NAME            =
-'<type name> expected.'
-PARSER_LUADOC_MISS_ALIAS_NAME           =
-'<alias name> expected.'
-PARSER_LUADOC_MISS_ALIAS_EXTENDS        =
-'<alias extends> expected.'
-PARSER_LUADOC_MISS_PARAM_NAME           =
-'<param name> expected.'
-PARSER_LUADOC_MISS_PARAM_EXTENDS        =
-'<param extends> expected.'
-PARSER_LUADOC_MISS_FIELD_NAME           =
-'<field name> expected.'
-PARSER_LUADOC_MISS_FIELD_EXTENDS        =
-'<field extends> expected.'
-PARSER_LUADOC_MISS_GENERIC_NAME         =
-'<generic name> expected.'
-PARSER_LUADOC_MISS_GENERIC_EXTENDS_NAME =
-'<generic extends name> expected.'
-PARSER_LUADOC_MISS_VARARG_TYPE          =
-'<vararg type> expected.'
-PARSER_LUADOC_MISS_FUN_AFTER_OVERLOAD   =
-'`fun` expected.'
-PARSER_LUADOC_MISS_CATE_NAME            =
-'<doc name> expected.'
-PARSER_LUADOC_MISS_DIAG_MODE            =
-'<diagnostic mode> expected.'
-PARSER_LUADOC_ERROR_DIAG_MODE           =
+'Solo 200 variables locales activas y valores anteriores pueden existir al mismo tiempo.'
+PARSER_LUADOC_MISS_CLASS_NAME          =
+'Se esperaba <class name>.'
+PARSER_LUADOC_MISS_EXTENDS_SYMBOL      =
+'Se esperaba `:`.'
+PARSER_LUADOC_MISS_CLASS_EXTENDS_NAME  =
+'Se esperaba <class extends name>.'
+PARSER_LUADOC_MISS_SYMBOL              =
+'Se esperaba `{symbol}`.'
+PARSER_LUADOC_MISS_ARG_NAME            =
+'Se esperaba <arg name>.'
+PARSER_LUADOC_MISS_TYPE_NAME           =
+'Se esperaba <type name>.'
+PARSER_LUADOC_MISS_ALIAS_NAME          =
+'Se esperaba <alias name>.'
+PARSER_LUADOC_MISS_ALIAS_EXTENDS       =
+'Se esperaba <alias extends>.'
+PARSER_LUADOC_MISS_PARAM_NAME          =
+'Se esperaba <param name>.'
+PARSER_LUADOC_MISS_PARAM_EXTENDS       =
+'Se esperaba <param extends>.'
+PARSER_LUADOC_MISS_FIELD_NAME          =
+'Se esperaba <field name>.'
+PARSER_LUADOC_MISS_FIELD_EXTENDS       =
+'Se esperaba <field extends>.'
+PARSER_LUADOC_MISS_GENERIC_NAME        =
+'Se esperaba <generic name>.'
+PARSER_LUADOC_MISS_GENERIC_EXTENDS_NAME=
+'Se esperaba <generic extends name>.'
+PARSER_LUADOC_MISS_VARARG_TYPE         =
+'Se esperaba <vararg type>.'
+PARSER_LUADOC_MISS_FUN_AFTER_OVERLOAD  =
+'Se esperaba `fun`.'
+PARSER_LUADOC_MISS_CATE_NAME           =
+'Se esperaba <doc name>.'
+PARSER_LUADOC_MISS_DIAG_MODE           =
+'Se esperaba <diagnostic mode>.'
+PARSER_LUADOC_ERROR_DIAG_MODE          =
 '<diagnostic mode> incorrect.'
-PARSER_LUADOC_MISS_LOCAL_NAME           =
-'<local name> expected.'
+PARSER_LUADOC_MISS_LOCAL_NAME          =
+'Se esperaba <local name>.'
 
-SYMBOL_ANONYMOUS        =
+SYMBOL_ANONYMOUS       =
 '<Anonymous>'
 
-HOVER_VIEW_DOCUMENTS    =
-'View documents'
-HOVER_DOCUMENT_LUA51    =
+HOVER_VIEW_DOCUMENTS   =
+'Ver documentos'
+HOVER_DOCUMENT_LUA51   =
 'http://www.lua.org/manual/5.1/manual.html#{}'
-HOVER_DOCUMENT_LUA52    =
+HOVER_DOCUMENT_LUA52   =
 'http://www.lua.org/manual/5.2/manual.html#{}'
-HOVER_DOCUMENT_LUA53    =
+HOVER_DOCUMENT_LUA53   =
 'http://www.lua.org/manual/5.3/manual.html#{}'
-HOVER_DOCUMENT_LUA54    =
+HOVER_DOCUMENT_LUA54   =
 'http://www.lua.org/manual/5.4/manual.html#{}'
-HOVER_DOCUMENT_LUAJIT   =
+HOVER_DOCUMENT_LUAJIT  =
 'http://www.lua.org/manual/5.1/manual.html#{}'
-HOVER_NATIVE_DOCUMENT_LUA51     =
+HOVER_NATIVE_DOCUMENT_LUA51    =
 'command:extension.lua.doc?["en-us/51/manual.html/{}"]'
-HOVER_NATIVE_DOCUMENT_LUA52     =
+HOVER_NATIVE_DOCUMENT_LUA52    =
 'command:extension.lua.doc?["en-us/52/manual.html/{}"]'
-HOVER_NATIVE_DOCUMENT_LUA53     =
+HOVER_NATIVE_DOCUMENT_LUA53    =
 'command:extension.lua.doc?["en-us/53/manual.html/{}"]'
-HOVER_NATIVE_DOCUMENT_LUA54     =
+HOVER_NATIVE_DOCUMENT_LUA54    =
 'command:extension.lua.doc?["en-us/54/manual.html/{}"]'
-HOVER_NATIVE_DOCUMENT_LUAJIT    =
+HOVER_NATIVE_DOCUMENT_LUAJIT   =
 'command:extension.lua.doc?["en-us/51/manual.html/{}"]'
-HOVER_MULTI_PROTOTYPE      =
-'({} prototypes)'
-HOVER_STRING_BYTES         =
+HOVER_MULTI_PROTOTYPE     =
+'({} prototipos)'
+HOVER_STRING_BYTES        =
 '{} bytes'
-HOVER_STRING_CHARACTERS    =
+HOVER_STRING_CHARACTERS   =
 '{} bytes, {} characters'
-HOVER_MULTI_DEF_PROTO      =
-'({} definitions, {} prototypes)'
-HOVER_MULTI_PROTO_NOT_FUNC =
-'({} non functional definition)'
-HOVER_USE_LUA_PATH      =
-'(Search path: `{}`)'
-HOVER_EXTENDS           =
-'Expand to {}'
-HOVER_TABLE_TIME_UP     =
-'Partial type inference has been disabled for performance reasons.'
-HOVER_WS_LOADING        =
-'Workspace loading: {} / {}'
-HOVER_AWAIT_TOOLTIP     =
-'Calling async function, current thread may be yielded.'
-
-ACTION_DISABLE_DIAG     =
-'Disable diagnostics in the workspace ({}).'
-ACTION_MARK_GLOBAL      =
-'Mark `{}` as defined global.'
-ACTION_REMOVE_SPACE     =
-'Clear all postemptive spaces.'
-ACTION_ADD_SEMICOLON    =
-'Add `;` .'
-ACTION_ADD_BRACKETS     =
-'Add brackets.'
-ACTION_RUNTIME_VERSION  =
-'Change runtime version to {} .'
-ACTION_OPEN_LIBRARY     =
-'Load globals from {} .'
-ACTION_ADD_DO_END       =
-'Add `do ... end` .'
-ACTION_FIX_LCOMMENT_END =
-'Modify to the correct multi-line annotations closing symbol.'
-ACTION_ADD_LCOMMENT_END =
-'Close multi-line annotations.'
-ACTION_FIX_C_LONG_COMMENT =
+HOVER_MULTI_DEF_PROTO     =
+'({} definiciones, {} prototipos)'
+HOVER_MULTI_PROTO_NOT_FUNC=
+'({} definiciones no-funcionales)'
+HOVER_USE_LUA_PATH     =
+'(Ruta de búsqueda: `{}`)'
+HOVER_EXTENDS          =
+'Se expande a {}'
+HOVER_TABLE_TIME_UP    =
+'Por temas de rendimiento se deshabilito la inferencia parcial de tipo.'
+HOVER_WS_LOADING       =
+'Cargando espacio de trabajo: {} / {}'
+HOVER_AWAIT_TOOLTIP    =
+'Llamando a la función asíncrona, la hebra actual podría ser suspendida.'
+
+ACTION_DISABLE_DIAG    =
+'Deshabilita los diagnósticos en el espacio de trabajo ({}).'
+ACTION_MARK_GLOBAL     =
+'Marca `{}` como global definida.'
+ACTION_REMOVE_SPACE    =
+'Quita todos los espacios al final de línea.'
+ACTION_ADD_SEMICOLON   =
+'Agrega `;` .'
+ACTION_ADD_BRACKETS    =
+'Agrega corchetes.'
+ACTION_RUNTIME_VERSION =
+'Cambia la versión a ejecutar a {} .'
+ACTION_OPEN_LIBRARY    =
+'Carga globales de {} .'
+ACTION_ADD_DO_END      =
+'Agrega `do ... end` .'
+ACTION_FIX_LCOMMENT_END=
+'Modifica al símbolo de cierre correcto para la anotación multi-línea.'
+ACTION_ADD_LCOMMENT_END=
+'Cierra las anotaciones multi-línea.'
+ACTION_FIX_C_LONG_COMMENT= -- TODO: needs localisation
 'Modify to Lua multi-line annotations format.'
-ACTION_FIX_LSTRING_END  =
+ACTION_FIX_LSTRING_END = -- TODO: needs localisation
 'Modify to the correct long string closing symbol.'
-ACTION_ADD_LSTRING_END  =
+ACTION_ADD_LSTRING_END = -- TODO: needs localisation
 'Close long string.'
-ACTION_FIX_ASSIGN_AS_EQ =
+ACTION_FIX_ASSIGN_AS_EQ= -- TODO: needs localisation
 'Modify to `=` .'
-ACTION_FIX_EQ_AS_ASSIGN =
+ACTION_FIX_EQ_AS_ASSIGN= -- TODO: needs localisation
 'Modify to `==` .'
-ACTION_FIX_UEQ          =
+ACTION_FIX_UEQ         = -- TODO: needs localisation
 'Modify to `~=` .'
-ACTION_FIX_THEN_AS_DO   =
+ACTION_FIX_THEN_AS_DO  = -- TODO: needs localisation
 'Modify to `then` .'
-ACTION_FIX_DO_AS_THEN   =
+ACTION_FIX_DO_AS_THEN  = -- TODO: needs localisation
 'Modify to `do` .'
-ACTION_ADD_END          =
+ACTION_ADD_END         = -- TODO: needs localisation
 'Add `end` (infer the addition location ny indentations).'
-ACTION_FIX_COMMENT_PREFIX =
+ACTION_FIX_COMMENT_PREFIX= -- TODO: needs localisation
 'Modify to `--` .'
-ACTION_FIX_NONSTANDARD_SYMBOL =
+ACTION_FIX_NONSTANDARD_SYMBOL= -- TODO: needs localisation
 'Modify to `{symbol}` .'
-ACTION_RUNTIME_UNICODE_NAME =
+ACTION_RUNTIME_UNICODE_NAME= -- TODO: needs localisation
 'Allow Unicode characters.'
-ACTION_SWAP_PARAMS      =
+ACTION_SWAP_PARAMS     = -- TODO: needs localisation
 'Change to parameter {index} of `{node}`'
-ACTION_FIX_INSERT_SPACE =
+ACTION_FIX_INSERT_SPACE= -- TODO: needs localisation
 'Insert space.'
-ACTION_JSON_TO_LUA      =
+ACTION_JSON_TO_LUA     = -- TODO: needs localisation
 'Convert JSON to Lua'
 ACTION_DISABLE_DIAG_LINE=
 'Disable diagnostics on this line ({}).'
 ACTION_DISABLE_DIAG_FILE=
 'Disable diagnostics in this file ({}).'
-ACTION_MARK_ASYNC       =
+ACTION_MARK_ASYNC      = -- TODO: needs localisation
 'Mark current function as async.'
-ACTION_ADD_DICT         =
+ACTION_ADD_DICT        = -- TODO: needs localisation
 'Add \'{}\' to workspace dict'
-ACTION_FIX_ADD_PAREN    =
+ACTION_FIX_ADD_PAREN   = -- TODO: needs localisation
 'Add parentheses.'
-ACTION_AUTOREQUIRE      =
+ACTION_AUTOREQUIRE     = -- TODO: needs localisation
 "Import '{}' as {}"
 
-COMMAND_DISABLE_DIAG       =
+COMMAND_DISABLE_DIAG      = -- TODO: needs localisation
 'Disable diagnostics'
-COMMAND_MARK_GLOBAL        =
+COMMAND_MARK_GLOBAL       = -- TODO: needs localisation
 'Mark defined global'
-COMMAND_REMOVE_SPACE       =
+COMMAND_REMOVE_SPACE      = -- TODO: needs localisation
 'Clear all postemptive spaces'
-COMMAND_ADD_BRACKETS       =
+COMMAND_ADD_BRACKETS      = -- TODO: needs localisation
 'Add brackets'
-COMMAND_RUNTIME_VERSION    =
+COMMAND_RUNTIME_VERSION   = -- TODO: needs localisation
 'Change runtime version'
-COMMAND_OPEN_LIBRARY       =
+COMMAND_OPEN_LIBRARY      = -- TODO: needs localisation
 'Load globals from 3rd library'
-COMMAND_UNICODE_NAME       =
+COMMAND_UNICODE_NAME      = -- TODO: needs localisation
 'Allow Unicode characters.'
-COMMAND_JSON_TO_LUA        =
+COMMAND_JSON_TO_LUA       = -- TODO: needs localisation
 'Convert JSON to Lua'
-COMMAND_JSON_TO_LUA_FAILED =
+COMMAND_JSON_TO_LUA_FAILED= -- TODO: needs localisation
 'Convert JSON to Lua failed: {}'
-COMMAND_ADD_DICT           =
+COMMAND_ADD_DICT          = -- TODO: needs localisation
 'Add Word to dictionary'
-COMMAND_REFERENCE_COUNT    =
+COMMAND_REFERENCE_COUNT   = -- TODO: needs localisation
 '{} references'
 
-COMPLETION_IMPORT_FROM           =
+COMPLETION_IMPORT_FROM          = -- TODO: needs localisation
 'Import from {}'
-COMPLETION_DISABLE_AUTO_REQUIRE  =
+COMPLETION_DISABLE_AUTO_REQUIRE = -- TODO: needs localisation
 'Disable auto require'
-COMPLETION_ASK_AUTO_REQUIRE      =
+COMPLETION_ASK_AUTO_REQUIRE     = -- TODO: needs localisation
 'Add the code at the top of the file to require this file?'
 
-DEBUG_MEMORY_LEAK       =
+DEBUG_MEMORY_LEAK      = -- TODO: needs localisation
 "{} I'm sorry for the serious memory leak. The language service will be restarted soon."
-DEBUG_RESTART_NOW       =
+DEBUG_RESTART_NOW      = -- TODO: needs localisation
 'Restart now'
 
-WINDOW_COMPILING                 =
+WINDOW_COMPILING                = -- TODO: needs localisation
 'Compiling'
-WINDOW_DIAGNOSING                =
+WINDOW_DIAGNOSING               = -- TODO: needs localisation
 'Diagnosing'
-WINDOW_INITIALIZING              =
+WINDOW_INITIALIZING             = -- TODO: needs localisation
 'Initializing...'
-WINDOW_PROCESSING_HOVER          =
+WINDOW_PROCESSING_HOVER         = -- TODO: needs localisation
 'Processing hover...'
-WINDOW_PROCESSING_DEFINITION     =
+WINDOW_PROCESSING_DEFINITION    = -- TODO: needs localisation
 'Processing definition...'
-WINDOW_PROCESSING_REFERENCE      =
+WINDOW_PROCESSING_REFERENCE     = -- TODO: needs localisation
 'Processing reference...'
-WINDOW_PROCESSING_RENAME         =
+WINDOW_PROCESSING_RENAME        = -- TODO: needs localisation
 'Processing rename...'
-WINDOW_PROCESSING_COMPLETION     =
+WINDOW_PROCESSING_COMPLETION    = -- TODO: needs localisation
 'Processing completion...'
-WINDOW_PROCESSING_SIGNATURE      =
+WINDOW_PROCESSING_SIGNATURE     = -- TODO: needs localisation
 'Processing signature help...'
-WINDOW_PROCESSING_SYMBOL         =
+WINDOW_PROCESSING_SYMBOL        = -- TODO: needs localisation
 'Processing file symbols...'
-WINDOW_PROCESSING_WS_SYMBOL      =
+WINDOW_PROCESSING_WS_SYMBOL     = -- TODO: needs localisation
 'Processing workspace symbols...'
-WINDOW_PROCESSING_SEMANTIC_FULL  =
+WINDOW_PROCESSING_SEMANTIC_FULL = -- TODO: needs localisation
 'Processing full semantic tokens...'
-WINDOW_PROCESSING_SEMANTIC_RANGE =
+WINDOW_PROCESSING_SEMANTIC_RANGE= -- TODO: needs localisation
 'Processing incremental semantic tokens...'
-WINDOW_PROCESSING_HINT           =
+WINDOW_PROCESSING_HINT          = -- TODO: needs localisation
 'Processing inline hint...'
-WINDOW_PROCESSING_BUILD_META     =
+WINDOW_PROCESSING_BUILD_META    = -- TODO: needs localisation
 'Processing build meta...'
-WINDOW_INCREASE_UPPER_LIMIT      =
+WINDOW_INCREASE_UPPER_LIMIT     = -- TODO: needs localisation
 'Increase upper limit'
-WINDOW_CLOSE                     =
+WINDOW_CLOSE                    = -- TODO: needs localisation
 'Close'
-WINDOW_SETTING_WS_DIAGNOSTIC     =
+WINDOW_SETTING_WS_DIAGNOSTIC    = -- TODO: needs localisation
 'You can delay or disable workspace diagnostics in settings'
-WINDOW_DONT_SHOW_AGAIN           =
+WINDOW_DONT_SHOW_AGAIN          = -- TODO: needs localisation
 "Don't show again"
-WINDOW_DELAY_WS_DIAGNOSTIC       =
+WINDOW_DELAY_WS_DIAGNOSTIC      = -- TODO: needs localisation
 'Idle time diagnosis (delay {} seconds)'
-WINDOW_DISABLE_DIAGNOSTIC        =
+WINDOW_DISABLE_DIAGNOSTIC       = -- TODO: needs localisation
 'Disable workspace diagnostics'
-WINDOW_LUA_STATUS_WORKSPACE      =
+WINDOW_LUA_STATUS_WORKSPACE     = -- TODO: needs localisation
 'Workspace   : {}'
-WINDOW_LUA_STATUS_CACHED_FILES   =
+WINDOW_LUA_STATUS_CACHED_FILES  = -- TODO: needs localisation
 'Cached files: {ast}/{max}'
-WINDOW_LUA_STATUS_MEMORY_COUNT   =
+WINDOW_LUA_STATUS_MEMORY_COUNT  = -- TODO: needs localisation
 'Memory usage: {mem:.f}M'
-WINDOW_LUA_STATUS_TIP            =
+WINDOW_LUA_STATUS_TIP           = -- TODO: needs localisation
 [[
 
 This icon is a cat,
@@ -551,54 +551,54 @@ Not a dog nor a fox!
 ]]
 WINDOW_LUA_STATUS_DIAGNOSIS_TITLE=
 'Perform workspace diagnosis'
-WINDOW_LUA_STATUS_DIAGNOSIS_MSG  =
+WINDOW_LUA_STATUS_DIAGNOSIS_MSG = -- TODO: needs localisation
 'Do you want to perform workspace diagnosis?'
-WINDOW_APPLY_SETTING             =
+WINDOW_APPLY_SETTING            = -- TODO: needs localisation
 'Apply setting'
-WINDOW_CHECK_SEMANTIC            =
+WINDOW_CHECK_SEMANTIC           = -- TODO: needs localisation
 'If you are using the color theme in the market, you may need to modify `editor.semanticHighlighting.enabled` to `true` to make semantic tokens take effect.'
-WINDOW_TELEMETRY_HINT            =
+WINDOW_TELEMETRY_HINT           = -- TODO: needs localisation
 'Please allow sending anonymous usage data and error reports to help us further improve this extension. Read our privacy policy [here](https://luals.github.io/privacy#language-server) .'
-WINDOW_TELEMETRY_ENABLE          =
+WINDOW_TELEMETRY_ENABLE         = -- TODO: needs localisation
 'Allow'
-WINDOW_TELEMETRY_DISABLE         =
+WINDOW_TELEMETRY_DISABLE        = -- TODO: needs localisation
 'Prohibit'
-WINDOW_CLIENT_NOT_SUPPORT_CONFIG =
+WINDOW_CLIENT_NOT_SUPPORT_CONFIG= -- TODO: needs localisation
 'Your client does not support modifying settings from the server side, please manually modify the following settings:'
 WINDOW_LCONFIG_NOT_SUPPORT_CONFIG=
 'Automatic modification of local settings is not currently supported, please manually modify the following settings:'
-WINDOW_MANUAL_CONFIG_ADD         =
+WINDOW_MANUAL_CONFIG_ADD        = -- TODO: needs localisation
 '`{key}`: add element `{value:q}` ;'
-WINDOW_MANUAL_CONFIG_SET         =
+WINDOW_MANUAL_CONFIG_SET        = -- TODO: needs localisation
 '`{key}`: set to `{value:q}` ;'
-WINDOW_MANUAL_CONFIG_PROP        =
+WINDOW_MANUAL_CONFIG_PROP       = -- TODO: needs localisation
 '`{key}`: set the property `{prop}` to `{value:q}`;'
-WINDOW_APPLY_WHIT_SETTING        =
+WINDOW_APPLY_WHIT_SETTING       = -- TODO: needs localisation
 'Apply and modify settings'
-WINDOW_APPLY_WHITOUT_SETTING     =
+WINDOW_APPLY_WHITOUT_SETTING    = -- TODO: needs localisation
 'Apply but do not modify settings'
-WINDOW_ASK_APPLY_LIBRARY         =
+WINDOW_ASK_APPLY_LIBRARY        = -- TODO: needs localisation
 'Do you need to configure your work environment as `{}`?'
-WINDOW_SEARCHING_IN_FILES        =
+WINDOW_SEARCHING_IN_FILES       = -- TODO: needs localisation
 'Searching in files...'
-WINDOW_CONFIG_LUA_DEPRECATED     =
+WINDOW_CONFIG_LUA_DEPRECATED    = -- TODO: needs localisation
 '`config.lua` is deprecated, please use `config.json` instead.'
-WINDOW_CONVERT_CONFIG_LUA        =
+WINDOW_CONVERT_CONFIG_LUA       = -- TODO: needs localisation
 'Convert to `config.json`'
-WINDOW_MODIFY_REQUIRE_PATH       =
+WINDOW_MODIFY_REQUIRE_PATH      = -- TODO: needs localisation
 'Do you want to modify the require path?'
-WINDOW_MODIFY_REQUIRE_OK         =
+WINDOW_MODIFY_REQUIRE_OK        = -- TODO: needs localisation
 'Modify'
 
-CONFIG_LOAD_FAILED               =
+CONFIG_LOAD_FAILED              = -- TODO: needs localisation
 'Unable to read the settings file: {}'
-CONFIG_LOAD_ERROR                =
+CONFIG_LOAD_ERROR               = -- TODO: needs localisation
 'Setting file loading error: {}'
-CONFIG_TYPE_ERROR                =
+CONFIG_TYPE_ERROR               = -- TODO: needs localisation
 'The setting file must be in lua or json format: {}'
-CONFIG_MODIFY_FAIL_SYNTAX_ERROR  =
+CONFIG_MODIFY_FAIL_SYNTAX_ERROR = -- TODO: needs localisation
 'Failed to modify settings, there are syntax errors in the settings file: {}'
-CONFIG_MODIFY_FAIL_NO_WORKSPACE  =
+CONFIG_MODIFY_FAIL_NO_WORKSPACE = -- TODO: needs localisation
 [[
 Failed to modify settings:
 * The current mode is single-file mode, server cannot create `.luarc.json` without workspace.
@@ -607,7 +607,7 @@ Failed to modify settings:
 Please modify following settings manually:
 {}
 ]]
-CONFIG_MODIFY_FAIL               =
+CONFIG_MODIFY_FAIL              = -- TODO: needs localisation
 [[
 Failed to modify settings
 
@@ -615,88 +615,88 @@ Please modify following settings manually:
 {}
 ]]
 
-PLUGIN_RUNTIME_ERROR             =
+PLUGIN_RUNTIME_ERROR            = -- TODO: needs localisation
 [[
 An error occurred in the plugin, please report it to the plugin author.
 Please check the details in the output or log.
 Plugin path: {}
 ]]
-PLUGIN_TRUST_LOAD                =
+PLUGIN_TRUST_LOAD               = -- TODO: needs localisation
 [[
 The current settings try to load the plugin at this location:{}
 
 Note that malicious plugin may harm your computer
 ]]
-PLUGIN_TRUST_YES                 =
+PLUGIN_TRUST_YES                = -- TODO: needs localisation
 [[
 Trust and load this plugin
 ]]
-PLUGIN_TRUST_NO                  =
+PLUGIN_TRUST_NO                 = -- TODO: needs localisation
 [[
 Don't load this plugin
 ]]
 
-CLI_CHECK_ERROR_TYPE =
+CLI_CHECK_ERROR_TYPE= -- TODO: needs localisation
 'The argument of CHECK must be a string, but got {}'
-CLI_CHECK_ERROR_URI =
+CLI_CHECK_ERROR_URI= -- TODO: needs localisation
 'The argument of CHECK must be a valid uri, but got {}'
-CLI_CHECK_ERROR_LEVEL =
+CLI_CHECK_ERROR_LEVEL= -- TODO: needs localisation
 'Checklevel must be one of: {}'
-CLI_CHECK_INITING =
+CLI_CHECK_INITING= -- TODO: needs localisation
 'Initializing ...'
-CLI_CHECK_SUCCESS =
+CLI_CHECK_SUCCESS= -- TODO: needs localisation
 'Diagnosis completed, no problems found'
-CLI_CHECK_PROGRESS =
+CLI_CHECK_PROGRESS= -- TODO: needs localisation
 'Found {} problems in {} files'
-CLI_CHECK_RESULTS =
+CLI_CHECK_RESULTS= -- TODO: needs localisation
 'Diagnosis complete, {} problems found, see {}'
-CLI_CHECK_MULTIPLE_WORKERS =
+CLI_CHECK_MULTIPLE_WORKERS= -- TODO: needs localisation
 'Starting {} worker tasks, progress output will be disabled. This may take a few minutes.'
-CLI_DOC_INITING   =
+CLI_DOC_INITING  = -- TODO: needs localisation
 'Loading documents ...'
-CLI_DOC_DONE      =
+CLI_DOC_DONE     = -- TODO: needs localisation
 [[
 Documentation exported:
 ]]
-CLI_DOC_WORKING   =
+CLI_DOC_WORKING  = -- TODO: needs localisation
 'Building docs...'
 
-TYPE_ERROR_ENUM_GLOBAL_DISMATCH =
+TYPE_ERROR_ENUM_GLOBAL_DISMATCH= -- TODO: needs localisation
 'Type `{child}` cannot match enumeration type of `{parent}`'
-TYPE_ERROR_ENUM_GENERIC_UNSUPPORTED =
+TYPE_ERROR_ENUM_GENERIC_UNSUPPORTED= -- TODO: needs localisation
 'Cannot use generic `{child}` in enumeration'
-TYPE_ERROR_ENUM_LITERAL_DISMATCH =
+TYPE_ERROR_ENUM_LITERAL_DISMATCH= -- TODO: needs localisation
 'Literal `{child}` cannot match the enumeration value of `{parent}`'
-TYPE_ERROR_ENUM_OBJECT_DISMATCH =
+TYPE_ERROR_ENUM_OBJECT_DISMATCH= -- TODO: needs localisation
 'The object `{child}` cannot match the enumeration value of `{parent}`. They must be the same object'
-TYPE_ERROR_ENUM_NO_OBJECT =
+TYPE_ERROR_ENUM_NO_OBJECT= -- TODO: needs localisation
 'The passed in enumeration value `{child}` is not recognized'
-TYPE_ERROR_INTEGER_DISMATCH =
+TYPE_ERROR_INTEGER_DISMATCH= -- TODO: needs localisation
 'Literal `{child}` cannot match integer `{parent}`'
-TYPE_ERROR_STRING_DISMATCH =
+TYPE_ERROR_STRING_DISMATCH= -- TODO: needs localisation
 'Literal `{child}` cannot match string `{parent}`'
-TYPE_ERROR_BOOLEAN_DISMATCH =
+TYPE_ERROR_BOOLEAN_DISMATCH= -- TODO: needs localisation
 'Literal `{child}` cannot match boolean `{parent}`'
-TYPE_ERROR_TABLE_NO_FIELD =
+TYPE_ERROR_TABLE_NO_FIELD= -- TODO: needs localisation
 'Field `{key}` does not exist in the table'
-TYPE_ERROR_TABLE_FIELD_DISMATCH =
+TYPE_ERROR_TABLE_FIELD_DISMATCH= -- TODO: needs localisation
 'The type of field `{key}` is `{child}`, which cannot match `{parent}`'
-TYPE_ERROR_CHILD_ALL_DISMATCH =
+TYPE_ERROR_CHILD_ALL_DISMATCH= -- TODO: needs localisation
 'All subtypes in `{child}` cannot match `{parent}`'
-TYPE_ERROR_PARENT_ALL_DISMATCH =
+TYPE_ERROR_PARENT_ALL_DISMATCH= -- TODO: needs localisation
 '`{child}` cannot match any subtypes in `{parent}`'
-TYPE_ERROR_UNION_DISMATCH =
+TYPE_ERROR_UNION_DISMATCH= -- TODO: needs localisation
 '`{child}` cannot match `{parent}`'
-TYPE_ERROR_OPTIONAL_DISMATCH =
+TYPE_ERROR_OPTIONAL_DISMATCH= -- TODO: needs localisation
 'Optional type cannot match `{parent}`'
-TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER =
+TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER= -- TODO: needs localisation
 'The number `{child}` cannot be converted to an integer'
-TYPE_ERROR_NUMBER_TYPE_TO_INTEGER =
+TYPE_ERROR_NUMBER_TYPE_TO_INTEGER= -- TODO: needs localisation
 'Cannot convert number type to integer type'
-TYPE_ERROR_DISMATCH =
+TYPE_ERROR_DISMATCH= -- TODO: needs localisation
 'Type `{child}` cannot match `{parent}`'
 
-LUADOC_DESC_CLASS =
+LUADOC_DESC_CLASS= -- TODO: needs localisation
 [=[
 Defines a class/table structure
 ## Syntax
@@ -709,7 +709,7 @@ Manager = {}
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#class)
 ]=]
-LUADOC_DESC_TYPE =
+LUADOC_DESC_TYPE= -- TODO: needs localisation
 [=[
 Specify the type of a certain variable
 
@@ -760,7 +760,7 @@ local myFunction
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#type)
 ]=]
-LUADOC_DESC_ALIAS =
+LUADOC_DESC_ALIAS= -- TODO: needs localisation
 [=[
 Create your own custom type that can be used with `@param`, `@type`, etc.
 
@@ -810,7 +810,7 @@ local enums = {
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#alias)
 ]=]
-LUADOC_DESC_PARAM =
+LUADOC_DESC_PARAM= -- TODO: needs localisation
 [=[
 Declare a function parameter
 
@@ -835,7 +835,7 @@ function concat(base, ...) end
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#param)
 ]=]
-LUADOC_DESC_RETURN =
+LUADOC_DESC_RETURN= -- TODO: needs localisation
 [=[
 Declare a return value
 
@@ -873,7 +873,7 @@ function getTags(item) end
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#return)
 ]=]
-LUADOC_DESC_FIELD =
+LUADOC_DESC_FIELD= -- TODO: needs localisation
 [=[
 Declare a field in a class/table. This allows you to provide more in-depth
 documentation for a table. As of `v3.6.0`, you can mark a field as `private`,
@@ -904,7 +904,7 @@ statusCode = response.status.code
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#field)
 ]=]
-LUADOC_DESC_GENERIC =
+LUADOC_DESC_GENERIC= -- TODO: needs localisation
 [=[
 Simulates generics. Generics can allow types to be re-used as they help define
 a "generic shape" that can be used with different types.
@@ -961,7 +961,7 @@ local v = Generic("Foo") -- v is an object of Foo
 ---
 [View Wiki](https://luals.github.io/wiki/annotations/#generic)
 ]=]
-LUADOC_DESC_VARARG =
+LUADOC_DESC_VARARG= -- TODO: needs localisation
 [=[
 Primarily for legacy support for EmmyLua annotations. `@vararg` does not
 provide typing or allow descriptions.
@@ -980,7 +980,7 @@ function concat(...) end
 ---
 [View Wiki](https://luals.github.io/wiki/annotations/#vararg)
 ]=]
-LUADOC_DESC_OVERLOAD =
+LUADOC_DESC_OVERLOAD= -- TODO: needs localisation
 [=[
 Allows defining of multiple function signatures.
 
@@ -995,7 +995,7 @@ function table.insert(t, position, value) end
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#overload)
 ]=]
-LUADOC_DESC_DEPRECATED =
+LUADOC_DESC_DEPRECATED= -- TODO: needs localisation
 [=[
 Marks a function as deprecated. This results in any deprecated function calls
 being ~~struck through~~.
@@ -1006,7 +1006,7 @@ being ~~struck through~~.
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#deprecated)
 ]=]
-LUADOC_DESC_META =
+LUADOC_DESC_META= -- TODO: needs localisation
 [=[
 Indicates that this is a meta file and should be used for definitions and intellisense only.
 
@@ -1021,7 +1021,7 @@ There are 3 main distinctions to note with meta files:
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#meta)
 ]=]
-LUADOC_DESC_VERSION =
+LUADOC_DESC_VERSION= -- TODO: needs localisation
 [=[
 Specifies Lua versions that this function is exclusive to.
 
@@ -1046,7 +1046,7 @@ function oldLuaOnly() end
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#version)
 ]=]
-LUADOC_DESC_SEE =
+LUADOC_DESC_SEE= -- TODO: needs localisation
 [=[
 Define something that can be viewed for more information
 
@@ -1056,7 +1056,7 @@ Define something that can be viewed for more information
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#see)
 ]=]
-LUADOC_DESC_DIAGNOSTIC =
+LUADOC_DESC_DIAGNOSTIC= -- TODO: needs localisation
 [=[
 Enable/disable diagnostics for error/warnings/etc.
 
@@ -1082,7 +1082,7 @@ local unused = "hello world"
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#diagnostic)
 ]=]
-LUADOC_DESC_MODULE =
+LUADOC_DESC_MODULE= -- TODO: needs localisation
 [=[
 Provides the semantics of `require`.
 
@@ -1099,7 +1099,7 @@ local module = require('string.utils')
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#module)
 ]=]
-LUADOC_DESC_ASYNC =
+LUADOC_DESC_ASYNC= -- TODO: needs localisation
 [=[
 Marks a function as asynchronous.
 
@@ -1109,7 +1109,7 @@ Marks a function as asynchronous.
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#async)
 ]=]
-LUADOC_DESC_NODISCARD =
+LUADOC_DESC_NODISCARD= -- TODO: needs localisation
 [=[
 Prevents this function's return values from being discarded/ignored.
 This will raise the `discard-returns` warning should the return values
@@ -1121,7 +1121,7 @@ be ignored.
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#nodiscard)
 ]=]
-LUADOC_DESC_CAST =
+LUADOC_DESC_CAST= -- TODO: needs localisation
 [=[
 Allows type casting (type conversion).
 
@@ -1156,7 +1156,7 @@ print(x) --> table
 ---
 [View Wiki](https://luals.github.io/wiki/annotations#cast)
 ]=]
-LUADOC_DESC_OPERATOR =
+LUADOC_DESC_OPERATOR= -- TODO: needs localisation
 [=[
 Provide type declaration for [operator metamethods](http://lua-users.org/wiki/MetatableEvents).
 
@@ -1186,7 +1186,7 @@ pB = -pA
 ```
 [View Request](https://github.com/LuaLS/lua-language-server/issues/599)
 ]=]
-LUADOC_DESC_ENUM =
+LUADOC_DESC_ENUM= -- TODO: needs localisation
 [=[
 Mark a table as an enum. If you want an enum but can't define it as a Lua
 table, take a look at the [`@alias`](https://luals.github.io/wiki/annotations#alias)
@@ -1213,7 +1213,7 @@ local function setColor(color) end
 setColor(colors.green)
 ```
 ]=]
-LUADOC_DESC_SOURCE =
+LUADOC_DESC_SOURCE= -- TODO: needs localisation
 [=[
 Provide a reference to some source code which lives in another file. When
 searching for the definition of an item, its `@source` will be used.
@@ -1240,7 +1240,7 @@ local c
 local d
 ```
 ]=]
-LUADOC_DESC_PACKAGE =
+LUADOC_DESC_PACKAGE= -- TODO: needs localisation
 [=[
 Mark a function as private to the file it is defined in. A packaged function
 cannot be accessed from another file.
@@ -1261,7 +1261,7 @@ function Animal:eyesCount()
 end
 ```
 ]=]
-LUADOC_DESC_PRIVATE =
+LUADOC_DESC_PRIVATE= -- TODO: needs localisation
 [=[
 Mark a function as private to a @class. Private functions can be accessed only
 from within their class and are not accessible from child classes.
@@ -1287,7 +1287,7 @@ local myDog = {}
 myDog:eyesCount();
 ```
 ]=]
-LUADOC_DESC_PROTECTED =
+LUADOC_DESC_PROTECTED= -- TODO: needs localisation
 [=[
 Mark a function as protected within a @class. Protected functions can be
 accessed only from within their class or from child classes.

From 5241a09f1a4e16dbd329b6dbcd6392fd5be54948 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Wed, 19 Mar 2025 21:45:49 -0300
Subject: [PATCH 07/24] add some more to script.lua

---
 locale/es-419/script.lua | 82 ++++++++++++++++++++--------------------
 1 file changed, 41 insertions(+), 41 deletions(-)

diff --git a/locale/es-419/script.lua b/locale/es-419/script.lua
index 293789479..bdb0bbc02 100644
--- a/locale/es-419/script.lua
+++ b/locale/es-419/script.lua
@@ -416,48 +416,48 @@ ACTION_FIX_LCOMMENT_END=
 'Modifica al símbolo de cierre correcto para la anotación multi-línea.'
 ACTION_ADD_LCOMMENT_END=
 'Cierra las anotaciones multi-línea.'
-ACTION_FIX_C_LONG_COMMENT= -- TODO: needs localisation
-'Modify to Lua multi-line annotations format.'
-ACTION_FIX_LSTRING_END = -- TODO: needs localisation
-'Modify to the correct long string closing symbol.'
-ACTION_ADD_LSTRING_END = -- TODO: needs localisation
-'Close long string.'
-ACTION_FIX_ASSIGN_AS_EQ= -- TODO: needs localisation
-'Modify to `=` .'
-ACTION_FIX_EQ_AS_ASSIGN= -- TODO: needs localisation
-'Modify to `==` .'
-ACTION_FIX_UEQ         = -- TODO: needs localisation
-'Modify to `~=` .'
-ACTION_FIX_THEN_AS_DO  = -- TODO: needs localisation
-'Modify to `then` .'
-ACTION_FIX_DO_AS_THEN  = -- TODO: needs localisation
-'Modify to `do` .'
-ACTION_ADD_END         = -- TODO: needs localisation
-'Add `end` (infer the addition location ny indentations).'
-ACTION_FIX_COMMENT_PREFIX= -- TODO: needs localisation
-'Modify to `--` .'
-ACTION_FIX_NONSTANDARD_SYMBOL= -- TODO: needs localisation
-'Modify to `{symbol}` .'
-ACTION_RUNTIME_UNICODE_NAME= -- TODO: needs localisation
-'Allow Unicode characters.'
-ACTION_SWAP_PARAMS     = -- TODO: needs localisation
-'Change to parameter {index} of `{node}`'
-ACTION_FIX_INSERT_SPACE= -- TODO: needs localisation
-'Insert space.'
-ACTION_JSON_TO_LUA     = -- TODO: needs localisation
-'Convert JSON to Lua'
+ACTION_FIX_C_LONG_COMMENT=
+'Modifica al formato de anotaciones multi-línea de Lua.'
+ACTION_FIX_LSTRING_END =
+'Modifica al símbolo correcto de cierre de string largo.'
+ACTION_ADD_LSTRING_END =
+'Cierra string largo.'
+ACTION_FIX_ASSIGN_AS_EQ=
+'Modifica a `=` .'
+ACTION_FIX_EQ_AS_ASSIGN=
+'Modifica a `==` .'
+ACTION_FIX_UEQ         =
+'Modifica a `~=` .'
+ACTION_FIX_THEN_AS_DO  =
+'Modifica a `then` .'
+ACTION_FIX_DO_AS_THEN  =
+'Modifica a `do` .'
+ACTION_ADD_END         =
+'Agrega `end` (infiere la marca en base ala indentación).'
+ACTION_FIX_COMMENT_PREFIX=
+'Modifica a `--` .'
+ACTION_FIX_NONSTANDARD_SYMBOL=
+'Modifica a `{symbol}` .'
+ACTION_RUNTIME_UNICODE_NAME=
+'Permite caracteres Unicode.'
+ACTION_SWAP_PARAMS     =
+'Cambia al parámetro {index} de `{node}`'
+ACTION_FIX_INSERT_SPACE=
+'Inserte espacio.'
+ACTION_JSON_TO_LUA     =
+'Convierte JSON a Lua'
 ACTION_DISABLE_DIAG_LINE=
-'Disable diagnostics on this line ({}).'
+'Deshabilita diagnósticos en esta línea ({}).'
 ACTION_DISABLE_DIAG_FILE=
-'Disable diagnostics in this file ({}).'
-ACTION_MARK_ASYNC      = -- TODO: needs localisation
-'Mark current function as async.'
-ACTION_ADD_DICT        = -- TODO: needs localisation
-'Add \'{}\' to workspace dict'
-ACTION_FIX_ADD_PAREN   = -- TODO: needs localisation
-'Add parentheses.'
-ACTION_AUTOREQUIRE     = -- TODO: needs localisation
-"Import '{}' as {}"
+'Deshabilita diagnósticos en este archivo ({}).'
+ACTION_MARK_ASYNC      =
+'Marca la función actual como asíncrona.'
+ACTION_ADD_DICT        =
+'Agrega \'{}\' al diccionario de espacio de trabajo'
+ACTION_FIX_ADD_PAREN   =
+'Agrega paréntesis.'
+ACTION_AUTOREQUIRE     =
+"Importa '{}' como {}"
 
 COMMAND_DISABLE_DIAG      = -- TODO: needs localisation
 'Disable diagnostics'
@@ -588,7 +588,7 @@ WINDOW_CONVERT_CONFIG_LUA       = -- TODO: needs localisation
 WINDOW_MODIFY_REQUIRE_PATH      = -- TODO: needs localisation
 'Do you want to modify the require path?'
 WINDOW_MODIFY_REQUIRE_OK        = -- TODO: needs localisation
-'Modify'
+'Modifica'
 
 CONFIG_LOAD_FAILED              = -- TODO: needs localisation
 'Unable to read the settings file: {}'

From 5913862ba840ce8a50596bdd878d727aae008056 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Wed, 19 Mar 2025 21:47:05 -0300
Subject: [PATCH 08/24] add TODO markers in setting.lua

---
 locale/es-419/setting.lua | 386 +++++++++++++++++++-------------------
 1 file changed, 193 insertions(+), 193 deletions(-)

diff --git a/locale/es-419/setting.lua b/locale/es-419/setting.lua
index da103ac18..e19a7d57d 100644
--- a/locale/es-419/setting.lua
+++ b/locale/es-419/setting.lua
@@ -1,23 +1,23 @@
 ---@diagnostic disable: undefined-global
 
-config.addonManager.enable        =
+config.addonManager.enable        = -- TODO: needs localisation
 "Whether the addon manager is enabled or not."
-config.addonManager.repositoryBranch =
+config.addonManager.repositoryBranch = -- TODO: needs localisation
 "Specifies the git branch used by the addon manager."
-config.addonManager.repositoryPath =
+config.addonManager.repositoryPath = -- TODO: needs localisation
 "Specifies the git path used by the addon manager."
-config.runtime.version            =
+config.runtime.version            = -- TODO: needs localisation
 "Lua runtime version."
-config.runtime.path               =
+config.runtime.path               = -- TODO: needs localisation
 [[
 When using `require`, how to find the file based on the input name.
 Setting this config to `?/init.lua` means that when you enter `require 'myfile'`, `${workspace}/myfile/init.lua` will be searched from the loaded files.
 if `runtime.pathStrict` is `false`, `${workspace}/**/myfile/init.lua` will also be searched.
 If you want to load files outside the workspace, you need to set `Lua.workspace.library` first.
 ]]
-config.runtime.pathStrict         =
+config.runtime.pathStrict         = -- TODO: needs localisation
 'When enabled, `runtime.path` will only search the first level of directories, see the description of `runtime.path`.'
-config.runtime.special            =
+config.runtime.special            = -- TODO: needs localisation
 [[The custom global variables are regarded as some special built-in variables, and the language server will provide special support
 The following example shows that 'include' is treated as' require '.
 ```json
@@ -26,17 +26,17 @@ The following example shows that 'include' is treated as' require '.
 }
 ```
 ]]
-config.runtime.unicodeName        =
+config.runtime.unicodeName        = -- TODO: needs localisation
 "Allows Unicode characters in name."
-config.runtime.nonstandardSymbol  =
+config.runtime.nonstandardSymbol  = -- TODO: needs localisation
 "Supports non-standard symbols. Make sure that your runtime environment supports these symbols."
-config.runtime.plugin             =
+config.runtime.plugin             = -- TODO: needs localisation
 "Plugin path. Please read [wiki](https://luals.github.io/wiki/plugins) to learn more."
-config.runtime.pluginArgs         =
+config.runtime.pluginArgs         = -- TODO: needs localisation
 "Additional arguments for the plugin."
-config.runtime.fileEncoding       =
+config.runtime.fileEncoding       = -- TODO: needs localisation
 "File encoding. The `ansi` option is only available under the `Windows` platform."
-config.runtime.builtin            =
+config.runtime.builtin            = -- TODO: needs localisation
 [[
 Adjust the enabled state of the built-in library. You can disable (or redefine) the non-existent library according to the actual runtime environment.
 
@@ -44,23 +44,23 @@ Adjust the enabled state of the built-in library. You can disable (or redefine)
 * `enable`: always enable
 * `disable`: always disable
 ]]
-config.runtime.meta               =
+config.runtime.meta               = -- TODO: needs localisation
 'Format of the directory name of the meta files.'
-config.diagnostics.enable         =
+config.diagnostics.enable         = -- TODO: needs localisation
 "Enable diagnostics."
-config.diagnostics.disable        =
+config.diagnostics.disable        = -- TODO: needs localisation
 "Disabled diagnostic (Use code in hover brackets)."
-config.diagnostics.globals        =
+config.diagnostics.globals        = -- TODO: needs localisation
 "Defined global variables."
-config.diagnostics.globalsRegex   =
+config.diagnostics.globalsRegex   = -- TODO: needs localisation
 "Find defined global variables using regex."
-config.diagnostics.severity       =
+config.diagnostics.severity       = -- TODO: needs localisation
 [[
 Modify the diagnostic severity.
 
 End with `!` means override the group setting `diagnostics.groupSeverity`.
 ]]
-config.diagnostics.neededFileStatus =
+config.diagnostics.neededFileStatus = -- TODO: needs localisation
 [[
 * Opened:  only diagnose opened files
 * Any:     diagnose all files
@@ -68,13 +68,13 @@ config.diagnostics.neededFileStatus =
 
 End with `!` means override the group setting `diagnostics.groupFileStatus`.
 ]]
-config.diagnostics.groupSeverity  =
+config.diagnostics.groupSeverity  = -- TODO: needs localisation
 [[
 Modify the diagnostic severity in a group.
 `Fallback` means that diagnostics in this group are controlled by `diagnostics.severity` separately.
 Other settings will override individual settings without end of `!`.
 ]]
-config.diagnostics.groupFileStatus =
+config.diagnostics.groupFileStatus = -- TODO: needs localisation
 [[
 Modify the diagnostic needed file status in a group.
 
@@ -85,51 +85,51 @@ Modify the diagnostic needed file status in a group.
 `Fallback` means that diagnostics in this group are controlled by `diagnostics.neededFileStatus` separately.
 Other settings will override individual settings without end of `!`.
 ]]
-config.diagnostics.workspaceEvent =
+config.diagnostics.workspaceEvent = -- TODO: needs localisation
 "Set the time to trigger workspace diagnostics."
-config.diagnostics.workspaceEvent.OnChange =
+config.diagnostics.workspaceEvent.OnChange = -- TODO: needs localisation
 "Trigger workspace diagnostics when the file is changed."
-config.diagnostics.workspaceEvent.OnSave =
+config.diagnostics.workspaceEvent.OnSave = -- TODO: needs localisation
 "Trigger workspace diagnostics when the file is saved."
-config.diagnostics.workspaceEvent.None =
+config.diagnostics.workspaceEvent.None = -- TODO: needs localisation
 "Disable workspace diagnostics."
-config.diagnostics.workspaceDelay =
+config.diagnostics.workspaceDelay = -- TODO: needs localisation
 "Latency (milliseconds) for workspace diagnostics."
-config.diagnostics.workspaceRate  =
+config.diagnostics.workspaceRate  = -- TODO: needs localisation
 "Workspace diagnostics run rate (%). Decreasing this value reduces CPU usage, but also reduces the speed of workspace diagnostics. The diagnosis of the file you are currently editing is always done at full speed and is not affected by this setting."
-config.diagnostics.libraryFiles   =
+config.diagnostics.libraryFiles   = -- TODO: needs localisation
 "How to diagnose files loaded via `Lua.workspace.library`."
-config.diagnostics.libraryFiles.Enable   =
+config.diagnostics.libraryFiles.Enable   = -- TODO: needs localisation
 "Always diagnose these files."
-config.diagnostics.libraryFiles.Opened   =
+config.diagnostics.libraryFiles.Opened   = -- TODO: needs localisation
 "Only when these files are opened will it be diagnosed."
-config.diagnostics.libraryFiles.Disable  =
+config.diagnostics.libraryFiles.Disable  = -- TODO: needs localisation
 "These files are not diagnosed."
-config.diagnostics.ignoredFiles   =
+config.diagnostics.ignoredFiles   = -- TODO: needs localisation
 "How to diagnose ignored files."
-config.diagnostics.ignoredFiles.Enable   =
+config.diagnostics.ignoredFiles.Enable   = -- TODO: needs localisation
 "Always diagnose these files."
-config.diagnostics.ignoredFiles.Opened   =
+config.diagnostics.ignoredFiles.Opened   = -- TODO: needs localisation
 "Only when these files are opened will it be diagnosed."
-config.diagnostics.ignoredFiles.Disable  =
+config.diagnostics.ignoredFiles.Disable  = -- TODO: needs localisation
 "These files are not diagnosed."
-config.diagnostics.disableScheme  =
+config.diagnostics.disableScheme  = -- TODO: needs localisation
 'Do not diagnose Lua files that use the following scheme.'
-config.diagnostics.unusedLocalExclude =
+config.diagnostics.unusedLocalExclude = -- TODO: needs localisation
 'Do not diagnose `unused-local` when the variable name matches the following pattern.'
-config.workspace.ignoreDir        =
+config.workspace.ignoreDir        = -- TODO: needs localisation
 "Ignored files and directories (Use `.gitignore` grammar)."-- .. example.ignoreDir,
-config.workspace.ignoreSubmodules =
+config.workspace.ignoreSubmodules = -- TODO: needs localisation
 "Ignore submodules."
-config.workspace.useGitIgnore     =
+config.workspace.useGitIgnore     = -- TODO: needs localisation
 "Ignore files list in `.gitignore` ."
-config.workspace.maxPreload       =
+config.workspace.maxPreload       = -- TODO: needs localisation
 "Max preloaded files."
-config.workspace.preloadFileSize  =
+config.workspace.preloadFileSize  = -- TODO: needs localisation
 "Skip files larger than this value (KB) when preloading."
-config.workspace.library          =
+config.workspace.library          = -- TODO: needs localisation
 "In addition to the current workspace, which directories will load files from. The files in these directories will be treated as externally provided code libraries, and some features (such as renaming fields) will not modify these files."
-config.workspace.checkThirdParty  =
+config.workspace.checkThirdParty  = -- TODO: needs localisation
 [[
 Automatic detection and adaptation of third-party libraries, currently supported libraries are:
 
@@ -140,321 +140,321 @@ Automatic detection and adaptation of third-party libraries, currently supported
 * skynet
 * Jass
 ]]
-config.workspace.userThirdParty          =
+config.workspace.userThirdParty          = -- TODO: needs localisation
 'Add private third-party library configuration file paths here, please refer to the built-in [configuration file path](https://github.com/LuaLS/lua-language-server/tree/master/meta/3rd)'
-config.workspace.supportScheme           =
+config.workspace.supportScheme           = -- TODO: needs localisation
 'Provide language server for the Lua files of the following scheme.'
-config.completion.enable                 =
+config.completion.enable                 = -- TODO: needs localisation
 'Enable completion.'
-config.completion.callSnippet            =
+config.completion.callSnippet            = -- TODO: needs localisation
 'Shows function call snippets.'
-config.completion.callSnippet.Disable    =
+config.completion.callSnippet.Disable    = -- TODO: needs localisation
 "Only shows `function name`."
-config.completion.callSnippet.Both       =
+config.completion.callSnippet.Both       = -- TODO: needs localisation
 "Shows `function name` and `call snippet`."
-config.completion.callSnippet.Replace    =
+config.completion.callSnippet.Replace    = -- TODO: needs localisation
 "Only shows `call snippet.`"
-config.completion.keywordSnippet         =
+config.completion.keywordSnippet         = -- TODO: needs localisation
 'Shows keyword syntax snippets.'
-config.completion.keywordSnippet.Disable =
+config.completion.keywordSnippet.Disable = -- TODO: needs localisation
 "Only shows `keyword`."
-config.completion.keywordSnippet.Both    =
+config.completion.keywordSnippet.Both    = -- TODO: needs localisation
 "Shows `keyword` and `syntax snippet`."
-config.completion.keywordSnippet.Replace =
+config.completion.keywordSnippet.Replace = -- TODO: needs localisation
 "Only shows `syntax snippet`."
-config.completion.displayContext         =
+config.completion.displayContext         = -- TODO: needs localisation
 "Previewing the relevant code snippet of the suggestion may help you understand the usage of the suggestion. The number set indicates the number of intercepted lines in the code fragment. If it is set to `0`, this feature can be disabled."
-config.completion.workspaceWord          =
+config.completion.workspaceWord          = -- TODO: needs localisation
 "Whether the displayed context word contains the content of other files in the workspace."
-config.completion.showWord               =
+config.completion.showWord               = -- TODO: needs localisation
 "Show contextual words in suggestions."
-config.completion.showWord.Enable        =
+config.completion.showWord.Enable        = -- TODO: needs localisation
 "Always show context words in suggestions."
-config.completion.showWord.Fallback      =
+config.completion.showWord.Fallback      = -- TODO: needs localisation
 "Contextual words are only displayed when suggestions based on semantics cannot be provided."
-config.completion.showWord.Disable       =
+config.completion.showWord.Disable       = -- TODO: needs localisation
 "Do not display context words."
-config.completion.autoRequire            =
+config.completion.autoRequire            = -- TODO: needs localisation
 "When the input looks like a file name, automatically `require` this file."
-config.completion.showParams             =
+config.completion.showParams             = -- TODO: needs localisation
 "Display parameters in completion list. When the function has multiple definitions, they will be displayed separately."
-config.completion.requireSeparator       =
+config.completion.requireSeparator       = -- TODO: needs localisation
 "The separator used when `require`."
-config.completion.postfix                =
+config.completion.postfix                = -- TODO: needs localisation
 "The symbol used to trigger the postfix suggestion."
-config.color.mode                        =
+config.color.mode                        = -- TODO: needs localisation
 "Color mode."
-config.color.mode.Semantic               =
+config.color.mode.Semantic               = -- TODO: needs localisation
 "Semantic color. You may need to set `editor.semanticHighlighting.enabled` to `true` to take effect."
-config.color.mode.SemanticEnhanced       =
+config.color.mode.SemanticEnhanced       = -- TODO: needs localisation
 "Enhanced semantic color. Like `Semantic`, but with additional analysis which might be more computationally expensive."
-config.color.mode.Grammar                =
+config.color.mode.Grammar                = -- TODO: needs localisation
 "Grammar color."
-config.semantic.enable                   =
+config.semantic.enable                   = -- TODO: needs localisation
 "Enable semantic color. You may need to set `editor.semanticHighlighting.enabled` to `true` to take effect."
-config.semantic.variable                 =
+config.semantic.variable                 = -- TODO: needs localisation
 "Semantic coloring of variables/fields/parameters."
-config.semantic.annotation               =
+config.semantic.annotation               = -- TODO: needs localisation
 "Semantic coloring of type annotations."
-config.semantic.keyword                  =
+config.semantic.keyword                  = -- TODO: needs localisation
 "Semantic coloring of keywords/literals/operators. You only need to enable this feature if your editor cannot do syntax coloring."
-config.signatureHelp.enable              =
+config.signatureHelp.enable              = -- TODO: needs localisation
 "Enable signature help."
-config.hover.enable                      =
+config.hover.enable                      = -- TODO: needs localisation
 "Enable hover."
-config.hover.viewString                  =
+config.hover.viewString                  = -- TODO: needs localisation
 "Hover to view the contents of a string (only if the literal contains an escape character)."
-config.hover.viewStringMax               =
+config.hover.viewStringMax               = -- TODO: needs localisation
 "The maximum length of a hover to view the contents of a string."
-config.hover.viewNumber                  =
+config.hover.viewNumber                  = -- TODO: needs localisation
 "Hover to view numeric content (only if literal is not decimal)."
-config.hover.fieldInfer                  =
+config.hover.fieldInfer                  = -- TODO: needs localisation
 "When hovering to view a table, type infer will be performed for each field. When the accumulated time of type infer reaches the set value (MS), the type infer of subsequent fields will be skipped."
-config.hover.previewFields               =
+config.hover.previewFields               = -- TODO: needs localisation
 "When hovering to view a table, limits the maximum number of previews for fields."
-config.hover.enumsLimit                  =
+config.hover.enumsLimit                  = -- TODO: needs localisation
 "When the value corresponds to multiple types, limit the number of types displaying."
-config.hover.expandAlias                 =
+config.hover.expandAlias                 = -- TODO: needs localisation
 [[
 Whether to expand the alias. For example, expands `---@alias myType boolean|number` appears as `boolean|number`, otherwise it appears as `myType'.
 ]]
-config.develop.enable                    =
+config.develop.enable                    = -- TODO: needs localisation
 'Developer mode. Do not enable, performance will be affected.'
-config.develop.debuggerPort              =
+config.develop.debuggerPort              = -- TODO: needs localisation
 'Listen port of debugger.'
-config.develop.debuggerWait              =
+config.develop.debuggerWait              = -- TODO: needs localisation
 'Suspend before debugger connects.'
-config.intelliSense.searchDepth          =
+config.intelliSense.searchDepth          = -- TODO: needs localisation
 'Set the search depth for IntelliSense. Increasing this value increases accuracy, but decreases performance. Different workspace have different tolerance for this setting. Please adjust it to the appropriate value.'
-config.intelliSense.fastGlobal           =
+config.intelliSense.fastGlobal           = -- TODO: needs localisation
 'In the global variable completion, and view `_G` suspension prompt. This will slightly reduce the accuracy of type speculation, but it will have a significant performance improvement for projects that use a lot of global variables.'
-config.window.statusBar                  =
+config.window.statusBar                  = -- TODO: needs localisation
 'Show extension status in status bar.'
-config.window.progressBar                =
+config.window.progressBar                = -- TODO: needs localisation
 'Show progress bar in status bar.'
-config.hint.enable                       =
+config.hint.enable                       = -- TODO: needs localisation
 'Enable inlay hint.'
-config.hint.paramType                    =
+config.hint.paramType                    = -- TODO: needs localisation
 'Show type hints at the parameter of the function.'
-config.hint.setType                      =
+config.hint.setType                      = -- TODO: needs localisation
 'Show hints of type at assignment operation.'
-config.hint.paramName                    =
+config.hint.paramName                    = -- TODO: needs localisation
 'Show hints of parameter name at the function call.'
-config.hint.paramName.All                =
+config.hint.paramName.All                = -- TODO: needs localisation
 'All types of parameters are shown.'
-config.hint.paramName.Literal            =
+config.hint.paramName.Literal            = -- TODO: needs localisation
 'Only literal type parameters are shown.'
-config.hint.paramName.Disable            =
+config.hint.paramName.Disable            = -- TODO: needs localisation
 'Disable parameter hints.'
-config.hint.arrayIndex                   =
+config.hint.arrayIndex                   = -- TODO: needs localisation
 'Show hints of array index when constructing a table.'
-config.hint.arrayIndex.Enable            =
+config.hint.arrayIndex.Enable            = -- TODO: needs localisation
 'Show hints in all tables.'
-config.hint.arrayIndex.Auto              =
+config.hint.arrayIndex.Auto              = -- TODO: needs localisation
 'Show hints only when the table is greater than 3 items, or the table is a mixed table.'
-config.hint.arrayIndex.Disable           =
+config.hint.arrayIndex.Disable           = -- TODO: needs localisation
 'Disable hints of array index.'
-config.hint.await                        =
+config.hint.await                        = -- TODO: needs localisation
 'If the called function is marked `---@async`, prompt `await` at the call.'
-config.hint.semicolon                    =
+config.hint.semicolon                    = -- TODO: needs localisation
 'If there is no semicolon at the end of the statement, display a virtual semicolon.'
-config.hint.semicolon.All                =
+config.hint.semicolon.All                = -- TODO: needs localisation
 'All statements display virtual semicolons.'
-config.hint.semicolon.SameLine            =
+config.hint.semicolon.SameLine            = -- TODO: needs localisation
 'When two statements are on the same line, display a semicolon between them.'
-config.hint.semicolon.Disable            =
+config.hint.semicolon.Disable            = -- TODO: needs localisation
 'Disable virtual semicolons.'
-config.codeLens.enable                   =
+config.codeLens.enable                   = -- TODO: needs localisation
 'Enable code lens.'
-config.format.enable                     =
+config.format.enable                     = -- TODO: needs localisation
 'Enable code formatter.'
-config.format.defaultConfig              =
+config.format.defaultConfig              = -- TODO: needs localisation
 [[
 The default format configuration. Has a lower priority than `.editorconfig` file in the workspace.
 Read [formatter docs](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs) to learn usage.
 ]]
-config.spell.dict                        =
+config.spell.dict                        = -- TODO: needs localisation
 'Custom words for spell checking.'
-config.nameStyle.config                  =
+config.nameStyle.config                  = -- TODO: needs localisation
 'Set name style config'
-config.telemetry.enable                  =
+config.telemetry.enable                  = -- TODO: needs localisation
 [[
 Enable telemetry to send your editor information and error logs over the network. Read our privacy policy [here](https://luals.github.io/privacy/#language-server).
 ]]
-config.misc.parameters                   =
+config.misc.parameters                   = -- TODO: needs localisation
 '[Command line parameters](https://github.com/LuaLS/lua-telemetry-server/tree/master/method) when starting the language server in VSCode.'
-config.misc.executablePath               =
+config.misc.executablePath               = -- TODO: needs localisation
 'Specify the executable path in VSCode.'
-config.language.fixIndent                =
+config.language.fixIndent                = -- TODO: needs localisation
 '(VSCode only) Fix incorrect auto-indentation, such as incorrect indentation when line breaks occur within a string containing the word "function."'
-config.language.completeAnnotation       =
+config.language.completeAnnotation       = -- TODO: needs localisation
 '(VSCode only) Automatically insert "---@ " after a line break following a annotation.'
-config.type.castNumberToInteger          =
+config.type.castNumberToInteger          = -- TODO: needs localisation
 'Allowed to assign the `number` type to the `integer` type.'
-config.type.weakUnionCheck               =
+config.type.weakUnionCheck               = -- TODO: needs localisation
 [[
 Once one subtype of a union type meets the condition, the union type also meets the condition.
 
 When this setting is `false`, the `number|boolean` type cannot be assigned to the `number` type. It can be with `true`.
 ]]
-config.type.weakNilCheck                 =
+config.type.weakNilCheck                 = -- TODO: needs localisation
 [[
 When checking the type of union type, ignore the `nil` in it.
 
 When this setting is `false`, the `number|nil` type cannot be assigned to the `number` type. It can be with `true`.
 ]]
-config.type.inferParamType               =
+config.type.inferParamType               = -- TODO: needs localisation
 [[
 When a parameter type is not annotated, it is inferred from the function's call sites.
 
 When this setting is `false`, the type of the parameter is `any` when it is not annotated.
 ]]
-config.type.checkTableShape              =
+config.type.checkTableShape              = -- TODO: needs localisation
 [[
 Strictly check the shape of the table.
 ]]
-config.doc.privateName                   =
+config.doc.privateName                   = -- TODO: needs localisation
 'Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.'
-config.doc.protectedName                 =
+config.doc.protectedName                 = -- TODO: needs localisation
 'Treat specific field names as protected, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are protected, witch can only be accessed in the class where the definition is located and its subclasses.'
-config.doc.packageName                   =
+config.doc.packageName                   = -- TODO: needs localisation
 'Treat specific field names as package, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are package, witch can only be accessed in the file where the definition is located.'
-config.diagnostics['unused-local']          =
+config.diagnostics['unused-local']          = -- TODO: needs localisation
 'Enable unused local variable diagnostics.'
-config.diagnostics['unused-function']       =
+config.diagnostics['unused-function']       = -- TODO: needs localisation
 'Enable unused function diagnostics.'
-config.diagnostics['undefined-global']      =
+config.diagnostics['undefined-global']      = -- TODO: needs localisation
 'Enable undefined global variable diagnostics.'
-config.diagnostics['global-in-nil-env']     =
+config.diagnostics['global-in-nil-env']     = -- TODO: needs localisation
 'Enable cannot use global variables （ `_ENV` is set to `nil`） diagnostics.'
-config.diagnostics['unused-label']          =
+config.diagnostics['unused-label']          = -- TODO: needs localisation
 'Enable unused label diagnostics.'
-config.diagnostics['unused-vararg']         =
+config.diagnostics['unused-vararg']         = -- TODO: needs localisation
 'Enable unused vararg diagnostics.'
-config.diagnostics['trailing-space']        =
+config.diagnostics['trailing-space']        = -- TODO: needs localisation
 'Enable trailing space diagnostics.'
-config.diagnostics['redefined-local']       =
+config.diagnostics['redefined-local']       = -- TODO: needs localisation
 'Enable redefined local variable diagnostics.'
-config.diagnostics['newline-call']          =
+config.diagnostics['newline-call']          = -- TODO: needs localisation
 'Enable newline call diagnostics. Is\'s raised when a line starting with `(` is encountered, which is syntactically parsed as a function call on the previous line.'
-config.diagnostics['newfield-call']         =
+config.diagnostics['newfield-call']         = -- TODO: needs localisation
 'Enable newfield call diagnostics. It is raised when the parenthesis of a function call appear on the following line when defining a field in a table.'
-config.diagnostics['redundant-parameter']   =
+config.diagnostics['redundant-parameter']   = -- TODO: needs localisation
 'Enable redundant function parameter diagnostics.'
-config.diagnostics['ambiguity-1']           =
+config.diagnostics['ambiguity-1']           = -- TODO: needs localisation
 'Enable ambiguous operator precedence diagnostics. For example, the `num or 0 + 1` expression will be suggested `(num or 0) + 1` instead.'
-config.diagnostics['lowercase-global']      =
+config.diagnostics['lowercase-global']      = -- TODO: needs localisation
 'Enable lowercase global variable definition diagnostics.'
-config.diagnostics['undefined-env-child']   =
+config.diagnostics['undefined-env-child']   = -- TODO: needs localisation
 'Enable undefined environment variable diagnostics. It\'s raised when `_ENV` table is set to a new literal table, but the used global variable is no longer present in the global environment.'
-config.diagnostics['duplicate-index']       =
+config.diagnostics['duplicate-index']       = -- TODO: needs localisation
 'Enable duplicate table index diagnostics.'
-config.diagnostics['empty-block']           =
+config.diagnostics['empty-block']           = -- TODO: needs localisation
 'Enable empty code block diagnostics.'
-config.diagnostics['redundant-value']       =
+config.diagnostics['redundant-value']       = -- TODO: needs localisation
 'Enable the redundant values assigned diagnostics. It\'s raised during assignment operation, when the number of values is higher than the number of objects being assigned.'
-config.diagnostics['assign-type-mismatch']  =
+config.diagnostics['assign-type-mismatch']  = -- TODO: needs localisation
 'Enable diagnostics for assignments in which the value\'s type does not match the type of the assigned variable.'
-config.diagnostics['await-in-sync']         =
+config.diagnostics['await-in-sync']         = -- TODO: needs localisation
 'Enable diagnostics for calls of asynchronous functions within a synchronous function.'
-config.diagnostics['cast-local-type']    =
+config.diagnostics['cast-local-type']    = -- TODO: needs localisation
 'Enable diagnostics for casts of local variables where the target type does not match the defined type.'
-config.diagnostics['cast-type-mismatch']    =
+config.diagnostics['cast-type-mismatch']    = -- TODO: needs localisation
 'Enable diagnostics for casts where the target type does not match the initial type.'
-config.diagnostics['circular-doc-class']    =
+config.diagnostics['circular-doc-class']    = -- TODO: needs localisation
 'Enable diagnostics for two classes inheriting from each other introducing a circular relation.'
-config.diagnostics['close-non-object']      =
+config.diagnostics['close-non-object']      = -- TODO: needs localisation
 'Enable diagnostics for attempts to close a variable with a non-object.'
-config.diagnostics['code-after-break']      =
+config.diagnostics['code-after-break']      = -- TODO: needs localisation
 'Enable diagnostics for code placed after a break statement in a loop.'
-config.diagnostics['codestyle-check']       =
+config.diagnostics['codestyle-check']       = -- TODO: needs localisation
 'Enable diagnostics for incorrectly styled lines.'
-config.diagnostics['count-down-loop']       =
+config.diagnostics['count-down-loop']       = -- TODO: needs localisation
 'Enable diagnostics for `for` loops which will never reach their max/limit because the loop is incrementing instead of decrementing.'
-config.diagnostics['deprecated']            =
+config.diagnostics['deprecated']            = -- TODO: needs localisation
 'Enable diagnostics to highlight deprecated API.'
-config.diagnostics['different-requires']    =
+config.diagnostics['different-requires']    = -- TODO: needs localisation
 'Enable diagnostics for files which are required by two different paths.'
-config.diagnostics['discard-returns']       =
+config.diagnostics['discard-returns']       = -- TODO: needs localisation
 'Enable diagnostics for calls of functions annotated with `---@nodiscard` where the return values are ignored.'
-config.diagnostics['doc-field-no-class']    =
+config.diagnostics['doc-field-no-class']    = -- TODO: needs localisation
 'Enable diagnostics to highlight a field annotation without a defining class annotation.'
-config.diagnostics['duplicate-doc-alias']   =
+config.diagnostics['duplicate-doc-alias']   = -- TODO: needs localisation
 'Enable diagnostics for a duplicated alias annotation name.'
-config.diagnostics['duplicate-doc-field']   =
+config.diagnostics['duplicate-doc-field']   = -- TODO: needs localisation
 'Enable diagnostics for a duplicated field annotation name.'
-config.diagnostics['duplicate-doc-param']   =
+config.diagnostics['duplicate-doc-param']   = -- TODO: needs localisation
 'Enable diagnostics for a duplicated param annotation name.'
-config.diagnostics['duplicate-set-field']   =
+config.diagnostics['duplicate-set-field']   = -- TODO: needs localisation
 'Enable diagnostics for setting the same field in a class more than once.'
-config.diagnostics['incomplete-signature-doc']    =
+config.diagnostics['incomplete-signature-doc']    = -- TODO: needs localisation
 'Incomplete @param or @return annotations for functions.'
-config.diagnostics['invisible']             =
+config.diagnostics['invisible']             = -- TODO: needs localisation
 'Enable diagnostics for accesses to fields which are invisible.'
-config.diagnostics['missing-global-doc']    =
+config.diagnostics['missing-global-doc']    = -- TODO: needs localisation
 'Missing annotations for globals! Global functions must have a comment and annotations for all parameters and return values.'
-config.diagnostics['missing-local-export-doc'] =
+config.diagnostics['missing-local-export-doc'] = -- TODO: needs localisation
 'Missing annotations for exported locals! Exported local functions must have a comment and annotations for all parameters and return values.'
-config.diagnostics['missing-parameter']     =
+config.diagnostics['missing-parameter']     = -- TODO: needs localisation
 'Enable diagnostics for function calls where the number of arguments is less than the number of annotated function parameters.'
-config.diagnostics['missing-return']        =
+config.diagnostics['missing-return']        = -- TODO: needs localisation
 'Enable diagnostics for functions with return annotations which have no return statement.'
-config.diagnostics['missing-return-value']  =
+config.diagnostics['missing-return-value']  = -- TODO: needs localisation
 'Enable diagnostics for return statements without values although the containing function declares returns.'
-config.diagnostics['need-check-nil']        =
+config.diagnostics['need-check-nil']        = -- TODO: needs localisation
 'Enable diagnostics for variable usages if `nil` or an optional (potentially `nil`) value was assigned to the variable before.'
-config.diagnostics['no-unknown']            =
+config.diagnostics['no-unknown']            = -- TODO: needs localisation
 'Enable diagnostics for cases in which the type cannot be inferred.'
-config.diagnostics['not-yieldable']         =
+config.diagnostics['not-yieldable']         = -- TODO: needs localisation
 'Enable diagnostics for calls to `coroutine.yield()` when it is not permitted.'
-config.diagnostics['param-type-mismatch']   =
+config.diagnostics['param-type-mismatch']   = -- TODO: needs localisation
 'Enable diagnostics for function calls where the type of a provided parameter does not match the type of the annotated function definition.'
-config.diagnostics['redundant-return']      =
+config.diagnostics['redundant-return']      = -- TODO: needs localisation
 'Enable diagnostics for return statements which are not needed because the function would exit on its own.'
-config.diagnostics['redundant-return-value']=
+config.diagnostics['redundant-return-value']= -- TODO: needs localisation
 'Enable diagnostics for return statements which return an extra value which is not specified by a return annotation.'
-config.diagnostics['return-type-mismatch']  =
+config.diagnostics['return-type-mismatch']  = -- TODO: needs localisation
 'Enable diagnostics for return values whose type does not match the type declared in the corresponding return annotation.'
-config.diagnostics['spell-check']           =
+config.diagnostics['spell-check']           = -- TODO: needs localisation
 'Enable diagnostics for typos in strings.'
-config.diagnostics['name-style-check']      =
+config.diagnostics['name-style-check']      = -- TODO: needs localisation
 'Enable diagnostics for name style.'
-config.diagnostics['unbalanced-assignments']=
+config.diagnostics['unbalanced-assignments']= -- TODO: needs localisation
 'Enable diagnostics on multiple assignments if not all variables obtain a value (e.g., `local x,y = 1`).'
-config.diagnostics['undefined-doc-class']   =
+config.diagnostics['undefined-doc-class']   = -- TODO: needs localisation
 'Enable diagnostics for class annotations in which an undefined class is referenced.'
-config.diagnostics['undefined-doc-name']    =
+config.diagnostics['undefined-doc-name']    = -- TODO: needs localisation
 'Enable diagnostics for type annotations referencing an undefined type or alias.'
-config.diagnostics['undefined-doc-param']   =
+config.diagnostics['undefined-doc-param']   = -- TODO: needs localisation
 'Enable diagnostics for cases in which a parameter annotation is given without declaring the parameter in the function definition.'
-config.diagnostics['undefined-field']       =
+config.diagnostics['undefined-field']       = -- TODO: needs localisation
 'Enable diagnostics for cases in which an undefined field of a variable is read.'
-config.diagnostics['unknown-cast-variable'] =
+config.diagnostics['unknown-cast-variable'] = -- TODO: needs localisation
 'Enable diagnostics for casts of undefined variables.'
-config.diagnostics['unknown-diag-code']     =
+config.diagnostics['unknown-diag-code']     = -- TODO: needs localisation
 'Enable diagnostics in cases in which an unknown diagnostics code is entered.'
-config.diagnostics['unknown-operator']      =
+config.diagnostics['unknown-operator']      = -- TODO: needs localisation
 'Enable diagnostics for unknown operators.'
-config.diagnostics['unreachable-code']      =
+config.diagnostics['unreachable-code']      = -- TODO: needs localisation
 'Enable diagnostics for unreachable code.'
-config.diagnostics['global-element']       =
+config.diagnostics['global-element']       = -- TODO: needs localisation
 'Enable diagnostics to warn about global elements.'
-config.typeFormat.config                    =
+config.typeFormat.config                    = -- TODO: needs localisation
 'Configures the formatting behavior while typing Lua code.'
-config.typeFormat.config.auto_complete_end  =
+config.typeFormat.config.auto_complete_end  = -- TODO: needs localisation
 'Controls if `end` is automatically completed at suitable positions.'
-config.typeFormat.config.auto_complete_table_sep =
+config.typeFormat.config.auto_complete_table_sep = -- TODO: needs localisation
 'Controls if a separator is automatically appended at the end of a table declaration.'
-config.typeFormat.config.format_line        =
+config.typeFormat.config.format_line        = -- TODO: needs localisation
 'Controls if a line is formatted at all.'
 
-command.exportDocument =
+command.exportDocument = -- TODO: needs localisation
 'Lua: Export Document ...'
-command.addon_manager.open =
+command.addon_manager.open = -- TODO: needs localisation
 'Lua: Open Addon Manager ...'
-command.reloadFFIMeta =
+command.reloadFFIMeta = -- TODO: needs localisation
 'Lua: Reload luajit ffi meta'
-command.startServer =
+command.startServer = -- TODO: needs localisation
 'Lua: (debug) Start Language Server'
-command.stopServer =
+command.stopServer = -- TODO: needs localisation
 'Lua: (debug) Stop Language Server'

From d148616911435ad8b8bc1efca0189f6b4c824642 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Fri, 21 Mar 2025 11:30:35 -0300
Subject: [PATCH 09/24] finish script.lua

---
 locale/es-419/script.lua | 963 ++++++++++++++++++++-------------------
 1 file changed, 483 insertions(+), 480 deletions(-)

diff --git a/locale/es-419/script.lua b/locale/es-419/script.lua
index bdb0bbc02..7f0ccd456 100644
--- a/locale/es-419/script.lua
+++ b/locale/es-419/script.lua
@@ -459,434 +459,435 @@ ACTION_FIX_ADD_PAREN   =
 ACTION_AUTOREQUIRE     =
 "Importa '{}' como {}"
 
-COMMAND_DISABLE_DIAG      = -- TODO: needs localisation
-'Disable diagnostics'
-COMMAND_MARK_GLOBAL       = -- TODO: needs localisation
-'Mark defined global'
-COMMAND_REMOVE_SPACE      = -- TODO: needs localisation
-'Clear all postemptive spaces'
-COMMAND_ADD_BRACKETS      = -- TODO: needs localisation
-'Add brackets'
-COMMAND_RUNTIME_VERSION   = -- TODO: needs localisation
-'Change runtime version'
-COMMAND_OPEN_LIBRARY      = -- TODO: needs localisation
-'Load globals from 3rd library'
-COMMAND_UNICODE_NAME      = -- TODO: needs localisation
-'Allow Unicode characters.'
-COMMAND_JSON_TO_LUA       = -- TODO: needs localisation
-'Convert JSON to Lua'
-COMMAND_JSON_TO_LUA_FAILED= -- TODO: needs localisation
-'Convert JSON to Lua failed: {}'
-COMMAND_ADD_DICT          = -- TODO: needs localisation
-'Add Word to dictionary'
-COMMAND_REFERENCE_COUNT   = -- TODO: needs localisation
-'{} references'
-
-COMPLETION_IMPORT_FROM          = -- TODO: needs localisation
-'Import from {}'
-COMPLETION_DISABLE_AUTO_REQUIRE = -- TODO: needs localisation
-'Disable auto require'
-COMPLETION_ASK_AUTO_REQUIRE     = -- TODO: needs localisation
-'Add the code at the top of the file to require this file?'
-
-DEBUG_MEMORY_LEAK      = -- TODO: needs localisation
-"{} I'm sorry for the serious memory leak. The language service will be restarted soon."
-DEBUG_RESTART_NOW      = -- TODO: needs localisation
-'Restart now'
-
-WINDOW_COMPILING                = -- TODO: needs localisation
-'Compiling'
-WINDOW_DIAGNOSING               = -- TODO: needs localisation
-'Diagnosing'
-WINDOW_INITIALIZING             = -- TODO: needs localisation
-'Initializing...'
-WINDOW_PROCESSING_HOVER         = -- TODO: needs localisation
-'Processing hover...'
-WINDOW_PROCESSING_DEFINITION    = -- TODO: needs localisation
-'Processing definition...'
-WINDOW_PROCESSING_REFERENCE     = -- TODO: needs localisation
-'Processing reference...'
-WINDOW_PROCESSING_RENAME        = -- TODO: needs localisation
-'Processing rename...'
-WINDOW_PROCESSING_COMPLETION    = -- TODO: needs localisation
-'Processing completion...'
-WINDOW_PROCESSING_SIGNATURE     = -- TODO: needs localisation
-'Processing signature help...'
-WINDOW_PROCESSING_SYMBOL        = -- TODO: needs localisation
-'Processing file symbols...'
-WINDOW_PROCESSING_WS_SYMBOL     = -- TODO: needs localisation
-'Processing workspace symbols...'
-WINDOW_PROCESSING_SEMANTIC_FULL = -- TODO: needs localisation
-'Processing full semantic tokens...'
-WINDOW_PROCESSING_SEMANTIC_RANGE= -- TODO: needs localisation
-'Processing incremental semantic tokens...'
-WINDOW_PROCESSING_HINT          = -- TODO: needs localisation
-'Processing inline hint...'
-WINDOW_PROCESSING_BUILD_META    = -- TODO: needs localisation
-'Processing build meta...'
-WINDOW_INCREASE_UPPER_LIMIT     = -- TODO: needs localisation
-'Increase upper limit'
-WINDOW_CLOSE                    = -- TODO: needs localisation
-'Close'
-WINDOW_SETTING_WS_DIAGNOSTIC    = -- TODO: needs localisation
-'You can delay or disable workspace diagnostics in settings'
-WINDOW_DONT_SHOW_AGAIN          = -- TODO: needs localisation
-"Don't show again"
-WINDOW_DELAY_WS_DIAGNOSTIC      = -- TODO: needs localisation
-'Idle time diagnosis (delay {} seconds)'
-WINDOW_DISABLE_DIAGNOSTIC       = -- TODO: needs localisation
-'Disable workspace diagnostics'
-WINDOW_LUA_STATUS_WORKSPACE     = -- TODO: needs localisation
-'Workspace   : {}'
-WINDOW_LUA_STATUS_CACHED_FILES  = -- TODO: needs localisation
-'Cached files: {ast}/{max}'
-WINDOW_LUA_STATUS_MEMORY_COUNT  = -- TODO: needs localisation
-'Memory usage: {mem:.f}M'
-WINDOW_LUA_STATUS_TIP           = -- TODO: needs localisation
+COMMAND_DISABLE_DIAG      =
+'Deshabilita los diagnósticos'
+COMMAND_MARK_GLOBAL       =
+'Marca la variable como global definida'
+COMMAND_REMOVE_SPACE      =
+'Quita todos los espacios al final de línea.'
+COMMAND_ADD_BRACKETS      =
+'Agrega corchetes'
+COMMAND_RUNTIME_VERSION   =
+'Cambia la versión a ejecutar'
+COMMAND_OPEN_LIBRARY      =
+'Carga variables globales de una biblioteca externa'
+COMMAND_UNICODE_NAME      =
+'Permite caracteres Unicode.'
+COMMAND_JSON_TO_LUA       =
+'Convierte JSON a Lua'
+COMMAND_JSON_TO_LUA_FAILED=
+'Falló la conversión JSON a Lua: {}'
+COMMAND_ADD_DICT          =
+'Agrega la palabra al diccionario'
+COMMAND_REFERENCE_COUNT   =
+'{} referencias'
+
+COMPLETION_IMPORT_FROM          =
+'Importa de {}'
+COMPLETION_DISABLE_AUTO_REQUIRE =
+'Deshabilita auto require'
+COMPLETION_ASK_AUTO_REQUIRE     =
+'¿Desea agregar el código al inicio del archivo para hacer require a este archivo?'
+
+DEBUG_MEMORY_LEAK      =
+"{} Lamento la fuga de memoria. Pronto se reiniciará el servicio de lenguage."
+DEBUG_RESTART_NOW      =
+'Reinicia ahora'
+
+WINDOW_COMPILING                =
+'Compilando'
+WINDOW_DIAGNOSING               =
+'Diagnosticando'
+WINDOW_INITIALIZING             =
+'Inicializando...'
+WINDOW_PROCESSING_HOVER         =
+'Procesando ratón rondando...'
+WINDOW_PROCESSING_DEFINITION    =
+'Procesando definición...'
+WINDOW_PROCESSING_REFERENCE     =
+'Procesando referencia...'
+WINDOW_PROCESSING_RENAME        =
+'Procesando renombre...'
+WINDOW_PROCESSING_COMPLETION    =
+'Procesando completado...'
+WINDOW_PROCESSING_SIGNATURE     =
+'Procesando ayuda de firma...'
+WINDOW_PROCESSING_SYMBOL        =
+'Procesando símbolos de archivo...'
+WINDOW_PROCESSING_WS_SYMBOL     =
+'Procesando símbolos de espacio de trabajo...'
+WINDOW_PROCESSING_SEMANTIC_FULL =
+'Procesando tóquenes semánticos completos...'
+WINDOW_PROCESSING_SEMANTIC_RANGE=
+'Procesando tóquenes semánticos incrementales...'
+WINDOW_PROCESSING_HINT          =
+'Procesando pista en línea...'
+WINDOW_PROCESSING_BUILD_META    =
+'Procesando meta de construcción...'
+WINDOW_INCREASE_UPPER_LIMIT     =
+'Incrementa límite superior'
+WINDOW_CLOSE                    =
+'Cierra'
+WINDOW_SETTING_WS_DIAGNOSTIC    =
+'Puede desahibilitar los diagnósticos del espacio de trabajo o dejarlos para después en la configuración'
+WINDOW_DONT_SHOW_AGAIN          =
+'No lo muestres de nuevo'
+WINDOW_DELAY_WS_DIAGNOSTIC      =
+'Diagnósticos de tiempo ocioso (retardo de {} segundos)'
+WINDOW_DISABLE_DIAGNOSTIC       =
+'Deshabilita los diagnósticos del espacio de trabajo'
+WINDOW_LUA_STATUS_WORKSPACE     =
+'Espacio de trabajo  : {}'
+WINDOW_LUA_STATUS_CACHED_FILES  =
+'Archivos en caché: {ast}/{max}'
+WINDOW_LUA_STATUS_MEMORY_COUNT  =
+'Memoria en uso: {mem:.f}M'
+WINDOW_LUA_STATUS_TIP           =
 [[
 
-This icon is a cat,
-Not a dog nor a fox!
+Este ícono es un gato,
+¡no es un perro o un zorro!
              ↓↓↓
 ]]
 WINDOW_LUA_STATUS_DIAGNOSIS_TITLE=
-'Perform workspace diagnosis'
-WINDOW_LUA_STATUS_DIAGNOSIS_MSG = -- TODO: needs localisation
-'Do you want to perform workspace diagnosis?'
-WINDOW_APPLY_SETTING            = -- TODO: needs localisation
-'Apply setting'
-WINDOW_CHECK_SEMANTIC           = -- TODO: needs localisation
-'If you are using the color theme in the market, you may need to modify `editor.semanticHighlighting.enabled` to `true` to make semantic tokens take effect.'
-WINDOW_TELEMETRY_HINT           = -- TODO: needs localisation
-'Please allow sending anonymous usage data and error reports to help us further improve this extension. Read our privacy policy [here](https://luals.github.io/privacy#language-server) .'
-WINDOW_TELEMETRY_ENABLE         = -- TODO: needs localisation
-'Allow'
-WINDOW_TELEMETRY_DISABLE        = -- TODO: needs localisation
-'Prohibit'
-WINDOW_CLIENT_NOT_SUPPORT_CONFIG= -- TODO: needs localisation
-'Your client does not support modifying settings from the server side, please manually modify the following settings:'
+'Realiza los diagnósticos del espacio de trabajo'
+WINDOW_LUA_STATUS_DIAGNOSIS_MSG =
+'¿Quiere realizar los diagnósticos del espacio de trabajo?'
+WINDOW_APPLY_SETTING            =
+'Aplica la configuración'
+WINDOW_CHECK_SEMANTIC           =
+'Puede ser que necesite modificar `editor.semanticHighlighting.enabled` a `true` si está usando el tema de colores del mercado para hacer que los tóquenes semánticos tengan efecto, '
+WINDOW_TELEMETRY_HINT           =
+'Por favor, permita el envío de datos de uso anónimos y de reportes de errores para ayudarnos a mejorar esta extensión. Lea nuestra política de privacidad [aquí (en inglés)](https://luals.github.io/privacy#language-server) .'
+WINDOW_TELEMETRY_ENABLE         =
+'Permitida'
+WINDOW_TELEMETRY_DISABLE        =
+'Prohibida'
+WINDOW_CLIENT_NOT_SUPPORT_CONFIG=
+'Su cliente no soporta la modificación de la configuación desde el servidor, por favor, modifique manualmente las siguientes configuraciones:'
 WINDOW_LCONFIG_NOT_SUPPORT_CONFIG=
-'Automatic modification of local settings is not currently supported, please manually modify the following settings:'
-WINDOW_MANUAL_CONFIG_ADD        = -- TODO: needs localisation
-'`{key}`: add element `{value:q}` ;'
-WINDOW_MANUAL_CONFIG_SET        = -- TODO: needs localisation
-'`{key}`: set to `{value:q}` ;'
-WINDOW_MANUAL_CONFIG_PROP       = -- TODO: needs localisation
-'`{key}`: set the property `{prop}` to `{value:q}`;'
-WINDOW_APPLY_WHIT_SETTING       = -- TODO: needs localisation
-'Apply and modify settings'
-WINDOW_APPLY_WHITOUT_SETTING    = -- TODO: needs localisation
-'Apply but do not modify settings'
-WINDOW_ASK_APPLY_LIBRARY        = -- TODO: needs localisation
-'Do you need to configure your work environment as `{}`?'
-WINDOW_SEARCHING_IN_FILES       = -- TODO: needs localisation
-'Searching in files...'
-WINDOW_CONFIG_LUA_DEPRECATED    = -- TODO: needs localisation
-'`config.lua` is deprecated, please use `config.json` instead.'
-WINDOW_CONVERT_CONFIG_LUA       = -- TODO: needs localisation
-'Convert to `config.json`'
-WINDOW_MODIFY_REQUIRE_PATH      = -- TODO: needs localisation
-'Do you want to modify the require path?'
-WINDOW_MODIFY_REQUIRE_OK        = -- TODO: needs localisation
+'La modificación automática de la configuración local no está soportada actualmente, por favor, modifique manualmente las siguientes configuraciones:'
+WINDOW_MANUAL_CONFIG_ADD        =
+'`{key}`: agregue el elemento `{value:q}` ;'
+WINDOW_MANUAL_CONFIG_SET        =
+'`{key}`: asignado a `{value:q}` ;'
+WINDOW_MANUAL_CONFIG_PROP       =
+'`{key}`: la propiedad `{prop}` asignada a `{value:q}`;'
+WINDOW_APPLY_WHIT_SETTING       =
+'Aplica y modifica la configuración'
+WINDOW_APPLY_WHITOUT_SETTING    =
+'Aplica pero sin modificar la configuración'
+WINDOW_ASK_APPLY_LIBRARY        =
+'¿Necesita configurar su ambiente de trabajo como `{}`?'
+WINDOW_SEARCHING_IN_FILES       =
+'Buscando en los archivos...'
+WINDOW_CONFIG_LUA_DEPRECATED    =
+'`config.lua` está obsoleto, por favor, use `config.json`.'
+WINDOW_CONVERT_CONFIG_LUA       =
+'Convierte a `config.json`'
+WINDOW_MODIFY_REQUIRE_PATH      =
+'¿Desea modificar la ruta para requerir módulos?'
+WINDOW_MODIFY_REQUIRE_OK        =
 'Modifica'
 
-CONFIG_LOAD_FAILED              = -- TODO: needs localisation
-'Unable to read the settings file: {}'
-CONFIG_LOAD_ERROR               = -- TODO: needs localisation
-'Setting file loading error: {}'
-CONFIG_TYPE_ERROR               = -- TODO: needs localisation
-'The setting file must be in lua or json format: {}'
-CONFIG_MODIFY_FAIL_SYNTAX_ERROR = -- TODO: needs localisation
-'Failed to modify settings, there are syntax errors in the settings file: {}'
-CONFIG_MODIFY_FAIL_NO_WORKSPACE = -- TODO: needs localisation
+CONFIG_LOAD_FAILED              =
+'No se pudo leer el archivo de configuración: {}'
+CONFIG_LOAD_ERROR               =
+'Error al cargar el archivo de configuración: {}'
+CONFIG_TYPE_ERROR               =
+'El el archivo de configuración debe estar o en formato lua o en formato json: {}'
+CONFIG_MODIFY_FAIL_SYNTAX_ERROR =
+'Falló la modificación de la configuración, hay errores de sintaxis en el archivo de configuración: {}'
+CONFIG_MODIFY_FAIL_NO_WORKSPACE =
 [[
-Failed to modify settings:
-* The current mode is single-file mode, server cannot create `.luarc.json` without workspace.
-* The language client dose not support modifying settings from the server side.
+Falló la modificación de la configuración:
+* El modo actual es "solo un archivo", el servidor no puede crear `.luarc.json` sin un espacio de trabajo.
+* El cliente de lenguage no soporta la modificación de la configuración desde el servidor.
 
-Please modify following settings manually:
+Por favor, modifique manualmente las siguientes configuraciones:
 {}
 ]]
-CONFIG_MODIFY_FAIL              = -- TODO: needs localisation
+CONFIG_MODIFY_FAIL              =
 [[
-Failed to modify settings
+Falló la modificación de la configuración:
 
-Please modify following settings manually:
+Por favor, modifique manualmente las siguientes configuraciones:
 {}
 ]]
 
-PLUGIN_RUNTIME_ERROR            = -- TODO: needs localisation
+PLUGIN_RUNTIME_ERROR            =
 [[
-An error occurred in the plugin, please report it to the plugin author.
-Please check the details in the output or log.
-Plugin path: {}
+Hubo un error en el plugin, por favor, repórtelo con la persona autora del plugin.
+Por favor, revise los detalles en la salida o registros.
+Ruta del plugin: {}
 ]]
-PLUGIN_TRUST_LOAD               = -- TODO: needs localisation
+PLUGIN_TRUST_LOAD               =
 [[
-The current settings try to load the plugin at this location:{}
+La configuración actual intenta cargar el plugin ubicado aquí:{}
 
-Note that malicious plugin may harm your computer
+Tenga precaución con algún plugin malicioso que pueda dañar su computador
 ]]
-PLUGIN_TRUST_YES                = -- TODO: needs localisation
+PLUGIN_TRUST_YES                =
 [[
-Trust and load this plugin
+Confía y carga este plugin
 ]]
-PLUGIN_TRUST_NO                 = -- TODO: needs localisation
+PLUGIN_TRUST_NO                 =
 [[
-Don't load this plugin
+No cargues este plugin
 ]]
 
-CLI_CHECK_ERROR_TYPE= -- TODO: needs localisation
-'The argument of CHECK must be a string, but got {}'
-CLI_CHECK_ERROR_URI= -- TODO: needs localisation
-'The argument of CHECK must be a valid uri, but got {}'
-CLI_CHECK_ERROR_LEVEL= -- TODO: needs localisation
-'Checklevel must be one of: {}'
-CLI_CHECK_INITING= -- TODO: needs localisation
-'Initializing ...'
-CLI_CHECK_SUCCESS= -- TODO: needs localisation
-'Diagnosis completed, no problems found'
-CLI_CHECK_PROGRESS= -- TODO: needs localisation
-'Found {} problems in {} files'
-CLI_CHECK_RESULTS= -- TODO: needs localisation
-'Diagnosis complete, {} problems found, see {}'
-CLI_CHECK_MULTIPLE_WORKERS= -- TODO: needs localisation
-'Starting {} worker tasks, progress output will be disabled. This may take a few minutes.'
-CLI_DOC_INITING  = -- TODO: needs localisation
-'Loading documents ...'
-CLI_DOC_DONE     = -- TODO: needs localisation
+CLI_CHECK_ERROR_TYPE=
+'El argumento de CHECK debe ser un string, pero se tiene {}'
+CLI_CHECK_ERROR_URI=
+'El argumento de CHECK debe ser una uri válida, pero se tiene {}'
+CLI_CHECK_ERROR_LEVEL=
+'El nivel de chequeo debe ser uno de: {}'
+CLI_CHECK_INITING=
+'Inicializando...'
+CLI_CHECK_SUCCESS=
+'Se completó el diagnóstico, no se encontraron problemas'
+CLI_CHECK_PROGRESS=
+'Se encontraron {} problema(s) en {} archivo(s)'
+CLI_CHECK_RESULTS=
+'Se completó el diagnóstico, se encontraron {} problema(s), vea {}'
+CLI_CHECK_MULTIPLE_WORKERS=
+'Iniciando {} tarea(s) de trabajo, se ha deshabitado la salida de progreso. Esto podría tomar unos minutos.'
+CLI_DOC_INITING  =
+'Cargando documentos ...'
+CLI_DOC_DONE     =
 [[
-Documentation exported:
+Documentación exportada:
 ]]
-CLI_DOC_WORKING  = -- TODO: needs localisation
-'Building docs...'
-
-TYPE_ERROR_ENUM_GLOBAL_DISMATCH= -- TODO: needs localisation
-'Type `{child}` cannot match enumeration type of `{parent}`'
-TYPE_ERROR_ENUM_GENERIC_UNSUPPORTED= -- TODO: needs localisation
-'Cannot use generic `{child}` in enumeration'
-TYPE_ERROR_ENUM_LITERAL_DISMATCH= -- TODO: needs localisation
-'Literal `{child}` cannot match the enumeration value of `{parent}`'
-TYPE_ERROR_ENUM_OBJECT_DISMATCH= -- TODO: needs localisation
-'The object `{child}` cannot match the enumeration value of `{parent}`. They must be the same object'
-TYPE_ERROR_ENUM_NO_OBJECT= -- TODO: needs localisation
-'The passed in enumeration value `{child}` is not recognized'
-TYPE_ERROR_INTEGER_DISMATCH= -- TODO: needs localisation
-'Literal `{child}` cannot match integer `{parent}`'
-TYPE_ERROR_STRING_DISMATCH= -- TODO: needs localisation
-'Literal `{child}` cannot match string `{parent}`'
-TYPE_ERROR_BOOLEAN_DISMATCH= -- TODO: needs localisation
-'Literal `{child}` cannot match boolean `{parent}`'
-TYPE_ERROR_TABLE_NO_FIELD= -- TODO: needs localisation
-'Field `{key}` does not exist in the table'
-TYPE_ERROR_TABLE_FIELD_DISMATCH= -- TODO: needs localisation
-'The type of field `{key}` is `{child}`, which cannot match `{parent}`'
-TYPE_ERROR_CHILD_ALL_DISMATCH= -- TODO: needs localisation
-'All subtypes in `{child}` cannot match `{parent}`'
-TYPE_ERROR_PARENT_ALL_DISMATCH= -- TODO: needs localisation
-'`{child}` cannot match any subtypes in `{parent}`'
-TYPE_ERROR_UNION_DISMATCH= -- TODO: needs localisation
-'`{child}` cannot match `{parent}`'
-TYPE_ERROR_OPTIONAL_DISMATCH= -- TODO: needs localisation
-'Optional type cannot match `{parent}`'
-TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER= -- TODO: needs localisation
-'The number `{child}` cannot be converted to an integer'
-TYPE_ERROR_NUMBER_TYPE_TO_INTEGER= -- TODO: needs localisation
-'Cannot convert number type to integer type'
-TYPE_ERROR_DISMATCH= -- TODO: needs localisation
-'Type `{child}` cannot match `{parent}`'
-
-LUADOC_DESC_CLASS= -- TODO: needs localisation
+CLI_DOC_WORKING  =
+'Construyendo la documentación...'
+
+TYPE_ERROR_ENUM_GLOBAL_DISMATCH=
+'El tipo `{child}` no calza con el tipo de enumeración `{parent}`'
+TYPE_ERROR_ENUM_GENERIC_UNSUPPORTED=
+'No se puede usar el genérico `{child}` en enumeraciones'
+TYPE_ERROR_ENUM_LITERAL_DISMATCH=
+'El literal `{child}` no calza con el valor de enumeración `{parent}`'
+TYPE_ERROR_ENUM_OBJECT_DISMATCH=
+'El literal `{child}` no calza con el valor de enumeración `{parent}`. Deben ser el mismo objeto'
+TYPE_ERROR_ENUM_NO_OBJECT=
+'No se reconoce el valor de enumeración entregado `{child}`'
+TYPE_ERROR_INTEGER_DISMATCH=
+'El literal `{child}` no calza con el entero `{parent}`'
+TYPE_ERROR_STRING_DISMATCH=
+'El literal `{child}` no calza con el string `{parent}`'
+TYPE_ERROR_BOOLEAN_DISMATCH=
+'El literal `{child}` no calza con el booleano `{parent}`'
+TYPE_ERROR_TABLE_NO_FIELD=
+'El campo `{key}` no existe en la tabla'
+TYPE_ERROR_TABLE_FIELD_DISMATCH=
+'El tipo del campo `{key}` es `{child}`, que no calza con `{parent}`'
+TYPE_ERROR_CHILD_ALL_DISMATCH=
+'Todos los sub-tipos en `{child}` no calzan con  `{parent}`'
+TYPE_ERROR_PARENT_ALL_DISMATCH=
+'`{child}` no calza con ningún sub-tipo en `{parent}`'
+TYPE_ERROR_UNION_DISMATCH=
+'`{child}` no calza con `{parent}`'
+TYPE_ERROR_OPTIONAL_DISMATCH=
+'El tipo opcional no calza con `{parent}`'
+TYPE_ERROR_NUMBER_LITERAL_TO_INTEGER=
+'El número `{child}` no puede ser convertido a un entero'
+TYPE_ERROR_NUMBER_TYPE_TO_INTEGER=
+"No se puede convertir un tipo 'número' a un tipo 'entero'"
+TYPE_ERROR_DISMATCH=
+'El tipo `{child}` no calza con `{parent}`'
+
+LUADOC_DESC_CLASS=
 [=[
-Defines a class/table structure
-## Syntax
-`---@class <name> [: <parent>[, <parent>]...]`
-## Usage
+Define una estructura de clase o tabla
+## Sintaxis
+`---@class <nombre> [: <madre>[, <madre>]...]`
+## Uso
 ```
----@class Manager: Person, Human
-Manager = {}
+---@class Gerente: Persona, Humano
+Gerente = {}
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#class)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#class)
 ]=]
-LUADOC_DESC_TYPE= -- TODO: needs localisation
+LUADOC_DESC_TYPE=
 [=[
-Specify the type of a certain variable
+Especifica el tipo de una cierta variable
 
-Default types: `nil`, `any`, `boolean`, `string`, `number`, `integer`,
+Tipos predefinidos: `nil`, `any`, `boolean`, `string`, `number`, `integer`,
 `function`, `table`, `thread`, `userdata`, `lightuserdata`
 
-(Custom types can be provided using `@alias`)
+(Otros tipos pueden ser provistos usando `@alias`)
 
-## Syntax
-`---@type <type>[| [type]...`
+## Sintaxis
+`---@type <tipo>[| [tipo]...`
 
-## Usage
-### General
+## Uso
+### En general
 ```
----@type nil|table|myClass
-local Example = nil
+---@type nil|table|miClase
+local Ejemplo = nil
 ```
 
-### Arrays
+### Arreglos
 ```
 ---@type number[]
-local phoneNumbers = {}
+local numsTelefonicos = {}
 ```
 
-### Enums
+### Enumeraciones
 ```
 ---@type "red"|"green"|"blue"
 local color = ""
 ```
 
-### Tables
+### Tablas
 ```
 ---@type table<string, boolean>
-local settings = {
-    disableLogging = true,
-    preventShutdown = false,
+local config = {
+    desahibilitaRegistra = true,
+    previeneElApagado = false,
 }
 
 ---@type { [string]: true }
-local x --x[""] is true
+local x --x[""] es `true`
 ```
 
-### Functions
+### Funciones
 ```
 ---@type fun(mode?: "r"|"w"): string
-local myFunction
+local miFun
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#type)
+[Revisar la Wiki](https://luals.github.io/wiki/annotations#type)
 ]=]
-LUADOC_DESC_ALIAS= -- TODO: needs localisation
+LUADOC_DESC_ALIAS=
 [=[
-Create your own custom type that can be used with `@param`, `@type`, etc.
+Se pueden crear tipos propios que pueden ser usados con `@param`, `@type`, etc.
 
-## Syntax
-`---@alias <name> <type> [description]`\
+## Sintaxis
+`---@alias <nombre> <tipo> [descripción]`\
 or
 ```
----@alias <name>
----| 'value' [# comment]
----| 'value2' [# comment]
+---@alias <nombre>
+---| 'valor' [# comentario]
+---| 'valor2' [# comentario]
 ...
 ```
 
-## Usage
-### Expand to other type
+## Uso
+### Expansión a otro tipo
 ```
----@alias filepath string Path to a file
+---@alias rutaArchivo string ruta a un archivo
 
----@param path filepath Path to the file to search in
-function find(path, pattern) end
+---@param ruta rutaArchivo Ruta al archivo para buscar
+function encuentra(ruta, patron) end
 ```
 
-### Enums
+### Enumeraciones
 ```
----@alias font-style
----| '"underlined"' # Underline the text
----| '"bold"' # Bolden the text
----| '"italic"' # Make the text italicized
+---@alias estilo-de-fuente
+---| '"subrayado"' # Subraya el texto
+---| '"negrita"' # Pon el texto en negrita
+---| '"italica"' # Italiza el texto
 
----@param style font-style Style to apply
-function setFontStyle(style) end
+---@param estilo estilo-de-fuente Estilo a aplicar
+function asignaEstiloDeFuente(estilo) end
 ```
 
-### Literal Enum
+### Enumeraciones literales
 ```
-local enums = {
-    READ = 0,
-    WRITE = 1,
-    CLOSED = 2
+local enumeraciones = {
+    LECTURA = 0,
+    ESCRITURA = 1,
+    CERRADO = 2
 }
 
----@alias FileStates
----| `enums.READ`
----| `enums.WRITE`
----| `enums.CLOSE`
+---@alias EstadosDeArchivo
+---| `enumeraciones.LECTURA`
+---| `enumeraciones.ESCRITURA`
+---| `enumeraciones.CERRADO`
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#alias)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#alias)
 ]=]
-LUADOC_DESC_PARAM= -- TODO: needs localisation
+LUADOC_DESC_PARAM=
 [=[
-Declare a function parameter
+Declaración de un parámetro de una función
 
-## Syntax
-`@param <name>[?] <type> [comment]`
+## Sintaxis
+`@param <nombre>[?] <tipo> [comentario]`
 
-## Usage
-### General
+## Uso
+### En general
 ```
----@param url string The url to request
----@param headers? table<string, string> HTTP headers to send
----@param timeout? number Timeout in seconds
-function get(url, headers, timeout) end
+---@param url string La url a requerir
+---@param cabeceras? table<string, string> Cabeceras HTTP a enviar
+---@param expiracion? number Tiempo de expiración en segundos
+function get(url, cabeceras, expiracion) end
 ```
 
-### Variable Arguments
+### Argumentos variables
 ```
----@param base string The base to concat to
----@param ... string The values to concat
+---@param base string La base de la concatenación
+---@param ... string Los valores a concatenar
 function concat(base, ...) end
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#param)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#param)
 ]=]
-LUADOC_DESC_RETURN= -- TODO: needs localisation
+LUADOC_DESC_RETURN=
 [=[
-Declare a return value
+Declaración de un valor de retorno
 
-## Syntax
-`@return <type> [name] [description]`\
+## Sintaxis
+`@return <tipo> [nombre] [descripción]`\
 or\
-`@return <type> [# description]`
+`@return <tipo> [# descripción]`
 
-## Usage
-### General
+## Uso
+### En general
 ```
 ---@return number
----@return number # The green component
----@return number b The blue component
+---@return number # Componente verde
+---@return number b Componente azul
 function hexToRGB(hex) end
 ```
 
-### Type & name only
+### Solo tipos y nombres
 ```
 ---@return number x, number y
 function getCoords() end
 ```
 
-### Type only
+### Solo tipos
 ```
 ---@return string, string
-function getFirstLast() end
+function obtenPrimeroYUltimo() end
 ```
 
-### Return variable values
+### Retorno de valores variables
 ```
----@return string ... The tags of the item
-function getTags(item) end
+---@return string ... Las etiquetas del ítem
+function obtenEtiquetas(item) end
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#return)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#return)
 ]=]
-LUADOC_DESC_FIELD= -- TODO: needs localisation
+LUADOC_DESC_FIELD=
 [=[
-Declare a field in a class/table. This allows you to provide more in-depth
-documentation for a table. As of `v3.6.0`, you can mark a field as `private`,
-`protected`, `public`, or `package`.
+Declaración de un campo en una clase o tabla. Esto permite proveer una
+documentación con más detalles para una tabla. Desde `v3.6.0`, se puede
+marcar un campo como privado (`private`), protegido (`protected`), público
+(`public`) o en-paquete (`package`).
 
-## Syntax
-`---@field [scope] <name> <type> [description]`
+## Sintaxis
+`---@field [alcance] <nombre> <tipo> [descripción]`
 
-## Usage
+## Uso
 ```
 ---@class HTTP_RESPONSE
 ---@field status HTTP_STATUS
----@field headers table<string, string> The headers of the response
+---@field headers table<string, string> Las cabeceras de la respuesta
 
 ---@class HTTP_STATUS
 ---@field code number The status code of the response
@@ -902,40 +903,42 @@ response = get("localhost")
 statusCode = response.status.code
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#field)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#field)
 ]=]
-LUADOC_DESC_GENERIC= -- TODO: needs localisation
+LUADOC_DESC_GENERIC=
 [=[
-Simulates generics. Generics can allow types to be re-used as they help define
-a "generic shape" that can be used with different types.
+Simulación de genéricos. Los genéricos permiten que los tipos puedan ser
+reusados dado que ayudan a definir una "figura genérica" que puede ser
+usada con otros tipos.
 
-## Syntax
-`---@generic <name> [:parent_type] [, <name> [:parent_type]]`
+## Sintaxis
+`---@generic <nombre> [:tipo_padre] [, <nombre> [:tipo_padre]]`
 
-## Usage
-### General
+## Uso
+### En general
 ```
 ---@generic T
----@param value T The value to return
----@return T value The exact same value
-function echo(value)
-    return value
+---@param valor T El valor a retornar
+---@return T valor Exactamente el mismo valor
+function eco(valor)
+    return valor
 end
 
--- Type is string
-s = echo("e")
+-- El tipo es string
+s = eco("e")
 
--- Type is number
-n = echo(10)
+-- El tipo es número (`number`)
+n = eco(10)
 
--- Type is boolean
-b = echo(true)
+-- El tipo es booleano (`boolean`)
+b = eco(true)
 
--- We got all of this info from just using
--- @generic rather than manually specifying
--- each allowed type
+-- Tenemos toda esta información con solo
+-- usar @generic sin tener que especificar
+-- manualmente cada tipo permitido
 ```
 
+### Captura del nombre de un tipo genérico
 ### Capture name of generic type
 ```
 ---@class Foo
@@ -943,193 +946,193 @@ local Foo = {}
 function Foo:Bar() end
 
 ---@generic T
----@param name `T` # the name generic type is captured here
----@return T       # generic type is returned
-function Generic(name) end
+---@param nombre `T` # aquí se captura el tipo de nombre genérico
+---@return T       # se retorna el tipo genérico
+function Generico(nombre) end
 
-local v = Generic("Foo") -- v is an object of Foo
+local v = Generico("Foo") -- v es un objeto de Foo
 ```
 
-### How Lua tables use generics
+### Uso de genéricos en Lua
 ```
 ---@class table<K, V>: { [K]: V }
 
--- This is what allows us to create a table
--- and intellisense keeps track of any type
--- we give for key (K) or value (V)
+-- Esto es lo que nos permite crear una
+-- tabla e intellisense hace seguimiento a
+-- cualquier tipo al que le proveamos para la
+-- clave (k) ó el valor
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations/#generic)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations/#generic)
 ]=]
-LUADOC_DESC_VARARG= -- TODO: needs localisation
+LUADOC_DESC_VARARG=
 [=[
-Primarily for legacy support for EmmyLua annotations. `@vararg` does not
-provide typing or allow descriptions.
+Usado principalmente para el soporte obsoleto de annotaciones de EmmyLua.
+Proveer tipos o permitir descripciones no están soportados con `@vararg`
 
-**You should instead use `@param` when documenting parameters (variable or not).**
+**Se debe usar `@param` cuando se documentan parámetros (sean variables o no).**
 
-## Syntax
-`@vararg <type>`
+## Sintaxis
+`@vararg <tipo>`
 
-## Usage
+## Uso
 ```
----Concat strings together
+---Concatena strings
 ---@vararg string
 function concat(...) end
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations/#vararg)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations/#vararg)
 ]=]
-LUADOC_DESC_OVERLOAD= -- TODO: needs localisation
+LUADOC_DESC_OVERLOAD=
 [=[
-Allows defining of multiple function signatures.
+Permite definir firmas múltiples para una función.
 
-## Syntax
-`---@overload fun(<name>[: <type>] [, <name>[: <type>]]...)[: <type>[, <type>]...]`
+## Sintaxis
+`---@overload fun(<nombre>[: <tipo>] [, <nombre>[: <tipo>]]...)[: <tipo>[, <tipo>]...]`
 
-## Usage
+## Uso
 ```
 ---@overload fun(t: table, value: any): number
 function table.insert(t, position, value) end
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#overload)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#overload)
 ]=]
-LUADOC_DESC_DEPRECATED= -- TODO: needs localisation
+LUADOC_DESC_DEPRECATED=
 [=[
-Marks a function as deprecated. This results in any deprecated function calls
-being ~~struck through~~.
+Marca una función como obsoleta. Como consecuencia, cualquier llamado a una
+función obsoleta se ~~tarja~~
 
-## Syntax
+## Sintaxis
 `---@deprecated`
 
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#deprecated)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#deprecated)
 ]=]
-LUADOC_DESC_META= -- TODO: needs localisation
+LUADOC_DESC_META=
 [=[
-Indicates that this is a meta file and should be used for definitions and intellisense only.
+Indica que este es un archivo meta y debe ser usado solo para definiciones e intellisense.
 
-There are 3 main distinctions to note with meta files:
-1. There won't be any context-based intellisense in a meta file
-2. Hovering a `require` filepath in a meta file shows `[meta]` instead of an absolute path
-3. The `Find Reference` function will ignore meta files
+Hay tres distinciones principales que hay que notar con los archivos meta:
+1. No hay intellisense basado en el contexto en un archivo meta
+2. El colocar el cursor sobre una ruta de un `require` en un archivo meta muestra `[meta]` en vez de una ruta absolta
+3. La función `Busca referencias` ignora los archivos meta
 
-## Syntax
+## Sintaxis
 `---@meta`
 
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#meta)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#meta)
 ]=]
-LUADOC_DESC_VERSION= -- TODO: needs localisation
+LUADOC_DESC_VERSION=
 [=[
-Specifies Lua versions that this function is exclusive to.
+Especifica versiones de Lua en las que esta función se encuentra.
 
-Lua versions: `5.1`, `5.2`, `5.3`, `5.4`, `JIT`.
+Versiones de Lua: `5.1`, `5.2`, `5.3`, `5.4`, `JIT`.
 
-Requires configuring the `Diagnostics: Needed File Status` setting.
+Se requiere la configuración `Diagnostics: Needed File Status`.
 
-## Syntax
+## Sintaxis
 `---@version <version>[, <version>]...`
 
-## Usage
-### General
+## Uso
+### En general
 ```
 ---@version JIT
 function onlyWorksInJIT() end
 ```
-### Specify multiple versions
+### Especificando múltiples versiones
 ```
 ---@version <5.2,JIT
 function oldLuaOnly() end
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#version)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#version)
 ]=]
-LUADOC_DESC_SEE= -- TODO: needs localisation
+LUADOC_DESC_SEE=
 [=[
-Define something that can be viewed for more information
+Define algo que puede ser revisado para más información
 
-## Syntax
+## Sintaxis
 `---@see <text>`
 
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#see)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#see)
 ]=]
-LUADOC_DESC_DIAGNOSTIC= -- TODO: needs localisation
+LUADOC_DESC_DIAGNOSTIC=
 [=[
-Enable/disable diagnostics for error/warnings/etc.
+Habilita o deshabilita el diagnóstico para errores, advertencias, etc.
 
-Actions: `disable`, `enable`, `disable-line`, `disable-next-line`
+Acciones: deshabilita (`disable`), habilita (`enable`), deshabilita para esta línea (`disable-line`), deshabilita para la siguiente línea (`disable-next-line`)
 
-[Names](https://github.com/LuaLS/lua-language-server/blob/cbb6e6224094c4eb874ea192c5f85a6cba099588/script/proto/define.lua#L54)
+[Nombres](https://github.com/LuaLS/lua-language-server/blob/cbb6e6224094c4eb874ea192c5f85a6cba099588/script/proto/define.lua#L54)
 
-## Syntax
-`---@diagnostic <action>[: <name>]`
+## Sintaxis
+`---@diagnostic <acción>[: <nombre>]`
 
-## Usage
-### Disable next line
+## Uso
+### Deshabilita para la siguiente línea
 ```
 ---@diagnostic disable-next-line: undefined-global
 ```
 
-### Manually toggle
+### Cambio manual
 ```
 ---@diagnostic disable: unused-local
-local unused = "hello world"
+local sinUso = "hola mundo"
 ---@diagnostic enable: unused-local
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#diagnostic)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#diagnostic)
 ]=]
-LUADOC_DESC_MODULE= -- TODO: needs localisation
+LUADOC_DESC_MODULE=
 [=[
-Provides the semantics of `require`.
+Provee la semántica para `require`.
 
-## Syntax
-`---@module <'module_name'>`
+## Sintaxis
+`---@module <'nombre_módulo'>`
 
-## Usage
+## Uso
 ```
 ---@module 'string.utils'
 local stringUtils
--- This is functionally the same as:
-local module = require('string.utils')
+-- Esto es funcionalmente equivalente a:
+local mod = require('string.utils')
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#module)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#module)
 ]=]
-LUADOC_DESC_ASYNC= -- TODO: needs localisation
+LUADOC_DESC_ASYNC=
 [=[
-Marks a function as asynchronous.
+Marca una función como "asíncrona".
 
-## Syntax
+## Sintaxis
 `---@async`
 
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#async)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#async)
 ]=]
-LUADOC_DESC_NODISCARD= -- TODO: needs localisation
+LUADOC_DESC_NODISCARD=
 [=[
-Prevents this function's return values from being discarded/ignored.
-This will raise the `discard-returns` warning should the return values
-be ignored.
+Previene que los valores retornados por esta función sean ignorados o descartados.
+Esto alza la advertencia `discard-returns` si se ignoran los valores retornados.
 
-## Syntax
+## Sintaxis
 `---@nodiscard`
 
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#nodiscard)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#nodiscard)
 ]=]
-LUADOC_DESC_CAST= -- TODO: needs localisation
+LUADOC_DESC_CAST=
 [=[
-Allows type casting (type conversion).
+Se permite la conversión de tipo.
 
-## Syntax
-`@cast <variable> <[+|-]type>[, <[+|-]type>]...`
+## Sintaxis
+`@cast <variable> <[+|-]tipo>[, <[+|-]tipo>]...`
 
-## Usage
-### Overwrite type
+## Uso
+### Sobreescritura del tipo
 ```
 ---@type integer
 local x --> integer
@@ -1137,7 +1140,7 @@ local x --> integer
 ---@cast x string
 print(x) --> string
 ```
-### Add Type
+### Agregar un tipo
 ```
 ---@type string
 local x --> string
@@ -1145,7 +1148,7 @@ local x --> string
 ---@cast x +boolean, +number
 print(x) --> string|boolean|number
 ```
-### Remove Type
+### Remover un tipo
 ```
 ---@type string|table
 local x --> string|table
@@ -1154,17 +1157,17 @@ local x --> string|table
 print(x) --> table
 ```
 ---
-[View Wiki](https://luals.github.io/wiki/annotations#cast)
+[Revisar en la Wiki](https://luals.github.io/wiki/annotations#cast)
 ]=]
-LUADOC_DESC_OPERATOR= -- TODO: needs localisation
+LUADOC_DESC_OPERATOR=
 [=[
-Provide type declaration for [operator metamethods](http://lua-users.org/wiki/MetatableEvents).
+Provee la declaración de tipo para [metamétodos de operador](http://lua-users.org/wiki/MetatableEvents).
 
-## Syntax
-`@operator <operation>[(input_type)]:<resulting_type>`
+## Sintaxis
+`@operator <operación>[(tipo_de_entrada)]:<tipo_resultante>`
 
-## Usage
-### Vector Add Metamethod
+## Uso
+### Metamétodo para suma de Vector
 ```
 ---@class Vector
 ---@operator add(Vector):Vector
@@ -1175,7 +1178,7 @@ vB = Vector.new(10, 20, 30)
 vC = vA + vB
 --> Vector
 ```
-### Unary Minus
+### Resta unaria
 ```
 ---@class Passcode
 ---@operator unm:integer
@@ -1186,130 +1189,130 @@ pB = -pA
 ```
 [View Request](https://github.com/LuaLS/lua-language-server/issues/599)
 ]=]
-LUADOC_DESC_ENUM= -- TODO: needs localisation
+LUADOC_DESC_ENUM=
 [=[
+Marca una tabla como una enumeración. Revise [`@alias`](https://luals.github.io/wiki/annotations#alias)
+si se desea una enumeración, pero no se puede definir como una tabla de Lua.
 Mark a table as an enum. If you want an enum but can't define it as a Lua
-table, take a look at the [`@alias`](https://luals.github.io/wiki/annotations#alias)
-tag.
 
-## Syntax
-`@enum <name>`
+## Sintaxis
+`@enum <nombre>`
 
-## Usage
+## Uso
 ```
----@enum colors
-local colors = {
-	white = 0,
-	orange = 2,
-	yellow = 4,
-	green = 8,
-	black = 16,
+---@enum colores
+local colores = {
+	blanco = 0,
+	naranjo = 2,
+	amarillo = 4,
+	verde = 8,
+	negro = 16,
 }
 
----@param color colors
-local function setColor(color) end
+---@param color colores
+local function asignaColor(color) end
 
--- Completion and hover is provided for the below param
-setColor(colors.green)
+-- El completado y la información-bajo-el-cursor se provee para el siguiente parámetro
+asignaColor(colores.verde)
 ```
 ]=]
-LUADOC_DESC_SOURCE= -- TODO: needs localisation
+LUADOC_DESC_SOURCE=
 [=[
-Provide a reference to some source code which lives in another file. When
-searching for the definition of an item, its `@source` will be used.
+Provee una referencia a algún código fuente que vive en otro archivo.
+Cuando se busque por la definición de un ítem, se ocupa su `@source`.
 
-## Syntax
-`@source <path>`
+## Sintaxis
+`@source <ruta>`
 
-## Usage
+## Uso
 ```
----You can use absolute paths
+---Se pueden ocupar rutas absolutas
 ---@source C:/Users/me/Documents/program/myFile.c
 local a
 
----Or URIs
+---También URIs
 ---@source file:///C:/Users/me/Documents/program/myFile.c:10
 local b
 
----Or relative paths
+---También rutas relativas
 ---@source local/file.c
 local c
 
----You can also include line and char numbers
+---Se puede incluir los números de línea y caracter
 ---@source local/file.c:10:8
 local d
 ```
 ]=]
-LUADOC_DESC_PACKAGE= -- TODO: needs localisation
+LUADOC_DESC_PACKAGE=
 [=[
-Mark a function as private to the file it is defined in. A packaged function
-cannot be accessed from another file.
+Marca una función como privada del archivo en la que fue definida. Una función
+empacada (en un cierto paquete) no puede ser accedida desde otro archivo
 
-## Syntax
+## Sintaxis
 `@package`
 
-## Usage
+## Uso
 ```
 ---@class Animal
----@field private eyes integer
+---@field private ojos integer
 local Animal = {}
 
 ---@package
----This cannot be accessed in another file
-function Animal:eyesCount()
-    return self.eyes
+---No se puede acceder desde otro archivo
+function Animal:conteoDeOjos()
+    return self.ojos
 end
 ```
 ]=]
-LUADOC_DESC_PRIVATE= -- TODO: needs localisation
+LUADOC_DESC_PRIVATE=
 [=[
-Mark a function as private to a @class. Private functions can be accessed only
-from within their class and are not accessible from child classes.
+Marca una función como privada de una clase. Las funciones privadas pueden
+ser accedidas solo dentro de su clase y no por clases hijas.
 
-## Syntax
+## Sintaxis
 `@private`
 
-## Usage
+## Uso
 ```
 ---@class Animal
----@field private eyes integer
+---@field private ojos integer
 local Animal = {}
 
 ---@private
-function Animal:eyesCount()
-    return self.eyes
+function Animal:conteoDeOjos()
+    return self.ojos
 end
 
----@class Dog:Animal
-local myDog = {}
+---@class Perro:Animal
+local miPerro = {}
 
----NOT PERMITTED!
-myDog:eyesCount();
+---esto no está permitido
+myDog:conteoDeOjos();
 ```
 ]=]
-LUADOC_DESC_PROTECTED= -- TODO: needs localisation
+LUADOC_DESC_PROTECTED=
 [=[
-Mark a function as protected within a @class. Protected functions can be
-accessed only from within their class or from child classes.
+Marca una función como protegida de una clase. Las funciones protegidas pueden
+ser accedidas solo dentro de su clase o sus clases hijas.
 
-## Syntax
+## Sintaxis
 `@protected`
 
-## Usage
+## Uso
 ```
 ---@class Animal
----@field private eyes integer
+---@field private ojos integer
 local Animal = {}
 
 ---@protected
-function Animal:eyesCount()
-    return self.eyes
+function Animal:conteoDeOjos()
+    return self.ojos
 end
 
----@class Dog:Animal
-local myDog = {}
+---@class Perro:Animal
+local miPerro = {}
 
----Permitted because function is protected, not private.
-myDog:eyesCount();
+---Permitido dado que la función es protegida y no privada.
+myDog:conteoDeOjos();
 ```
 ]=]

From 579ce944a64b13881642f2fafb887ff0242a3757 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Fri, 21 Mar 2025 11:38:56 -0300
Subject: [PATCH 10/24] correcter wording

---
 locale/es-419/script.lua | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/locale/es-419/script.lua b/locale/es-419/script.lua
index 7f0ccd456..3340f04b0 100644
--- a/locale/es-419/script.lua
+++ b/locale/es-419/script.lua
@@ -439,7 +439,7 @@ ACTION_FIX_COMMENT_PREFIX=
 ACTION_FIX_NONSTANDARD_SYMBOL=
 'Modifica a `{symbol}` .'
 ACTION_RUNTIME_UNICODE_NAME=
-'Permite caracteres Unicode.'
+'Permite el uso de caracteres Unicode.'
 ACTION_SWAP_PARAMS     =
 'Cambia al parámetro {index} de `{node}`'
 ACTION_FIX_INSERT_SPACE=
@@ -472,7 +472,7 @@ COMMAND_RUNTIME_VERSION   =
 COMMAND_OPEN_LIBRARY      =
 'Carga variables globales de una biblioteca externa'
 COMMAND_UNICODE_NAME      =
-'Permite caracteres Unicode.'
+'Permite el uso de caracteres Unicode.'
 COMMAND_JSON_TO_LUA       =
 'Convierte JSON a Lua'
 COMMAND_JSON_TO_LUA_FAILED=

From 1e19dc47bc4e235abac5591d3056f425d14574dd Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Fri, 21 Mar 2025 12:35:46 -0300
Subject: [PATCH 11/24] some setting.lua

---
 locale/es-419/setting.lua | 444 +++++++++++++++++++-------------------
 1 file changed, 223 insertions(+), 221 deletions(-)

diff --git a/locale/es-419/setting.lua b/locale/es-419/setting.lua
index e19a7d57d..03f335b7d 100644
--- a/locale/es-419/setting.lua
+++ b/locale/es-419/setting.lua
@@ -1,137 +1,139 @@
 ---@diagnostic disable: undefined-global
 
-config.addonManager.enable        = -- TODO: needs localisation
-"Whether the addon manager is enabled or not."
-config.addonManager.repositoryBranch = -- TODO: needs localisation
-"Specifies the git branch used by the addon manager."
-config.addonManager.repositoryPath = -- TODO: needs localisation
-"Specifies the git path used by the addon manager."
-config.runtime.version            = -- TODO: needs localisation
-"Lua runtime version."
-config.runtime.path               = -- TODO: needs localisation
+config.addonManager.enable        =
+"Si el manejador de extensiones está habilitado."
+config.addonManager.repositoryBranch =
+"Especifica la rama de git usada por el manejador de extensiones."
+config.addonManager.repositoryPath =
+"Especifica la ruta git usada por el manejador de extensiones."
+
+config.runtime.version            =
+"Versión de Lua que se ejecuta."
+config.runtime.path               =
 [[
-When using `require`, how to find the file based on the input name.
-Setting this config to `?/init.lua` means that when you enter `require 'myfile'`, `${workspace}/myfile/init.lua` will be searched from the loaded files.
-if `runtime.pathStrict` is `false`, `${workspace}/**/myfile/init.lua` will also be searched.
-If you want to load files outside the workspace, you need to set `Lua.workspace.library` first.
+Cuando se ocupa un `require`, cómo se encuentra el archivo basado en el nombre de entrada.
+
+Asignar esta configuración a `?/init.lua` significa que cuando se ingresa `require 'myfile'` se busca en `${workspace}/myfile/init.lua` desde los archivos cargados.
+Si `runtime.pathStrict` es `false`, también se busca en `${workspace}/**/myfile/init.lua`.
+Si se desea cargar archivos fuera del espacio de trabajo, se debe asignar `Lua.workspace.library` primero.
 ]]
-config.runtime.pathStrict         = -- TODO: needs localisation
-'When enabled, `runtime.path` will only search the first level of directories, see the description of `runtime.path`.'
-config.runtime.special            = -- TODO: needs localisation
-[[The custom global variables are regarded as some special built-in variables, and the language server will provide special support
-The following example shows that 'include' is treated as' require '.
+config.runtime.pathStrict         =
+'Cuando está habilitado, `runtime.path` sólo buscará en el primer nivel de directorios, vea la descripción de `runtime.path`.'
+config.runtime.special            =
+[[Las variables globales personalizadas son consideradas variables intrínsecas, y el servidor de lenguage proveerá un soporte especial.
+El siguiente ejemplo muestra que 'include' es tratado como 'require'.
 ```json
 "Lua.runtime.special" : {
     "include" : "require"
 }
 ```
 ]]
-config.runtime.unicodeName        = -- TODO: needs localisation
-"Allows Unicode characters in name."
-config.runtime.nonstandardSymbol  = -- TODO: needs localisation
-"Supports non-standard symbols. Make sure that your runtime environment supports these symbols."
-config.runtime.plugin             = -- TODO: needs localisation
-"Plugin path. Please read [wiki](https://luals.github.io/wiki/plugins) to learn more."
-config.runtime.pluginArgs         = -- TODO: needs localisation
-"Additional arguments for the plugin."
-config.runtime.fileEncoding       = -- TODO: needs localisation
-"File encoding. The `ansi` option is only available under the `Windows` platform."
-config.runtime.builtin            = -- TODO: needs localisation
+config.runtime.unicodeName        =
+"Se permiten los caracteres unicode en los nombres."
+config.runtime.nonstandardSymbol  =
+"Soporte de símbolos no estándar. Asegúrese que la versión de Lua que se ejecuta soporte estos símbolos."
+config.runtime.plugin             =
+"Ruta de plugin. Revise [la wiki](https://luals.github.io/wiki/plugins) para más información."
+config.runtime.pluginArgs         =
+"Argumentos adicionals al plugin."
+config.runtime.fileEncoding       =
+"Codificación de archivo. La opción `ansi` solo está disponible en la plataforma `Windows`."
+config.runtime.builtin            =
 [[
-Adjust the enabled state of the built-in library. You can disable (or redefine) the non-existent library according to the actual runtime environment.
+Ajuste de la habilitación de biblioteca interna provista. Puede deshabilitar (o redefinir) las bibliotecas inexistentes de acuerdo al ambiente de ejecución.
 
-* `default`: Indicates that the library will be enabled or disabled according to the runtime version
-* `enable`: always enable
-* `disable`: always disable
+* `default`: Indica que la biblioteca será habilitada o deshabilitada de acuerdo a la versión que se ejecuta.
+* `enable`: Habilitada
+* `disable`: Deshabilitada
 ]]
-config.runtime.meta               = -- TODO: needs localisation
-'Format of the directory name of the meta files.'
-config.diagnostics.enable         = -- TODO: needs localisation
-"Enable diagnostics."
-config.diagnostics.disable        = -- TODO: needs localisation
-"Disabled diagnostic (Use code in hover brackets)."
-config.diagnostics.globals        = -- TODO: needs localisation
-"Defined global variables."
-config.diagnostics.globalsRegex   = -- TODO: needs localisation
-"Find defined global variables using regex."
-config.diagnostics.severity       = -- TODO: needs localisation
+config.runtime.meta               =
+'Formato del nombre del directoria de los archivos meta.'
+config.diagnostics.enable         =
+"Habilita los diagnósticos."
+config.diagnostics.disable        =
+"Deshabilita los diagnósticos (Usa código en corchetes bajo el cursor)."
+config.diagnostics.globals        =
+"Variables globales definidas."
+config.diagnostics.globalsRegex   =
+"Encuentra variables globales definidas usando esta expresión regular."
+config.diagnostics.severity       =
 [[
-Modify the diagnostic severity.
+Modifica el la severirad de los diagnósticos.
 
-End with `!` means override the group setting `diagnostics.groupSeverity`.
+Agregue `!` al final para descartar la configuración `diagnostics.groupSeverity`.
 ]]
-config.diagnostics.neededFileStatus = -- TODO: needs localisation
+config.diagnostics.neededFileStatus =
 [[
-* Opened:  only diagnose opened files
-* Any:     diagnose all files
-* None:    disable this diagnostic
+* Opened:  Solo diagnostica los archivos abiertos
+* Any:     diagnostica todos los archivos
+* None:    deshabilita este diagnóstico
 
-End with `!` means override the group setting `diagnostics.groupFileStatus`.
+Agregue `!` al final para descartar la configuración `diagnostics.groupFileStatus`.
 ]]
-config.diagnostics.groupSeverity  = -- TODO: needs localisation
+config.diagnostics.groupSeverity  =
 [[
-Modify the diagnostic severity in a group.
-`Fallback` means that diagnostics in this group are controlled by `diagnostics.severity` separately.
-Other settings will override individual settings without end of `!`.
+Modifica el la severirad de los diagnósticos en un grupo.
+`Fallback` significa que los diagnósticos en este grupo son controlados con una severida separada de `diagnostics.severity`.
+Otras configuraciones descartan las configuraciones individuales que no terminen en `!`.
 ]]
-config.diagnostics.groupFileStatus = -- TODO: needs localisation
+config.diagnostics.groupFileStatus =
 [[
-Modify the diagnostic needed file status in a group.
+Modifica los diagnósticos de archivos requeridos en un grupo.
 
-* Opened:  only diagnose opened files
-* Any:     diagnose all files
-* None:    disable this diagnostic
+* Opened:  solo diagnostica los archivos abiertos
+* Any:     diagnostica todos los archivos
+* None:    deshabilita este diagnóstico
 
-`Fallback` means that diagnostics in this group are controlled by `diagnostics.neededFileStatus` separately.
-Other settings will override individual settings without end of `!`.
+`Fallback` significa que los diagnósticos en este grupo son controlados con una severida separada de `diagnostics.neededFileStatus`.
+Otras configuraciones descartan las configuraciones individuales que no terminen en `!`.
 ]]
-config.diagnostics.workspaceEvent = -- TODO: needs localisation
-"Set the time to trigger workspace diagnostics."
-config.diagnostics.workspaceEvent.OnChange = -- TODO: needs localisation
-"Trigger workspace diagnostics when the file is changed."
-config.diagnostics.workspaceEvent.OnSave = -- TODO: needs localisation
-"Trigger workspace diagnostics when the file is saved."
-config.diagnostics.workspaceEvent.None = -- TODO: needs localisation
-"Disable workspace diagnostics."
-config.diagnostics.workspaceDelay = -- TODO: needs localisation
-"Latency (milliseconds) for workspace diagnostics."
-config.diagnostics.workspaceRate  = -- TODO: needs localisation
-"Workspace diagnostics run rate (%). Decreasing this value reduces CPU usage, but also reduces the speed of workspace diagnostics. The diagnosis of the file you are currently editing is always done at full speed and is not affected by this setting."
-config.diagnostics.libraryFiles   = -- TODO: needs localisation
-"How to diagnose files loaded via `Lua.workspace.library`."
-config.diagnostics.libraryFiles.Enable   = -- TODO: needs localisation
-"Always diagnose these files."
-config.diagnostics.libraryFiles.Opened   = -- TODO: needs localisation
-"Only when these files are opened will it be diagnosed."
-config.diagnostics.libraryFiles.Disable  = -- TODO: needs localisation
-"These files are not diagnosed."
-config.diagnostics.ignoredFiles   = -- TODO: needs localisation
-"How to diagnose ignored files."
-config.diagnostics.ignoredFiles.Enable   = -- TODO: needs localisation
-"Always diagnose these files."
-config.diagnostics.ignoredFiles.Opened   = -- TODO: needs localisation
-"Only when these files are opened will it be diagnosed."
-config.diagnostics.ignoredFiles.Disable  = -- TODO: needs localisation
-"These files are not diagnosed."
-config.diagnostics.disableScheme  = -- TODO: needs localisation
-'Do not diagnose Lua files that use the following scheme.'
-config.diagnostics.unusedLocalExclude = -- TODO: needs localisation
-'Do not diagnose `unused-local` when the variable name matches the following pattern.'
-config.workspace.ignoreDir        = -- TODO: needs localisation
-"Ignored files and directories (Use `.gitignore` grammar)."-- .. example.ignoreDir,
-config.workspace.ignoreSubmodules = -- TODO: needs localisation
-"Ignore submodules."
-config.workspace.useGitIgnore     = -- TODO: needs localisation
-"Ignore files list in `.gitignore` ."
-config.workspace.maxPreload       = -- TODO: needs localisation
-"Max preloaded files."
-config.workspace.preloadFileSize  = -- TODO: needs localisation
-"Skip files larger than this value (KB) when preloading."
-config.workspace.library          = -- TODO: needs localisation
-"In addition to the current workspace, which directories will load files from. The files in these directories will be treated as externally provided code libraries, and some features (such as renaming fields) will not modify these files."
-config.workspace.checkThirdParty  = -- TODO: needs localisation
+config.diagnostics.workspaceEvent =
+"Fija el tiempo para lanzar los diagnósticos del espacio de trabajo."
+config.diagnostics.workspaceEvent.OnChange =
+"Lanza los diagnósticos del espacio de trabajo cuando se cambie el archivo."
+config.diagnostics.workspaceEvent.OnSave =
+"Lanza los diagnósticos del espacio de trabajo cuando se guarde el archivo."
+config.diagnostics.workspaceEvent.None =
+"Deshabilita los diagnósticos del espacio de trabajo."
+config.diagnostics.workspaceDelay =
+"Latencia en milisegundos para diagnósticos del espacio de trabajo."
+config.diagnostics.workspaceRate  =
+"Tasa porcentual de diagnósticos del espacio de trabajo. Decremente este valor para reducir el uso de CPU, también reduciendo la velocidad de los diagnósticos del espacio de trabajo. El diagnóstico del archivo que esté editando siempre se hace a toda velocidad y no es afectado por esta configuración."
+config.diagnostics.libraryFiles   =
+"Cómo diagnosticar los archivos cargados via `Lua.workspace.library`."
+config.diagnostics.libraryFiles.Enable   =
+"Estos archivos siempre se diagnostican."
+config.diagnostics.libraryFiles.Opened   =
+"Estos archivos se diagnostican solo cuando se abren."
+config.diagnostics.libraryFiles.Disable  =
+"Estos archivos no se diagnostican."
+config.diagnostics.ignoredFiles   =
+"Cómo diagnosticar los archivos ignorados."
+config.diagnostics.ignoredFiles.Enable   =
+"Estos archivos siempre se diagnostican."
+config.diagnostics.ignoredFiles.Opened   =
+"Estos archivos se diagnostican solo cuando se abren."
+config.diagnostics.ignoredFiles.Disable  =
+"Estos archivos no se diagnostican."
+config.diagnostics.disableScheme  =
+'Los archivos de Lua que siguen el siguiente esquema no se diagnostican.'
+config.diagnostics.unusedLocalExclude =
+'Las variables que calcen con el siguiente patrón no se diagnostican con `unused-local`.'
+config.workspace.ignoreDir        =
+"Directorios y archivos ignorados (se usa la misma gramática que en `.gitignore`)"
+config.workspace.ignoreSubmodules =
+"Ignora submódulos."
+config.workspace.useGitIgnore     =
+"Ignora los archivos enlistados en `gitignore` ."
+config.workspace.maxPreload       =
+"Máxima pre-carga de archivos."
+config.workspace.preloadFileSize  =
+"Cuando se pre-carga, se omiten los archivos más grandes que este valor (en KB)."
+config.workspace.library          =
+"Además de los del espacio de trabajo actual, se cargan archivos de estos directorios. Los archivos en estos directorios serán tratados como bibliotecas con código externo y algunas características (como renombrar campos) no modificarán estos archivos."
+config.workspace.checkThirdParty  =
 [[
-Automatic detection and adaptation of third-party libraries, currently supported libraries are:
+Detección y adaptación automática de bibliotecas externas. Actualmente soportadas:
 
 * OpenResty
 * Cocos4.0
@@ -140,121 +142,121 @@ Automatic detection and adaptation of third-party libraries, currently supported
 * skynet
 * Jass
 ]]
-config.workspace.userThirdParty          = -- TODO: needs localisation
-'Add private third-party library configuration file paths here, please refer to the built-in [configuration file path](https://github.com/LuaLS/lua-language-server/tree/master/meta/3rd)'
-config.workspace.supportScheme           = -- TODO: needs localisation
-'Provide language server for the Lua files of the following scheme.'
-config.completion.enable                 = -- TODO: needs localisation
-'Enable completion.'
-config.completion.callSnippet            = -- TODO: needs localisation
-'Shows function call snippets.'
-config.completion.callSnippet.Disable    = -- TODO: needs localisation
-"Only shows `function name`."
-config.completion.callSnippet.Both       = -- TODO: needs localisation
-"Shows `function name` and `call snippet`."
-config.completion.callSnippet.Replace    = -- TODO: needs localisation
-"Only shows `call snippet.`"
-config.completion.keywordSnippet         = -- TODO: needs localisation
-'Shows keyword syntax snippets.'
-config.completion.keywordSnippet.Disable = -- TODO: needs localisation
-"Only shows `keyword`."
-config.completion.keywordSnippet.Both    = -- TODO: needs localisation
-"Shows `keyword` and `syntax snippet`."
-config.completion.keywordSnippet.Replace = -- TODO: needs localisation
-"Only shows `syntax snippet`."
-config.completion.displayContext         = -- TODO: needs localisation
-"Previewing the relevant code snippet of the suggestion may help you understand the usage of the suggestion. The number set indicates the number of intercepted lines in the code fragment. If it is set to `0`, this feature can be disabled."
-config.completion.workspaceWord          = -- TODO: needs localisation
-"Whether the displayed context word contains the content of other files in the workspace."
-config.completion.showWord               = -- TODO: needs localisation
-"Show contextual words in suggestions."
-config.completion.showWord.Enable        = -- TODO: needs localisation
-"Always show context words in suggestions."
-config.completion.showWord.Fallback      = -- TODO: needs localisation
-"Contextual words are only displayed when suggestions based on semantics cannot be provided."
-config.completion.showWord.Disable       = -- TODO: needs localisation
-"Do not display context words."
-config.completion.autoRequire            = -- TODO: needs localisation
-"When the input looks like a file name, automatically `require` this file."
-config.completion.showParams             = -- TODO: needs localisation
-"Display parameters in completion list. When the function has multiple definitions, they will be displayed separately."
-config.completion.requireSeparator       = -- TODO: needs localisation
-"The separator used when `require`."
-config.completion.postfix                = -- TODO: needs localisation
-"The symbol used to trigger the postfix suggestion."
-config.color.mode                        = -- TODO: needs localisation
-"Color mode."
-config.color.mode.Semantic               = -- TODO: needs localisation
-"Semantic color. You may need to set `editor.semanticHighlighting.enabled` to `true` to take effect."
-config.color.mode.SemanticEnhanced       = -- TODO: needs localisation
-"Enhanced semantic color. Like `Semantic`, but with additional analysis which might be more computationally expensive."
-config.color.mode.Grammar                = -- TODO: needs localisation
-"Grammar color."
-config.semantic.enable                   = -- TODO: needs localisation
-"Enable semantic color. You may need to set `editor.semanticHighlighting.enabled` to `true` to take effect."
-config.semantic.variable                 = -- TODO: needs localisation
-"Semantic coloring of variables/fields/parameters."
-config.semantic.annotation               = -- TODO: needs localisation
-"Semantic coloring of type annotations."
-config.semantic.keyword                  = -- TODO: needs localisation
-"Semantic coloring of keywords/literals/operators. You only need to enable this feature if your editor cannot do syntax coloring."
-config.signatureHelp.enable              = -- TODO: needs localisation
-"Enable signature help."
-config.hover.enable                      = -- TODO: needs localisation
-"Enable hover."
-config.hover.viewString                  = -- TODO: needs localisation
-"Hover to view the contents of a string (only if the literal contains an escape character)."
-config.hover.viewStringMax               = -- TODO: needs localisation
-"The maximum length of a hover to view the contents of a string."
-config.hover.viewNumber                  = -- TODO: needs localisation
-"Hover to view numeric content (only if literal is not decimal)."
-config.hover.fieldInfer                  = -- TODO: needs localisation
-"When hovering to view a table, type infer will be performed for each field. When the accumulated time of type infer reaches the set value (MS), the type infer of subsequent fields will be skipped."
-config.hover.previewFields               = -- TODO: needs localisation
-"When hovering to view a table, limits the maximum number of previews for fields."
-config.hover.enumsLimit                  = -- TODO: needs localisation
-"When the value corresponds to multiple types, limit the number of types displaying."
-config.hover.expandAlias                 = -- TODO: needs localisation
+config.workspace.userThirdParty          =
+'Rutas archivos de configuración para bibliotecas externas privadas. Revise [el archivo de configuración](https://github.com/LuaLS/lua-language-server/tree/master/meta/3rd) provisto.'
+config.workspace.supportScheme           =
+'El servidor de lenguage será provisto para los archivos de Lua del siguiente esquema.'
+config.completion.enable                 =
+'Habilita la completación.'
+config.completion.callSnippet            =
+'Muestra snippets para llamadas de funciones.'
+config.completion.callSnippet.Disable    =
+"Solo muestra `función nombre`."
+config.completion.callSnippet.Both       =
+"Muestra `función nombre` y `llamar al snippet`."
+config.completion.callSnippet.Replace    =
+"Solo muestra `llamar al snippet`."
+config.completion.keywordSnippet         =
+'Muestra snippets con sintaxis de palabras clave.'
+config.completion.keywordSnippet.Disable =
+"Solo muestra `palabra clave`."
+config.completion.keywordSnippet.Both    =
+"Muestra `palabra clave` y `snippet de sintaxis`."
+config.completion.keywordSnippet.Replace =
+"Solo muestra `snippet de sintaxis`."
+config.completion.displayContext         =
+"La prevista de la sugerencia del snippet de código relevante ayuda a entender el uso de la sugerenecia. El número fijado indica el número de líneas interceptadas en el fragmento de código. Fijando en `0` se deshabilita esta característica."
+config.completion.workspaceWord          =
+"Si es que el la palabra contextual presentada contiene contenido de otros archivos en el espacio de trabajo."
+config.completion.showWord               =
+"Muestra palabras contextuales en las sugerencias."
+config.completion.showWord.Enable        =
+"Siempre muestra palabras contextuales en las sugerencias."
+config.completion.showWord.Fallback      =
+"Las palabras contextuales solo se muestran si las sugerencias basadas en la semántica no están provistas."
+config.completion.showWord.Disable       =
+"Sin presentar las palabras contextuales."
+config.completion.autoRequire            =
+"Agrega automáticamente el `require` correspondiente cuando la entrada se parece a un nombre de archivo."
+config.completion.showParams             =
+"Muestra los parámetros en la lista de completado. Cuando la función tiene múltiples definiciones, se mostrarán por separado."
+config.completion.requireSeparator       =
+"Separador usado en `require`."
+config.completion.postfix                =
+"El símbolo usado para lanzar la sugerencia posfija."
+config.color.mode                        =
+"Modo de coloración."
+config.color.mode.Semantic               =
+"Coloración semántica. Puede ser necesario asignar `editor.semanticHighlighting.enabled` a `true` para que tenga efecto."
+config.color.mode.SemanticEnhanced       =
+"Coloración de semántica avanzada. Igual que `Semántica`, pero con análisis adicional que hace que se requira computación más cara."
+config.color.mode.Grammar                =
+"Coloración de la gramática."
+config.semantic.enable                   =
+"Habilita la coloración semántica. Puede ser necesario asignar `editor.semanticHighlighting.enabled`  a `true` para que tenga efecto."
+config.semantic.variable                 =
+"Coloración semántica de variables, campos y parámetros."
+config.semantic.annotation               =
+"Coloración de las anotaciones de tipo."
+config.semantic.keyword                  =
+"Coloración semántica de palabras clave, literales y operadores. Se necesita habilitar esta característica si su editor no puede hacer coloración sintáctica."
+config.signatureHelp.enable              =
+"Habilita la ayuda de firma."
+config.hover.enable                      =
+"Habilita la información bajo el cursor."
+config.hover.viewString                  =
+"Ubica el cursor bajo un string para ver su contenido (solo si el literal contiene un caracter de escape)."
+config.hover.viewStringMax               =
+"Largo máximo de la información bajo el cursor para ver el contenido de un string."
+config.hover.viewNumber                  =
+"Ubica el cursor para ver el contenido numérico (solo si el literal no es decimal)."
+config.hover.fieldInfer                  =
+"Cuando se ubica el cursor para ver una tabla, la inferencia de tipo se realizará para cada campo. Cuando el tiempo acumulado de la inferencia de tipo alcanza el valor fijado (en MS), la inferencia de tipo para los campos subsecuentes será omitida."
+config.hover.previewFields               =
+"Cuando se ubica el cursor para ver una tabla, fija el máximo numero de previstas para los campos."
+config.hover.enumsLimit                  =
+"Cuando el valor corresponde a múltiples tipos, fija el límite de tipos en despliegue."
+config.hover.expandAlias                 =
 [[
-Whether to expand the alias. For example, expands `---@alias myType boolean|number` appears as `boolean|number`, otherwise it appears as `myType'.
+Expandir o no los alias. Por ejemplo, la expansión de `---@alias miTipo boolean|number` aparece como `boolean|number`, caso contrarior, aparece como `miTipo`.
 ]]
-config.develop.enable                    = -- TODO: needs localisation
-'Developer mode. Do not enable, performance will be affected.'
-config.develop.debuggerPort              = -- TODO: needs localisation
-'Listen port of debugger.'
-config.develop.debuggerWait              = -- TODO: needs localisation
-'Suspend before debugger connects.'
-config.intelliSense.searchDepth          = -- TODO: needs localisation
-'Set the search depth for IntelliSense. Increasing this value increases accuracy, but decreases performance. Different workspace have different tolerance for this setting. Please adjust it to the appropriate value.'
-config.intelliSense.fastGlobal           = -- TODO: needs localisation
-'In the global variable completion, and view `_G` suspension prompt. This will slightly reduce the accuracy of type speculation, but it will have a significant performance improvement for projects that use a lot of global variables.'
-config.window.statusBar                  = -- TODO: needs localisation
-'Show extension status in status bar.'
-config.window.progressBar                = -- TODO: needs localisation
-'Show progress bar in status bar.'
-config.hint.enable                       = -- TODO: needs localisation
-'Enable inlay hint.'
-config.hint.paramType                    = -- TODO: needs localisation
-'Show type hints at the parameter of the function.'
-config.hint.setType                      = -- TODO: needs localisation
-'Show hints of type at assignment operation.'
-config.hint.paramName                    = -- TODO: needs localisation
-'Show hints of parameter name at the function call.'
-config.hint.paramName.All                = -- TODO: needs localisation
-'All types of parameters are shown.'
-config.hint.paramName.Literal            = -- TODO: needs localisation
-'Only literal type parameters are shown.'
-config.hint.paramName.Disable            = -- TODO: needs localisation
-'Disable parameter hints.'
-config.hint.arrayIndex                   = -- TODO: needs localisation
-'Show hints of array index when constructing a table.'
-config.hint.arrayIndex.Enable            = -- TODO: needs localisation
-'Show hints in all tables.'
-config.hint.arrayIndex.Auto              = -- TODO: needs localisation
-'Show hints only when the table is greater than 3 items, or the table is a mixed table.'
-config.hint.arrayIndex.Disable           = -- TODO: needs localisation
-'Disable hints of array index.'
-config.hint.await                        = -- TODO: needs localisation
+config.develop.enable                    =
+'Modo de desarrollador. No debe habilitarlo, el rendimiento se verá afectado.'
+config.develop.debuggerPort              =
+'Puerto en que el depurador escucha.'
+config.develop.debuggerWait              =
+'Suspender después de que el depurador se conecte.'
+config.intelliSense.searchDepth          =
+'Fija la profundidad de búsqueda para IntelliSense. El incrementar este valor aumenta la precisión, pero empeora el rendimiento. Diferentes espacios de trabajo tienen diferente tolerancia para esta configuración. Ajústese al valor apropiado.'
+config.intelliSense.fastGlobal           =
+'En la completación de variable global, y entrada de suspensión de vista `_G`. Esto reduce levemente la precisión de la especulación de tipo, pero tiene una mejora de rendimiento notable para proyectos que ocupan harto las variables globales.'
+config.window.statusBar                  =
+'Muestra el estado de la extensión en la barra de estado.'
+config.window.progressBar                =
+'Muestra la barra de progreso en la barra de estado.'
+config.hint.enable                       =
+'Habilita pistas en línea.'
+config.hint.paramType                    =
+'Muestra las pistas de tipo al parámetro de las funciones.'
+config.hint.setType                      =
+'Muestra las pistas de tipo en las asignación.'
+config.hint.paramName                    =
+'Muestra las pistas de tipo en las llamadas a funciones.'
+config.hint.paramName.All                =
+'Se muestran odos los tipos de los parámetros.'
+config.hint.paramName.Literal            =
+'Se muestran solo los parámetros de tipos literales.'
+config.hint.paramName.Disable            =
+'Deshabilita las pistas de los parámetros.'
+config.hint.arrayIndex                   =
+'Muestra las pistas de los índices de arreglos cuando se construye una tabla.'
+config.hint.arrayIndex.Enable            =
+'Muestra las pistas en todas las tablas.'
+config.hint.arrayIndex.Auto              =
+'Muestra las pistas solo cuando la tabla tiene más de 3 ítemes, o cuando la tabla es mixta.'
+config.hint.arrayIndex.Disable           =
+'Deshabilita las pistas en de los índices de arreglos.'
+config.hint.await                        =
 'If the called function is marked `---@async`, prompt `await` at the call.'
 config.hint.semicolon                    = -- TODO: needs localisation
 'If there is no semicolon at the end of the statement, display a virtual semicolon.'

From f32935058a0756dd05593ce42b1d217c90a6f738 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Fri, 21 Mar 2025 15:04:24 -0300
Subject: [PATCH 12/24] some more settings.lua

---
 locale/es-419/setting.lua | 132 +++++++++++++++++++++++++-------------
 1 file changed, 88 insertions(+), 44 deletions(-)

diff --git a/locale/es-419/setting.lua b/locale/es-419/setting.lua
index 03f335b7d..edab71498 100644
--- a/locale/es-419/setting.lua
+++ b/locale/es-419/setting.lua
@@ -257,189 +257,233 @@ config.hint.arrayIndex.Auto              =
 config.hint.arrayIndex.Disable           =
 'Deshabilita las pistas en de los índices de arreglos.'
 config.hint.await                        =
-'If the called function is marked `---@async`, prompt `await` at the call.'
+'Si la función que se llama está marcada con `---@async`, pregunta por un `await` en la llamada.'
 config.hint.semicolon                    = -- TODO: needs localisation
-'If there is no semicolon at the end of the statement, display a virtual semicolon.'
+'Si no hay punto y coma al final de la sentencia, despliega un punto y coma virtual.'
 config.hint.semicolon.All                = -- TODO: needs localisation
-'All statements display virtual semicolons.'
+'Todas las sentencias con un punto y coma virtual desplegado.'
 config.hint.semicolon.SameLine            = -- TODO: needs localisation
-'When two statements are on the same line, display a semicolon between them.'
+'Cuando dos sentencias están en la misma línea, despliega un punto y coma entre ellas.'
 config.hint.semicolon.Disable            = -- TODO: needs localisation
-'Disable virtual semicolons.'
+'Deshabilita punto y coma virtuales.'
 config.codeLens.enable                   = -- TODO: needs localisation
-'Enable code lens.'
+'Habilita el lente para código.'
 config.format.enable                     = -- TODO: needs localisation
-'Enable code formatter.'
+'Habilita el formateador de código.'
 config.format.defaultConfig              = -- TODO: needs localisation
 [[
-The default format configuration. Has a lower priority than `.editorconfig` file in the workspace.
-Read [formatter docs](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs) to learn usage.
+La configuración de formateo predeterminada. Tiene menor prioridad que el archivo `.editorconfig`
+en el espacio de trabajo.
+Revise [la documentación del formateador](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs)
+para aprender más sobre su uso.
 ]]
 config.spell.dict                        = -- TODO: needs localisation
-'Custom words for spell checking.'
+'Palabras extra para el corrector ortográfico.'
 config.nameStyle.config                  = -- TODO: needs localisation
-'Set name style config'
+'Configuración de estilo para nombres.'
 config.telemetry.enable                  = -- TODO: needs localisation
 [[
-Enable telemetry to send your editor information and error logs over the network. Read our privacy policy [here](https://luals.github.io/privacy/#language-server).
+Habilita la telemetría para enviar información del editor y registros de errores por la red. Lea nuestra política de privacidad [aquí (en inglés)](https://luals.github.io/privacy#language-server).
 ]]
 config.misc.parameters                   = -- TODO: needs localisation
-'[Command line parameters](https://github.com/LuaLS/lua-telemetry-server/tree/master/method) when starting the language server in VSCode.'
+'[Parámetros de la línea de comando](https://github.com/LuaLS/lua-telemetry-server/tree/master/method) para iniciar el servidor de lenguage en VSCode.'
 config.misc.executablePath               = -- TODO: needs localisation
-'Specify the executable path in VSCode.'
+'Especifica la ruta del ejecutable en VSCode.'
 config.language.fixIndent                = -- TODO: needs localisation
-'(VSCode only) Fix incorrect auto-indentation, such as incorrect indentation when line breaks occur within a string containing the word "function."'
+'(Solo en VSCode) Arregla la auto-indentación incorrecta, como aquella cuando los quiebres de línea ocurren dentro de un string que contengan la palabra "function".'
 config.language.completeAnnotation       = -- TODO: needs localisation
-'(VSCode only) Automatically insert "---@ " after a line break following a annotation.'
+'(Solo en VSCode) Inserta automáticamente un "---@ " después de un quiebre de línea que sucede a una anotación.'
 config.type.castNumberToInteger          = -- TODO: needs localisation
-'Allowed to assign the `number` type to the `integer` type.'
+'Se permite asignar el tipo "número" al tipo "entero".'
 config.type.weakUnionCheck               = -- TODO: needs localisation
 [[
-Once one subtype of a union type meets the condition, the union type also meets the condition.
+Una vez que un sub-tipo de un tipo de unión satisface la condición, el tipo de unión también satisface la condición.
 
-When this setting is `false`, the `number|boolean` type cannot be assigned to the `number` type. It can be with `true`.
+Cuando esta configuración es `false`, el tipo `number|boolean` no puede ser asignado al tipo `number`. Solo se puede con `true`.
 ]]
 config.type.weakNilCheck                 = -- TODO: needs localisation
 [[
-When checking the type of union type, ignore the `nil` in it.
+Cuando se revisa el tipo de un tipo de unión, los `nil` dentro son ignorados.
 
-When this setting is `false`, the `number|nil` type cannot be assigned to the `number` type. It can be with `true`.
+Cuando esta configuración es `false`, el tipo `number|nil` no puede ser asignado al tipo `number`. Solo se puede con `true`.
 ]]
 config.type.inferParamType               = -- TODO: needs localisation
 [[
-When a parameter type is not annotated, it is inferred from the function's call sites.
+Cuando un tipo de parámetro no está anotado, se infiere su tipo de los lugares donde la función es llamada.
 
-When this setting is `false`, the type of the parameter is `any` when it is not annotated.
+Cuando esta configuración es `false`, el tipo del parámetro `any` cuando no puede ser anotado.
 ]]
 config.type.checkTableShape              = -- TODO: needs localisation
 [[
-Strictly check the shape of the table.
+Chequea estrictamente la forma de la tabla.
 ]]
 config.doc.privateName                   = -- TODO: needs localisation
-'Treat specific field names as private, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are private, witch can only be accessed in the class where the definition is located.'
+'Trata los nombres específicos de campo como privados. Por ejemplo `m_*` significa `XXX.m_id` y `XXX.m_tipo` son privados, por lo que solo pueden ser accedidos donde se define la clase.'
 config.doc.protectedName                 = -- TODO: needs localisation
-'Treat specific field names as protected, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are protected, witch can only be accessed in the class where the definition is located and its subclasses.'
+'Trata los nombres específicos de campo como protegidos. Por ejemplo `m_*` significa `XXX.m_id` y `XXX.m_tipo` son privados, por lo que solo pueden ser accedidos donde se define la clase y sus subclases.'
 config.doc.packageName                   = -- TODO: needs localisation
-'Treat specific field names as package, e.g. `m_*` means `XXX.m_id` and `XXX.m_type` are package, witch can only be accessed in the file where the definition is located.'
+'Trata los nombres específicos de campo como del paquete. Por ejemplo `m_*` significa `XXX.m_id` y `XXX.m_tipo` son de paquete, por lo que solo pueden ser accedidos en el archivo donde son definidos.'
 config.diagnostics['unused-local']          = -- TODO: needs localisation
-'Enable unused local variable diagnostics.'
+'Habilita el diagnóstico de variables local sin uso.'
 config.diagnostics['unused-function']       = -- TODO: needs localisation
-'Enable unused function diagnostics.'
+'Habilita el diagnóstico funcines sin uso.'
 config.diagnostics['undefined-global']      = -- TODO: needs localisation
-'Enable undefined global variable diagnostics.'
+'Habilita el diagnóstico de variables globales sin definir.'
 config.diagnostics['global-in-nil-env']     = -- TODO: needs localisation
-'Enable cannot use global variables （ `_ENV` is set to `nil`） diagnostics.'
+'Habilita el diagnóstico para la prohibición de uso de variables globales (`_ENV` se fija a `nil`).'
 config.diagnostics['unused-label']          = -- TODO: needs localisation
-'Enable unused label diagnostics.'
+'Habilita el diagnóstico de etiquetas sin uso.'
 config.diagnostics['unused-vararg']         = -- TODO: needs localisation
-'Enable unused vararg diagnostics.'
+'Habilita el diagnóstico de expresión de número variable de argumentos (vararg) sin uso.'
 config.diagnostics['trailing-space']        = -- TODO: needs localisation
-'Enable trailing space diagnostics.'
+'Habilita el diagnóstico de espacios al final de línea.'
 config.diagnostics['redefined-local']       = -- TODO: needs localisation
-'Enable redefined local variable diagnostics.'
+'Habilita el diagnóstico de variables locals redefinidas.'
 config.diagnostics['newline-call']          = -- TODO: needs localisation
-'Enable newline call diagnostics. Is\'s raised when a line starting with `(` is encountered, which is syntactically parsed as a function call on the previous line.'
+'Habilita el diagnóstico de llamadas en línea nueva. Se alza un error en las líneas que comienzan con `(`, lo que se lee sintácticamente como una llamada a la línea anterior.'
 config.diagnostics['newfield-call']         = -- TODO: needs localisation
-'Enable newfield call diagnostics. It is raised when the parenthesis of a function call appear on the following line when defining a field in a table.'
+'Habilita el diagnóstico de campo nuevo en una llamada. Se alza un error cuando los paréntesis de una llamada a una función aparecen en la siguiente línea cuando se define un campo en una tabla.'
 config.diagnostics['redundant-parameter']   = -- TODO: needs localisation
-'Enable redundant function parameter diagnostics.'
+'Habilita el diagnóstico de parámetros redundantes de una función.'
 config.diagnostics['ambiguity-1']           = -- TODO: needs localisation
-'Enable ambiguous operator precedence diagnostics. For example, the `num or 0 + 1` expression will be suggested `(num or 0) + 1` instead.'
+'Habilita el diagnóstico de precedencia de operadores ambiguos. Por ejemplo, ante la expresión `num or 0 + 1` se sugerirrá `(num or 0) + 1`.'
 config.diagnostics['lowercase-global']      = -- TODO: needs localisation
-'Enable lowercase global variable definition diagnostics.'
+'Habilita el diagnóstico de definiciones de variables globacels con minúsculas.'
 config.diagnostics['undefined-env-child']   = -- TODO: needs localisation
-'Enable undefined environment variable diagnostics. It\'s raised when `_ENV` table is set to a new literal table, but the used global variable is no longer present in the global environment.'
+'Habilita el diagnóstico de variables de ambientes sin definir. Se alza un error cuando a la tabla `_ENV` se le asigna una tabla literal nueva, pero la variable global usada no está presente en el ambiente global.'
 config.diagnostics['duplicate-index']       = -- TODO: needs localisation
-'Enable duplicate table index diagnostics.'
+'Habilita el diagnóstico de índices de tabla duplicados.'
 config.diagnostics['empty-block']           = -- TODO: needs localisation
-'Enable empty code block diagnostics.'
+'Habilita el diagnóstico de bloques de código vacíos.'
 config.diagnostics['redundant-value']       = -- TODO: needs localisation
-'Enable the redundant values assigned diagnostics. It\'s raised during assignment operation, when the number of values is higher than the number of objects being assigned.'
+'Habilita el diagnóstico de valores asignados redundantemente. Se alza un error en una asignación, cuando el número de valores es mayor que el número de objetos a los cuales se les asigna.'
 config.diagnostics['assign-type-mismatch']  = -- TODO: needs localisation
 'Enable diagnostics for assignments in which the value\'s type does not match the type of the assigned variable.'
+'Habilita el diagnóstico .'
 config.diagnostics['await-in-sync']         = -- TODO: needs localisation
 'Enable diagnostics for calls of asynchronous functions within a synchronous function.'
+'Habilita el diagnóstico .'
 config.diagnostics['cast-local-type']    = -- TODO: needs localisation
 'Enable diagnostics for casts of local variables where the target type does not match the defined type.'
+'Habilita el diagnóstico .'
 config.diagnostics['cast-type-mismatch']    = -- TODO: needs localisation
 'Enable diagnostics for casts where the target type does not match the initial type.'
+'Habilita el diagnóstico .'
 config.diagnostics['circular-doc-class']    = -- TODO: needs localisation
 'Enable diagnostics for two classes inheriting from each other introducing a circular relation.'
+'Habilita el diagnóstico .'
 config.diagnostics['close-non-object']      = -- TODO: needs localisation
 'Enable diagnostics for attempts to close a variable with a non-object.'
+'Habilita el diagnóstico .'
 config.diagnostics['code-after-break']      = -- TODO: needs localisation
 'Enable diagnostics for code placed after a break statement in a loop.'
+'Habilita el diagnóstico .'
 config.diagnostics['codestyle-check']       = -- TODO: needs localisation
 'Enable diagnostics for incorrectly styled lines.'
+'Habilita el diagnóstico .'
 config.diagnostics['count-down-loop']       = -- TODO: needs localisation
 'Enable diagnostics for `for` loops which will never reach their max/limit because the loop is incrementing instead of decrementing.'
+'Habilita el diagnóstico .'
 config.diagnostics['deprecated']            = -- TODO: needs localisation
 'Enable diagnostics to highlight deprecated API.'
+'Habilita el diagnóstico .'
 config.diagnostics['different-requires']    = -- TODO: needs localisation
 'Enable diagnostics for files which are required by two different paths.'
+'Habilita el diagnóstico .'
 config.diagnostics['discard-returns']       = -- TODO: needs localisation
 'Enable diagnostics for calls of functions annotated with `---@nodiscard` where the return values are ignored.'
+'Habilita el diagnóstico .'
 config.diagnostics['doc-field-no-class']    = -- TODO: needs localisation
 'Enable diagnostics to highlight a field annotation without a defining class annotation.'
+'Habilita el diagnóstico .'
 config.diagnostics['duplicate-doc-alias']   = -- TODO: needs localisation
 'Enable diagnostics for a duplicated alias annotation name.'
+'Habilita el diagnóstico .'
 config.diagnostics['duplicate-doc-field']   = -- TODO: needs localisation
 'Enable diagnostics for a duplicated field annotation name.'
+'Habilita el diagnóstico .'
 config.diagnostics['duplicate-doc-param']   = -- TODO: needs localisation
 'Enable diagnostics for a duplicated param annotation name.'
+'Habilita el diagnóstico .'
 config.diagnostics['duplicate-set-field']   = -- TODO: needs localisation
 'Enable diagnostics for setting the same field in a class more than once.'
+'Habilita el diagnóstico .'
 config.diagnostics['incomplete-signature-doc']    = -- TODO: needs localisation
 'Incomplete @param or @return annotations for functions.'
+'Habilita el diagnóstico .'
 config.diagnostics['invisible']             = -- TODO: needs localisation
 'Enable diagnostics for accesses to fields which are invisible.'
+'Habilita el diagnóstico .'
 config.diagnostics['missing-global-doc']    = -- TODO: needs localisation
 'Missing annotations for globals! Global functions must have a comment and annotations for all parameters and return values.'
+'Habilita el diagnóstico .'
 config.diagnostics['missing-local-export-doc'] = -- TODO: needs localisation
 'Missing annotations for exported locals! Exported local functions must have a comment and annotations for all parameters and return values.'
+'Habilita el diagnóstico .'
 config.diagnostics['missing-parameter']     = -- TODO: needs localisation
 'Enable diagnostics for function calls where the number of arguments is less than the number of annotated function parameters.'
+'Habilita el diagnóstico .'
 config.diagnostics['missing-return']        = -- TODO: needs localisation
 'Enable diagnostics for functions with return annotations which have no return statement.'
+'Habilita el diagnóstico .'
 config.diagnostics['missing-return-value']  = -- TODO: needs localisation
 'Enable diagnostics for return statements without values although the containing function declares returns.'
+'Habilita el diagnóstico .'
 config.diagnostics['need-check-nil']        = -- TODO: needs localisation
 'Enable diagnostics for variable usages if `nil` or an optional (potentially `nil`) value was assigned to the variable before.'
+'Habilita el diagnóstico .'
 config.diagnostics['no-unknown']            = -- TODO: needs localisation
 'Enable diagnostics for cases in which the type cannot be inferred.'
+'Habilita el diagnóstico .'
 config.diagnostics['not-yieldable']         = -- TODO: needs localisation
 'Enable diagnostics for calls to `coroutine.yield()` when it is not permitted.'
+'Habilita el diagnóstico .'
 config.diagnostics['param-type-mismatch']   = -- TODO: needs localisation
 'Enable diagnostics for function calls where the type of a provided parameter does not match the type of the annotated function definition.'
 config.diagnostics['redundant-return']      = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for return statements which are not needed because the function would exit on its own.'
 config.diagnostics['redundant-return-value']= -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for return statements which return an extra value which is not specified by a return annotation.'
 config.diagnostics['return-type-mismatch']  = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for return values whose type does not match the type declared in the corresponding return annotation.'
 config.diagnostics['spell-check']           = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for typos in strings.'
 config.diagnostics['name-style-check']      = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for name style.'
 config.diagnostics['unbalanced-assignments']= -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics on multiple assignments if not all variables obtain a value (e.g., `local x,y = 1`).'
 config.diagnostics['undefined-doc-class']   = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for class annotations in which an undefined class is referenced.'
 config.diagnostics['undefined-doc-name']    = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for type annotations referencing an undefined type or alias.'
 config.diagnostics['undefined-doc-param']   = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for cases in which a parameter annotation is given without declaring the parameter in the function definition.'
 config.diagnostics['undefined-field']       = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for cases in which an undefined field of a variable is read.'
 config.diagnostics['unknown-cast-variable'] = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for casts of undefined variables.'
 config.diagnostics['unknown-diag-code']     = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics in cases in which an unknown diagnostics code is entered.'
 config.diagnostics['unknown-operator']      = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for unknown operators.'
 config.diagnostics['unreachable-code']      = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics for unreachable code.'
 config.diagnostics['global-element']       = -- TODO: needs localisation
+'Habilita el diagnóstico .'
 'Enable diagnostics to warn about global elements.'
 config.typeFormat.config                    = -- TODO: needs localisation
 'Configures the formatting behavior while typing Lua code.'

From 51f4806ade1ae43a0fd3ee92a1cd751a80e1e711 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Fri, 21 Mar 2025 18:19:15 -0300
Subject: [PATCH 13/24] finish setting.lua

---
 locale/es-419/setting.lua | 328 +++++++++++++++++---------------------
 1 file changed, 143 insertions(+), 185 deletions(-)

diff --git a/locale/es-419/setting.lua b/locale/es-419/setting.lua
index edab71498..f7d76480f 100644
--- a/locale/es-419/setting.lua
+++ b/locale/es-419/setting.lua
@@ -258,249 +258,207 @@ config.hint.arrayIndex.Disable           =
 'Deshabilita las pistas en de los índices de arreglos.'
 config.hint.await                        =
 'Si la función que se llama está marcada con `---@async`, pregunta por un `await` en la llamada.'
-config.hint.semicolon                    = -- TODO: needs localisation
+config.hint.semicolon                    =
 'Si no hay punto y coma al final de la sentencia, despliega un punto y coma virtual.'
-config.hint.semicolon.All                = -- TODO: needs localisation
+config.hint.semicolon.All                =
 'Todas las sentencias con un punto y coma virtual desplegado.'
-config.hint.semicolon.SameLine            = -- TODO: needs localisation
+config.hint.semicolon.SameLine            =
 'Cuando dos sentencias están en la misma línea, despliega un punto y coma entre ellas.'
-config.hint.semicolon.Disable            = -- TODO: needs localisation
+config.hint.semicolon.Disable            =
 'Deshabilita punto y coma virtuales.'
-config.codeLens.enable                   = -- TODO: needs localisation
+config.codeLens.enable                   =
 'Habilita el lente para código.'
-config.format.enable                     = -- TODO: needs localisation
+config.format.enable                     =
 'Habilita el formateador de código.'
-config.format.defaultConfig              = -- TODO: needs localisation
+config.format.defaultConfig              =
 [[
 La configuración de formateo predeterminada. Tiene menor prioridad que el archivo `.editorconfig`
 en el espacio de trabajo.
 Revise [la documentación del formateador](https://github.com/CppCXY/EmmyLuaCodeStyle/tree/master/docs)
 para aprender más sobre su uso.
 ]]
-config.spell.dict                        = -- TODO: needs localisation
+config.spell.dict                        =
 'Palabras extra para el corrector ortográfico.'
-config.nameStyle.config                  = -- TODO: needs localisation
+config.nameStyle.config                  =
 'Configuración de estilo para nombres.'
-config.telemetry.enable                  = -- TODO: needs localisation
+config.telemetry.enable                  =
 [[
 Habilita la telemetría para enviar información del editor y registros de errores por la red. Lea nuestra política de privacidad [aquí (en inglés)](https://luals.github.io/privacy#language-server).
 ]]
-config.misc.parameters                   = -- TODO: needs localisation
+config.misc.parameters                   =
 '[Parámetros de la línea de comando](https://github.com/LuaLS/lua-telemetry-server/tree/master/method) para iniciar el servidor de lenguage en VSCode.'
-config.misc.executablePath               = -- TODO: needs localisation
+config.misc.executablePath               =
 'Especifica la ruta del ejecutable en VSCode.'
-config.language.fixIndent                = -- TODO: needs localisation
+config.language.fixIndent                =
 '(Solo en VSCode) Arregla la auto-indentación incorrecta, como aquella cuando los quiebres de línea ocurren dentro de un string que contengan la palabra "function".'
-config.language.completeAnnotation       = -- TODO: needs localisation
+config.language.completeAnnotation       =
 '(Solo en VSCode) Inserta automáticamente un "---@ " después de un quiebre de línea que sucede a una anotación.'
-config.type.castNumberToInteger          = -- TODO: needs localisation
+config.type.castNumberToInteger          =
 'Se permite asignar el tipo "número" al tipo "entero".'
-config.type.weakUnionCheck               = -- TODO: needs localisation
+config.type.weakUnionCheck               =
 [[
 Una vez que un sub-tipo de un tipo de unión satisface la condición, el tipo de unión también satisface la condición.
 
 Cuando esta configuración es `false`, el tipo `number|boolean` no puede ser asignado al tipo `number`. Solo se puede con `true`.
 ]]
-config.type.weakNilCheck                 = -- TODO: needs localisation
+config.type.weakNilCheck                 =
 [[
 Cuando se revisa el tipo de un tipo de unión, los `nil` dentro son ignorados.
 
 Cuando esta configuración es `false`, el tipo `number|nil` no puede ser asignado al tipo `number`. Solo se puede con `true`.
 ]]
-config.type.inferParamType               = -- TODO: needs localisation
+config.type.inferParamType               =
 [[
 Cuando un tipo de parámetro no está anotado, se infiere su tipo de los lugares donde la función es llamada.
 
 Cuando esta configuración es `false`, el tipo del parámetro `any` cuando no puede ser anotado.
 ]]
-config.type.checkTableShape              = -- TODO: needs localisation
+config.type.checkTableShape              =
 [[
 Chequea estrictamente la forma de la tabla.
 ]]
-config.doc.privateName                   = -- TODO: needs localisation
+config.doc.privateName                   =
 'Trata los nombres específicos de campo como privados. Por ejemplo `m_*` significa `XXX.m_id` y `XXX.m_tipo` son privados, por lo que solo pueden ser accedidos donde se define la clase.'
-config.doc.protectedName                 = -- TODO: needs localisation
+config.doc.protectedName                 =
 'Trata los nombres específicos de campo como protegidos. Por ejemplo `m_*` significa `XXX.m_id` y `XXX.m_tipo` son privados, por lo que solo pueden ser accedidos donde se define la clase y sus subclases.'
-config.doc.packageName                   = -- TODO: needs localisation
+config.doc.packageName                   =
 'Trata los nombres específicos de campo como del paquete. Por ejemplo `m_*` significa `XXX.m_id` y `XXX.m_tipo` son de paquete, por lo que solo pueden ser accedidos en el archivo donde son definidos.'
-config.diagnostics['unused-local']          = -- TODO: needs localisation
+config.diagnostics['unused-local']          =
 'Habilita el diagnóstico de variables local sin uso.'
-config.diagnostics['unused-function']       = -- TODO: needs localisation
+config.diagnostics['unused-function']       =
 'Habilita el diagnóstico funcines sin uso.'
-config.diagnostics['undefined-global']      = -- TODO: needs localisation
+config.diagnostics['undefined-global']      =
 'Habilita el diagnóstico de variables globales sin definir.'
-config.diagnostics['global-in-nil-env']     = -- TODO: needs localisation
+config.diagnostics['global-in-nil-env']     =
 'Habilita el diagnóstico para la prohibición de uso de variables globales (`_ENV` se fija a `nil`).'
-config.diagnostics['unused-label']          = -- TODO: needs localisation
+config.diagnostics['unused-label']          =
 'Habilita el diagnóstico de etiquetas sin uso.'
-config.diagnostics['unused-vararg']         = -- TODO: needs localisation
+config.diagnostics['unused-vararg']         =
 'Habilita el diagnóstico de expresión de número variable de argumentos (vararg) sin uso.'
-config.diagnostics['trailing-space']        = -- TODO: needs localisation
+config.diagnostics['trailing-space']        =
 'Habilita el diagnóstico de espacios al final de línea.'
-config.diagnostics['redefined-local']       = -- TODO: needs localisation
+config.diagnostics['redefined-local']       =
 'Habilita el diagnóstico de variables locals redefinidas.'
-config.diagnostics['newline-call']          = -- TODO: needs localisation
+config.diagnostics['newline-call']          =
 'Habilita el diagnóstico de llamadas en línea nueva. Se alza un error en las líneas que comienzan con `(`, lo que se lee sintácticamente como una llamada a la línea anterior.'
-config.diagnostics['newfield-call']         = -- TODO: needs localisation
+config.diagnostics['newfield-call']         =
 'Habilita el diagnóstico de campo nuevo en una llamada. Se alza un error cuando los paréntesis de una llamada a una función aparecen en la siguiente línea cuando se define un campo en una tabla.'
-config.diagnostics['redundant-parameter']   = -- TODO: needs localisation
+config.diagnostics['redundant-parameter']   =
 'Habilita el diagnóstico de parámetros redundantes de una función.'
-config.diagnostics['ambiguity-1']           = -- TODO: needs localisation
+config.diagnostics['ambiguity-1']           =
 'Habilita el diagnóstico de precedencia de operadores ambiguos. Por ejemplo, ante la expresión `num or 0 + 1` se sugerirrá `(num or 0) + 1`.'
-config.diagnostics['lowercase-global']      = -- TODO: needs localisation
+config.diagnostics['lowercase-global']      =
 'Habilita el diagnóstico de definiciones de variables globacels con minúsculas.'
-config.diagnostics['undefined-env-child']   = -- TODO: needs localisation
+config.diagnostics['undefined-env-child']   =
 'Habilita el diagnóstico de variables de ambientes sin definir. Se alza un error cuando a la tabla `_ENV` se le asigna una tabla literal nueva, pero la variable global usada no está presente en el ambiente global.'
-config.diagnostics['duplicate-index']       = -- TODO: needs localisation
+config.diagnostics['duplicate-index']       =
 'Habilita el diagnóstico de índices de tabla duplicados.'
-config.diagnostics['empty-block']           = -- TODO: needs localisation
+config.diagnostics['empty-block']           =
 'Habilita el diagnóstico de bloques de código vacíos.'
-config.diagnostics['redundant-value']       = -- TODO: needs localisation
+config.diagnostics['redundant-value']       =
 'Habilita el diagnóstico de valores asignados redundantemente. Se alza un error en una asignación, cuando el número de valores es mayor que el número de objetos a los cuales se les asigna.'
-config.diagnostics['assign-type-mismatch']  = -- TODO: needs localisation
-'Enable diagnostics for assignments in which the value\'s type does not match the type of the assigned variable.'
-'Habilita el diagnóstico .'
-config.diagnostics['await-in-sync']         = -- TODO: needs localisation
-'Enable diagnostics for calls of asynchronous functions within a synchronous function.'
-'Habilita el diagnóstico .'
-config.diagnostics['cast-local-type']    = -- TODO: needs localisation
-'Enable diagnostics for casts of local variables where the target type does not match the defined type.'
-'Habilita el diagnóstico .'
-config.diagnostics['cast-type-mismatch']    = -- TODO: needs localisation
-'Enable diagnostics for casts where the target type does not match the initial type.'
-'Habilita el diagnóstico .'
-config.diagnostics['circular-doc-class']    = -- TODO: needs localisation
-'Enable diagnostics for two classes inheriting from each other introducing a circular relation.'
-'Habilita el diagnóstico .'
-config.diagnostics['close-non-object']      = -- TODO: needs localisation
-'Enable diagnostics for attempts to close a variable with a non-object.'
-'Habilita el diagnóstico .'
-config.diagnostics['code-after-break']      = -- TODO: needs localisation
-'Enable diagnostics for code placed after a break statement in a loop.'
-'Habilita el diagnóstico .'
-config.diagnostics['codestyle-check']       = -- TODO: needs localisation
-'Enable diagnostics for incorrectly styled lines.'
-'Habilita el diagnóstico .'
-config.diagnostics['count-down-loop']       = -- TODO: needs localisation
-'Enable diagnostics for `for` loops which will never reach their max/limit because the loop is incrementing instead of decrementing.'
-'Habilita el diagnóstico .'
-config.diagnostics['deprecated']            = -- TODO: needs localisation
-'Enable diagnostics to highlight deprecated API.'
-'Habilita el diagnóstico .'
-config.diagnostics['different-requires']    = -- TODO: needs localisation
-'Enable diagnostics for files which are required by two different paths.'
-'Habilita el diagnóstico .'
-config.diagnostics['discard-returns']       = -- TODO: needs localisation
-'Enable diagnostics for calls of functions annotated with `---@nodiscard` where the return values are ignored.'
-'Habilita el diagnóstico .'
-config.diagnostics['doc-field-no-class']    = -- TODO: needs localisation
-'Enable diagnostics to highlight a field annotation without a defining class annotation.'
-'Habilita el diagnóstico .'
-config.diagnostics['duplicate-doc-alias']   = -- TODO: needs localisation
-'Enable diagnostics for a duplicated alias annotation name.'
-'Habilita el diagnóstico .'
-config.diagnostics['duplicate-doc-field']   = -- TODO: needs localisation
-'Enable diagnostics for a duplicated field annotation name.'
-'Habilita el diagnóstico .'
-config.diagnostics['duplicate-doc-param']   = -- TODO: needs localisation
-'Enable diagnostics for a duplicated param annotation name.'
-'Habilita el diagnóstico .'
-config.diagnostics['duplicate-set-field']   = -- TODO: needs localisation
-'Enable diagnostics for setting the same field in a class more than once.'
-'Habilita el diagnóstico .'
-config.diagnostics['incomplete-signature-doc']    = -- TODO: needs localisation
-'Incomplete @param or @return annotations for functions.'
-'Habilita el diagnóstico .'
-config.diagnostics['invisible']             = -- TODO: needs localisation
-'Enable diagnostics for accesses to fields which are invisible.'
-'Habilita el diagnóstico .'
-config.diagnostics['missing-global-doc']    = -- TODO: needs localisation
-'Missing annotations for globals! Global functions must have a comment and annotations for all parameters and return values.'
-'Habilita el diagnóstico .'
-config.diagnostics['missing-local-export-doc'] = -- TODO: needs localisation
-'Missing annotations for exported locals! Exported local functions must have a comment and annotations for all parameters and return values.'
-'Habilita el diagnóstico .'
-config.diagnostics['missing-parameter']     = -- TODO: needs localisation
-'Enable diagnostics for function calls where the number of arguments is less than the number of annotated function parameters.'
-'Habilita el diagnóstico .'
-config.diagnostics['missing-return']        = -- TODO: needs localisation
-'Enable diagnostics for functions with return annotations which have no return statement.'
-'Habilita el diagnóstico .'
-config.diagnostics['missing-return-value']  = -- TODO: needs localisation
-'Enable diagnostics for return statements without values although the containing function declares returns.'
-'Habilita el diagnóstico .'
-config.diagnostics['need-check-nil']        = -- TODO: needs localisation
-'Enable diagnostics for variable usages if `nil` or an optional (potentially `nil`) value was assigned to the variable before.'
-'Habilita el diagnóstico .'
-config.diagnostics['no-unknown']            = -- TODO: needs localisation
-'Enable diagnostics for cases in which the type cannot be inferred.'
-'Habilita el diagnóstico .'
-config.diagnostics['not-yieldable']         = -- TODO: needs localisation
-'Enable diagnostics for calls to `coroutine.yield()` when it is not permitted.'
-'Habilita el diagnóstico .'
-config.diagnostics['param-type-mismatch']   = -- TODO: needs localisation
-'Enable diagnostics for function calls where the type of a provided parameter does not match the type of the annotated function definition.'
-config.diagnostics['redundant-return']      = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for return statements which are not needed because the function would exit on its own.'
-config.diagnostics['redundant-return-value']= -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for return statements which return an extra value which is not specified by a return annotation.'
-config.diagnostics['return-type-mismatch']  = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for return values whose type does not match the type declared in the corresponding return annotation.'
-config.diagnostics['spell-check']           = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for typos in strings.'
-config.diagnostics['name-style-check']      = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for name style.'
-config.diagnostics['unbalanced-assignments']= -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics on multiple assignments if not all variables obtain a value (e.g., `local x,y = 1`).'
-config.diagnostics['undefined-doc-class']   = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for class annotations in which an undefined class is referenced.'
-config.diagnostics['undefined-doc-name']    = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for type annotations referencing an undefined type or alias.'
-config.diagnostics['undefined-doc-param']   = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for cases in which a parameter annotation is given without declaring the parameter in the function definition.'
-config.diagnostics['undefined-field']       = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for cases in which an undefined field of a variable is read.'
-config.diagnostics['unknown-cast-variable'] = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for casts of undefined variables.'
-config.diagnostics['unknown-diag-code']     = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics in cases in which an unknown diagnostics code is entered.'
-config.diagnostics['unknown-operator']      = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for unknown operators.'
-config.diagnostics['unreachable-code']      = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics for unreachable code.'
-config.diagnostics['global-element']       = -- TODO: needs localisation
-'Habilita el diagnóstico .'
-'Enable diagnostics to warn about global elements.'
-config.typeFormat.config                    = -- TODO: needs localisation
-'Configures the formatting behavior while typing Lua code.'
-config.typeFormat.config.auto_complete_end  = -- TODO: needs localisation
-'Controls if `end` is automatically completed at suitable positions.'
-config.typeFormat.config.auto_complete_table_sep = -- TODO: needs localisation
-'Controls if a separator is automatically appended at the end of a table declaration.'
-config.typeFormat.config.format_line        = -- TODO: needs localisation
-'Controls if a line is formatted at all.'
+config.diagnostics['assign-type-mismatch']  =
+'Habilita el diagnóstico para asignaciones en las cuales el valor del tipo no calza con el tipo de la variable siendo asignada.'
+config.diagnostics['await-in-sync']         =
+'Habilita el diagnóstico para llamadas a funciones asíncronas dentro de una función síncrona.'
+config.diagnostics['cast-local-type']    =
+'Habilita el diagnóstico para conversión de tipos de variables locales donde el tipo objetivo no calza con el tipo definido.'
+config.diagnostics['cast-type-mismatch']    =
+'Habilita el diagnóstico para conversiones de tipos donde el tipo objetivo no calza con el tipo inicial.'
+config.diagnostics['circular-doc-class']    =
+'Habilita el diagnóstico para pares de clases que heredan una de la otra, introduciendo una relación circular.'
+config.diagnostics['close-non-object']      =
+'Habilita el diagnóstico para intentos de cerra una variable con un no-objeto.'
+config.diagnostics['code-after-break']      =
+'Habilita el diagnóstico para el código que viene después de un `break` en un bucle.'
+config.diagnostics['codestyle-check']       =
+'Habilita el diagnóstico para líneas formateadas incorrectamente.'
+config.diagnostics['count-down-loop']       =
+'Habilita el diagnóstico para bucles `for` en los cuales nunca se alcanza su máximo o límite por que el bucle es incremental en vez de decremental.'
+config.diagnostics['deprecated']            =
+'Habilita el diagnóstico para resaltar APIs obsoletas.'
+config.diagnostics['different-requires']    =
+'Habilita el diagnóstico para archivos que son requeridos con dos rutas distintas.'
+config.diagnostics['discard-returns']       =
+'Habilita el diagnóstico para llamadas de funciones anotadas con `---@nodiscard` en las cuales se ignore los valores retornados.'
+config.diagnostics['doc-field-no-class']    =
+'Habilita el diagnóstico para resaltar una anotación de campo sin una anotación de clase que lo defina.'
+config.diagnostics['duplicate-doc-alias']   =
+'Habilita el diagnóstico para nombres de alias duplicados en una anotación.'
+config.diagnostics['duplicate-doc-field']   =
+'Habilita el diagnóstico para nombres de campo duplicados en una anotación.'
+config.diagnostics['duplicate-doc-param']   =
+'Habilita el diagnóstico para nombres de parámetros duplicados en una anotación.'
+config.diagnostics['duplicate-set-field']   =
+'Habilita el diagnóstico para cuando se asigna el mismo campo en una clase más de una vez.'
+config.diagnostics['incomplete-signature-doc']    =
+'Habilita el diagnóstico para anotaciones @param o @return incompletas para funciones.'
+config.diagnostics['invisible']             =
+'Habilita el diagnóstico para accesos a campos que son invisibles.'
+config.diagnostics['missing-global-doc']    =
+'Habilita el diagnóstico para globales faltantes. Las funciones globales deben tener un comentario y anotaciones para todos sus parámetros y valores retornados.'
+config.diagnostics['missing-local-export-doc'] =
+'Habilita el diagnóstico para locales exportadas. Las funciones locales deben tener un comentario y anotaciones para todos sus parámetros y valores retornados.'
+config.diagnostics['missing-parameter']     =
+'Habilita el diagnóstico para llamados de funciones donde el número de argumentos es menore que el número de parámetros anotados de la función.'
+config.diagnostics['missing-return']        =
+'Habilita el diagnóstico para para funciones con anotaciones de retorno que no tienen la expresión `return …`.'
+config.diagnostics['missing-return-value']  =
+'Habilita el diagnóstico para expresiones `return …` sin valores aunque la función que la contiene declare retornos.'
+config.diagnostics['need-check-nil']        =
+'Habilita el diagnóstico para usos de variables si `nil` o un valor opcional (potencialmente `nil`) haya sido asignado a la variable anteriormente.'
+config.diagnostics['no-unknown']            =
+'Habilita el diagnóstico para los casos en que el tipo no puede ser inferido.'
+config.diagnostics['not-yieldable']         =
+'Habilita el diagnóstico para llamadas a `coroutine.yield()` cuando no esté permitido.'
+config.diagnostics['param-type-mismatch']   =
+'Habilita el diagnóstico para llamadas a funciones donde el tipo de un parámetro provisto no calza con el tipo de la definición anotado de la función.'
+config.diagnostics['redundant-return']      =
+'Habilita el diagnóstico para sentencias de retorno que no son necesarias porque la función terminaría de igual manera.'
+config.diagnostics['redundant-return-value']=
+'Habilita el diagnóstico para sentencias de retorno que retornan un valor extra que no fue especificado por una anotación de retorno.'
+config.diagnostics['return-type-mismatch']  =
+'Habilita el diagnóstico para valores retornados cuyo tipo no calza con el tipo declarado en la anotación correspondiente de la función.'
+config.diagnostics['spell-check']           =
+'Habilita el diagnóstico para errores tipográficos en strings.'
+config.diagnostics['name-style-check']      =
+'Habilita el diagnóstico para el estilo de nombres.'
+config.diagnostics['unbalanced-assignments']=
+'Habilita el diagnóstico para asignaciones múltiplies si no todas las variables obtienen un valor (por ejemplo, `local x,y = 1`).'
+config.diagnostics['undefined-doc-class']   =
+'Habilita el diagnóstico para las anotaciones de clase en las cuales una clase sin definir es referenciada.'
+config.diagnostics['undefined-doc-name']    =
+'Habilita el diagnóstico para anotaciones de tipo que referencian a un tipo o alias sin definir.'
+config.diagnostics['undefined-doc-param']   =
+'Habilita el diagnóstico para casos en que una anotación de parámetro es dado sin declarar el parámetro en la definición de la función.'
+config.diagnostics['undefined-field']       =
+'Habilita el diagnóstico para los casos en que se lee un campo sin definir de una variable.'
+config.diagnostics['unknown-cast-variable'] =
+'Habilita el diagnóstico para conversiones de tipo de variables sin definir.'
+config.diagnostics['unknown-diag-code']     =
+'Habilita el diagnóstico para los casos en que un código desconocido de diagnóstico es ingresado.'
+config.diagnostics['unknown-operator']      =
+'Habilita el diagnóstico para operadores desconocidos.'
+config.diagnostics['unreachable-code']      =
+'Habilita el diagnóstico para código inalcanzable.'
+config.diagnostics['global-element']       =
+'Habilita el diagnóstico que alerta sobre elementos globales.'
+config.typeFormat.config                    =
+'Configura el comportamiento del formateo mientras se tipea código Lua.'
+config.typeFormat.config.auto_complete_end  =
+'Controla si se completa automáticamente con `end` en las posiciones correspondientes.'
+config.typeFormat.config.auto_complete_table_sep =
+'Controla si se agrega automáticamente un separador al final de la declaración de una tabla.'
+config.typeFormat.config.format_line        =
+'Controla si una línea se formatea'
 
-command.exportDocument = -- TODO: needs localisation
-'Lua: Export Document ...'
-command.addon_manager.open = -- TODO: needs localisation
-'Lua: Open Addon Manager ...'
-command.reloadFFIMeta = -- TODO: needs localisation
-'Lua: Reload luajit ffi meta'
-command.startServer = -- TODO: needs localisation
-'Lua: (debug) Start Language Server'
-command.stopServer = -- TODO: needs localisation
-'Lua: (debug) Stop Language Server'
+command.exportDocument =
+'Lua: Exporta Documento ...'
+command.addon_manager.open =
+'Lua: Abre el Manejador de Extensiones ...'
+command.reloadFFIMeta =
+'Lua: Recarga meta de ffi para luajit'
+command.startServer =
+'Lua: (debug) Carga el Servidor de Lenguaje'
+command.stopServer =
+'Lua: (debug) Detén el Servidor de Lenguaje'

From d3c7663a1237ff38bf23e100833aad0811206a96 Mon Sep 17 00:00:00 2001
From: Felipe Lema <felipelema@mortemale.org>
Date: Sat, 22 Mar 2025 15:14:24 -0300
Subject: [PATCH 14/24] add myself to changelog

---
 changelog.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/changelog.md b/changelog.md
index 7c92fd523..d75397a10 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,7 @@
 
 ## Unreleased
 <!-- Add all new changes here. They will be moved under a version at release -->
+* `NEW` locale `es-419`, thanks [Felipe Lema](https://codeberg.org/FelipeLema)
 
 ## 3.13.9
 `2025-3-13`

From 1c285e095ec750b5ebfd3e5b1e6e1cb2b54aa798 Mon Sep 17 00:00:00 2001
From: Riley Bruins <ribru17@hotmail.com>
Date: Fri, 21 Mar 2025 15:48:34 -0700
Subject: [PATCH 15/24] Diagnostics for unnecessary assert

---
 changelog.md                                  |  2 +
 locale/en-us/script.lua                       |  2 +
 locale/en-us/setting.lua                      |  2 +
 locale/ja-jp/script.lua                       |  2 +
 locale/ja-jp/setting.lua                      |  2 +
 locale/pt-br/script.lua                       |  2 +
 locale/pt-br/setting.lua                      |  2 +
 locale/zh-cn/script.lua                       |  2 +
 locale/zh-cn/setting.lua                      |  2 +
 locale/zh-tw/script.lua                       |  2 +
 locale/zh-tw/setting.lua                      |  2 +
 .../core/diagnostics/unnecessary-assert.lua   | 29 ++++++++++
 script/proto/diagnostic.lua                   |  1 +
 script/vm/node.lua                            | 26 +++++++++
 test/diagnostics/init.lua                     |  1 +
 test/diagnostics/unnecessary-assert.lua       | 56 +++++++++++++++++++
 16 files changed, 135 insertions(+)
 create mode 100644 script/core/diagnostics/unnecessary-assert.lua
 create mode 100644 test/diagnostics/unnecessary-assert.lua

diff --git a/changelog.md b/changelog.md
index 7c92fd523..8320194ff 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,8 @@
 
 ## Unreleased
 <!-- Add all new changes here. They will be moved under a version at release -->
+`2025-3-13`
+* `NEW` `unnecessary-assert` diagnostic warns when asserting values that are always truthy
 
 ## 3.13.9
 `2025-3-13`
diff --git a/locale/en-us/script.lua b/locale/en-us/script.lua
index ee96900c7..82ac431bc 100644
--- a/locale/en-us/script.lua
+++ b/locale/en-us/script.lua
@@ -36,6 +36,8 @@ DIAG_OVER_MAX_ARGS      =
 'This function expects a maximum of {:d} argument(s) but instead it is receiving {:d}.'
 DIAG_MISS_ARGS          =
 'This function requires {:d} argument(s) but instead it is receiving {:d}.'
+DIAG_UNNECESSARY_ASSERT =
+'Unnecessary assert: this expression is always truthy.'
 DIAG_OVER_MAX_VALUES    =
 'Only has {} variables, but you set {} values.'
 DIAG_AMBIGUITY_1        =
diff --git a/locale/en-us/setting.lua b/locale/en-us/setting.lua
index 095673f86..e0ca458b8 100644
--- a/locale/en-us/setting.lua
+++ b/locale/en-us/setting.lua
@@ -406,6 +406,8 @@ config.diagnostics['missing-return-value']  =
 'Enable diagnostics for return statements without values although the containing function declares returns.'
 config.diagnostics['need-check-nil']        =
 'Enable diagnostics for variable usages if `nil` or an optional (potentially `nil`) value was assigned to the variable before.'
+config.diagnostics['unnecessary-assert']    =
+'Enable diagnostics for redundant assertions on truthy values.'
 config.diagnostics['no-unknown']            =
 'Enable diagnostics for cases in which the type cannot be inferred.'
 config.diagnostics['not-yieldable']         =
diff --git a/locale/ja-jp/script.lua b/locale/ja-jp/script.lua
index 6e1819d98..12fb50f65 100644
--- a/locale/ja-jp/script.lua
+++ b/locale/ja-jp/script.lua
@@ -36,6 +36,8 @@ DIAG_OVER_MAX_ARGS      =
 'この関数は最大で {:d} 個の引数を受け取りますが、{:d} 個の引数が渡されています。'
 DIAG_MISS_ARGS          =
 'この関数は少なくとも {:d} 個の引数を必要としますが、{:d} 個しか渡されていません。'
+DIAG_UNNECESSARY_ASSERT =
+'不要なアサーション: この式は常に真です。'
 DIAG_OVER_MAX_VALUES    =
 '変数は {} 個しかありませんが、{} 個の値が設定されています。'
 DIAG_AMBIGUITY_1        =
diff --git a/locale/ja-jp/setting.lua b/locale/ja-jp/setting.lua
index a522ff944..a8c307324 100644
--- a/locale/ja-jp/setting.lua
+++ b/locale/ja-jp/setting.lua
@@ -406,6 +406,8 @@ config.diagnostics['missing-return-value']  = -- TODO: need translate!
 'Enable diagnostics for return statements without values although the containing function declares returns.'
 config.diagnostics['need-check-nil']        = -- TODO: need translate!
 'Enable diagnostics for variable usages if `nil` or an optional (potentially `nil`) value was assigned to the variable before.'
+config.diagnostics['unnecessary-assert']    = -- TODO: need translate!
+'Enable diagnostics for redundant assertions on truthy values.'
 config.diagnostics['no-unknown']            = -- TODO: need translate!
 'Enable diagnostics for cases in which the type cannot be inferred.'
 config.diagnostics['not-yieldable']         = -- TODO: need translate!
diff --git a/locale/pt-br/script.lua b/locale/pt-br/script.lua
index 73d459d75..dd1ea689d 100644
--- a/locale/pt-br/script.lua
+++ b/locale/pt-br/script.lua
@@ -36,6 +36,8 @@ DIAG_OVER_MAX_ARGS      =
 'A função aceita apenas os parâmetros {:d}, mas você passou {:d}.'
 DIAG_MISS_ARGS          =
 'A função recebe pelo menos {:d} argumentos, mas há {:d}.'
+DIAG_UNNECESSARY_ASSERT =
+'Asserção desnecessária: esta expressão é sempre verdadeira.'
 DIAG_OVER_MAX_VALUES    =
 'Apenas há {} variáveis, mas você declarou {} valores.'
 DIAG_AMBIGUITY_1        =
diff --git a/locale/pt-br/setting.lua b/locale/pt-br/setting.lua
index ca04fdc08..465b45f27 100644
--- a/locale/pt-br/setting.lua
+++ b/locale/pt-br/setting.lua
@@ -406,6 +406,8 @@ config.diagnostics['missing-return-value']  = -- TODO: need translate!
 'Enable diagnostics for return statements without values although the containing function declares returns.'
 config.diagnostics['need-check-nil']        = -- TODO: need translate!
 'Enable diagnostics for variable usages if `nil` or an optional (potentially `nil`) value was assigned to the variable before.'
+config.diagnostics['unnecessary-assert']    = -- TODO: need translate!
+'Enable diagnostics for redundant assertions on truthy values.'
 config.diagnostics['no-unknown']            = -- TODO: need translate!
 'Enable diagnostics for cases in which the type cannot be inferred.'
 config.diagnostics['not-yieldable']         = -- TODO: need translate!
diff --git a/locale/zh-cn/script.lua b/locale/zh-cn/script.lua
index 22f16eaac..2b1221ce3 100644
--- a/locale/zh-cn/script.lua
+++ b/locale/zh-cn/script.lua
@@ -36,6 +36,8 @@ DIAG_OVER_MAX_ARGS      =
 '函数最多接收 {:d} 个参数，但获得了 {:d} 个。'
 DIAG_MISS_ARGS          =
 '函数最少接收 {:d} 个参数，但获得了 {:d} 个。'
+DIAG_UNNECESSARY_ASSERT =
+'不必要的断言：此表达式始终为真值。'
 DIAG_OVER_MAX_VALUES    =
 '只有 {} 个变量，但你设置了 {} 个值。'
 DIAG_AMBIGUITY_1        =
diff --git a/locale/zh-cn/setting.lua b/locale/zh-cn/setting.lua
index b610ac196..ece1e6191 100644
--- a/locale/zh-cn/setting.lua
+++ b/locale/zh-cn/setting.lua
@@ -404,6 +404,8 @@ config.diagnostics['missing-return-value']  =
 '函数无值返回但函数使用`@return`标记了返回值'
 config.diagnostics['need-check-nil']        =
 '变量之前被赋值为`nil`或可选值(可能为 `nil`)'
+config.diagnostics['unnecessary-assert']    =
+'启用对冗余断言(针对始终为真值的表达式)的诊断'
 config.diagnostics['no-unknown']            =
 '变量的未知类型无法推断'
 config.diagnostics['not-yieldable']         =
diff --git a/locale/zh-tw/script.lua b/locale/zh-tw/script.lua
index 090fb7ff0..e2618f374 100644
--- a/locale/zh-tw/script.lua
+++ b/locale/zh-tw/script.lua
@@ -36,6 +36,8 @@ DIAG_OVER_MAX_ARGS      =
 '函式最多接收 {:d} 個引數，但獲得了 {:d} 個。'
 DIAG_MISS_ARGS          =
 '函式最少接收 {:d} 個引數，但獲得了 {:d} 個。'
+DIAG_UNNECESSARY_ASSERT =
+'不必要的斷言：此表達式始終為真值。'
 DIAG_OVER_MAX_VALUES    =
 '只有 {} 個變數，但你設定了 {} 個值。'
 DIAG_AMBIGUITY_1        =
diff --git a/locale/zh-tw/setting.lua b/locale/zh-tw/setting.lua
index dfb716db8..1bc254aa9 100644
--- a/locale/zh-tw/setting.lua
+++ b/locale/zh-tw/setting.lua
@@ -404,6 +404,8 @@ config.diagnostics['missing-return-value']  = -- TODO: need translate!
 'Enable diagnostics for return statements without values although the containing function declares returns.'
 config.diagnostics['need-check-nil']        = -- TODO: need translate!
 'Enable diagnostics for variable usages if `nil` or an optional (potentially `nil`) value was assigned to the variable before.'
+config.diagnostics['unnecessary-assert']    = -- TODO: need translate!
+'Enable diagnostics for redundant assertions on truthy values.'
 config.diagnostics['no-unknown']            = -- TODO: need translate!
 'Enable diagnostics for cases in which the type cannot be inferred.'
 config.diagnostics['not-yieldable']         = -- TODO: need translate!
diff --git a/script/core/diagnostics/unnecessary-assert.lua b/script/core/diagnostics/unnecessary-assert.lua
new file mode 100644
index 000000000..a72087193
--- /dev/null
+++ b/script/core/diagnostics/unnecessary-assert.lua
@@ -0,0 +1,29 @@
+local files = require 'files'
+local guide = require 'parser.guide'
+local vm    = require 'vm'
+local lang  = require 'language'
+local await = require 'await'
+
+---@async
+return function (uri, callback)
+    local state = files.getState(uri)
+    if not state then
+        return
+    end
+
+    ---@async
+    guide.eachSourceType(state.ast, 'call', function (source)
+        await.delay()
+        local currentFunc = guide.getParentFunction(source)
+        if currentFunc and source.node.special == 'assert' and source.args[1] then
+            local argNode = vm.compileNode(source.args[1])
+            if argNode:alwaysTruthy() then
+                callback {
+                    start   = source.node.start,
+                    finish  = source.node.finish,
+                    message = lang.script('DIAG_UNNECESSARY_ASSERT'),
+                }
+            end
+        end
+    end)
+end
diff --git a/script/proto/diagnostic.lua b/script/proto/diagnostic.lua
index 61b8ff4bd..c17b185c3 100644
--- a/script/proto/diagnostic.lua
+++ b/script/proto/diagnostic.lua
@@ -78,6 +78,7 @@ m.register {
     'cast-type-mismatch',
     'return-type-mismatch',
     'inject-field',
+    'unnecessary-assert',
 } {
     group    = 'type-check',
     severity = 'Warning',
diff --git a/script/vm/node.lua b/script/vm/node.lua
index f1b77513b..599a4ba99 100644
--- a/script/vm/node.lua
+++ b/script/vm/node.lua
@@ -119,6 +119,32 @@ function mt:hasFalsy()
     return false
 end
 
+---Almost an inverse of hasFalsy, but stricter about "any" and "unknown" types.
+---@return boolean
+function mt:alwaysTruthy()
+    if self.optional then
+        return false
+    end
+    if #self == 0 then
+        return false
+    end
+    for _, c in ipairs(self) do
+        if c.type == 'nil'
+        or (c.type == 'global' and c.cate == 'type' and c.name == 'nil')
+        or (c.type == 'global' and c.cate == 'type' and c.name == 'false')
+        or (c.type == 'global' and c.cate == 'type' and c.name == 'any')
+        or (c.type == 'global' and c.cate == 'type' and c.name == 'boolean')
+        or (c.type == 'global' and c.cate == 'type' and c.name == 'doc.type.boolean')
+        or (c.type == 'global' and c.cate == 'type' and c.name == 'unknown')
+        or not self:hasKnownType()
+        or (c.type == 'boolean' and c[1] == false)
+        or (c.type == 'doc.type.boolean' and c[1] == false) then
+            return false
+        end
+    end
+    return true
+end
+
 ---@return boolean
 function mt:hasKnownType()
     for _, c in ipairs(self) do
diff --git a/test/diagnostics/init.lua b/test/diagnostics/init.lua
index 99a5dc248..e2961d8fb 100644
--- a/test/diagnostics/init.lua
+++ b/test/diagnostics/init.lua
@@ -100,6 +100,7 @@ check 'missing-parameter'
 check 'missing-return-value'
 check 'missing-return'
 check 'need-check-nil'
+check 'unnecessary-assert'
 check 'newfield-call'
 check 'newline-call'
 check 'not-yieldable'
diff --git a/test/diagnostics/unnecessary-assert.lua b/test/diagnostics/unnecessary-assert.lua
new file mode 100644
index 000000000..6e97c6460
--- /dev/null
+++ b/test/diagnostics/unnecessary-assert.lua
@@ -0,0 +1,56 @@
+TEST [[
+local a
+assert(a)
+
+---@type boolean
+local b
+assert(b)
+
+---@type any
+local c
+assert(c)
+
+---@type unknown
+local d
+assert(d)
+
+---@type boolean
+local e
+assert(e)
+
+---@type number?
+local f
+assert(f)
+
+assert(false)
+
+assert(nil and 5)
+
+---@return string?, string?
+local function f() end
+
+assert(f())
+]]
+
+TEST [[
+<!assert!>(true)
+]]
+
+TEST [[
+---@return integer
+local function hi()
+  return 1
+end
+<!assert!>(hi(1))
+]]
+
+TEST [[
+<!assert!>({}, 'hi')
+]]
+
+TEST [[
+---@return string, string?
+local function f() end
+
+<!assert!>(f())
+]]

From 802e13ccac1153c32b90e6f203fa482fff7a603e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= <sumneko@hotmail.com>
Date: Thu, 27 Mar 2025 15:01:32 +0800
Subject: [PATCH 16/24] not support yet

---
 meta/template/string.lua | 1 -
 1 file changed, 1 deletion(-)

diff --git a/meta/template/string.lua b/meta/template/string.lua
index 14e01a7b9..c7c2f915d 100644
--- a/meta/template/string.lua
+++ b/meta/template/string.lua
@@ -149,7 +149,6 @@ function string.sub(s, i, j) end
 ---@param s    string
 ---@param pos? integer
 ---@return any ...
----@return integer offset
 ---@nodiscard
 function string.unpack(fmt, s, pos) end
 

From aa273e3741bb0576d423a5d86461597f97185e42 Mon Sep 17 00:00:00 2001
From: Daniil Leontev <d@leontev.net>
Date: Sun, 30 Mar 2025 16:11:59 +0200
Subject: [PATCH 17/24] fix: return empty response to textDocument/formatting
 if no changes

Do not send "edits" if the content remains unchanged after LSP
formatting. Otherwise, Neovim reports an unsaved buffer even when no
actual changes were made
---
 changelog.md               | 1 +
 script/core/formatting.lua | 4 ++++
 2 files changed, 5 insertions(+)

diff --git a/changelog.md b/changelog.md
index 7c92fd523..893eaaf8b 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,7 @@
 
 ## Unreleased
 <!-- Add all new changes here. They will be moved under a version at release -->
+* `FIX` prevent unnecessary edits by LSP formatting when content did not change
 
 ## 3.13.9
 `2025-3-13`
diff --git a/script/core/formatting.lua b/script/core/formatting.lua
index de7f30ed9..d9fcf4444 100644
--- a/script/core/formatting.lua
+++ b/script/core/formatting.lua
@@ -21,6 +21,10 @@ return function(uri, options)
         return
     end
 
+    if text == formattedText then
+        return
+    end
+
     return {
         {
             start = state.ast.start,

From 5c119b5477e65e08c240f2d194864d5729ef05fd Mon Sep 17 00:00:00 2001
From: Jan-Luca Vettel <janlucavettel@gmx.de>
Date: Sun, 30 Mar 2025 21:08:02 +0200
Subject: [PATCH 18/24] fix: skip calculation of completion items if completion
 is disabled

---
 script/provider/provider.lua | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/script/provider/provider.lua b/script/provider/provider.lua
index 38aa73031..6d3d7d04d 100644
--- a/script/provider/provider.lua
+++ b/script/provider/provider.lua
@@ -618,6 +618,9 @@ m.register 'textDocument/completion' {
     ---@async
     function (params)
         local uri  = files.getRealUri(params.textDocument.uri)
+        if not config.get(uri, 'Lua.completion.enable') then
+            return
+        end
         if not workspace.isReady(uri) then
             return nil
         end

From e1d2b3840a9c49c9c8b39f74388afbffc7241ed9 Mon Sep 17 00:00:00 2001
From: Jan-Luca Vettel <janlucavettel@gmx.de>
Date: Sun, 30 Mar 2025 21:13:51 +0200
Subject: [PATCH 19/24] chore: modify changelog

---
 changelog.md | 1 +
 1 file changed, 1 insertion(+)

diff --git a/changelog.md b/changelog.md
index 7c92fd523..b5b8b74c0 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,7 @@
 
 ## Unreleased
 <!-- Add all new changes here. They will be moved under a version at release -->
+* `FIX` return no completions if completion is disabled
 
 ## 3.13.9
 `2025-3-13`

From 5f2d0c7c59ffe1fa45966e47ef38dbad092a8f0c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= <sumneko@hotmail.com>
Date: Sat, 5 Apr 2025 16:53:14 +0800
Subject: [PATCH 20/24] Optimized the performance of large literal tables
 (e.g., configuration tables).

---
 changelog.md           |  1 +
 script/vm/compiler.lua | 86 +++++++++++++++++++++++++++++++-----------
 2 files changed, 64 insertions(+), 23 deletions(-)

diff --git a/changelog.md b/changelog.md
index 09d06870b..edf61af6c 100644
--- a/changelog.md
+++ b/changelog.md
@@ -6,6 +6,7 @@
 * `NEW` locale `es-419`, thanks [Felipe Lema](https://codeberg.org/FelipeLema)
 * `FIX` prevent unnecessary edits by LSP formatting when content did not change
 * `FIX` return no completions if completion is disabled
+* `FIX` optimized the performance of large literal tables (e.g., configuration tables)
 
 ## 3.13.9
 `2025-3-13`
diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua
index ed56e4508..782ee44ef 100644
--- a/script/vm/compiler.lua
+++ b/script/vm/compiler.lua
@@ -174,36 +174,77 @@ local function searchFieldByGlobalID(suri, source, key, pushResult)
     end
 end
 
-local searchFieldSwitch = util.switch()
-    : case 'table'
-    : call(function (_suri, source, key, pushResult)
-        local hasFiled = false
+local VARARGKEY = {'<VARARGKEY>'}
+local function searchLiteralFieldFromTable(source, key, callback)
+    local cache = source._literalFieldsCache
+    local cache2 = source._literalFieldsCache2
+    if not cache then
+        cache = {}
+        cache2 = {}
+        source._literalFieldsCache = cache
+        source._literalFieldsCache2 = cache2
+
         for _, field in ipairs(source) do
+            local fkey
             if field.type == 'tablefield'
             or field.type == 'tableindex' then
-                local fieldKey = guide.getKeyName(field)
-                if key == vm.ANY
-                or key == fieldKey then
-                    hasFiled = true
-                    pushResult(field)
-                end
+                fkey = guide.getKeyName(field)
             end
             if field.type == 'tableexp' then
-                if key == vm.ANY
-                or key == field.tindex then
-                    hasFiled = true
-                    pushResult(field)
-                end
+                fkey = field.tindex
             end
             if field.type == 'varargs' then
-                if not hasFiled
-                and type(key) == 'number'
-                and key >= 1
-                and math.tointeger(key) then
-                    hasFiled = true
-                    pushResult(field)
+                fkey = VARARGKEY
+            end
+            if fkey ~= nil then
+                if cache[fkey] == nil then
+                    cache[fkey] = field
+                else
+                    if cache2[fkey] == nil then
+                        cache2[fkey] = {}
+                    end
+                    cache2[fkey][#cache2[fkey]+1] = field
                 end
-                if key == vm.ANY then
+            end
+        end
+    end
+    local value = cache[key]
+    if value ~= nil then
+        callback(value)
+        if cache2[key] then
+            for _, field in ipairs(cache2[key]) do
+                callback(field)
+            end
+        end
+        return
+    end
+    if type(key) == 'number'
+    and key >= 1
+    and math.tointeger(key) then
+        value = cache[VARARGKEY]
+    end
+    if value ~= nil then
+        callback(value)
+        if cache2[VARARGKEY] then
+            for _, field in ipairs(cache2[VARARGKEY]) do
+                callback(field)
+            end
+        end
+    end
+end
+
+local searchFieldSwitch = util.switch()
+    : case 'table'
+    : call(function (_suri, source, key, pushResult)
+        if type(key) == 'string'
+        or type(key) == 'number' then
+            searchLiteralFieldFromTable(source, key, pushResult)
+        elseif key == vm.ANY then
+            for _, field in ipairs(source) do
+                if field.type == 'tablefield'
+                or field.type == 'tableindex'
+                or field.type == 'tableexp'
+                or field.type == 'varargs' then
                     pushResult(field)
                 end
             end
@@ -232,7 +273,6 @@ local searchFieldSwitch = util.switch()
                                 local fieldKey = guide.getKeyName(field)
                                 if key == vm.ANY
                                 or key == fieldKey then
-                                    hasFiled = true
                                     pushResult(field)
                                 end
                                 ::CONTINUE::

From f61824f722b7353ffb01be12371a24eb32144a56 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= <sumneko@hotmail.com>
Date: Sat, 5 Apr 2025 17:09:31 +0800
Subject: [PATCH 21/24] optimize

---
 script/vm/compiler.lua | 26 +++++++++++++++-----------
 script/vm/type.lua     |  5 +++--
 2 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua
index 782ee44ef..986e85e2d 100644
--- a/script/vm/compiler.lua
+++ b/script/vm/compiler.lua
@@ -74,7 +74,7 @@ function vm.bindDocs(source)
 end
 
 ---@param source parser.object | vm.variable
----@param key string|vm.global|vm.ANY
+---@param key string|vm.global|vm.ANY|vm.ANYDOC
 ---@param pushResult fun(res: parser.object, markDoc?: boolean)
 local function searchFieldByLocalID(source, key, pushResult)
     local fields
@@ -142,7 +142,7 @@ end
 
 ---@param suri uri
 ---@param source parser.object
----@param key string|vm.global|vm.ANY
+---@param key string|vm.global|vm.ANY|vm.ANYDOC
 ---@param pushResult fun(res: parser.object, markDoc?: boolean)
 local function searchFieldByGlobalID(suri, source, key, pushResult)
     local node = vm.getGlobalNode(source)
@@ -150,7 +150,7 @@ local function searchFieldByGlobalID(suri, source, key, pushResult)
         return
     end
     if node.cate == 'variable' then
-        if key ~= vm.ANY then
+        if key ~= vm.ANY and key ~= vm.ANYDOC then
             if type(key) ~= 'string' then
                 return
             end
@@ -272,6 +272,7 @@ local searchFieldSwitch = util.switch()
                                 end
                                 local fieldKey = guide.getKeyName(field)
                                 if key == vm.ANY
+                                or key == vm.ANYDOC
                                 or key == fieldKey then
                                     pushResult(field)
                                 end
@@ -320,6 +321,7 @@ local searchFieldSwitch = util.switch()
                 for fn in fieldNode:eachObject() do
                     if fn.type == 'global' and fn.cate == 'type' then
                         if key == vm.ANY
+                        or key == vm.ANYDOC
                         or fn.name == 'any'
                         or (fn.name == 'boolean' and type(key) == 'boolean')
                         or (fn.name == 'number'  and type(key) == 'number')
@@ -331,6 +333,7 @@ local searchFieldSwitch = util.switch()
                     or     fn.type == 'doc.type.integer'
                     or     fn.type == 'doc.type.boolean' then
                         if key == vm.ANY
+                        or key == vm.ANYDOC
                         or fn[1] == key then
                             pushResult(field, true)
                         end
@@ -338,7 +341,7 @@ local searchFieldSwitch = util.switch()
                 end
             end
             if fieldKey.type == 'doc.field.name' then
-                if key == vm.ANY or fieldKey[1] == key then
+                if key == vm.ANY or key == vm.ANYDOC or fieldKey[1] == key then
                     pushResult(field, true)
                 end
             end
@@ -358,7 +361,7 @@ local searchFieldSwitch = util.switch()
     : case 'global'
     : call(function (suri, node, key, pushResult)
         if node.cate == 'variable' then
-            if key ~= vm.ANY then
+            if key ~= vm.ANY and key ~= vm.ANYDOC then
                 if type(key) ~= 'string' then
                     return
                 end
@@ -388,7 +391,7 @@ local searchFieldSwitch = util.switch()
 
 ---@param suri uri
 ---@param object vm.global
----@param key string|number|integer|boolean|vm.global|vm.ANY
+---@param key string|number|integer|boolean|vm.global|vm.ANY|vm.ANYDOC
 ---@param pushResult fun(field: vm.object, isMark?: boolean)
 function vm.getClassFields(suri, object, key, pushResult)
     local mark = {}
@@ -418,6 +421,7 @@ function vm.getClassFields(suri, object, key, pushResult)
                     if fieldKey then
                         -- ---@field x boolean -> class.x
                         if key == vm.ANY
+                        or key == vm.ANYDOC
                         or fieldKey == key then
                             if not searchedFields[fieldKey] then
                                 pushResult(field, true)
@@ -426,7 +430,7 @@ function vm.getClassFields(suri, object, key, pushResult)
                         end
                         goto CONTINUE
                     end
-                    if key == vm.ANY then
+                    if key == vm.ANY or key == vm.ANYDOC then
                         pushResult(field, true)
                         goto CONTINUE
                     end
@@ -771,7 +775,7 @@ function vm.bindAs(source)
 end
 
 ---@param source parser.object | vm.variable
----@param key string|vm.global|vm.ANY
+---@param key string|vm.global|vm.ANY|vm.ANYDOC
 ---@return parser.object[] docedResults
 ---@return parser.object[] commonResults
 function vm.getNodesOfParentNode(source, key)
@@ -832,7 +836,7 @@ end
 
 -- 遍历所有字段（按照优先级）
 ---@param source parser.object | vm.variable
----@param key string|vm.global|vm.ANY
+---@param key string|vm.global|vm.ANY|vm.ANYDOC
 ---@param pushResult fun(source: parser.object)
 function vm.compileByParentNode(source, key, pushResult)
     local docedResults, commonResults = vm.getNodesOfParentNode(source, key)
@@ -851,7 +855,7 @@ end
 
 -- 遍历所有字段（无视优先级）
 ---@param source parser.object | vm.variable
----@param key string|vm.global|vm.ANY
+---@param key string|vm.global|vm.ANY|vm.ANYDOC
 ---@param pushResult fun(source: parser.object)
 function vm.compileByParentNodeAll(source, key, pushResult)
     local docedResults, commonResults = vm.getNodesOfParentNode(source, key)
@@ -1724,7 +1728,7 @@ local compilerSwitch = util.switch()
         end
 
         if not hasMarkDoc and source.type == 'tableindex' then
-            vm.compileByParentNode(source.node, vm.ANY, function (src)
+            vm.compileByParentNode(source.node, vm.ANYDOC, function (src)
                 if src.type == 'doc.field'
                 or src.type == 'doc.type.field' then
                     if vm.isSubType(guide.getUri(source), vm.compileNode(source.index), vm.compileNode(src.field or src.name)) then
diff --git a/script/vm/type.lua b/script/vm/type.lua
index 316d957bb..24f095a01 100644
--- a/script/vm/type.lua
+++ b/script/vm/type.lua
@@ -6,8 +6,9 @@ local util      = require 'utility'
 local lang      = require 'language'
 
 ---@class vm.ANY
----@diagnostic disable-next-line: assign-type-mismatch
-vm.ANY = debug.upvalueid(require, 1)
+vm.ANY = {'<VM.ANY>'}
+---@class vm.ANYDOC
+vm.ANYDOC = {'<VM.ANYDOC>'}
 
 ---@alias typecheck.err vm.node.object|string|vm.node
 

From 09900e7daf3a61f073351bf0f30f4b142e739613 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= <sumneko@hotmail.com>
Date: Sat, 5 Apr 2025 17:17:14 +0800
Subject: [PATCH 22/24] too many false alert, disable `unnecessary-assert` for
 now

e.g. `assert(arg[1])`
---
 changelog.md                | 1 -
 script/proto/diagnostic.lua | 2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/changelog.md b/changelog.md
index edf61af6c..ad5a591da 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,7 +2,6 @@
 
 ## Unreleased
 <!-- Add all new changes here. They will be moved under a version at release -->
-* `NEW` `unnecessary-assert` diagnostic warns when asserting values that are always truthy
 * `NEW` locale `es-419`, thanks [Felipe Lema](https://codeberg.org/FelipeLema)
 * `FIX` prevent unnecessary edits by LSP formatting when content did not change
 * `FIX` return no completions if completion is disabled
diff --git a/script/proto/diagnostic.lua b/script/proto/diagnostic.lua
index c17b185c3..72761493e 100644
--- a/script/proto/diagnostic.lua
+++ b/script/proto/diagnostic.lua
@@ -78,7 +78,7 @@ m.register {
     'cast-type-mismatch',
     'return-type-mismatch',
     'inject-field',
-    'unnecessary-assert',
+    --'unnecessary-assert',
 } {
     group    = 'type-check',
     severity = 'Warning',

From 4bd82c96d4df15cb3ac4d7b909196d6678199f2b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= <sumneko@hotmail.com>
Date: Mon, 7 Apr 2025 22:47:48 +0800
Subject: [PATCH 23/24] pass tests

---
 test/diagnostics/unnecessary-assert.lua | 47 +++++++++++++------------
 1 file changed, 25 insertions(+), 22 deletions(-)

diff --git a/test/diagnostics/unnecessary-assert.lua b/test/diagnostics/unnecessary-assert.lua
index 6e97c6460..1d376686b 100644
--- a/test/diagnostics/unnecessary-assert.lua
+++ b/test/diagnostics/unnecessary-assert.lua
@@ -32,25 +32,28 @@ local function f() end
 assert(f())
 ]]
 
-TEST [[
-<!assert!>(true)
-]]
-
-TEST [[
----@return integer
-local function hi()
-  return 1
-end
-<!assert!>(hi(1))
-]]
-
-TEST [[
-<!assert!>({}, 'hi')
-]]
-
-TEST [[
----@return string, string?
-local function f() end
-
-<!assert!>(f())
-]]
+-- Disable for now.
+-- Need resolve `assert(arg[1])`
+
+-- TEST [[
+-- <!assert!>(true)
+-- ]]
+
+-- TEST [[
+-- ---@return integer
+-- local function hi()
+--   return 1
+-- end
+-- <!assert!>(hi(1))
+-- ]]
+
+-- TEST [[
+-- <!assert!>({}, 'hi')
+-- ]]
+
+-- TEST [[
+-- ---@return string, string?
+-- local function f() end
+
+-- <!assert!>(f())
+-- ]]

From 485835e2a89004e1ffc5feb4484dc798a12af69e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= <sumneko@hotmail.com>
Date: Mon, 7 Apr 2025 22:49:34 +0800
Subject: [PATCH 24/24] 3.14.0

---
 changelog.md | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/changelog.md b/changelog.md
index ad5a591da..9388efdbf 100644
--- a/changelog.md
+++ b/changelog.md
@@ -2,6 +2,9 @@
 
 ## Unreleased
 <!-- Add all new changes here. They will be moved under a version at release -->
+
+## 3.14.0
+`2025-4-7`
 * `NEW` locale `es-419`, thanks [Felipe Lema](https://codeberg.org/FelipeLema)
 * `FIX` prevent unnecessary edits by LSP formatting when content did not change
 * `FIX` return no completions if completion is disabled
