|
@@ -82,12 +82,13 @@
|
|
|
# Augusto Hernández <[email protected]>, 2024.
|
|
|
# José Artigas <[email protected]>, 2024.
|
|
|
# Zgtale <[email protected]>, 2024.
|
|
|
+# Juan Matias Olmos <[email protected]>, 2024.
|
|
|
msgid ""
|
|
|
msgstr ""
|
|
|
"Project-Id-Version: Godot Engine class reference\n"
|
|
|
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
|
|
|
-"PO-Revision-Date: 2024-07-17 20:09+0000\n"
|
|
|
-"Last-Translator: Zgtale <zgtale1@hotmail.com>\n"
|
|
|
+"PO-Revision-Date: 2024-07-30 16:40+0000\n"
|
|
|
+"Last-Translator: Juan Matias Olmos <ma7as@protonmail.com>\n"
|
|
|
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
|
|
|
"godot-class-reference/es/>\n"
|
|
|
"Language: es\n"
|
|
@@ -116,7 +117,7 @@ msgid "Other objects"
|
|
|
msgstr "Otros objetos"
|
|
|
|
|
|
msgid "Variant types"
|
|
|
-msgstr "Tipo de variantes"
|
|
|
+msgstr "Tipos de variantes"
|
|
|
|
|
|
msgid "Description"
|
|
|
msgstr "Descripción"
|
|
@@ -415,16 +416,16 @@ msgstr ""
|
|
|
"[code]false[/code], se genera un error. Cuando se ejecuta desde el editor, el "
|
|
|
"proyecto en ejecución también se pausará hasta que lo reanude. Esto se puede "
|
|
|
"utilizar como una forma más fuerte de [method @GlobalScope.push_error] para "
|
|
|
-"informar de errores a los desarrolladores del proyecto o a los usuarios del "
|
|
|
-"complemento.\n"
|
|
|
+"informar de errores a los desarrolladores del proyecto o a los usuarios de la "
|
|
|
+"extensión.\n"
|
|
|
"Se puede mostrar un [param message] opcional además del mensaje genérico "
|
|
|
"\"Assertion failed\". Puede utilizarlo para proporcionar detalles adicionales "
|
|
|
"sobre por qué falló la aserción.\n"
|
|
|
"[b]Advertencia:[/b] Por razones de rendimiento, el código dentro de [method "
|
|
|
-"assert] sólo se ejecuta en construcciones de depuración o cuando se ejecuta "
|
|
|
-"el proyecto desde el editor. No incluya código que tenga efectos secundarios "
|
|
|
-"en una llamada a [method assert]. De lo contrario, el proyecto se comportará "
|
|
|
-"de forma diferente cuando se exporte en modo release.\n"
|
|
|
+"assert] sólo se ejecuta en compilaciones de depuración o cuando se ejecuta el "
|
|
|
+"proyecto desde el editor. No incluya código que tenga efectos secundarios en "
|
|
|
+"una llamada a [method assert]. De lo contrario, el proyecto se comportará de "
|
|
|
+"forma diferente cuando se exporte en modo release.\n"
|
|
|
"[codeblock]\n"
|
|
|
"# Imagina que siempre queremos que la velocidad esté entre 0 y 20.\n"
|
|
|
"var speed = -10\n"
|
|
@@ -433,7 +434,10 @@ msgstr ""
|
|
|
"assert(speed >= 0 and speed < 20) # También puedes combinar las dos "
|
|
|
"sentencias condicionales en una sola comprobación.\n"
|
|
|
"assert(speed < 20, \"el límite de velocidad es 20\") # Muestra un mensaje.\n"
|
|
|
-"[/codeblock]"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Nota:[/b] [method assert] es una palabra clave, no una función. Por lo "
|
|
|
+"tanto, no puede acceder a él como un [Callable] ni usarlo dentro de "
|
|
|
+"expresiones."
|
|
|
|
|
|
msgid ""
|
|
|
"Returns a single character (as a [String]) of the given Unicode code point "
|
|
@@ -536,6 +540,91 @@ msgstr ""
|
|
|
"[b]Nota:[/b] La llamada a esta función desde un [Thread] no está soportada. "
|
|
|
"Si lo hace, devolverá un array vacío."
|
|
|
|
|
|
+msgid ""
|
|
|
+"Returns the passed [param instance] converted to a Dictionary. Can be useful "
|
|
|
+"for serializing.\n"
|
|
|
+"[b]Note:[/b] Cannot be used to serialize objects with built-in scripts "
|
|
|
+"attached or objects allocated within built-in scripts.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"var foo = \"bar\"\n"
|
|
|
+"func _ready():\n"
|
|
|
+" var d = inst_to_dict(self)\n"
|
|
|
+" print(d.keys())\n"
|
|
|
+" print(d.values())\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"Prints out:\n"
|
|
|
+"[codeblock lang=text]\n"
|
|
|
+"[@subpath, @path, foo]\n"
|
|
|
+"[, res://test.gd, bar]\n"
|
|
|
+"[/codeblock]"
|
|
|
+msgstr ""
|
|
|
+"Devuelve la [param instance] pasada, convertida en un Dictionary. Puede ser "
|
|
|
+"útil para serializar.\n"
|
|
|
+"[b]Nota:[/b] No se puede utilizar para serializar objetos con scripts "
|
|
|
+"integrados adjuntos u objetos asignados dentro de scripts integrados.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"var foo = \"bar\"\n"
|
|
|
+"func _ready():\n"
|
|
|
+" var d = inst_to_dict(self)\n"
|
|
|
+" print(d.keys())\n"
|
|
|
+" print(d.values())\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"Imprime:\n"
|
|
|
+"[codeblock lang=text]\n"
|
|
|
+"[@subpath, @path, foo]\n"
|
|
|
+"[, res://test.gd, bar]\n"
|
|
|
+"[/codeblock]"
|
|
|
+
|
|
|
+msgid ""
|
|
|
+"Returns [code]true[/code] if [param value] is an instance of [param type]. "
|
|
|
+"The [param type] value must be one of the following:\n"
|
|
|
+"- A constant from the [enum Variant.Type] enumeration, for example [constant "
|
|
|
+"TYPE_INT].\n"
|
|
|
+"- An [Object]-derived class which exists in [ClassDB], for example [Node].\n"
|
|
|
+"- A [Script] (you can use any class, including inner one).\n"
|
|
|
+"Unlike the right operand of the [code]is[/code] operator, [param type] can be "
|
|
|
+"a non-constant value. The [code]is[/code] operator supports more features "
|
|
|
+"(such as typed arrays). Use the operator instead of this method if you do not "
|
|
|
+"need dynamic type checking.\n"
|
|
|
+"Examples:\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"print(is_instance_of(a, TYPE_INT))\n"
|
|
|
+"print(is_instance_of(a, Node))\n"
|
|
|
+"print(is_instance_of(a, MyClass))\n"
|
|
|
+"print(is_instance_of(a, MyClass.InnerClass))\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Note:[/b] If [param value] and/or [param type] are freed objects (see "
|
|
|
+"[method @GlobalScope.is_instance_valid]), or [param type] is not one of the "
|
|
|
+"above options, this method will raise a runtime error.\n"
|
|
|
+"See also [method @GlobalScope.typeof], [method type_exists], [method Array."
|
|
|
+"is_same_typed] (and other [Array] methods)."
|
|
|
+msgstr ""
|
|
|
+"Devuelve [code]true[/code] si [param valor] es una instancia de [param type]. "
|
|
|
+"El valor de [param type] debe de ser uno de los siguientes:\n"
|
|
|
+"- Una constante de la enumeración [enum Variant.Type], por ejemplo [constant "
|
|
|
+"TYPE_INT].\n"
|
|
|
+"- Una clase derivada de [Object] que exista en [ClassDB], por ejemplo "
|
|
|
+"[Node].\n"
|
|
|
+"- Un [Script] (puedes utilizar cualquier clase, incluyendo una interna).\n"
|
|
|
+"A diferencia del operando derecho del operador [code]is[/code], [param type] "
|
|
|
+"puede ser un valor no constante. El operador [code]is[/code] soporta más "
|
|
|
+"características (como los arrays tipados) y es más eficaz. Utiliza el "
|
|
|
+"operador en vez de este método si no necesitas chequeo de tipificación "
|
|
|
+"dinámico (dynamic type checking).\n"
|
|
|
+"Ejemplos:\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"print(is_instance_of(a, TYPE_INT))\n"
|
|
|
+"print(is_instance_of(a, Node))\n"
|
|
|
+"print(is_instance_of(a, MyClass))\n"
|
|
|
+"print(is_instance_of(a, MyClass.InnerClass))\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Nota:[/b] Si [param value] y/o [param type] son objetos liberados (ver "
|
|
|
+"[method @GlobalScope.is_instance_valid]), o [param type] no es una de las "
|
|
|
+"opciones de arriba, este método lanzará un error de ejecución (runtime "
|
|
|
+"error).\n"
|
|
|
+"Ver también [method @GlobalScope.typeof], [method type_exists], [method Array."
|
|
|
+"is_same_typed] (y otros métodos [Array])."
|
|
|
+
|
|
|
msgid ""
|
|
|
"Returns the length of the given Variant [param var]. The length can be the "
|
|
|
"character count of a [String] or [StringName], the element count of any array "
|
|
@@ -563,6 +652,126 @@ msgstr ""
|
|
|
"len(b) # Devuelve 6\n"
|
|
|
"[/codeblock]"
|
|
|
|
|
|
+msgid ""
|
|
|
+"Returns a [Resource] from the filesystem located at the absolute [param "
|
|
|
+"path]. Unless it's already referenced elsewhere (such as in another script or "
|
|
|
+"in the scene), the resource is loaded from disk on function call, which might "
|
|
|
+"cause a slight delay, especially when loading large scenes. To avoid "
|
|
|
+"unnecessary delays when loading something multiple times, either store the "
|
|
|
+"resource in a variable or use [method preload]. This method is equivalent of "
|
|
|
+"using [method ResourceLoader.load] with [constant ResourceLoader."
|
|
|
+"CACHE_MODE_REUSE].\n"
|
|
|
+"[b]Note:[/b] Resource paths can be obtained by right-clicking on a resource "
|
|
|
+"in the FileSystem dock and choosing \"Copy Path\", or by dragging the file "
|
|
|
+"from the FileSystem dock into the current script.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"# Load a scene called \"main\" located in the root of the project directory "
|
|
|
+"and cache it in a variable.\n"
|
|
|
+"var main = load(\"res://main.tscn\") # main will contain a PackedScene "
|
|
|
+"resource.\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Important:[/b] Relative paths are [i]not[/i] relative to the script "
|
|
|
+"calling this method, instead it is prefixed with [code]\"res://\"[/code]. "
|
|
|
+"Loading from relative paths might not work as expected.\n"
|
|
|
+"This function is a simplified version of [method ResourceLoader.load], which "
|
|
|
+"can be used for more advanced scenarios.\n"
|
|
|
+"[b]Note:[/b] Files have to be imported into the engine first to load them "
|
|
|
+"using this function. If you want to load [Image]s at run-time, you may use "
|
|
|
+"[method Image.load]. If you want to import audio files, you can use the "
|
|
|
+"snippet described in [member AudioStreamMP3.data].\n"
|
|
|
+"[b]Note:[/b] If [member ProjectSettings.editor/export/"
|
|
|
+"convert_text_resources_to_binary] is [code]true[/code], [method @GDScript."
|
|
|
+"load] will not be able to read converted files in an exported project. If you "
|
|
|
+"rely on run-time loading of files present within the PCK, set [member "
|
|
|
+"ProjectSettings.editor/export/convert_text_resources_to_binary] to "
|
|
|
+"[code]false[/code]."
|
|
|
+msgstr ""
|
|
|
+"Carga un [Resource] del sistema de archivos ubicado en la ruta absoluta "
|
|
|
+"[param path]. El recurso es cargado en la llamada al método (a menos que ya "
|
|
|
+"esté referenciado en otro lugar, por ejemplo, en otro script o en la escena), "
|
|
|
+"lo que puede causar un ligero retraso, especialmente al cargar escenas "
|
|
|
+"grandes. Para evitar retrasos innecesarios al cargar algo varias veces, "
|
|
|
+"almacena el recurso en una variable o utiliza precarga [method preload]. Este "
|
|
|
+"método es equivalente a usar [method ResourceLoader.load] con [constant "
|
|
|
+"ResourceLoader.CACHE_MODE_REUSE].\n"
|
|
|
+"[b]Nota:[/b] Las rutas de los recursos pueden obtenerse haciendo clic derecho "
|
|
|
+"sobre un recurso en el panel FileSystem y eligiendo \"Copiar Ruta\" o "
|
|
|
+"arrastrando el archivo desde el panel FileSystem al script.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"# Carga una escena llamada \"main\" ubicada en la raíz del directorio del "
|
|
|
+"proyecto y la almacena en una variable.\n"
|
|
|
+"var main = load(\"res://main.tscn\") # main contendrá un recurso "
|
|
|
+"PackedScene.\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Importante:[/b] Las rutas relativas [i]no[/i] son relativas al script que "
|
|
|
+"llama a este método, sino que se anteponen con [code]\"res://\"[/code]. La "
|
|
|
+"carga desde rutas relativas podría no funcionar como se espera. Este método "
|
|
|
+"es una versión simplificada de [method ResourceLoader.load], el cual puede "
|
|
|
+"ser usado en escenarios más avanzados.\n"
|
|
|
+"[b]Nota:[/b] Los archivos se deben importar primero al motor para cargarlos "
|
|
|
+"utilizando esta función. Si desea cargar [Image]s en tiempo de ejecución, "
|
|
|
+"puede utilizar [method Image.load]. Si desea importar archivos de audio, "
|
|
|
+"puede utilizar el snippet descrito en [member AudioStreamMP3.data].\n"
|
|
|
+"[b]Nota:[/b] Si [member ProjectSettings.editor/export/"
|
|
|
+"convert_text_resources_to_binary] es [code]true[/code], [method @GDScript."
|
|
|
+"load] no podrá leer los archivos convertidos en un proyecto exportado. Si "
|
|
|
+"depende de la carga en tiempo de ejecución de los archivos presentes en el "
|
|
|
+"PCK, configure [member ProjectSettings.editor/export/"
|
|
|
+"convert_text_resources_to_binary] como [code]false[/code]."
|
|
|
+
|
|
|
+msgid ""
|
|
|
+"Returns a [Resource] from the filesystem located at [param path]. During run-"
|
|
|
+"time, the resource is loaded when the script is being parsed. This function "
|
|
|
+"effectively acts as a reference to that resource. Note that this function "
|
|
|
+"requires [param path] to be a constant [String]. If you want to load a "
|
|
|
+"resource from a dynamic/variable path, use [method load].\n"
|
|
|
+"[b]Note:[/b] Resource paths can be obtained by right-clicking on a resource "
|
|
|
+"in the Assets Panel and choosing \"Copy Path\", or by dragging the file from "
|
|
|
+"the FileSystem dock into the current script.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"# Create instance of a scene.\n"
|
|
|
+"var diamond = preload(\"res://diamond.tscn\").instantiate()\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Note:[/b] [method preload] is a keyword, not a function. So you cannot "
|
|
|
+"access it as a [Callable]."
|
|
|
+msgstr ""
|
|
|
+"Devuelve un [Resource] del sistema de archivos ubicado en la ruta [param "
|
|
|
+"path]. En tiempo de ejecución, el recurso se carga durante el análisis "
|
|
|
+"sintáctico del script. Esta función efectivamente actúa como una referencia a "
|
|
|
+"ese recurso. Tenga en cuenta que el método requiere que [param path] sea una "
|
|
|
+"constante [String]. Si desea cargar un recurso de una ruta dinámica/variable, "
|
|
|
+"utilice [method load].\n"
|
|
|
+"[b]Nota:[/b] Las rutas de los recursos se pueden obtener haciendo clic con el "
|
|
|
+"botón derecho del ratón en un recurso del panel FileSystem y eligiendo "
|
|
|
+"\"Copiar Ruta\" o arrastrando el archivo desde el panel al script.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"# Crea la instancia de una escena.\n"
|
|
|
+"var diamante = preload(\"res://diamante.tscn\").instantiate()\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Nota:[/b] [method preload] es una palabra reservada, no una función. Por "
|
|
|
+"lo que no la puedes usar como una [Callable]."
|
|
|
+
|
|
|
+msgid ""
|
|
|
+"Like [method @GlobalScope.print], but includes the current stack frame when "
|
|
|
+"running with the debugger turned on.\n"
|
|
|
+"The output in the console may look like the following:\n"
|
|
|
+"[codeblock lang=text]\n"
|
|
|
+"Test print\n"
|
|
|
+"At: res://test.gd:15:_process()\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Note:[/b] Calling this function from a [Thread] is not supported. Doing so "
|
|
|
+"will instead print the thread ID."
|
|
|
+msgstr ""
|
|
|
+"Igual a [method @GlobalScope.print], pero incluye el frame de pila actual "
|
|
|
+"cuando se ejecuta con el depurador activado.\n"
|
|
|
+"La salida en la consola puede verse de la siguiente forma:\n"
|
|
|
+"[codeblock lang=text]\n"
|
|
|
+"Impresión de prueba\n"
|
|
|
+"At: res://test.gd:15:_process()\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Nota:[/b] No se soporta la llamada a esta función desde un [Thread]. Si lo "
|
|
|
+"hace, se imprimirá el ID del hilo."
|
|
|
+
|
|
|
msgid ""
|
|
|
"Returns [code]true[/code] if the given [Object]-derived class exists in "
|
|
|
"[ClassDB]. Note that [Variant] data types are not registered in [ClassDB].\n"
|
|
@@ -665,6 +874,47 @@ msgstr ""
|
|
|
"Sprite, etc) . Para una mejor claridad, se recomienda usar en su lugar "
|
|
|
"[annotation @export_group] y [annotation @export_subgroup]."
|
|
|
|
|
|
+msgid ""
|
|
|
+"Allows you to set a custom hint, hint string, and usage flags for the "
|
|
|
+"exported property. Note that there's no validation done in GDScript, it will "
|
|
|
+"just pass the parameters to the editor.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"@export_custom(PROPERTY_HINT_NONE, \"suffix:m\") var suffix: Vector3\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Note:[/b] Regardless of the [param usage] value, the [constant "
|
|
|
+"PROPERTY_USAGE_SCRIPT_VARIABLE] flag is always added, as with any explicitly "
|
|
|
+"declared script variable."
|
|
|
+msgstr ""
|
|
|
+"Le permite establecer una sugerencia personalizada, una cadena de sugerencia "
|
|
|
+"e indicadores de uso para la propiedad exportada. Tenga en cuenta que no se "
|
|
|
+"realiza ninguna validación en GDScript, simplemente se pasarán los parámetros "
|
|
|
+"al editor.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"@export_custom(PROPERTY_HINT_NONE, \"suffix:m\") var suffix: Vector3\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Nota:[/b] Independientemente del valor de [param usage], siempre se agrega "
|
|
|
+"el indicador [constant PROPERTY_USAGE_SCRIPT_VARIABLE], como ocurre con "
|
|
|
+"cualquier variable de script declarada explícitamente."
|
|
|
+
|
|
|
+msgid ""
|
|
|
+"Export an integer property as a bit flag field for 3D physics layers. The "
|
|
|
+"widget in the Inspector dock will use the layer names defined in [member "
|
|
|
+"ProjectSettings.layer_names/3d_physics/layer_1].\n"
|
|
|
+"See also [constant PROPERTY_HINT_LAYERS_3D_PHYSICS].\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"@export_flags_3d_physics var physics_layers: int\n"
|
|
|
+"@export_flags_3d_physics var physics_layers_array: Array[int]\n"
|
|
|
+"[/codeblock]"
|
|
|
+msgstr ""
|
|
|
+"Exporta una propiedad entera como un campo de bandera de bits para capas de "
|
|
|
+"física 3D. El widget del panel del Inspector usará los nombres de capa "
|
|
|
+"definidos en [member ProjectSettings.layer_names/3d_physics/layer_1].\n"
|
|
|
+"Vea también [constant PROPERTY_HINT_LAYERS_3D_PHYSICS].\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"@export_flags_3d_physics var physics_layers: int\n"
|
|
|
+"@export_flags_3d_physics var physics_layers_array: Array[int]\n"
|
|
|
+"[/codeblock]"
|
|
|
+
|
|
|
msgid ""
|
|
|
"Define a new group for the following exported properties. This helps to "
|
|
|
"organize properties in the Inspector dock. Groups can be added with an "
|
|
@@ -826,6 +1076,25 @@ msgstr ""
|
|
|
"@onready var character_name: Label = $Label\n"
|
|
|
"[/codeblock]"
|
|
|
|
|
|
+msgid ""
|
|
|
+"Make a script with static variables to not persist after all references are "
|
|
|
+"lost. If the script is loaded again the static variables will revert to their "
|
|
|
+"default values.\n"
|
|
|
+"[b]Note:[/b] As annotations describe their subject, the [annotation "
|
|
|
+"@static_unload] annotation must be placed before the class definition and "
|
|
|
+"inheritance.\n"
|
|
|
+"[b]Warning:[/b] Currently, due to a bug, scripts are never freed, even if "
|
|
|
+"[annotation @static_unload] annotation is used."
|
|
|
+msgstr ""
|
|
|
+"Cree un script con variables estáticas que no persistan después de que se "
|
|
|
+"pierdan todas las referencias. Si el script se carga nuevamente, las "
|
|
|
+"variables estáticas volverán a sus valores predeterminados.\n"
|
|
|
+"[b]Nota:[/b] Como las anotaciones describen su subject, la anotación "
|
|
|
+"[annotation @static_unload] debe colocarse antes de la definición de clase y "
|
|
|
+"la herencia.\n"
|
|
|
+"[b]Advertencia:[/b] Actualmente, debido a un error, los scripts nunca se "
|
|
|
+"liberan, incluso si se usa la anotación [annotation @static_unload]."
|
|
|
+
|
|
|
msgid ""
|
|
|
"Mark the current script as a tool script, allowing it to be loaded and "
|
|
|
"executed by the editor. See [url=$DOCS_URL/tutorials/plugins/"
|
|
@@ -1076,6 +1345,52 @@ msgstr ""
|
|
|
"[b]Nota:[/b] Esta función [i]no[/i] es la misma que [code]int(x)[/code], la "
|
|
|
"cual redondea hacia 0."
|
|
|
|
|
|
+msgid ""
|
|
|
+"Returns the maximum of the given numeric values. This function can take any "
|
|
|
+"number of arguments.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"max(1, 7, 3, -6, 5) # Returns 7\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Note:[/b] When using this on vectors it will [i]not[/i] perform component-"
|
|
|
+"wise maximum, and will pick the largest value when compared using [code]x < "
|
|
|
+"y[/code]. To perform component-wise maximum, use [method Vector2.max], "
|
|
|
+"[method Vector2i.max], [method Vector3.max], [method Vector3i.max], [method "
|
|
|
+"Vector4.max], and [method Vector4i.max]."
|
|
|
+msgstr ""
|
|
|
+"Devuelve el máximo de los valores numéricos dados. Esta función puede tomar "
|
|
|
+"cualquier número de argumentos.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"max(1, 7, 3, -6, 5) # Devuelve 7\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Nota:[/b] Al usarse en vectores, [i]no[/i] calculará el máximo por "
|
|
|
+"componente y elegirá el valor más grande cuando se compare utilizando [code]x "
|
|
|
+"< y[/code]. Para realizar el máximo por componente, use [method Vector2.max], "
|
|
|
+"[method Vector2i.max], [method Vector3.max], [method Vector3i.max], [method "
|
|
|
+"Vector4.max] y [method Vector4i.max]."
|
|
|
+
|
|
|
+msgid ""
|
|
|
+"Returns the minimum of the given numeric values. This function can take any "
|
|
|
+"number of arguments.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"min(1, 7, 3, -6, 5) # Returns -6\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Note:[/b] When using this on vectors it will [i]not[/i] perform component-"
|
|
|
+"wise minimum, and will pick the smallest value when compared using [code]x < "
|
|
|
+"y[/code]. To perform component-wise minimum, use [method Vector2.min], "
|
|
|
+"[method Vector2i.min], [method Vector3.min], [method Vector3i.min], [method "
|
|
|
+"Vector4.min], and [method Vector4i.min]."
|
|
|
+msgstr ""
|
|
|
+"Devuelve el mínimo de los valores numéricos dados. Esta función puede recibir "
|
|
|
+"cualquier número de argumentos.\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"min(1, 7, 3, -6, 5) # Devuelve -6\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Nota:[/b] Al usarlo en vectores, [i]no[/i] calculará el mínimo de cada "
|
|
|
+"componente y elegirá el valor más pequeño cuando se compare utilizando "
|
|
|
+"[code]x < y[/code]. Para realizar el mínimo de cada componente, use [method "
|
|
|
+"Vector2.min], [method Vector2i.min], [method Vector3.min], [method Vector3i."
|
|
|
+"min], [method Vector4.min] y [method Vector4i.min]."
|
|
|
+
|
|
|
msgid ""
|
|
|
"Wraps [param value] between [code]0[/code] and the [param length]. If the "
|
|
|
"limit is reached, the next value the function returns is decreased to the "
|
|
@@ -1111,6 +1426,101 @@ msgstr ""
|
|
|
"pingpong(6.0, 3.0) # Devuelve 0.0\n"
|
|
|
"[/codeblock]"
|
|
|
|
|
|
+msgid ""
|
|
|
+"Converts one or more arguments of any type to string in the best way possible "
|
|
|
+"and prints them to the console.\n"
|
|
|
+"The following BBCode tags are supported: [code]b[/code], [code]i[/code], "
|
|
|
+"[code]u[/code], [code]s[/code], [code]indent[/code], [code]code[/code], "
|
|
|
+"[code]url[/code], [code]center[/code], [code]right[/code], [code]color[/"
|
|
|
+"code], [code]bgcolor[/code], [code]fgcolor[/code].\n"
|
|
|
+"Color tags only support the following named colors: [code]black[/code], "
|
|
|
+"[code]red[/code], [code]green[/code], [code]yellow[/code], [code]blue[/code], "
|
|
|
+"[code]magenta[/code], [code]pink[/code], [code]purple[/code], [code]cyan[/"
|
|
|
+"code], [code]white[/code], [code]orange[/code], [code]gray[/code]. "
|
|
|
+"Hexadecimal color codes are not supported.\n"
|
|
|
+"URL tags only support URLs wrapped by a URL tag, not URLs with a different "
|
|
|
+"title.\n"
|
|
|
+"When printing to standard output, the supported subset of BBCode is converted "
|
|
|
+"to ANSI escape codes for the terminal emulator to display. Support for ANSI "
|
|
|
+"escape codes varies across terminal emulators, especially for italic and "
|
|
|
+"strikethrough. In standard output, [code]code[/code] is represented with "
|
|
|
+"faint text but without any font change. Unsupported tags are left as-is in "
|
|
|
+"standard output.\n"
|
|
|
+"[codeblocks]\n"
|
|
|
+"[gdscript skip-lint]\n"
|
|
|
+"print_rich(\"[color=green][b]Hello world![/b][/color]\") # Prints out \"Hello "
|
|
|
+"world!\" in green with a bold font\n"
|
|
|
+"[/gdscript]\n"
|
|
|
+"[csharp skip-lint]\n"
|
|
|
+"GD.PrintRich(\"[color=green][b]Hello world![/b][/color]\"); // Prints out "
|
|
|
+"\"Hello world!\" in green with a bold font\n"
|
|
|
+"[/csharp]\n"
|
|
|
+"[/codeblocks]\n"
|
|
|
+"[b]Note:[/b] Consider using [method push_error] and [method push_warning] to "
|
|
|
+"print error and warning messages instead of [method print] or [method "
|
|
|
+"print_rich]. This distinguishes them from print messages used for debugging "
|
|
|
+"purposes, while also displaying a stack trace when an error or warning is "
|
|
|
+"printed.\n"
|
|
|
+"[b]Note:[/b] On Windows, only Windows 10 and later correctly displays ANSI "
|
|
|
+"escape codes in standard output.\n"
|
|
|
+"[b]Note:[/b] Output displayed in the editor supports clickable [code skip-"
|
|
|
+"lint][url=address]text[/url][/code] tags. The [code skip-lint][url][/code] "
|
|
|
+"tag's [code]address[/code] value is handled by [method OS.shell_open] when "
|
|
|
+"clicked."
|
|
|
+msgstr ""
|
|
|
+"Convierte uno o más argumentos de cualquier tipo en una cadena de la mejor "
|
|
|
+"manera posible y los imprime en la consola.\n"
|
|
|
+"Se admiten las siguientes etiquetas BBCode: [code]b[/code], [code]i[/code], "
|
|
|
+"[code]u[/code], [code]s[/code], [code]indent[/code], [code]code[/code], "
|
|
|
+"[code]url[/code], [code]center[/code], [code]right[/code], [code]color[/"
|
|
|
+"code], [code]bgcolor[/code], [code]fgcolor[/code].\n"
|
|
|
+"Las etiquetas de color solo admiten los siguientes nombres de colores: "
|
|
|
+"[code]black[/code], [code]red[/code], [code]green[/code], [code]yellow[/"
|
|
|
+"code], [code]blue[/code], [code]magenta[/code], [code]pink[/code], "
|
|
|
+"[code]purple[/code], [code]cyan[/code], [code]white[/code], [code]orange[/"
|
|
|
+"code], [code]gray[/code]. No se cuenta con soporte para códigos de color "
|
|
|
+"hexadecimales.\n"
|
|
|
+"Las etiquetas URL solo admiten URL envueltas por una etiqueta URL, no así URL "
|
|
|
+"con un título diferente.\n"
|
|
|
+"Al imprimir en la salida estándar, el subconjunto compatible de BBCode se "
|
|
|
+"convierte en códigos de escape ANSI para que el emulador de terminal los "
|
|
|
+"muestre. La compatibilidad con los códigos de escape ANSI varía entre los "
|
|
|
+"emuladores de terminal, especialmente para cursiva y tachado. En la salida "
|
|
|
+"estándar, [code]code[/code] se representa con texto tenue pero sin ningún "
|
|
|
+"cambio de fuente. Las etiquetas no compatibles se dejan tal como están en la "
|
|
|
+"salida estándar.\n"
|
|
|
+"[codeblocks]\n"
|
|
|
+"[gdscript skip-lint]\n"
|
|
|
+"print_rich(\"[color=green][b]¡Hola mundo![/b][/color]\") # Imprime \"¡Hola "
|
|
|
+"mundo!\" en verde con una fuente en negrita\n"
|
|
|
+"[/gdscript]\n"
|
|
|
+"[csharp skip-lint]\n"
|
|
|
+"GD.PrintRich(\"[color=green][b]¡Hola mundo![/b][/color]\"); // Imprime "
|
|
|
+"\"¡Hola mundo!\" en verde con una fuente en negrita\n"
|
|
|
+"[/csharp]\n"
|
|
|
+"[/codeblocks]\n"
|
|
|
+"[b]Nota:[/b] Considere usar [method push_error] y [method push_warning] para "
|
|
|
+"imprimir mensajes de error y advertencia en lugar de [method print] o [method "
|
|
|
+"print_rich]. Esto los distingue de los mensajes de impresión utilizados para "
|
|
|
+"fines de depuración, mientras que también muestra un seguimiento de la pila "
|
|
|
+"cuando se imprime un error o una advertencia.\n"
|
|
|
+"[b]Nota:[/b] En Windows, solo Windows 10 y versiones posteriores muestran "
|
|
|
+"correctamente los códigos de escape ANSI en la salida estándar.\n"
|
|
|
+"[b]Nota:[/b] La salida que se muestra en el editor admite etiquetas [code "
|
|
|
+"skip-lint][url=address]texto[/url][/code] en las que se puede hacer clic. El "
|
|
|
+"valor [code]address[/code] de la etiqueta [code skip-lint][url][/code] es "
|
|
|
+"manejado por [method OS.shell_open] cuando se hace clic en ella."
|
|
|
+
|
|
|
+msgid ""
|
|
|
+"If verbose mode is enabled ([method OS.is_stdout_verbose] returning "
|
|
|
+"[code]true[/code]), converts one or more arguments of any type to string in "
|
|
|
+"the best way possible and prints them to the console."
|
|
|
+msgstr ""
|
|
|
+"Si el modo detallado (verbose mode) está habilitado ([method OF."
|
|
|
+"is_stdout_verbose] devolverá [code]true[/code]), convierte uno o más "
|
|
|
+"argumentos de cualquier tipo en una cadena de la mejor manera posible y los "
|
|
|
+"imprime en la consola."
|
|
|
+
|
|
|
msgid "The [AudioServer] singleton."
|
|
|
msgstr "El singleton [AudioServer]."
|
|
|
|
|
@@ -11968,6 +12378,120 @@ msgstr ""
|
|
|
"los bump maps parezcan más grandes mientras que un valor más bajo los hará "
|
|
|
"parecer más suaves."
|
|
|
|
|
|
+msgid ""
|
|
|
+"An advanced [Variant] type. All classes in the engine inherit from Object. "
|
|
|
+"Each class may define new properties, methods or signals, which are available "
|
|
|
+"to all inheriting classes. For example, a [Sprite2D] instance is able to call "
|
|
|
+"[method Node.add_child] because it inherits from [Node].\n"
|
|
|
+"You can create new instances, using [code]Object.new()[/code] in GDScript, or "
|
|
|
+"[code]new GodotObject[/code] in C#.\n"
|
|
|
+"To delete an Object instance, call [method free]. This is necessary for most "
|
|
|
+"classes inheriting Object, because they do not manage memory on their own, "
|
|
|
+"and will otherwise cause memory leaks when no longer in use. There are a few "
|
|
|
+"classes that perform memory management. For example, [RefCounted] (and by "
|
|
|
+"extension [Resource]) deletes itself when no longer referenced, and [Node] "
|
|
|
+"deletes its children when freed.\n"
|
|
|
+"Objects can have a [Script] attached to them. Once the [Script] is "
|
|
|
+"instantiated, it effectively acts as an extension to the base class, allowing "
|
|
|
+"it to define and inherit new properties, methods and signals.\n"
|
|
|
+"Inside a [Script], [method _get_property_list] may be overridden to customize "
|
|
|
+"properties in several ways. This allows them to be available to the editor, "
|
|
|
+"display as lists of options, sub-divide into groups, save on disk, etc. "
|
|
|
+"Scripting languages offer easier ways to customize properties, such as with "
|
|
|
+"the [annotation @GDScript.@export] annotation.\n"
|
|
|
+"Godot is very dynamic. An object's script, and therefore its properties, "
|
|
|
+"methods and signals, can be changed at run-time. Because of this, there can "
|
|
|
+"be occasions where, for example, a property required by a method may not "
|
|
|
+"exist. To prevent run-time errors, see methods such as [method set], [method "
|
|
|
+"get], [method call], [method has_method], [method has_signal], etc. Note that "
|
|
|
+"these methods are [b]much[/b] slower than direct references.\n"
|
|
|
+"In GDScript, you can also check if a given property, method, or signal name "
|
|
|
+"exists in an object with the [code]in[/code] operator:\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"var node = Node.new()\n"
|
|
|
+"print(\"name\" in node) # Prints true\n"
|
|
|
+"print(\"get_parent\" in node) # Prints true\n"
|
|
|
+"print(\"tree_entered\" in node) # Prints true\n"
|
|
|
+"print(\"unknown\" in node) # Prints false\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"Notifications are [int] constants commonly sent and received by objects. For "
|
|
|
+"example, on every rendered frame, the [SceneTree] notifies nodes inside the "
|
|
|
+"tree with a [constant Node.NOTIFICATION_PROCESS]. The nodes receive it and "
|
|
|
+"may call [method Node._process] to update. To make use of notifications, see "
|
|
|
+"[method notification] and [method _notification].\n"
|
|
|
+"Lastly, every object can also contain metadata (data about data). [method "
|
|
|
+"set_meta] can be useful to store information that the object itself does not "
|
|
|
+"depend on. To keep your code clean, making excessive use of metadata is "
|
|
|
+"discouraged.\n"
|
|
|
+"[b]Note:[/b] Unlike references to a [RefCounted], references to an object "
|
|
|
+"stored in a variable can become invalid without being set to [code]null[/"
|
|
|
+"code]. To check if an object has been deleted, do [i]not[/i] compare it "
|
|
|
+"against [code]null[/code]. Instead, use [method @GlobalScope."
|
|
|
+"is_instance_valid]. It's also recommended to inherit from [RefCounted] for "
|
|
|
+"classes storing data instead of [Object].\n"
|
|
|
+"[b]Note:[/b] The [code]script[/code] is not exposed like most properties. To "
|
|
|
+"set or get an object's [Script] in code, use [method set_script] and [method "
|
|
|
+"get_script], respectively."
|
|
|
+msgstr ""
|
|
|
+"Un tipo [Variant] avanzado. Todas las clases del motor heredan de Object. "
|
|
|
+"Cada clase puede definir nuevas propiedades, métodos o señales, que están "
|
|
|
+"disponibles para todas las clases que heredan. Por ejemplo, una instancia "
|
|
|
+"[Sprite2D] puede llamar a [method Node.add_child] porque hereda de [Node].\n"
|
|
|
+"Puede crear nuevas instancias, utilizando [code]Object.new()[/code] en "
|
|
|
+"GDScript, o [code]new GodotObject[/code] en C#.\n"
|
|
|
+"Para eliminar una instancia de Object, llame a [method free]. Esto es "
|
|
|
+"necesario para la mayoría de las clases que heredan Object, porque no "
|
|
|
+"administran la memoria por sí mismas y, de lo contrario, causarán fugas de "
|
|
|
+"memoria cuando ya no se utilicen. Hay algunas clases que realizan la "
|
|
|
+"administración de la memoria. Por ejemplo, [RefCounted] (y por extensión "
|
|
|
+"[Resource]) se elimina a sí misma cuando ya no se hace referencia a ella, y "
|
|
|
+"[Node] elimina a sus hijos cuando se libera.\n"
|
|
|
+"Object puede tener un [Script] adjunto. Una vez que se crea una instancia de "
|
|
|
+"[Script], actúa efectivamente como una extensión de la clase base, lo que le "
|
|
|
+"permite definir y heredar nuevas propiedades, métodos y señales.\n"
|
|
|
+"Dentro de un [Script], [method _get_property_list] se puede anular para "
|
|
|
+"personalizar las propiedades de varias maneras. Esto permite que estén "
|
|
|
+"disponibles para el editor, se muestren como listas de opciones, se "
|
|
|
+"subdividan en grupos, se guarden en el disco, etc. Los lenguajes de script "
|
|
|
+"ofrecen formas más sencillas de personalizar las propiedades, como con la "
|
|
|
+"anotación [annotation @GDScript.@export].\n"
|
|
|
+"Godot es muy dinámico. El script de un objeto, y por lo tanto sus "
|
|
|
+"propiedades, métodos y señales, se pueden cambiar en tiempo de ejecución. "
|
|
|
+"Debido a esto, puede haber ocasiones en las que, por ejemplo, una propiedad "
|
|
|
+"requerida por un método puede no existir. Para evitar errores en tiempo de "
|
|
|
+"ejecución, consulte métodos como [method set], [method get], [method call], "
|
|
|
+"[method has_method], [method has_signal], etc. Tenga en cuenta que estos "
|
|
|
+"métodos son [b]mucho[/b] más lentos que las referencias directas.\n"
|
|
|
+"En GDScript, también puede comprobar si una propiedad, método o nombre de "
|
|
|
+"señal determinados existe en un objeto con el operador [code]in[/code]:\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"var node = Node.new()\n"
|
|
|
+"print(\"name\" in node) # Imprime true\n"
|
|
|
+"print(\"get_parent\" in node) # Imprime true\n"
|
|
|
+"print(\"tree_entered\" in node) # Imprime true\n"
|
|
|
+"print(\"unknown\" in node) # Imprime false\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"Las notificaciones son constantes [int] que los objetos suelen enviar y "
|
|
|
+"recibir. Por ejemplo, en cada frame renderizado, [SceneTree] notifica a los "
|
|
|
+"nodos dentro del árbol con una [constante Node.NOTIFICATION_PROCESS]. Los "
|
|
|
+"nodos la reciben y pueden llamar a [method Node._process] para actualizar. "
|
|
|
+"Para hacer uso de las notificaciones, consulte [method notification] y "
|
|
|
+"[method _notification].\n"
|
|
|
+"Por último, cada objeto también puede contener metadatos (datos sobre datos). "
|
|
|
+"[method set_meta] puede ser útil para almacenar información de la que el "
|
|
|
+"objeto en sí no depende. Para mantener limpio el código, se desaconseja hacer "
|
|
|
+"un uso excesivo de los metadatos.\n"
|
|
|
+"[b]Nota:[/b] A diferencia de las referencias a un [RefCounted], las "
|
|
|
+"referencias a un objeto almacenado en una variable pueden volverse inválidas "
|
|
|
+"sin estar configuradas como [code]null[/code]. Para verificar si se ha "
|
|
|
+"eliminado un objeto, [i]no[/i] lo compare con [code]null[/code]. En su lugar, "
|
|
|
+"utilice [method @GlobalScope.is_instance_valid]. También se recomienda "
|
|
|
+"heredar de [RefCounted] para las clases que almacenan datos en lugar de "
|
|
|
+"[Object].\n"
|
|
|
+"[b]Nota:[/b] El [code]script[/code] no está expuesto como la mayoría de las "
|
|
|
+"propiedades. Para configurar u obtener el [Script] de un objeto en el código, "
|
|
|
+"use [method set_script] y [method get_script], respectivamente."
|
|
|
+
|
|
|
msgid "Object notifications"
|
|
|
msgstr "Notificaciones de objeto"
|
|
|
|
|
@@ -17729,6 +18253,189 @@ msgstr ""
|
|
|
"Hace que las operaciones de \"hacer\"/\"deshacer\" se mantengan en acciones "
|
|
|
"separadas."
|
|
|
|
|
|
+msgid ""
|
|
|
+"This class can be used to discover compatible [UPNPDevice]s on the local "
|
|
|
+"network and execute commands on them, like managing port mappings (for port "
|
|
|
+"forwarding/NAT traversal) and querying the local and remote network IP "
|
|
|
+"address. Note that methods on this class are synchronous and block the "
|
|
|
+"calling thread.\n"
|
|
|
+"To forward a specific port (here [code]7777[/code], note both [method "
|
|
|
+"discover] and [method add_port_mapping] can return errors that should be "
|
|
|
+"checked):\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"var upnp = UPNP.new()\n"
|
|
|
+"upnp.discover()\n"
|
|
|
+"upnp.add_port_mapping(7777)\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"To close a specific port (e.g. after you have finished using it):\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"upnp.delete_port_mapping(port)\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Note:[/b] UPnP discovery blocks the current thread. To perform discovery "
|
|
|
+"without blocking the main thread, use [Thread]s like this:\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"# Emitted when UPnP port mapping setup is completed (regardless of success or "
|
|
|
+"failure).\n"
|
|
|
+"signal upnp_completed(error)\n"
|
|
|
+"\n"
|
|
|
+"# Replace this with your own server port number between 1024 and 65535.\n"
|
|
|
+"const SERVER_PORT = 3928\n"
|
|
|
+"var thread = null\n"
|
|
|
+"\n"
|
|
|
+"func _upnp_setup(server_port):\n"
|
|
|
+" # UPNP queries take some time.\n"
|
|
|
+" var upnp = UPNP.new()\n"
|
|
|
+" var err = upnp.discover()\n"
|
|
|
+"\n"
|
|
|
+" if err != OK:\n"
|
|
|
+" push_error(str(err))\n"
|
|
|
+" emit_signal(\"upnp_completed\", err)\n"
|
|
|
+" return\n"
|
|
|
+"\n"
|
|
|
+" if upnp.get_gateway() and upnp.get_gateway().is_valid_gateway():\n"
|
|
|
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
|
|
|
+"get_setting(\"application/config/name\"), \"UDP\")\n"
|
|
|
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
|
|
|
+"get_setting(\"application/config/name\"), \"TCP\")\n"
|
|
|
+" emit_signal(\"upnp_completed\", OK)\n"
|
|
|
+"\n"
|
|
|
+"func _ready():\n"
|
|
|
+" thread = Thread.new()\n"
|
|
|
+" thread.start(_upnp_setup.bind(SERVER_PORT))\n"
|
|
|
+"\n"
|
|
|
+"func _exit_tree():\n"
|
|
|
+" # Wait for thread finish here to handle game exit while the thread is "
|
|
|
+"running.\n"
|
|
|
+" thread.wait_to_finish()\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Terminology:[/b] In the context of UPnP networking, \"gateway\" (or "
|
|
|
+"\"internet gateway device\", short IGD) refers to network devices that allow "
|
|
|
+"computers in the local network to access the internet (\"wide area network\", "
|
|
|
+"WAN). These gateways are often also called \"routers\".\n"
|
|
|
+"[b]Pitfalls:[/b]\n"
|
|
|
+"- As explained above, these calls are blocking and shouldn't be run on the "
|
|
|
+"main thread, especially as they can block for multiple seconds at a time. Use "
|
|
|
+"threading!\n"
|
|
|
+"- Networking is physical and messy. Packets get lost in transit or get "
|
|
|
+"filtered, addresses, free ports and assigned mappings change, and devices may "
|
|
|
+"leave or join the network at any time. Be mindful of this, be diligent when "
|
|
|
+"checking and handling errors, and handle these gracefully if you can: add "
|
|
|
+"clear error UI, timeouts and re-try handling.\n"
|
|
|
+"- Port mappings may change (and be removed) at any time, and the remote/"
|
|
|
+"external IP address of the gateway can change likewise. You should consider "
|
|
|
+"re-querying the external IP and try to update/refresh the port mapping "
|
|
|
+"periodically (for example, every 5 minutes and on networking failures).\n"
|
|
|
+"- Not all devices support UPnP, and some users disable UPnP support. You need "
|
|
|
+"to handle this (e.g. documenting and requiring the user to manually forward "
|
|
|
+"ports, or adding alternative methods of NAT traversal, like a relay/mirror "
|
|
|
+"server, or NAT hole punching, STUN/TURN, etc.).\n"
|
|
|
+"- Consider what happens on mapping conflicts. Maybe multiple users on the "
|
|
|
+"same network would like to play your game at the same time, or maybe another "
|
|
|
+"application uses the same port. Make the port configurable, and optimally "
|
|
|
+"choose a port automatically (re-trying with a different port on failure).\n"
|
|
|
+"[b]Further reading:[/b] If you want to know more about UPnP (and the Internet "
|
|
|
+"Gateway Device (IGD) and Port Control Protocol (PCP) specifically), "
|
|
|
+"[url=https://en.wikipedia.org/wiki/Universal_Plug_and_Play]Wikipedia[/url] is "
|
|
|
+"a good first stop, the specification can be found at the [url=https://"
|
|
|
+"openconnectivity.org/developer/specifications/upnp-resources/upnp/]Open "
|
|
|
+"Connectivity Foundation[/url] and Godot's implementation is based on the "
|
|
|
+"[url=https://github.com/miniupnp/miniupnp]MiniUPnP client[/url]."
|
|
|
+msgstr ""
|
|
|
+"Esta clase se puede utilizar para descubrir dispositivos UPNP [UPNPDevice] "
|
|
|
+"compatibles en la red local y ejecutar comandos en ellos, como administrar "
|
|
|
+"asignaciones de puertos (para redireccionamiento de puertos/transmisión NAT) "
|
|
|
+"y consultar la dirección IP de la red local y remota. Tenga en cuenta que los "
|
|
|
+"métodos de esta clase son sincrónicos y bloquean el hilo de llamada.\n"
|
|
|
+"Para redireccionar un puerto específico (aquí [code]7777[/code], tenga en "
|
|
|
+"cuenta que tanto [method discover] como [method add_port_mapping] pueden "
|
|
|
+"devolver errores que deben comprobarse):\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"var upnp = UPNP.new()\n"
|
|
|
+"upnp.discover()\n"
|
|
|
+"upnp.add_port_mapping(7777)\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"Para cerrar un puerto específico (por ejemplo, después de haber terminado de "
|
|
|
+"usarlo):\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"upnp.delete_port_mapping(port)\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Nota:[/b] El descubrimiento UPnP bloquea el hilo actual. Para realizar el "
|
|
|
+"descubrimiento sin bloquear el hilo principal, use hilos [Thread] como éste:\n"
|
|
|
+"[codeblock]\n"
|
|
|
+"# Se emite cuando se completa la configuración de la asignación del puerto "
|
|
|
+"UPnP (sin importar si se realizó correctamente o no).\n"
|
|
|
+"signal upnp_completed(error)\n"
|
|
|
+"\n"
|
|
|
+"# Reemplace esto con su propio número de puerto de servidor entre 1024 y "
|
|
|
+"65535.\n"
|
|
|
+"const SERVER_PORT = 3928\n"
|
|
|
+"var thread = null\n"
|
|
|
+"\n"
|
|
|
+"func _upnp_setup(server_port):\n"
|
|
|
+" # Las consultas UPNP toman algo de tiempo.\n"
|
|
|
+" var upnp = UPNP.new()\n"
|
|
|
+" var err = upnp.discover()\n"
|
|
|
+"\n"
|
|
|
+" if err != OK:\n"
|
|
|
+" push_error(str(err))\n"
|
|
|
+" emit_signal(\"upnp_completed\", err)\n"
|
|
|
+" return\n"
|
|
|
+"\n"
|
|
|
+" if upnp.get_gateway() y upnp.get_gateway().is_valid_gateway():\n"
|
|
|
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
|
|
|
+"get_setting(\"application/config/name\"), \"UDP\")\n"
|
|
|
+" upnp.add_port_mapping(server_port, server_port, ProjectSettings."
|
|
|
+"get_setting(\"application/config/name\"), \"TCP\")\n"
|
|
|
+" emit_signal(\"upnp_completed\", OK)\n"
|
|
|
+"\n"
|
|
|
+"func _ready():\n"
|
|
|
+" thread = Thread.new()\n"
|
|
|
+" thread.start(_upnp_setup.bind(SERVER_PORT))\n"
|
|
|
+"\n"
|
|
|
+"func _exit_tree():\n"
|
|
|
+" # Espere a que el hilo termine aquí para manejar la salida del juego "
|
|
|
+"mientras el hilo está en ejecución.\n"
|
|
|
+" thread.wait_to_finish()\n"
|
|
|
+"[/codeblock]\n"
|
|
|
+"[b]Terminología:[/b] En el contexto de las redes UPnP, \"puerta de enlace\" "
|
|
|
+"(o \"dispositivo de puerta de enlace de Internet\", IGD abreviado) se refiere "
|
|
|
+"a los dispositivos de red que permiten que las computadoras en la red local "
|
|
|
+"accedan a Internet (\"red de área amplia\", WAN). Estas puertas de enlace a "
|
|
|
+"menudo también se denominan \"enrutadores\".\n"
|
|
|
+"[b]Problemas:[/b]\n"
|
|
|
+"- Como se explicó anteriormente, estas llamadas son bloqueantes y no se deben "
|
|
|
+"ejecutar en el hilo principal, especialmente porque pueden bloquearse durante "
|
|
|
+"varios segundos a la vez. ¡Use subprocesos!\n"
|
|
|
+"- Las redes son físicas y desordenadas. Los paquetes se pierden en tránsito o "
|
|
|
+"se filtran, las direcciones, los puertos libres y las redirecciones asignadas "
|
|
|
+"cambian, y los dispositivos pueden abandonar o unirse a la red en cualquier "
|
|
|
+"momento. Tenga esto en cuenta, sea diligente al verificar y manejar errores, "
|
|
|
+"y manéjelos con elegancia si puede: agregue una interfaz de usuario de error "
|
|
|
+"clara, tiempos de espera y manejo de reintentos.\n"
|
|
|
+"- El mapeo de puertos puede cambiar (y eliminarse) en cualquier momento, y la "
|
|
|
+"dirección IP remota/externa de la puerta de enlace también puede cambiar. "
|
|
|
+"Debe considerar volver a consultar la IP externa e intentar actualizar/"
|
|
|
+"refrescar la asignación de puertos periódicamente (por ejemplo, cada 5 "
|
|
|
+"minutos y en caso de fallas de red).\n"
|
|
|
+"- No todos los dispositivos admiten UPnP, y algunos usuarios deshabilitan la "
|
|
|
+"compatibilidad con UPnP. Debe manejar esto (por ejemplo, documentando y "
|
|
|
+"solicitando al usuario que reenvíe puertos manualmente, o agregando métodos "
|
|
|
+"alternativos de cruce de NAT, como un servidor de retransmisión/espejo, o "
|
|
|
+"perforación de agujeros de NAT, STUN/TURN, etc.).\n"
|
|
|
+"- Considere lo que sucede en los conflictos de reenvío. Tal vez varios "
|
|
|
+"usuarios en la misma red quieran jugar su juego al mismo tiempo, o tal vez "
|
|
|
+"otra aplicación use el mismo puerto. Haga que el puerto sea configurable y, "
|
|
|
+"de manera óptima, elija un puerto automáticamente (reintentando con un puerto "
|
|
|
+"diferente en caso de falla).\n"
|
|
|
+"[b]Lectura adicional:[/b] Si desea obtener más información sobre UPnP (y "
|
|
|
+"específicamente sobre el Dispositivo de Puerta de Enlace de Internet (IGD) y "
|
|
|
+"el Protocolo de Control de Puerto (PCP)), [url=https://en.wikipedia.org/wiki/"
|
|
|
+"Universal_Plug_and_Play]Wikipedia[/url] es una buena primera parada; la "
|
|
|
+"especificación se puede encontrar en la [url=https://openconnectivity.org/"
|
|
|
+"developer/specifications/upnp-resources/upnp/]Open Connectivity Foundation[/"
|
|
|
+"url] y la implementación de Godot se basa en el [url=https://github.com/"
|
|
|
+"miniupnp/miniupnp]cliente MiniUPnP[/url]."
|
|
|
+
|
|
|
msgid "Adds the given [UPNPDevice] to the list of discovered devices."
|
|
|
msgstr "Añade el [UPNPDevice] dado a la lista de dispositivos descubiertos."
|
|
|
|
|
@@ -19918,6 +20625,30 @@ msgstr ""
|
|
|
"proporcionar información al usuario sobre si hay problemas con el rastreo "
|
|
|
"posicional."
|
|
|
|
|
|
+msgid ""
|
|
|
+"Triggers a haptic pulse on a device associated with this interface.\n"
|
|
|
+"[param action_name] is the name of the action for this pulse.\n"
|
|
|
+"[param tracker_name] is optional and can be used to direct the pulse to a "
|
|
|
+"specific device provided that device is bound to this haptic.\n"
|
|
|
+"[param frequency] is the frequency of the pulse, set to [code]0.0[/code] to "
|
|
|
+"have the system use a default frequency.\n"
|
|
|
+"[param amplitude] is the amplitude of the pulse between [code]0.0[/code] and "
|
|
|
+"[code]1.0[/code].\n"
|
|
|
+"[param duration_sec] is the duration of the pulse in seconds.\n"
|
|
|
+"[param delay_sec] is a delay in seconds before the pulse is given."
|
|
|
+msgstr ""
|
|
|
+"Dispara un pulso háptico en un dispositivo asociado con esta interfaz.\n"
|
|
|
+"[param action_name] es el nombre de la acción para este pulso.\n"
|
|
|
+"[param tracker_name] es opcional y se puede utilizar para dirigir el pulso a "
|
|
|
+"un dispositivo específico siempre que el dispositivo esté vinculado a este "
|
|
|
+"háptico.\n"
|
|
|
+"[param frequency] es la frecuencia del pulso, establecida en [code]0.0[/code] "
|
|
|
+"para que el sistema utilice una frecuencia predeterminada.\n"
|
|
|
+"[param amplitude] es la amplitud del pulso entre [code]0.0[/code] y "
|
|
|
+"[code]1.0[/code].\n"
|
|
|
+"[param duration_sec] es la duración del pulso en segundos.\n"
|
|
|
+"[param delay_sec] es un retraso en segundos antes de que se dé el pulso."
|
|
|
+
|
|
|
msgid "Turns the interface off."
|
|
|
msgstr "Apaga la interfaz."
|
|
|
|