5.2 KiB
Biblioteca de Internacionalización para Minetest
Por Diego Martínez (kaeza). Lanzada bajo WTFPL.
Éste mod es un intento de proveer soporte para internacionalización para otros mods (lo cual Minetest carece actualmente).
Cómo usar
Para usuarios finales
Para usar éste mod, simplemente instálalo y habilítalo en la interfaz.
Éste mod intenta detectar el idioma del usuario, pero ya que no existe una solución portable para hacerlo, éste intenta varias alternativas, y utiliza la primera encontrada:
- Opción
language
enminetest.conf
. - Si ésta no está definida, usa la variable de entorno
LANG
(ésta está siempre definida en SOs como Unix). - Si todo falla, usa
en
(lo cual básicamente significa textos sin traducir).
En todo caso, el resultado final debe ser el In any case, the end result should be the
Código de Idioma ISO 639-1
del idioma deseado. Tenga en cuenta tambien que (de momento) solo los dos primeros
caracteres son usados, así que por ejemplo, las opciones de_DE.UTF-8
, de_DE
,
y de
son iguales.
Algunos códigos comúnes: es
para Español, pt
para Portugués, fr
para Francés,
it
para Italiano, de
para Aleman.
Para desarrolladores
Para habilitar funcionalidad en tu mod, copia el siguiente fragmento de código y pégalo al comienzo de tus archivos fuente:
-- Boilerplate to support localized strings if intllib mod is installed.
local S
if minetest.get_modpath("intllib") then
S = intllib.Getter()
else
-- Si no requieres patrones de reemplazo (@1, @2, etc) usa ésto:
S = function(s) return s end
-- Si requieres patrones de reemplazo, pero no escapes, usa ésto:
S = function(s,a,...)a={a,...}return s:gsub("@(%d+)",function(n)return a[tonumber(n)]end)end
-- Usa ésto si necesitas funcionalidad completa:
S = function(s,a,...)if a==nil then return s end a={a,...}return s:gsub("(@?)@(%(?)(%d+)(%)?)",function(e,o,n,c)if e==""then return a[tonumber(n)]..(o==""and c or"")else return"@"..o..n..c end end) end
end
Tambien necesitarás depender opcionalmente de intllib. Para hacerlo, añade intllib?
a tu archivo depends.txt
. Ten en cuenta tambien que si intllib no está instalado,
la función S
es definida para regresar la cadena sin cambios. Ésto se hace para
evitar la necesidad de llenar tu código con montones de if
s (o similar) para verificar
que la biblioteca está instalada.
Luego, para cada cadena de texto a traducir en tu código, usa la función S
(definida en el fragmento de arriba) para regresar la cadena traducida. Por ejemplo:
minetest.register_node("mimod:minodo", {
-- Cadena simple:
description = S("My Fabulous Node"),
-- Cadena con patrones de reemplazo:
description = S("@1 Car", "Blue"),
-- ...
})
Nota: Las cadenas en el código fuente por lo general deben estar en ingles ya que es el idioma que más se habla. Es perfectamente posible especificar las cadenas fuente en español y proveer una traducción al ingles, pero no se recomienda.
Luego, crea un directorio llamado locale
dentro del directorio de tu mod, y crea
un archivo "plantilla" (llamado template.txt
por lo general) con todas las cadenas
a traducir (ver Formato de archivo de traducciones más abajo). Los traductores
traducirán las cadenas en éste archivo para agregar idiomas a tu mod.
Para traductores
Para traducir un mod que tenga soporte para intllib al idioma deseado, copia el
archivo locale/template.txt
a locale/IDIOMA.txt
(donde IDIOMA
es el
Código de Idioma ISO 639-1
de tu idioma (es
para español).
Abre el archivo en tu editor favorito, y traduce cada línea colocando el texto traducido luego del signo de igualdad.
Ver Formato de archivo de traducciones más abajo.
Formato de archivo de traducciones
He aquí un ejemplo de archivo de idioma para el español (es.txt
):
# Un comentario.
# Otro comentario.
Ésta línea es ignorada porque no tiene un signo de igualdad.
Hello, World! = Hola, Mundo!
String with\nnewlines = Cadena con\nsaltos de linea
String with an \= equals sign = Cadena con un signo de \= igualdad
Archivos de idioma (o traducción) son archivos de texto sin formato que consisten de
líneas con el formato texto fuente = texto traducido
. El archivo debe ubicarse en el
subdirectorio locale
del mod, y su nombre debe ser las dos letras del
Código de Idioma ISO 639-1
del lenguaje al cual se desea traducir.
Los archivos deben usar la codificación UTF-8.
Las líneas que comienzan en el símbolo numeral (#
) son comentarios y son ignoradas
por el lector. Tenga en cuenta que los comentarios terminan al final de la línea;
no hay soporte para comentarios multilínea. Las líneas que no contengan un signo
de igualdad (=
) tambien son ignoradas.
Palabras finales
Gracias por leer hasta aquí. Si tienes algún comentario/sugerencia, por favor publica en el tema en los foros. Para reportar errores, usa el rastreador en Github.
¡Que se hagan las traducciones! :P
--
Suyo, Kaeza