diff --git a/README.md b/README.md index 10284276..481e4393 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m * [trampoline][] ([GPL][lic.gpl3.0]) -- version: [0.2 (41366ac Git)][ver.trampoline] *2017-08-30* * [trash_can][] ([MIT][lic.trash_can]) -- version: [423b0f2 Git][ver.trash_can] *2020-08-12* * [waffles][] ([MIT][lic.waffles]) -- version [15bcdce Git][ver.waffles] *2018-05-13* -* [intllib][] ([Unlicense][lic.unlicense]) -- version: [20180811][ver.intllib] *2018-08-11* +* [intllib][] ([Unlicense][lic.unlicense]) -- version: [6ebdc53][ver.intllib] *2021-02-23* ***DEPRECATED*** * inventory/ * [bags][] ([BSD 3-Clause][lic.bags]) -- version: [bc87b45 Git][ver.bags] *2018-04-11* * [sfinv_buttons][] ([MIT][lic.mit]) -- version [1.1.0 (ebb1f7c Git)][ver.sfinv_buttons] *2021-01-14* @@ -431,7 +431,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [ver.hudbars]: http://repo.or.cz/minetest_hudbars.git/tree/ba21f47 [ver.hudmap]: https://github.com/stujones11/hudmap/tree/3b8bdc0 [ver.ilights]: https://gitlab.com/VanessaE/ilights/tags/2021-02-25-01 -[ver.intllib]: https://github.com/minetest-mods/intllib/releases/tag/20180811 +[ver.intllib]: https://github.com/minetest-mods/intllib/tree/6ebdc53 [ver.invisibility]: https://notabug.org/TenPlus1/invisibility/src/e3f04a25c22fa6f9ac044de0bf2f5978c0a95cdf [ver.invisible]: https://github.com/AiTechEye/invisible/tree/a2a6504 [ver.jukebox]: https://github.com/minetest-mods/jukebox/tree/0d871f2 diff --git a/mods/intllib/.luacheckrc b/mods/intllib/.luacheckrc new file mode 100644 index 00000000..eeca1367 --- /dev/null +++ b/mods/intllib/.luacheckrc @@ -0,0 +1,14 @@ + +read_globals = { + "minetest", +} + +globals = { + "intllib", +} + +files["intltest/init.lua"] = { + ignore = { + "212", -- Unused argument. + }, +} diff --git a/mods/intllib/LICENSE.md b/mods/intllib/LICENSE.md new file mode 100644 index 00000000..9f2b4198 --- /dev/null +++ b/mods/intllib/LICENSE.md @@ -0,0 +1,25 @@ + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/mods/intllib/README-es.md b/mods/intllib/README-es.md new file mode 100644 index 00000000..f1f428ec --- /dev/null +++ b/mods/intllib/README-es.md @@ -0,0 +1,41 @@ + +# Bilioteca de internacionalización para Minetest + +Por Diego Martínez (kaeza). +Lanzada bajo Unlicense. Véase `LICENSE.md` para más detalles. + +Éste mod es un intento por proveer soporte para internacionalización +de los mods (algo que a Minetest le falta de momento). + +Si tienes alguna duda/comentario, por favor publica en el +[tema del foro][topic]. Por reporte de errores, use el +[bugtracker][bugtracker] en Github. + +## Cómo usar + +Si eres un jugador regular en busca de textos traducidos, simplemente +[instala][installing_mods] éste mod como cualquier otro. + +El mod trata de detectar tu idioma, pero ya que no hay una forma portable de +hacerlo, prueba varias alternativas: + +* `language` setting in `minetest.conf`. +* `LANGUAGE` environment variable. +* `LANG` environment variable. + +En cualquier caso, el resultado final debería ser el +[Código de idioma ISO 639-1][ISO639-1] del idioma deseado. + +### Desarrolladores + +Si desarrollas mods y estás buscando añadir soporte de internacionalización +a tu mod, ve el fichero `doc/developer.md`. + +### Traductores + +Si eres un traductor, ve el fichero `doc/translator.md`. + +[topic]: https://forum.minetest.net/viewtopic.php?id=4929 +[bugtracker]: https://github.com/minetest-mods/intllib/issues +[installing_mods]: https://wiki.minetest.net/Installing_mods/es +[ISO639-1]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes diff --git a/mods/intllib/README-it.md b/mods/intllib/README-it.md new file mode 100644 index 00000000..3b9ba376 --- /dev/null +++ b/mods/intllib/README-it.md @@ -0,0 +1,43 @@ + +# Libreria di internazionalizzazione per Minetest + +Di Diego Martínez (kaeza). +Rilasciata sotto licenza Unlicense. Si veda `LICENSE.md` per i dettagli. + +Questo modulo è un tentativo per fornire il supporto di internazionalizzazione +per i moduli (cosa che attualmente manca a Minetest). + +Se aveste qualunque commento o suggerimento, per piacere scriveteli nella +[discussione sul forum][topic]. Per i rapporti sui bug, usate il +[tracciatore di bug][bugtracker] su Github. + +## Come usarla + +Se siete un* giocatrice/tore che vuole i testi tradotti, +[installate][installing_mods] questo modulo come qualunque altro, +poi abilitatelo tramite l'interfaccia grafica. + +Il modulo tenta di rilevare la vostra lingua, ma dato che al momento non c'è +un metodo portabile per farlo, prova diverse alternative: + +* `language` impostazione in `minetest.conf`. +* `LANGUAGE` variabile d'ambiente. +* `LANG` variabile d'ambiente. +* Se nessuna funziona, usa `en`. + +In ogni caso, il risultato finale dovrebbe essere il +[codice di lingua ISO 639-1][ISO639-1] del linguaggio desiderato. + +### Sviluppatrici/tori di moduli + +Se siete un* sviluppatrice/tore di moduli desideros* di aggiungere il supporto +per l'internazionalizzazione al vostro modulo, leggete `doc/developer-it.md`. + +### Traduttrici/tori + +Se siete un* traduttrice/tore, leggete `doc/translator-it.md`. + +[topic]: https://forum.minetest.net/viewtopic.php?id=4929 +[bugtracker]: https://github.com/minetest-mods/intllib/issues +[installing_mods]: https://wiki.minetest.net/Installing_mods +[ISO639-1]: https://it.wikipedia.org/wiki/ISO_639-1 diff --git a/mods/intllib/README-ms.md b/mods/intllib/README-ms.md new file mode 100644 index 00000000..6b9104b6 --- /dev/null +++ b/mods/intllib/README-ms.md @@ -0,0 +1,41 @@ + +# Pustaka Pengantarabangsaan untuk Minetest + +Oleh Diego Martínez (kaeza). +Diterbitkan bawah Unlicense. Lihat `LICENSE.md` untuk maklumat lanjut. + +Mods ini ialah suatu usaha untuk menyediakan sokongan pengantarabangsaan +kepada mods (sesuatu yang Minetest tiada ketika ini). + +Jika anda mempunyai sebarang komen/cadangan, sila tulis ke dalam [topik forum][topik]. +Untuk melaporkan pepijat, sila gunakan [penjejak pepijat][pepijat] Github. + +## Bagaimanakah cara untuk menggunakannya? + +Jika anda pemain biasa yang mencari teks terjemahan, hanya [pasangkan][pasang_mods] +mods ini seperti mods lain, kemudian bolehkannya melalui GUI. + +Mods ini cuba untuk mengesan bahasa anda, tetapi oleh kerana tiada +cara mudah alih untuk melakukannya, ia cuba beberapa cara yang lain: + +* Tetapan `language` di dalam fail `minetest.conf`. +* Pembolehubah sekitaran `LANGUAGE`. +* Pembolehubah sekitaran `LANG`. +* Jika semua di atas gagal, ia gunakan `en`. + +Dalam apa jua keadaan, hasil akhirnya sepatutnya menjadi +[Kod Bahasa ISO 639-1][ISO639-1] untuk bahasa yang dikehendaki. + +### Pembangun mods + +Jika anda seorang pembangun mods yang ingin menambah sokongan +pengantarabangsaan kepada mods anda, sila lihat `doc/developer.md`. + +### Penterjemah + +Jika anda seorang penterjemah, sila lihat `doc/translator.md`. + +[topik]: https://forum.minetest.net/viewtopic.php?id=4929 +[pepijat]: https://github.com/minetest-mods/intllib/issues +[pasang_mods]: https://wiki.minetest.net/Installing_Mods/ms +[ISO639-1]: https://ms.wikipedia.org/wiki/Senarai_kod_ISO_639-1 diff --git a/mods/intllib/README-pt_BR.md b/mods/intllib/README-pt_BR.md new file mode 100644 index 00000000..bdb2f3e8 --- /dev/null +++ b/mods/intllib/README-pt_BR.md @@ -0,0 +1,50 @@ +# Lib de Internacionalização para Minetest + +Por Diego Martínez (kaeza). +Lançado sob Unlicense. Veja `LICENSE.md` para detalhes. + +Este mod é uma tentativa de fornecer suporte de internacionalização para mods +(algo que Minetest atualmente carece). + + +Se você tiver algum comentário/sugestão, favor postar no +[tópico do fórum][topico]. Para reportar bugs, use o +[rastreador de bugs][bugtracker] no GitHub. + + +## Como usar + +Se você é um jogador regular procurando por textos traduzidos, +basta instalar este mod como qualquer outro, e então habilite-lo na GUI. + +O mod tenta detectar o seu idioma, mas como não há atualmente nenhuma +maneira portátil de fazer isso, ele tenta várias alternativas: + +Para usar este mod, basta [instalá-lo][instalando_mods] +e habilita-lo na GUI. + +O modificador tenta detectar o idioma do usuário, mas já que não há atualmente +nenhuma maneira portátil para fazer isso, ele tenta várias alternativas, e usa +o primeiro encontrado: + + * `language` definido em `minetest.conf`. + * Variável de ambiente `LANGUAGE`. + * Variável de ambiente `LANG`. + * Se todos falharem, usa `en` (inglês). + +Em todo caso, o resultado final deve ser um +[Código de Idioma ISO 639-1][ISO639-1] do idioma desejado. + +### Desenvolvedores de mods + +Se você é um desenvolvedor de mod procurando adicionar suporte de +internacionalização ao seu mod, consulte `doc/developer.md`. + +### Tradutores + +Se você é um tradutor, consulte `doc/translator.md`. + +[topico]: https://forum.minetest.net/viewtopic.php?id=4929 +[bugtracker]: https://github.com/minetest-mods/intllib/issues +[instalando_mods]: http://wiki.minetest.net/Installing_Mods/pt-br +[ISO639-1]: https://pt.wikipedia.org/wiki/ISO_639 diff --git a/mods/intllib/README.md b/mods/intllib/README.md new file mode 100644 index 00000000..c4ec318b --- /dev/null +++ b/mods/intllib/README.md @@ -0,0 +1,51 @@ + +# Internationalization Lib for Minetest + +## DEPRECATED - Use Minetest's new translation API instead! + +You should not use this mod when writing new mods, and you should update mods to no longer depend on this mod. + +Minetest 5.0 has builtin support for client-side translation, accessed by `minetest.get_translator()` + +## Aboud + +By Diego Martínez (kaeza). +Released under Unlicense. See `LICENSE.md` for details. + +This mod is an attempt at providing internationalization support for mods +(something Minetest currently lacks). + +Should you have any comments/suggestions, please post them in the +[forum topic][topic]. For bug reports, use the [bug tracker][bugtracker] +on Github. + +## How to use + +If you are a regular player looking for translated texts, just +[install][installing_mods] this mod like any other one, then enable it +in the GUI. + +The mod tries to detect your language, but since there's currently no +portable way to do this, it tries several alternatives: + +* `language` setting in `minetest.conf`. +* `LANGUAGE` environment variable. +* `LANG` environment variable. +* If all else fails, uses `en`. + +In any case, the end result should be the [ISO 639-1 Language Code][ISO639-1] +of the desired language. + +### Mod developers + +If you are a mod developer looking to add internationalization support to +your mod, see `doc/developer.md`. + +### Translators + +If you are a translator, see `doc/translator.md`. + +[topic]: https://forum.minetest.net/viewtopic.php?id=4929 +[bugtracker]: https://github.com/minetest-mods/intllib/issues +[installing_mods]: https://wiki.minetest.net/Installing_mods +[ISO639-1]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes diff --git a/mods/intllib/doc/developer-it.md b/mods/intllib/doc/developer-it.md new file mode 100644 index 00000000..4c660d6c --- /dev/null +++ b/mods/intllib/doc/developer-it.md @@ -0,0 +1,66 @@ + +# Intllib - documentazione per sviluppatrici/tori + +## Abilitare l'internazionalizzazione + +Per abilitare l'internazionalizzazione del vostro modulo, dovete copiare il file +`lib/intllib.lua` nella cartella principale del vostro modulo, poi inserite +questo codice standard nei file che necessitano la traduzione: + + -- Load support for intllib. + local MP = minetest.get_modpath(minetest.get_current_modname()) + local S, NS = dofile(MP.."/intllib.lua") + +Dovrete anche aggiungere la dipendenza facoltativa da intllib per il vostro +modulo, per farlo aggiungete `intllib?` su una riga vuota nel vostro +`depends.txt`. Si noti anche che se intllib non è installata, le funzioni di +acquisizione del testo sono fatte in modo da restituire la stringa di testo +originale. Questo è stato fatto in modo che non dobbiate spargere tonnellate +di `if` (o costrutti simili) per controllare se la libreria è installata. + +Dopo avere messo il codice, dovete marcare le stringhe di testo che necessitano +una traduzione. Per ciascuna stringa traducibile nei vostri codici sorgenti, +usate la funzione `S` (si veda sopra) per restituire la stringa tradotta. +Per esempio: + + minetest.register_node("miomod:mionodo", { + -- Stringa semplice: + description = S("Il mio fantastico nodo"), + -- Stringa con inserti: + description = S("Macchina @1", "Blu"), + -- ... + }) + +La funzione `NS` è l'equivalente di `ngettext`. Dovrebbe essere usata quando la +stringa da tradurre ha forma singolare e plurale. Per esempio: + + -- Il primo `count` è per consentire a `ngettext` di stabilire quale forma + -- usare. Il secondo `count` è per il sostituto effettivo. + + print(NS("Avete un oggetto.", "Avete @1 oggetti.", count, count)) + +## Generare e aggiornare cataloghi + +Questo è il procedimento di base per lavorare con [gettext][gettext] + +Ogni volta che avete nuove stringhe da tradurre, dovreste fare quanto segue: + + cd /percorso/del/modulo + /percorso/degli/strumenti/intllib/xgettext.sh file1.lua file2.lua ... + +Lo script creerà una cartella chiamata `locale` se non esiste già, e genererà +il file `template.pot` (un modello con tutte le stringhe traducibili). Se avete +già delle traduzioni, lo script provvederà al loro aggiornamento con le nuove +stringhe. + +Lo script fornisce alcune opzioni al vero `xgettext` che dovrebbero essere +sufficienti per la maggior parte dei casi. Se lo desiderate potete specificare +altre opzioni: + + xgettext.sh -o file.pot --keyword=blaaaah:4,5 a.lua b.lua ... + +NOTA: C'è anche un file batch di Windows `xgettext.bat` per gli utenti di +Windows, ma dovrete installare separatamente gli strumenti di gettext per la +riga di comando. Si veda la parte superiore del file per la configurazione. + +[gettext]: https://www.gnu.org/software/gettext/ diff --git a/mods/intllib/doc/developer.md b/mods/intllib/doc/developer.md new file mode 100644 index 00000000..551f188b --- /dev/null +++ b/mods/intllib/doc/developer.md @@ -0,0 +1,62 @@ + +# Intllib developer documentation + +## Enabling internationalization + +In order to enable internationalization for your mod, you will need to copy the +file `lib/intllib.lua` into the root directory of your mod, then include this +boilerplate code in files needing localization: + + -- Load support for intllib. + local MP = minetest.get_modpath(minetest.get_current_modname()) + local S, NS = dofile(MP.."/intllib.lua") + +You will also need to optionally depend on intllib, to do so add `intllib?` +to an empty line in your `depends.txt`. Also note that if intllib is not +installed, the getter functions are defined so they return the string +unchanged. This is done so you don't have to sprinkle tons of `if`s (or +similar constructs) to check if the lib is actually installed. + +Once you have the code in place, you need to mark strings that need +translation. For each translatable string in your sources, use the `S` +function (see above) to return the translated string. For example: + + minetest.register_node("mymod:mynode", { + -- Simple string: + description = S("My Fabulous Node"), + -- String with insertions: + description = S("@1 Car", "Blue"), + -- ... + }) + +The `NS` function is the equivalent of `ngettext`. It should be used when the +string to be translated has singular and plural forms. For example: + + -- The first `count` is for `ngettext` to determine which form to use. + -- The second `count` is the actual replacement. + print(NS("You have one item.", "You have @1 items.", count, count)) + +## Generating and updating catalogs + +This is the basic workflow for working with [gettext][gettext] + +Each time you have new strings to be translated, you should do the following: + + cd /path/to/mod + /path/to/intllib/tools/xgettext.sh file1.lua file2.lua ... + +The script will create a directory named `locale` if it doesn't exist yet, +and will generate the file `template.pot` (a template with all the translatable +strings). If you already have translations, the script will proceed to update +all of them with the new strings. + +The script passes some options to the real `xgettext` that should be enough +for most cases. You may specify other options if desired: + + xgettext.sh -o file.pot --keyword=blargh:4,5 a.lua b.lua ... + +NOTE: There's also a Windows batch file `xgettext.bat` for Windows users, +but you will need to install the gettext command line tools separately. See +the top of the file for configuration. + +[gettext]: https://www.gnu.org/software/gettext/ diff --git a/mods/intllib/doc/localefile-it.md b/mods/intllib/doc/localefile-it.md new file mode 100644 index 00000000..47d87185 --- /dev/null +++ b/mods/intllib/doc/localefile-it.md @@ -0,0 +1,43 @@ + +# Formato del file di traduzione + +*Nota: Questo documento spiega il vecchio formato in stile conf/ini. +La nuova interfaccia usa file [gettext][gettext] `.po`. +Si veda [Il formato dei file PO][PO-Files] per ulteriori informazioni.* + +Questo è un esempio per un file di traduzione in Italiano (`it.txt`): + + # Un commento. + # Un altro commento. + Questa riga viene ignorata dato che non ha il segno di uguale. + Hello, World! = Ciao, Mondo! + String with\nnewlines = Stringa con\na capo + String with an \= equals sign = Stringa con un segno di uguaglianza \= + +I file "locale" (o di traduzione) sono file di testo semplice formati da righe +nel formato `testo originale = testo tradotto`. Il file deve stare nella +sottocartella `locale` del modulo, e il suo nome deve essere lo stesso del +[codice di lingua ISO 639-1][ISO639-1] della lingua che volete fornire. + +I file di traduzione dovrebbero usare la codifica UTF-8. + +Le righe che iniziano con un cancelletto sono commenti e vengono ignorate dal +lettore. Si noti che i commenti si estendono solo fino al termine della riga; +non c'è nessun supporto per i commenti multiriga. Le righe senza un segno di +uguale sono anch'esse ignorate. + +I caratteri che sono considerati "speciali" possono essere "escaped" di modo +che siano presi letteralmente. Inoltre esistono molte sequenze di escape che +possono essere utilizzate: + + * Qualsiasi `#`, `=` può essere escaped di modo da essere preso letteralmente. + La sequenza `\#` è utile se il vostro testo sorgente inizia con `#`. + * Le sequenze di escape comuni `\n` e `\t`, significano rispettivamente + newline (a capo) e tabulazione orizzontale. + * La sequenza speciale di escape`\s` rappresenta il carattere di spazio. + È utile principalmente per aggiungere spazi prefissi o suffissi ai testi + originali o tradotti, perché altrimenti quegli spazi verrebbero rimossi. + +[gettext]: https://www.gnu.org/software/gettext +[PO-Files]: https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html +[ISO639-1]: https://it.wikipedia.org/wiki/ISO_639-1 diff --git a/mods/intllib/doc/localefile.md b/mods/intllib/doc/localefile.md new file mode 100644 index 00000000..777e759b --- /dev/null +++ b/mods/intllib/doc/localefile.md @@ -0,0 +1,42 @@ + +# Locale file format + +*Note: This document explains the old conf/ini-like file format. +The new interface uses [gettext][gettext] `.po` files. +See [The Format of PO Files][PO-Files] for more information.* + +Here's an example for a Spanish locale file (`es.txt`): + + # A comment. + # Another comment. + This line is ignored since it has no equals sign. + Hello, World! = Hola, Mundo! + String with\nnewlines = Cadena con\nsaltos de linea + String with an \= equals sign = Cadena con un signo de \= igualdad + +Locale (or translation) files are plain text files consisting of lines of the +form `source text = translated text`. The file must reside in the mod's `locale` +subdirectory, and must be named after the two-letter +[ISO 639-1 Language Code][ISO639-1] of the language you want to support. + +The translation files should use the UTF-8 encoding. + +Lines beginning with a pound sign are comments and are effectively ignored +by the reader. Note that comments only span until the end of the line; +there's no support for multiline comments. Lines without an equals sign are +also ignored. + +Characters that are considered "special" can be "escaped" so they are taken +literally. There are also several escape sequences that can be used: + + * Any of `#`, `=` can be escaped to take them literally. The `\#` + sequence is useful if your source text begins with `#`. + * The common escape sequences `\n` and `\t`, meaning newline and + horizontal tab respectively. + * The special `\s` escape sequence represents the space character. It + is mainly useful to add leading or trailing spaces to source or + translated texts, as these spaces would be removed otherwise. + +[gettext]: https://www.gnu.org/software/gettext +[PO-Files]: https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html +[ISO639-1]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes diff --git a/mods/intllib/doc/translator-it.md b/mods/intllib/doc/translator-it.md new file mode 100644 index 00000000..e078b9ae --- /dev/null +++ b/mods/intllib/doc/translator-it.md @@ -0,0 +1,20 @@ + +# Intllib - documentazione per traduttrici/tori + +#### Nuova interfaccia + +Usate i vostri strumenti preferiti per modificare i file `.po`. + +#### Vecchia interfaccia + +Per tradurre nella lingua che desiderate un modulo che supporta intllib, +copiate il file `locale/template.txt` come `locale/LINGUA.txt` (dove `LINGUA` è +il [codice di lingua ISO 639-1][ISO639-1] del vostro linguaggio. + +Aprite il nuovo file nel vostro editor preferito, e traducete ciascuna riga +inserendo il testo tradotto dopo il segno di uguale. + +Si veda `localefile-it.md` per ulteriori informazioni sul formato del file. + +[gettext]: https://www.gnu.org/software/gettext/ +[ISO639-1]: https://it.wikipedia.org/wiki/ISO_639-1 diff --git a/mods/intllib/doc/translator.md b/mods/intllib/doc/translator.md new file mode 100644 index 00000000..3c278e8a --- /dev/null +++ b/mods/intllib/doc/translator.md @@ -0,0 +1,20 @@ + +# Intllib translator documentation + +#### New interface + +Use your favorite tools to edit the `.po` files. + +#### Old interface + +To translate an intllib-supporting mod to your desired language, copy the +`locale/template.txt` file to `locale/LANGUAGE.txt` (where `LANGUAGE` is the +[ISO 639-1 Language Code][ISO639-1] of your language. + +Open up the new file in your favorite editor, and translate each line putting +the translated text after the equals sign. + +See `localefile.md` for more information about the file format. + +[gettext]: https://www.gnu.org/software/gettext/ +[ISO639-1]: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes diff --git a/mods/intllib/init.lua b/mods/intllib/init.lua index 0778a736..7565e013 100644 --- a/mods/intllib/init.lua +++ b/mods/intllib/init.lua @@ -201,7 +201,8 @@ function intllib.get_strings(modname, langcode) local modpath = minetest.get_modpath(modname) msgstr = { } for _, l in ipairs(get_locales(langcode)) do - local t = intllib.load_strings(modpath.."/locale/"..l..".txt") or { } + local t = intllib.load_strings(modpath.."/locale/"..modname.."."..l..".tr") + or intllib.load_strings(modpath.."/locale/"..l..".txt") or { } for k, v in pairs(t) do msgstr[k] = msgstr[k] or v end diff --git a/mods/intllib/intltest/README.md b/mods/intllib/intltest/README.md new file mode 100644 index 00000000..9122d9ec --- /dev/null +++ b/mods/intllib/intltest/README.md @@ -0,0 +1,10 @@ + +# Intllib example + +This is a simple mod showing how to use intllib. + +It defines a test `intltest:test` item whose description is translated +according to the user's language. + +Additionally, it demonstrates how to use plural forms by counting the +number of times the item has been used. diff --git a/mods/intllib/intltest/depends.txt b/mods/intllib/intltest/depends.txt new file mode 100644 index 00000000..77e8d97c --- /dev/null +++ b/mods/intllib/intltest/depends.txt @@ -0,0 +1 @@ +intllib? diff --git a/mods/intllib/intltest/init.lua b/mods/intllib/intltest/init.lua new file mode 100644 index 00000000..e8556216 --- /dev/null +++ b/mods/intllib/intltest/init.lua @@ -0,0 +1,28 @@ + +-- Load support for intllib. +local MP = minetest.get_modpath(minetest.get_current_modname()) +local S, NS = dofile(MP.."/intllib.lua") + +local use_count = 0 + +minetest.log("action", S("Hello, world!")) + +minetest.register_craftitem("intltest:test", { + -- Example use of replacements. + -- Translators: @1 is color, @2 is object. + description = S("Test: @1 @2", S("Blue"), S("Car")), + + inventory_image = "default_sand.png", + + on_use = function(stack, user, pt) + use_count = use_count + 1 + -- Example use of `ngettext` function. + -- First `use_count` is `n` for ngettext; + -- Second one is actual replacement. + -- Translators: @1 is use count. + local message = NS("Item has been used @1 time.", + "Item has been used @1 times.", + use_count, use_count) + minetest.chat_send_player(user:get_player_name(), message) + end, +}) diff --git a/mods/intllib/intltest/intllib.lua b/mods/intllib/intltest/intllib.lua new file mode 100644 index 00000000..c2eb8dc7 --- /dev/null +++ b/mods/intllib/intltest/intllib.lua @@ -0,0 +1,3 @@ + +-- This file should be replaced by `intllib/lib/intllib.lua`. +return dofile(minetest.get_modpath("intllib").."/lib/intllib.lua") diff --git a/mods/intllib/intltest/locale/es.po b/mods/intllib/intltest/locale/es.po new file mode 100644 index 00000000..cd51b8ff --- /dev/null +++ b/mods/intllib/intltest/locale/es.po @@ -0,0 +1,43 @@ +# I18N Test Mod. +# Copyright (C) 2013-2017 Diego Martínez +# This file is distributed under the same license as the intllib mod. +# Diego Martínez , 2013-2017. +# +msgid "" +msgstr "" +"Project-Id-Version: I18N Test Mod 0.1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-25 20:40-0300\n" +"PO-Revision-Date: 2017-01-23 17:36-0300\n" +"Last-Translator: Diego Martnez \n" +"Language-Team: Spanish\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: init.lua +msgid "Hello, world!" +msgstr "¡Hola, mundo!" + +#. Translators: @1 is color, @2 is object. +#: init.lua +msgid "Blue" +msgstr "Azul" + +#: init.lua +msgid "Car" +msgstr "Carro" + +#. Translators: @1 is color, @2 is object. +#: init.lua +msgid "Test: @1 @2" +msgstr "Prueba: @2 @1" + +#. Translators: @1 is use count. +#: init.lua +msgid "Item has been used @1 time." +msgid_plural "Item has been used @1 times." +msgstr[0] "El objeto ha sido usado @1 vez." +msgstr[1] "El objeto ha sido usado @1 veces." diff --git a/mods/intllib/intltest/locale/template.pot b/mods/intllib/intltest/locale/template.pot new file mode 100644 index 00000000..2090d615 --- /dev/null +++ b/mods/intllib/intltest/locale/template.pot @@ -0,0 +1,44 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-25 20:40-0300\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" + +#: init.lua +msgid "Hello, world!" +msgstr "" + +#. Translators: @1 is color, @2 is object. +#: init.lua +msgid "Blue" +msgstr "" + +#: init.lua +msgid "Car" +msgstr "" + +#. Translators: @1 is color, @2 is object. +#: init.lua +msgid "Test: @1 @2" +msgstr "" + +#. Translators: @1 is use count. +#: init.lua +msgid "Item has been used @1 time." +msgid_plural "Item has been used @1 times." +msgstr[0] "" +msgstr[1] ""